Hindernisumfahrung – Erste Analyse

Wie im vorigen Beitrag gezeigt, schafft es der Roboter gerade hervorragend mutig gegen ein Hindernis zu fahren – ohne auszuweichen. Um herauszufinden, woran es liegt, wurde nun die Fahrt des Bots etwas präziser aufgezeichnet. Zuvor wurde der TFT-Bildschirm ummontiert, so dass diese endlich in Fahrtrichtung zeigt und auch von oben etwas besser erreichbar ist. Hier das mit der Hand gedrehte Video:

Es ist etwas wackelig, da ich die Kamera nicht fest auf dem Roboter montieren konnte. Sie würde trotz aufgesetztem Weitwinkel-Objektiv zu weit nach hinten vom Bot abstehen. Und ich möchte mir nicht vorstellen, was passiert, wenn der Roboter sich dann dreht und die Kamera mit Halterung irgendwie abbricht, stürzt oder ähnliches…

Was ist also im Video oben passiert? Hier sieht man erst einmal die Richtung in die der Bot fährt:

Wie man sieht, ist der grüne Bereich der Laserlinien der für den Roboter befahrbare Bereich und der Roboter hat als sogenannte „preferred direction“ bereits links gewählt – Erkennbar an dem Pfeil in der GUI, der nach links zeigt:

Was macht er aber genau nicht, wenn man auf dem Touchscreen auf „Start“ klickt? Richtig. Nach links fahren. Denn obwohl der obstacleCheckThread die ganze Zeit aktiv ist (sonst würde der Pfeil nicht nach links zeigen), fährt der Roboter geradeaus – und fährt komischerweise auch weiter geradeaus. Normalerweise sollte der obstacleCheckThread sofort die Info per Qt’s Signal und Slot Mechanismen an alle beteiligten Prozesse senden, dass es nach links gehen. Hier gilt es also, einen schönen Bug zu finden! Bleibt dran…

Hindernisumfahrung mit Hindernissen

Nach vielen vielen Code-Updates und dem kompletten Rewrite des sogenannten obstacleCheckThreads, war es endlich an der Zeit, den Roboter drauf los zu lassen. Hello world… ;-)

Es gab zwar beim Testen ein- oder zweimal Abstürze, beim Betrieb der Software unterm Mac (Roboter war „aufgebockt“, Fahrpogramm gestartet), diese konnten aber bislang nicht reproduziert werden.

Um es gleich vorweg zu nehmen: Alles funktioniert eigentlich einwandfrei. Jedoch „erkennt“ der Roboter die Hindernisse derzeit noch zu spät. Obwohl bereits die langsamste Fahrgeschwindigkeit gewählt wurde und auch das Entfernen des sleep commands aus laserThread und obstacleCheckThread keine Beschleunigung brachte, reichte dies alles nicht aus, den Roboter dazu zu bringen, schnell genug auszuweichen.

Im Moment habe ich ehrlich gesagt keine Idee, woran es liegen könnte… Genug der Worte, hier die einzelnen Videos.

Hier sieht man, wie der Roboter – wie im späteren Fahrbetrieb – mit dem onBoard-PC läuft, jedoch noch „aufgebockt“:

Beim zweiten Video sieht man, wie der Roboter „richtig“ fährt und auch dem ersten Hindernis brav ausweicht, aber dann unmotiviert (leider aus dem Bild) bei einem Hindernis festhängt, dann aber wendet um anschließend mutig Richtung Werkbank zu fahren. Vor lauter Schreck bleibt er er jedoch vor dem Hindernis stehen und aktiviert den Zustand „alles voller Hindernisse“ (Blitzlicht an, alles stoppen):

Nun wurde kurzerhand ein Laptop auf den Bot „befestigt“ (Festplatte zuvor vom Roboter auf den Laptop geclont) um zu Testen, ob der onBoard-PC vielleicht zu langsam ist. Sieht aber nicht danach aus. Auch das klappt nicht wie gewünscht:

Da er beim vorigen Film drohte, erneut die Staffelei umzureißen (auch wegen der provisorisch befestigten, aber herausragenden Aluschiene), hier noch ein letzter „Outtake“. Ich nenne ihn mal „mutiges Hindernis-Anfahren, um dann doch zu stoppen“:

 

Zweiter Test mit ARM-Board

Hier der zweite Test mit dem frisch gelöteten ARM-Board mit dem STM32F4 STMicroelectronics und dem komplett neu geschriebenen Code. Die Software läuft hier komplett auf dem Roboter unter Linux, so wie er später selbstständig „durch die Gegend“ fahren soll:

 

Erster Test mit ARM-Board

Hier nun endlich der erste große Test mit dem frisch gelöteten ARM-Board mit dem STM32F4 STMicroelectronics und dem komplett neu geschriebenen Code. Es ist eigentlich selbsterklärend:

Nicht im Video gezeigt ist das Abfragen der Werte der A/D-Wandler. Hier werden die beiden Akku-Spannungen überwacht, also die 12 und die 24 Volt. Die Abfrage erfolgt wie im Video zum Beispiel mit dem Befehl *s7# (Sensor 7). Die Antwort lautet dann z.B. *4095* bei einem vollen Akku (13,2 Volt). Nett, oder?

 

RoboCup@Home – Video vom Team ToBI

Ein Video des RoboCup@Home 2011; der Roboter des Team ToBI:

Der Roboter ist von der Universität Bielefeld.

PS.: Das Intro ist noch falsch im Video betitelt, sorry. Wird vielleicht mal korrigiert.

 

Neues STM32F4 Discovery Board

Wie auch in der aktuellen Ausgabe meines Robotik-Podcasts Robotiklabor berichtet, gibt es mit dem derzeitigen Atmel-Board ja immer Probleme mit der Kommunikation über die serielle Schnittstelle, genauer, dem USB-Port. Um hier auch einmal neue Wege zu gehen, wurde mir das STM32F4 Board von STMicroelectronics empfohlen.

Bestellt wurde es vorgestern bei Watterott für schlappe 16,66 EUR zzgl. Versand – kaum vergleichbar mit dem derzeitigen Atmel 2560-Board, welches ca. 60 EUR kostete. Nach etwas Ärger mit DHL erreichte mich das Board glücklicherweise dann doch bereits heute, so dass ich hier schon einmal ein erstes Video zeigen möchte:

STM-Board – Erster Test

Hier noch ein Auszug der STMicroelectronics-Seite mit den Hauptmerkmalen des Boards:

  • STM32F407VGT6 microcontroller featuring 32-bit ARM Cortex-M4F core, 1 MB Flash, 192 KB RAM in an LQFP100 package
  • On-board ST-LINK/V2 with selection mode switch to use the kit as a standalone ST-LINK/V2 (with SWD connector for programming and debugging)
  • Board power supply: through USB bus or from an external 5 V supply voltage
  • External application power supply: 3 V and 5 V
  • LIS302DL, ST MEMS motion sensor, 3-axis digital output accelerometer
  • MP45DT02, ST MEMS audio sensor, omni-directional digital microphone
  • CS43L22, audio DAC with integrated class D speaker driver
  • Eight LEDs:
    • LD1 (red/green) for USB communication
    • LD2 (red) for 3.3 V power on
    • Four user LEDs, LD3 (orange), LD4 (green), LD5 (red) and LD6 (blue)
    • 2 USB OTG LEDs LD7 (green) VBus and LD8 (red) over-current
  • Two push buttons (user and reset)
  • USB OTG FS with micro-AB connector
  • Extension header for all LQFP100 I/Os for quick connection to prototyping board and easy probing

Und noch ein paar Fotos:

   

RoboCup@Home 2011 – Team NimbRo – Die Gewinner 2011!

Hier nun das letzte Video des RoboCup@Home 2011 Finales. Es ist das Team NimbRo der Universität Bonn. Mit einer absolut beeindruckenden Leistung überzeugten sie auch die Jury und landeten darum als Ergebnis auch auf Platz 1.

Aber seht selbst: