Er fährt!

Nachdem im vorigen Beitrag gezeigt wurde, was alles nicht geht, und wie auch in der letzten Sendung meines Podcasts erwähnt, kann ich heute sagen: Kaum 7,5 Jahre später… und er fährt! ;-)

Sicher noch nicht perfekt und im hier auch noch sehr langsam, aber die „Richtung“ ist erkennbar. Nun gilt es noch die Parameter etwas zu optimieren, damit er auch noch durch die Tür fährt. Derzeit ist dieser Abstand dem Roboter noch zu eng. Alle diese Werte, wie diese „Durchfahrweite“, die per Kosinussatz anhand der Laserlinien ermitteltwird, können übrigens in der GUI „live“ über einen Settingsdialog geändert werden.

 

[708 Aufrufe]

Hindernisumfahrung – Erstes Ergebnis

Wie im vorigen Beitrag gezeigt, fuhr der Roboter beim Starten nicht in die Richtung, die vom obstacleCheckThread schon lange ermittelt wurde. Der Fehler wurde gefunden und nun sieht das Ganze schon etwas besser aus. Noch nicht perfekt, aber es geht in die richtige Richtung – im wahrsten Sinne des Wortes:

PS.: Natürlich ist dieses nicht die Endgeschwindigkeit, aber zum Testen erstmal ganz angenehm.

 

[498 Aufrufe]

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…

[468 Aufrufe]

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“:

 

[397 Aufrufe]

Es tut sich was…

Wie sich beim letzten Fahrversuch zeigte, „plant“ der Roboter seine Ausweichmanöver noch nach den altern Laserscannern, die alle nicht mehr als 180° auflösten. Nach ersten Untersuchungen des obstacleCheckThread zeigte sich, dass hier ein wenig mehr zu aktualisieren war. Ein Grund dafür war, dass der jetztige Laserscanner einen Bereich von 240° abdeckt. Damit sieht er aber auch „nach hinten“. Beim Prüfen, ob ein Hindernis vor dem Roboter liegt, soll er natürlich die Objekte hinter sich ignorieren. 

Da der bisherige obstacleCheckThread offenbar auch noch ein paar Fehler enthielt, wurde er vollständig neu entwickelt. Folgende hier farbing markierten Hindernis-Situationen galt zu prüfen:

Nach einer weiteren Analyse konnten die zu prüfenden Punkte optmiert werden. Die hier grau dargestellten waren nicht mehr nötigt:

Nach vielen Tests und vielen Versuchen sieht das Ganze nun so aus (im Simulationsmodus):

Die gelben Linien stellen hier die Bereiche dar, der bei der Hindernisprüfung ignoriert werden sollen. Die Winkel sind natürlich per ini-Datei konfigurierbar. Als nächstest wird eine Testfahrt erfolgen, die zeigen soll, ob nun alles wie gewünscht funktioniert.

Und hier das Ganze noch einmal als vollständiger Screenshot:

[403 Aufrufe]