Montage Infrarotsensoren auf Servos

Durch die sogenannte "Stuhlbeinproblematik" kam die Idee, die Servos vorne, wie eine Art Radar, auf Servos zu montieren, damit diese nicht nur genau geradeaus "schauen", sondern eine "Sicht" um mindestens 18° "zeigen".

Ach dieses zog wieder ein wenig Verkabelung nach sich, wobei der Hauptaufwand meist darin liegt, die Kabel mit den vorhandenen zusammen immer wieder "rauszureißen" und wieder zu verstauen:

 

Da die Infrarotsensoren bei häufigen Messgungen und auch störenden anderen Impulsen etwas empfindlich sind, habe ich diese mittels eines parallel zur Stromversorgung gelöteten 100 nF Kondensator etwas entstört. Praktischerweise passten diese noch ganz gut in das eigene Gehäuse:

Hier sieht man die fertig montierten "Infrarot-Servos" noch einmal insgesamt:

 

Im Video-Bereich gibt es ein kurzes Video , in dem die Sensoren zum Testen mal manuell per Seftware gedreht werden.

Montage Modellbauräder und 2 weitere Infrarotsensoren

Wie schon geschriebe, waren weitere Infrarot-Sensoren bestellt, welche die Bereiche schräg hinten links und rechts überwachen sollten.

Die Abfolge der Montage der Sensoren ist auf den folgenden Bildern gut zu erkennen;

 

Ein bißchen Verkabelung ist natürlich auch notwendig:

Hier mal ein paar schöne Fotos, wie der Bot von oben bestück aussieht. Diese Fotos habe zur späteren Verwendung in der GUI verwendet:

 

 Da  die vorige Radkonstruktion leider auch Probleme machte, wurden kurzerhand Gewinde in die Motorachsen geschnitten (nicht gerade leicht):

 

 und Standard-Modellbauräder montiert:

 

 

 

Montage Atmel-Board, Webcam und Warnleuchte

Wie es sich herausgestellt hat, ist die bis dato verwendete USB-Schaltung zusammen mit dem Laptop, der Programmiersprache C in Verbindung mit dem Ultraschallsensor leider zu langsam. Konkret: Die Timings, die bei zur Abfrage des Ultraschallsensors notwendig sind, müssen genauer sein (im µs Bereich). Was also tun?

Nach langem Prüfen der Möglichkeiten musste nun also doch ein Microcontroller her. Da die AVR Controller von Atmel in der (Hobby)Robtik sich bewährt haben und es hierzu auch viel Unterstützung im Netz gibt, fiel die Wahl auf den Atmega2560 . Sicher etwas überdimensioniert – aber dafür eben auch zukunftssicher. Egal, wie viele Sensoren oder Aktuatoren noch dazu kommen könnten. Also wurde hinten rechts auf dem Roboter eine neue Platine mit dem Microcontroller-Fertigmodul montiert:

 

 

 

 

 

 Um Versandkosten zu sparen, kam gleich ein (derzeit noch nicht verwendetes) Kompassmodul dazu (rechte Platine):

 

 

 

 

 

 Um Fehler beim Verkabeln zu vermeiden, wurden die Stecker für die Stromversorgung beschriftet

:

 

 

 

 

 

Da jeder Bot, der was auf sich hält (oder eben autonom in der Weltgeschichte herum fahren soll) eine Warnleuchte hat, hat das mrs (mobile robot system) nun auch einen:

Ein schon lange wartenden Not-Aus-Schalter wurde gleich mit verbaut. Nachdem das Programm für den Microcontroller (MC) fertig war, mussten die Infratot-Sensoren (IR) neu "vermessen" werden bzw. die Umsetzungstabelle "Sensorwert / Abstand in cm" neu gebaut werden:

 

Nachdem alle Sensoren nun komplett über den Atmega2560 und dessen integrierte A/D-Wandler laufen, wurde die alte USB-Schaltung

 

 

 

 

 

ganz überflüssig, da das die Software auf dem Laptop mit dem MC seriell über die USB-Schnittstelle

kommunizieren. Die Software dazu ist mittlerweile auf dem MC und dem Laptop komplett dafür angepasst worden. Die A/D-Wandler, und die alte USB-Schaltung weichten bei der Gelegenheit einer ganz neuen Stromversorgungsplatine:

Die Warnleuchte wird über ein Relais mit 12 V geschaltet. Für allgemeine Testzwecke kamen noch ein paar Messpunkte auch noch dazu.

So sieht der Bot dann zu diesem Zeitpunkt aus:

Nachdem die Ansteuerung des Ultraschallsensors (US) über den Microcontroller gestern gelang, kam dieser an seine endgültige Position:

Hier sieht man alle Stecker der Sensoren und des Flashlights auf der MC-Platine;

 

Und hier den Sensor, unterhalb der CMUCAM:

 

Als letztes kam dann gestern noch eine ehemalige Webcam (Rückseite) hinzu,

die unterhalb des Ultraschallsensors Platz fand. So sieht sie von vorne aus:

 

Und so montiert:

 

In der GUI sieht das ganze mit fünf Sensoren dann so aus:

Damit das ganze nicht langweilig wird, ist nun erstmal wieder progammieren angesagt – obwohl – vier weitere Infrarot-Sensoren sind auch schon wieder bestellt. Möge er niemals gegen ein Hindernis fahren…. ;-)

Entstörung Motoren

Nach langer langer Analyse des Quellcodes hat sich der Fehler, der dazu führte, dass der Roboter chaotisch in alle Richtungen fuhr, weil die IR-Sensoren immer auslösten, als Hardwareproblem herausgestellt!

Die neuen Getriebemotoren verursachten zusammen mit der neuen Ansteuerplatine so starke Störungen, dass alle IR-Sensoren bzw. die Platine wo alles zusammenläuft, "Fehlarlarme" also Hindernisse vor den Sensoren signalisierte. Aber das Roboter-Netz-Wiki schaffte einfache Abhilfe. Auf diesen zwei Fotos gut erkennbar, die 3 Kondensatoren und die Ferritkerne zum Entstören der Motoren:

Perfekt! Alle Störungen verschwunden! Und der Lötkolben gerade mal heiß war kam nuch eine Blinkdiode hinzu, die den Betrieb des Roboters signalisiert (aktiv):

 

Damit die Sensoren-Kabel und die bei der Kamera nicht mehr so sehr im Weg sind, kam noch etwas Spiralschlauch zum Einsatz – sehr praktisch:

 

Zum einfacheren Testen, der Abstandssensoren wurde dann noch das Arbeitszimmer kurzerhand in eine Teststrecke umfunktioniert:

 

Nun kann endlich an der Software wieder "geschraubt" werden!

Montage Ultraschallsensor

In den letzten Tag wurde ein weiterer Sensor montiert. Dieses mal, der erste Ultraschallsensor.

 

 

Da der Roboter jetzt mit den neuen Motoren so schnell wurde, ist hier Handlungsbedarf, um Hindernisse früher zu erkennen. Also musste ein Sensor her, der weiter "in die Ferne" schaut. Hier wurde ein Ultraschall-Sensor gewählt (SRF05 von Devantech Ltd.). Für die Ansteuerung muss jetzt "nur noch" ein weiterer Thread programmiert werden, da es hier auf sehr kurze und vor allem exakte Timings ankommt.

Neue Kamerahalterung, neue Getriebemotoren und Motoransteuerung

