Portierung zu Mac OS

 Nachdem ich mich entscheiden habe, statt meines good-old Linux-PCs zu einem Apple iMac zu wechseln, stand auch die Portierung zu Mac OS an. Stand deshalb, weil die ersten Schritte mitterweile erledigt sind. Und so sieht das Ganze dann aus:

Noch nicht portiert sind sämtliche Funktionen für den seriellen Port, Sprachausgabe (espeak liegt nicht als Library vor) und OpenCV (Compiler läuft auf Fehler). Aber starten lässt sich die Applikation schon. Kommt Zeit, kommt volle Unterstützung… :-)

Wer einen Eindruck des Aufwandes haben möchte, bitte sehr; hält sich danke Qt sehr in Grenzen:

 direcs/direcs.pro.user       |  264 +++++++——-

 direcs/src/camThread.cpp     |   12 +-

 direcs/src/camThread.h       |   26 +-

 direcs/src/direcs.cpp        |  826 +++++++++++++++++++++———————

 direcs/src/direcs.h          |    4 +-

 direcs/src/direcsSerial.cpp  |    5 +

 direcs/src/direcsSerial.h    |    4 +

 direcs/src/gui.cpp           |    2 +

 direcs/src/gui.h             |    6 +-

 direcs/src/joystick.cpp      |    6 +-

 direcs/src/joystick.h        |    6 +-

 direcs/src/laserSickS300.cpp |   25 ++-

 direcs/src/laserSickS300.h   |    8 +-

 direcs/src/speakThread.cpp   |   25 +-

 direcs/src/speakThread.h     |    2 +

 direcs/src/src.pro           |   41 ++-

 16 files changed, 685 insertions(+), 577 deletions(-)

Anzeige der Durchfahrtsweite in der GUI

 In der Zwischenzeit wurde die GUI um die Anzeige der Durchfahrtsweite des Roboters erweitert. Das heißt, die hier blau angezeigte Linie stellt die gemessene (errechnete) lichte Weite dar. Anhand dieser kann später ermittelt werden, ob der Roboter dort überhaupt durchfahren kann (durch passt) oder nicht. Zusätzlich wird diese Breite als Text – anstatt wie sonst in Labels – direkt in der Laserview, also oberhalb der blauen Linie angezeigt:

Auf den folgenden Screenshots ist gut zu erkennen, wie sich die anzeige dynamisch anpasst, wenn der Regler Obstacle Alarm verändert wird. Dieser Regler legt fest, bei welcher Entfernung ein Hindernis als solches betrachtet wird.

 

Ein-Aus-Schalter vom fit-PC 2 zum Panel verlegt

Um den Ein-Aus-Schalter des fit-PC 2 zum Hauptpanel des Roboters zu verlegen, wurde dieser kurzerhand zerlegt und die entsprechende Leitung mit dem Schalter verbunden. Wer also schon immer mal den fit-PC von innen sehen wollte, los geht’s:

 

 

Nun kann sich der Roboter doch so langsam sehen lassen:

 

 

Und noch einmal frontal:

 

 

Fertigstellung des Schaltreglers 24 auf 12 V

Nach schier endlosem Experimentieren mit dem Schaltregler LM2577-ADJ, wurde nun doch der Einfachheit halber auf den LM2576-T12 zurück gegriffen:

Erste Tests verliefen erfolgreich:

Uns es reichen tatsächlich ganze fünf Bauteile aus:

Ausserdem geht ja bekanntermaßen nichts über einen aufgeräumten, übersichtlichen Testaufbau… ;-)

Fertig aufgebaut (gelötet) sieht das Ganze dann so aus:


Die dicke Drosselspule wurde in diesem endgültigen Aufbau noch gegen eine elegantere, kompakte Version ausgetauscht.
Die seltsame, scheinbar verschwenderische Aufteilung auf der Platine rührt daher, dass am montierten Ort noch ausreichend Platz nötig ist, um den PC einzuschalten und ggf. mal eine SD-Speicherkarte einzusetzen:

Den Schaltplan dazu gibt es übrigens (als ersten) in der neuen Schaltplan und Layout-Sektion links im Hauptmenü; auch als Download im Target 3001! Format.

fit-PC 2 eingebaut

Mittlerweile wurde der fit-PC 2 im Roboter verbaut. Wie immer die Fotos der Reihe nach:

   

 

Er wurde an die gleiche Stelle verbaut, an der zuvor die NSLU saß:


 

