Wie es aussieht, ist der fit-PC2 von gestern auf heute gestorben. Er lässt sich zumindest nicht mehr einschalten. Somit wird es erstmal ruhig ums Blog…
Wie es aussieht, ist der fit-PC2 von gestern auf heute gestorben. Er lässt sich zumindest nicht mehr einschalten. Somit wird es erstmal ruhig ums Blog…
Um zwischendurch mal etwas anderes am Bot zu machen und nicht nur ewige USB-Problemezu analysieren, wurden ein paar kleine Hardware-Anpassungen durchgeführt. So wurde der nach außen geführte Ein-Aus-Schalter mit einer Buchse-Stecker-Verbindung versehen und die Schaltreglerplatine (24V auf 12V) etwas verkleinert, damit sie mehr Platz an den Front-USB-Buchsen des fit-PC2 freigibt:
Und endlich endlich wurde mal die Schalter auf dem Control-Panel beschriftet:
Neben ein paar anderen Punkten in der GUI wurde der Settings Dialog angepasst. Er ist nun übersichtlicher und weist den neuen "Robot Slot" mit der Durchfahrtsweite aus. Also die Weite, durch die der Bot mindestens passen muss. Derzeit erfolgt das (in der Logikeinheit) nur anhand eines Winkels. Hier erst einmal der neue Settings Dialog (etwas unspektakulär):
Die Logik muss nun noch dahingehend angepasst werden, dass diese Durchfahrtsweite (in cm) auch aktiv genutzt wird. Berechnet und angezeigt wird sie jedenfalls bereits in der GUI.
Heute wurden nun der Laser und der Touchscreen auf dem Roboter verkabelt, denn so wie es sich hier darstellt, konnte es für den endgültigen Betrieb natürlich nicht bleiben:
Ein Stromanschluss für den Laserscanner war vom alten Scanner noch vorhanden. Der Touchscreen, der mit 12V betrieben wird, benötigte jedoch noch eine Anschlussbuchse. Da dazu die Verteilerplatine ausgebaut werden musste, wurden bei der Gelegenheit zwei zusätzliche Buchsen für 5V und 24V als Reserve mit verbaut:
Und das Ergebnis kann sich doch sehen lassen, oder?
Das Update des Programmcodes ist so gut wie abgeschlossen. Hier die erste Ansicht, die natürlich fast wie vorher aussieht, nun eben mit Daten vom SICK S300 Laserscanner:
Es sieht aber nur fast genau so aus, wie vorher: Denn: Der S300 hat eine Auflösung von 0,5 Grad bei 270 Grad "field of view". Darum werden im Screenshot auch 540 statt 270 Laserlinien angezeigt. Daher war auch das Anpassen des Sourcecodes aufwändiger, da an vielen Stellen die Auflösung des Scanners zusätzlich mit integriert werden musste (LaserThread, ObstacleCheckThread, GUI, …).
Ein paar Ausreißer gibt es noch: Wie man sieht ist der Wert für 0 Grad noch falsch (längste rote Linie rechts oben im Bild) und die Flags werden nicht vollständig für alle Linien gesetzt (z.B: grün für den größten freien Bereich). Um einen Eindruck über die Anpassungen zu bekommen, hier eine git Übersicht:
direcs/bin/direcs.ini | 10 +-
direcs/direcs.pro.user | 18 +-
direcs/direcs.qrc | 95 ++–
direcs/direcs.tag | 412 ++++++——-
direcs/images/kdevelopbanner-small.gif | Bin 2930 -> 0 bytes
direcs/src/aboutDialog.ui | 52 +-
direcs/src/camThread.cpp | 8 +-
direcs/src/camThread.h | 10 +-
direcs/src/consoleGui.cpp | 4 +-
direcs/src/consoleGui.h | 4 +-
direcs/src/direcs.cpp | 100 ++–
direcs/src/direcs.h | 2 +
direcs/src/direcsSerial.cpp | 133 ++++-
direcs/src/direcsSerial.h | 37 +-
direcs/src/gui.cpp | 42 +-
direcs/src/gui.h | 21 +-
direcs/src/inifile.cpp | 17 +-
direcs/src/inifile.h | 14 +-
direcs/src/interfaceAvr.cpp | 48 +–
direcs/src/interfaceAvr.h | 16 +-
direcs/src/laser.h | 4 +
direcs/src/laserSickS300.cpp | 1068 ++++++++++++——————–
direcs/src/laserSickS300.h | 186 ++—-
direcs/src/laserThread.cpp | 726 ++++++++++++++++++—-
direcs/src/laserThread.h | 64 ++-
direcs/src/obstacleCheckThread.cpp | 16 +-
direcs/src/obstacleCheckThread.h | 2 +-
direcs/src/speakThread.cpp | 2 +-
direcs/src/speakThread.h | 2 +-
direcs/src/src.pro | 53 +–
30 files changed, 1717 insertions(+), 1449 deletions(-)
delete mode 100644 direcs/images/kdevelopbanner-small.gif
Geschafft! Nach vielen Versuchen konnte der Code zum Ansprechen des seriellen Ports für Mac OS X (10.6, Snow Leopard) so angepasst werden, dass er dort läuft. Zuvor "hing" das Programm immer beim write() Befehl. Interessanterweise trat das gleiche auch dem Original-Code "Device File Access Guide for Serial Devices" aus dem Mac Dev Center von Apple auf. Benötigt wird dieser Teil im Programm um vom Mac oder PC Daten über die seriellen Schnittstelle zum Roboter (Atmel-Board) zu schreiben und von ihm zu lesen.
Das aus MacPorts installierte Programm minicom brachte dann die Lösung: Mit diesem konnte über zwei USB-to-Serial-Wandlern (PL2303-Chip) und einem Cross-Cable jeweils Daten gesendet und empfangen werden. Dank Open Source, konnte nun verglichen werden, warum dieses Programm einwandfrei funktioniert, der Apple Code aber nicht.
Ursache war die Kontroll-Option "CLOCAL", die für den seriellen Port gesetzt werden musste! :-) Geholfen hat auch Beschreibung auf dieser Seite. Denn es wurde nicht der Original-Treiber des Hersteller Prolific zum Testen (mit minicom) verwendet, sondern der hier beschriebene Open Source-Treiber!
Nach ein "paar" Änderungen im Code läuft der Bot nun auch unter Mac OS X:
Als nächster Schritt wird nun der Code für den altern Laserscanner angepasst, da er ein ähnliches Verhalten aufweist.
Ein massives Speicherleck, welches interessanterweise erst (nur?) auf dem Mac auftrat wurde erst einmal entfernt. Die 3D OpenGL Textur des Roboters links oben in der GUI wurde entfernt und übergangsweise durch die vorige 3D-Pfeil-Darstellung ersetzt. Gefunden wurde die Lücke recht schnell mit dem super Apple Tool Instruments. Und so sah das ganze in der GUI des Tools aus:
Sehr leicht zu erkennen ist auf der rechten Seite der bräunliche Eintrag, der auf den direcs Sourcecode verweist. Damit war zumindest das Symptom vorerst entdeckt. Warum diese Stelle im Code auf einmal Probleme verursacht (seit Linux unverändert) bleibt noch zu klären.