Neun Monate ist es her, dass sich hier was tat. Na ja, schwanger ist der Roboter zwar noch nicht, aber „neu geboren“ doch wohl. Aber der Reihe nach. Da sich die Gelegenheit ergab, wurde heute erst mal das Webdesign etwas aufgefrischt. Eine neue Rubrik ist dabei auch dazu gekommen: Screenshots. Hier ist sehr schön, der Werdegang des Programmes mit all seinen Irrungen und Wirrungen zu erkennen. Die augenfälligste Neuerung ist sicher leicht zu erkennen – die Entwicklung läuft mittlerweile vollständig unter Linux (mit KDevelop (und natürlich weiterhin mit dem Qt-Framework (Open Source Version)).

Für die Interessierten: Einem weiteren Einsatz unter Windows steht aber – dank Qt – weiterhin nichts im Weg. Mein besonderer Dank geht hier an Oliver Bock, ohne den dieser Schritt nicht möglich gewesen wäre. Er hat den Cypress CY7C63-Linux-Treiber vom 2.4er auf den aktuellen 2.6er Linux-Kernel portiert. Ohnehin hat er mich bei diversen Programmier- und Linux-Fragen in diesem Projekt hier großartig unterstützt.

Was geschah mit der Hardware? Nun, die Kamera hat eine etwas stabilere Halterung bekommen

und einen eigenen Anschluss an den Akku:

Auch der Video-Ausgang (s/w) ist schon mal zum Anschluss an das Laptop vorbereitet worden:

Bei einem Vergleich der zwar sehr kräftigen Schrittmotoren mit Getriebenmotoren aus dem Modellbaubereich sollte sich herausstellen, dass letzere bei ausreichend Kraft haben (bei 5000 U/Min bei 12V, 148:1 Untersetzung) und dabei der Roboter nun ungefähr 1,2 km/h schafft!

Siehe dazu auch ein aktuelles Video . Dieses war der erste Versuch mit den schnellen, neuen Motoren, darum kommt die „Kameraführung“ nicht wirklich hinterher. ;-) Und ein paar Sensoren mehr, braucht er wohl auch noch…

Somit sind also nun neue Getriebemotoren montiert,

die natürlich einer komplett neuen und anderen Ansteuerung bedurften. Also wurde die alte Platine demontiert,

und da es sich anbot, die neue Platine an eine sicherere Stelle als bisher zu montieren, wurde gleich alles an Kabeln entfernt und neu gemacht:

Und so sieht das ganze jetzt aus:

Die Platine zur Motoransteuerung ist übrigens ein Fertigmodul von robotikhardware.de , gemäß Roboternetz-Definition . Die USB-Platine ist von ak-modulbus . Hier sind die Sensoren mit den A/D-Wandlern jetzt modular steckbar gemacht worden. Die alte Platine entfiel damit komplett:

Wie an den Screenshots zu sehen ist, funktioniert das Ansteuern und Auslesen der CMUCAM nun auch einwandfrei. Die Auswertung der Bilder/Daten steht allerdings noch auf einem anderen Blatt…

Neue Steck-Halterung für CMUCAM2

Lange keine Neuigkeiten mehr… Aber es ist dennoch etwas passiert: Der Logik-Teil wurde erfolgreich programmiert. Der Roboter weicht nun Hindernissen automatisch aus.

Die Überlegungen dazu waren erst gar nicht so leicht, im Ergebnis dann aber absolout logisch:

Wenn der Roboter dann mal endlich eine Zeit lang fährt, kommt der Kühlkörper der Motor-Ansteuerungselektronik schon ganz schön ins Schwitzen:

Und auch die Schrittmotoren arbeiten sich ordentlich warm – 6 kg Laptop sind eben "nicht ohne":

Was gibt es sonst noch so neues? Für die CMUCAM2 wurde eine Steck-Halterung entwickelt und die Kamera ebenfalls montiert.

Vorteil: Zu Transportzwecken kann die Kamera mit Halter so leicht abgenommen werden. In dieser Bildreihe ist die "Montage" der einzelnen Roboter-Bestandteile gut zu erkennen:

 

Zusätzlich wurde die Elektronik um einen NE555 erweitert, der so etwas wie einen Heartbeat abgibt:

Diesen prüft das (überarbeitete) Programm nun beim Start, so dass es nicht nur feststellt, ob die Schaltung überhaupt am USB-Port angeschlossen ist, sondern auch noch, ob der Roboter auch eingeschaltet ist (12 V-Akku Stromversorgung).