Nun das ganze mit Strom versorgt und über ein externes CD-Laufwerk (USB) mein Betriebssystem der Wahl installiert: Debian

 

Das Messgerät zeigt übrigens den aktuellen Stromverbrauch (in mA bei 12 V) an; erst beim Booten (hohe Plattenaktivität), dann in der GUI. Hier noch einmal der Stromverbauch, ohne Bildschirm und dann noch mit angeschlossener USB-Webcam:

 

 

Debian wurde übrigens im Gegensatz zur Empfehlung des Distributors auch deshalb gewählt, da hier sämtliche Hardware erkannt wurde. Das Ubuntu wollte leider beim Partitionieren die verbaute 2,5"-Festplatte nicht erkennen. Die GUI wurde übrigens mit installiert, da hier im Autostart (nach Autologon) der Network-Manager sebstständig eine Verbindung ins Netzwerk herstellt – über WLAN oder LAN, je nach dem was gerade verfügbar ist; auch mit fester IP.

Sprachausgabe umgestellt auf espeak

Da die NSLU2 wegen zu geringer Rechenleistung und zu wenigen USB-Ports wohl einem "richtigen" Mainboard weichen wird, wurde an der bereits im Sourcecode integrierten Sprachausgabe weiter gefeilt. Konkret: festival wurde aufgrund ständiger Probleme mit der library entfernt und durch espeak ersetzt. Die Umstellung war in nur wenigen Schritten erledigt. Außerdem ist es nun ein eigenständiger Thread, der während des Sprechens im Hintergrund läuft und die Bedienung der GUI weiterhin möglich ist – so wie man es erwarten  sollte. :-) Auch wird bei neuen Sprachbefehlen, eine möglichweise gerade aktive Sprache sofort gestoppt und mit der neuen unmittelbar begonnen.

Ton-Beispiele gefällig? So klingt das ganze auf Englisch:

 

Und es gibt auch – was bei Open Source nicht ganz so häufig in guter Qualität anzutreffen ist – eine deutsche Sprachausgabe. Diese klingt dann so:

 

 

Die bisherige, recht schlecht zu verstehende Hardwarelösung wird demnach dann auch bald entfallen. Die Lautsprecher mit Verstärker werden natürlich weiterhin genutzt werden können.

Einbau und Verkabelung der NSLU2

Das Innenleben der "gepimpten" NSLU2 wurde an diesem Tag auf den Roboter montiert:

 

Die rote Platine oberhalb der NSLU2 ist ein Spannungsregler (auf 5 V). Nun das ganze noch mit Stromversorgungsleitungen versehen und bei der Gelegenheit den Stromverbrauch geprüft:

 

Damit es keine Kurzschlüsse bzw. Verbindungen der Platinen zueinander gibt, wurden diese mit (kurzerhand selbstgesägten) Kunststoff-Unterlegscheiben von den Distanzbolzen isoliert:

Einbau der Motorcontrol-Boards

An diesem Tag wurden die Motorcontrol-Boards eingebaut. Als Untergrund dient eine weiche Kunststoffplatte aus dem Baumarkt, die sich per Cutter zuschneiden lässt und eben nicht leitet. Mit etwas Feingewühl ist sie aber eben noch hart genug, dass man noch  3mm-Gewinde reindrehen kann; z.B: für Abstandsbolzen:

Abstandsbolzen kamen ebenfalls in den "Boden" des Roboters um darauf dann die Kunststoffplatte zu montieren.


Damit ist sichergestellt, dass die Platine weit genug von den leitenden Aluprofilen entfernt ist:

Konstruktion und Montage des ersten der vier neuen Antriebe

Für den Antrieb des neuen Roboters direcs1 wurden Getriebemotoren von Conrad gewählt, die eine Untersetzung von 200:1 haben. Die Montage erfolgte wie folgt dargestellt. Wie auf dem ersten Bild auf den zweiten Blick zu sehen ist, wurden die Zahnräder mit einem zweiten Gewinde mit Madenschraube versehen um einen noch besseren Halt des Zahnriemen-Zahnrades auf der Welle zu gewährleisten.

Als nächstes wurde der Motor am Grundrahmen befestigt und mittels Zahnriemen an die Achsen der Räder verbunden. Hier erkennt man übrigens auch, dass die Laserscanner verkehrt herum "auf dem Kopf" montiert wurden. Dieses wurde so gewählt, um dem Roboter eine geringe Bauhöhe zu geben.

Als letztes wurden zum Testen schon einmal zwei der kommenden vier 12V-Akkus plaziert: