robodriver
20.12.2007, 23:36
Halli hallo liebe Roboterfreunde,
hier möchte ich euch heute mal meinen Cyberdriver2 vorstellen. Er ist zwar noch nicht fertig, hat aber einen fertigen zwischen-Stand erreicht :)
End-Ziel des ganzen Projektes ist es das mir dieser Bot mal die Wohnung kejrt und aus der Küche (eigene Station) Getränke und Snaks bringt und noch einer weiteren Ausbaustufe evtl. auf Knopfdruck Gäste begrüßt. Nunja, bis dahin ist es aber noch ein ganzes Stück...
Zunächst mal -um fragen vorab zu klären- warum das ganze cyberdriver "2" heißt:
Ganz einfach: Ich habe mit Cyberdriver angefangen. Allerdings bin ich mit dem ersten Konzept nicht weit gekommen. Desshalb habe ich dann nochmal bei komplett Null angefangen. Und desshalb heißt das Ding jetzt Cyberdriver2 ;)
Doch leider stellte sich heraus das sich auch mit diesem Konzept das End-Ziel nich erreichen lässt. Aber ich bin ein ganzes Stück weiter gekommen als mit dem ersten... Dieses zwischen-ziel möchte ich euch hier nun Präsentieren.
Alles was der Bot bis jetzt kann ist folgendes:
- Alles wird über eine DVD-IR-Fernbedienung gesteuert
- Menüsteuerung mit 16x2 Display Ausgabe
- Manuelles fahren in alle Richtungen über Fernbedienung
- Raumtemperatur messen
- Akkuspannung messen
- analoge Abstandsmessung an allen Sensoren bis ca. 15cm Abstand
- Unterschiedliche Fahrgeschwindigkeiten wählbar
- autonomes rum fahren im Zimmer ohne irgendwo anzustoßen
Dem letzteren Punkt möchte ich mich hier am meisten widmen. Die anderen Punkte kann man auch (noch nicht ganz vollständig) auf www.cyberdriver2.de.vu nachlesen.
Nun also zu dem Autonomen umher fahren:
hier seht ihr ein paar Videos die ich gemacht habe:
www.cyberdriver2.de.vu/video.htm
(bitte von oben nach unten durcharbeiten und ansehen)
Für alle die sich für Hindergrund wissen und Funktionsweise interessieren lesen bitte hier weiter:
Das Video "Vor dem Umbau" ist nicht etwa der erste Cyberdriver, sondern auch Cyberdriver2. Aber ich habe mein gesamtes Steuerungssystem nochmal überdacht.
Anfangs lief es wie folgt ab:
3Controller:
-(1)Display
-(2)Motoren
-(3)Sensoren
-(4)IR-Fernbedienungsauswertung
Controller 2 u. 3 konnten über I²C-Bus Daten auf dem Display anzeigen lassen (Flureszensdisplay mit bis zu 8 Zeichen, eigener Treiber)
Controller 4 hat Daten über einen parallelen 4-Bit-Code an controller 2 gesender, der auch die Menüsteuerung beinhaltete.
Beim automatischen Fahren hat Controller 2 die Motoren direkt über PWM angesteuert. Wenn ein Hindernis kam, hat Controller 3 ein Interrupt ausgelöst und dann über serielle 4-Bit Codes dem Controller 2 gesagt wos lang geht und wie dieser fahren soll. Also z.B. "zurück" "links" usw...
Wenn dann der Controller 3 gesagt hat, das alles wieder okay ist, hat der Controller 2 wieder die volle Kontrolle übernommen.
Soweit so gut. Diese Interrupt-steuerung führt zum Stocken und bis dann der 4-Bit Code übertragen war dauerte das nochmal länger... Die Wartezeiten sind verhältnismäßig lang wie man auf dem Video sehen kann...
So und nun zum neuen Steuerungs-Konzept:
Dabei gibt es jetzt 3Controller:
- (1) Display & IR-Empfänger & Haupt-Controller
- (2) Motor-Controller
- (3) Sensor-Controller
Alle 3 Controller sind über I²C verbunden. Und das ist schon alles ;)
An sich funktioniert das nun so:
Controller 1 sagt dem 2. "vor wärts fahren".
Wenn nun ein Hinderniss kommt sagt (3) an (2) "Sofort anhalten". Direkt danach sagt (3) an (1) wo ein Hindernis erkannt wurde. Darauf hin entscheidet (1) was zu tun ist und gibt entsprechende Fahrbefehle an (2)
Der Bus läuft mit 250kHz und dadurch läuft alles eigentlich schon schnell und flüssig.
So, und nun noch ein Paar Worte zu den fallenden Entscheidungen:
Es gibt 4 Sensoren:
- (vl) vorne links
- (vr) vorne rechts
- (hl) hinten links
- (hr) hinten rechts
- wenn vl schaltet wird nach rechts ausgewischen
- wenn vr schaltet wird nach links ausgewischen
- wenn hl oder hr schaltet dann fährt er ein kurzes Stück vor und dreht dann ca. 90° nach rechts und fährt weiter
- wenn 3x abwechseln vl und vr innerhalb eines bestimmten Zeitfensters schalten, dann fährt er zurück und dreht ca. 90° nach rechts
Der letzte Punkt ist die klassische erkennung das er sich in einer Ecke fest gefahren hat. Der vorletzte Punkt führt zwangsläufig auch zu einem herausfinden aus einer Ecke.
Okay, wer noch mehr dazu wissen will, kann gerne nachfragen.
Ansonsten danke ich allen dies geschafft haben bis hier her zu lesen ;)
Und würde mich über Anmerkungen/Anregungen oder allgemeine Meinungen sehr freuen.
Gruß Robodriver
hier möchte ich euch heute mal meinen Cyberdriver2 vorstellen. Er ist zwar noch nicht fertig, hat aber einen fertigen zwischen-Stand erreicht :)
End-Ziel des ganzen Projektes ist es das mir dieser Bot mal die Wohnung kejrt und aus der Küche (eigene Station) Getränke und Snaks bringt und noch einer weiteren Ausbaustufe evtl. auf Knopfdruck Gäste begrüßt. Nunja, bis dahin ist es aber noch ein ganzes Stück...
Zunächst mal -um fragen vorab zu klären- warum das ganze cyberdriver "2" heißt:
Ganz einfach: Ich habe mit Cyberdriver angefangen. Allerdings bin ich mit dem ersten Konzept nicht weit gekommen. Desshalb habe ich dann nochmal bei komplett Null angefangen. Und desshalb heißt das Ding jetzt Cyberdriver2 ;)
Doch leider stellte sich heraus das sich auch mit diesem Konzept das End-Ziel nich erreichen lässt. Aber ich bin ein ganzes Stück weiter gekommen als mit dem ersten... Dieses zwischen-ziel möchte ich euch hier nun Präsentieren.
Alles was der Bot bis jetzt kann ist folgendes:
- Alles wird über eine DVD-IR-Fernbedienung gesteuert
- Menüsteuerung mit 16x2 Display Ausgabe
- Manuelles fahren in alle Richtungen über Fernbedienung
- Raumtemperatur messen
- Akkuspannung messen
- analoge Abstandsmessung an allen Sensoren bis ca. 15cm Abstand
- Unterschiedliche Fahrgeschwindigkeiten wählbar
- autonomes rum fahren im Zimmer ohne irgendwo anzustoßen
Dem letzteren Punkt möchte ich mich hier am meisten widmen. Die anderen Punkte kann man auch (noch nicht ganz vollständig) auf www.cyberdriver2.de.vu nachlesen.
Nun also zu dem Autonomen umher fahren:
hier seht ihr ein paar Videos die ich gemacht habe:
www.cyberdriver2.de.vu/video.htm
(bitte von oben nach unten durcharbeiten und ansehen)
Für alle die sich für Hindergrund wissen und Funktionsweise interessieren lesen bitte hier weiter:
Das Video "Vor dem Umbau" ist nicht etwa der erste Cyberdriver, sondern auch Cyberdriver2. Aber ich habe mein gesamtes Steuerungssystem nochmal überdacht.
Anfangs lief es wie folgt ab:
3Controller:
-(1)Display
-(2)Motoren
-(3)Sensoren
-(4)IR-Fernbedienungsauswertung
Controller 2 u. 3 konnten über I²C-Bus Daten auf dem Display anzeigen lassen (Flureszensdisplay mit bis zu 8 Zeichen, eigener Treiber)
Controller 4 hat Daten über einen parallelen 4-Bit-Code an controller 2 gesender, der auch die Menüsteuerung beinhaltete.
Beim automatischen Fahren hat Controller 2 die Motoren direkt über PWM angesteuert. Wenn ein Hindernis kam, hat Controller 3 ein Interrupt ausgelöst und dann über serielle 4-Bit Codes dem Controller 2 gesagt wos lang geht und wie dieser fahren soll. Also z.B. "zurück" "links" usw...
Wenn dann der Controller 3 gesagt hat, das alles wieder okay ist, hat der Controller 2 wieder die volle Kontrolle übernommen.
Soweit so gut. Diese Interrupt-steuerung führt zum Stocken und bis dann der 4-Bit Code übertragen war dauerte das nochmal länger... Die Wartezeiten sind verhältnismäßig lang wie man auf dem Video sehen kann...
So und nun zum neuen Steuerungs-Konzept:
Dabei gibt es jetzt 3Controller:
- (1) Display & IR-Empfänger & Haupt-Controller
- (2) Motor-Controller
- (3) Sensor-Controller
Alle 3 Controller sind über I²C verbunden. Und das ist schon alles ;)
An sich funktioniert das nun so:
Controller 1 sagt dem 2. "vor wärts fahren".
Wenn nun ein Hinderniss kommt sagt (3) an (2) "Sofort anhalten". Direkt danach sagt (3) an (1) wo ein Hindernis erkannt wurde. Darauf hin entscheidet (1) was zu tun ist und gibt entsprechende Fahrbefehle an (2)
Der Bus läuft mit 250kHz und dadurch läuft alles eigentlich schon schnell und flüssig.
So, und nun noch ein Paar Worte zu den fallenden Entscheidungen:
Es gibt 4 Sensoren:
- (vl) vorne links
- (vr) vorne rechts
- (hl) hinten links
- (hr) hinten rechts
- wenn vl schaltet wird nach rechts ausgewischen
- wenn vr schaltet wird nach links ausgewischen
- wenn hl oder hr schaltet dann fährt er ein kurzes Stück vor und dreht dann ca. 90° nach rechts und fährt weiter
- wenn 3x abwechseln vl und vr innerhalb eines bestimmten Zeitfensters schalten, dann fährt er zurück und dreht ca. 90° nach rechts
Der letzte Punkt ist die klassische erkennung das er sich in einer Ecke fest gefahren hat. Der vorletzte Punkt führt zwangsläufig auch zu einem herausfinden aus einer Ecke.
Okay, wer noch mehr dazu wissen will, kann gerne nachfragen.
Ansonsten danke ich allen dies geschafft haben bis hier her zu lesen ;)
Und würde mich über Anmerkungen/Anregungen oder allgemeine Meinungen sehr freuen.
Gruß Robodriver