Als letztes gab es in der Zwischenzeit testweise einen ersten Wurf einer neuen Programmoberfläche (GUI), die auch aus der Ferne eine verbesserte Lesbarkeit ergeben soll – schließlich geht der Roboter so langsam in seiner Umgebung "auf Tour". Vielleicht wird die neue GUI auch optional einschaltbar sein. Mal sehen…

Es steht ohnehin ein komplettes Programm-Redesign an, da die derzeitige Motoransteuerung per Timer nicht sehr leistungsfähig ist. Soll heißen: Werden die Sensoren oft per Timer abgefragt (alle 20 ms) , kommt der Motor-Timer (jede ms) nicht mehr hinterher. Somit wird es in naher Zukunft wohl auf Multithreading hinauslaufen…

Zwei weitere Infrarotsensoren

Der Bau geht weiter: Der Roboter hat zwei weitere IR-Sensoren auf der Rückseite bekommen.

 

Die Abfrage wurde im Programm auch gleich mit umgesetzt. Das Programm reagiert nun auf einstellbare Distanzen:

Die Programmlogik (Ausweichen bei Hindernissen ist in Arbeit und stellt nun die eigentliche Herausforderung dar…

Neue Räder (Setup-Wheels)

Endlich: Der Umstieg zu Qt 4 ist zu 99% vollzogen. Bei der Gelegenheit wurden einige interne Funktionen des Programmes ebenfalls verbessert.

Hier ein  aktueller Screenshot:

Die gemessenen Werte der IR-Sensoren werden jetzt in echten cm angezeigt.

Hierzu wurden Referenzmessungen vorgenommen – die angezeigten Ergebnisse im Programm sind auf den cm genau.

Die Abfrage der Sensoren ist vollständig in das Programm integriert, die Anzeige der Geschwindigkeit der Motoren, der Abfrage der Sensoren, sowie der Reaktionswert, ab wann ein Hindernis gemeldet werden soll, wurden ebenfalls erfolgreich implementiert. Im nächsten Schritt gilt es, eine Aktion wie ein Wendemanöver bei Hindernissen zu entwickeln.

Leider erwies sich die bisherige Reifenkonstruktion bei längeren Fahrten des Roboters teilweise als zu instabil und löste sich geringfügig bzw. wackelte dann,

so dass der Roboter nicht mehr korrekt geradeaus fuhr. Darum wurden neue Räder montiert. Es handelt sich hier um sogenannte "Setup-Wheels", die mithilfe von Propellernaben (beides von Conrad) befestigt wurde.

        

Dieser hervorragende Tipp kam, wie so oft, aus dem Forum RoboterNetz.

Im nächsten Schritt werden zwei weitere IR-Sensoren auf der Rückseite montiert. Die Elektronik ist bereits dafür ausgelegt…

Wechsel auf USB-Technologie

Es geht voran:

Nach wochenlangen Problemen, die Abfrage der IR-Sensoren oder genauer, des AD-Wandlers (TLC 549 CP), hinzubekommen, wurde jetzt erfolgreich auf den USB-Port umgestiegen. War auch nicht gerade einfach: Bei einem ersten Versuch mit dem IO-Warrior, kam heraus, dass dieser sich offensichtlich nicht wie gewünscht verhält und seltsame Signale statt einem korrekten HIGH produzierte.

Der zweite Versuch mit dem Chip CY7C63001A von AKModulbus™, sah das ganze dann schon besser aus. Die Abfrage funktioniert, der zweite IR-Sensor wurde montiert, 2 weitere Sensoren sind bestellt.

Parallel wird der Umstieg von der Entwicklungsumgebung Borland C++-Builder 6™ nach Qt erfolgen… Bei der Gelegenheit wurde die Software vom Namen des Roboters mrs (Mobile Robot 1) nach MRS (Mobile Robot Software) umbenannt und bei Sourceforge als Projekt registriert. Aber dazu später mehr…