ijjiij
19.09.2012, 14:51
Hallo,
Nach diversen kleineren Projekten und Vorüberlegungen habe ich jetzt mein erstes größeres (zusammenhängendes) Projekt in Angriff genommen.
Für die meisten mag es Vielleicht jetzt nicht besonders spektakulär klingen, trotzdem ist es für mich ein großer Schritt und ich bin mit sicher ich werde dabei einige Fragen haben.
Technische Daten bis jetzt:
- Abmessung 25x25cm x 27cm
- Rahmen aus 4-Kant Holz
- Tamiya Twin Gearbox mittig des Gehäuses
- 1 Kugelrad zur Ballance
- AtMega32 zur Ansteuerung
- Motortreibermodul für 2 Motoren
- 2 Tastsensoren an der Vorderkante
- 2 zusätzliche Zahnräder mit Löchern oberhalb des Getriebes für die Odometrie
- 2 Gabellichtschranken zur Odometrie-Messung
Projektstatus bis jetzt:
(Stand 19.09.2012) Erste freie (unkoordinierte) Fahrmanöver mit Anstoß-Erkennung durch die Tastsensoren.
(Stand 27.09.2012) Der Roboter hat jetzt eine Platinenbefestigung in Sandwichbauweise bekommen. Außerdem wurde das Fahrgestell etwas umgebaut.
(Stand 05.10.2012) Die Odometrie funktioniert jetzt mittlerweile. Hier ist derzeit zwar nur eine Genauigkeit von ca 2.5cm zurückgelegter Wegstrecke möglich, aber immerhin ist es ein erster Schritt in Richtung Navigation und Umfahren von Hindernissen.
(Stand 16.10.2012) Ziel erreicht: Anfahren von mehreren Punkten (Wegmarken) in Folge.
Nächstes Ziel:
- Finden und Anfahren eines Festen Punktes (Parkposition).
- Umfahren von Hindernissen. (vermutlich mit A-Star Navigation)
- Kommunikation mit PC (USB oder Wlan).
- Datenlogger auf SD-Karte.
- LCD-Display zur direkten Ausgabe von geloggten Werten.
- Kartografierung der Wohnung für die A* Navigation.
23332
--------------------------------
So soviel mal zum aktuellen Status.
Jetzt zum nächsten Schritt, dem Auffinden eines Zielpunkts.
Und dazu hab ich mir auch schon ein paar Gedanken gemacht, zu deinen ich gerne eure Meinung hätte. Vermutlich denk ich hier auch mal wieder viel zu kompliziert.
Optimum für diese Situation wäre ja vermutlich, das der Roboter seine eigene Position in der Ebene, sowie die exakte Position des Ziels im in der Ebene kennt, daraus dann den entsprechenden Vektor berechnet, die Richtung einschlägt und hinfährt.
Dazu müsste der Roboter aber eben nicht nur seine eigene Position in der Ebene kennen, sondern außerdem noch dauerhaft seine Lage und Position in der Ebene überwachen können.
Wenn ich jetzt die komplette (mögliche) Fahrebene außer Acht lasse, kann ich das ganze System ja eigentlich auf die Verhältnismäßige Lage zwischen aktueller Position und Position des Zielpunkts reduzieren und spar mir dadurch doch einiges an Aufwand.
Breche ich das Problem jetzt noch einmal auf kleinere Bröckchen herunter, reduziert sich das Problem auf 4 Teile:
- Ausrichten des Roboters in Richtung des Ziels
- Fahren zum Ziel
- Kontrolle ob das Ziel schon erreicht ist
- Entsprechende Kurskorrektur (sowohl Winkel als auch Distanz)
Zur Ausrichtung auf das Ziel brauch ich ja wohl einen elektronischen Kompas. Alternative wäre Triangulation, aber die kann ich in dem Fall ja erst wärend der Fahrt anwenden, also der Winkel der Fahrtrichtung errechnet sich dann ja durch den Vergleich der Position zu Zeitpunkt 1 und Zeitpunkt 2, so wie beim Autonavi.
Also mein Lösungsvorschlag wäre der folgende:
- Ich errechne mir den benötigten Winkel um genau aufs Ziel ausgerichtet zu sein.
- Dann wird der entsprechende Winkel durch Drehung des Roboters um seine eigene Achse eingestellt.
- Jetzt wird einfach mal drauflos gefahren.
- Kommt es zu einer Abweichung im Winkel (zB durch Unebenheiten im Boden, Schlupf der Räder, etc) wird das möglichst sofort korrigiert.
-> hier können sich dann aber Fehler in den Winkelabweichungen aufsummieren, mal Abgesehen davon das ich noch absolut keine Messung der Weglänge habe
-> Ich könnte jetzt einfach hergehen, und sagen zähle für alle Winkel-Abweichungen nach Rechts eine Variable +1, für alle Abweichungen nach Links zähle -1. Ist am Ende die Variable (annähernd) 0 dann sollten sich die Fehler in Grenzen halten, andernfalls weiß ich in welcher Richtung ich Falsch stehe, aber noch nicht wie weit.
Wenn ich jetzt zB immer nach gefahrenen 5 Sekunden die Winkel kontrolliere und eine Abweichung feststelle weswegen ich die Variable hochzählen müsste, dann kann ich ja auch davon ausgehen das diese Winkeländerung statistisch gesehen nicht plötzlich passiert ist sondern ein schleichender Prozess war, den ich durch eine Kurve mit Ausgangssteigung 0° und Endsteigung x° beschreiben kann. So bekomme ich eine errechnete Abweichung in die entprechende Richtung. Wenn ich diesen Fehler jetzt aufsummiere, könnte ich am Ende der Fahrstrecke die Ausrichtung bzw. Fahrdauer korrigieren und anpassen, das der Roboter zumindest rechnerisch am Zielpunkt stehen sollte.
Nachdem ich aber weiterhin nicht die Fahrstrecke, sondern nur die Fahrzeit messen kann gibts hier wieder gewisse Ungenauigkeiten.
-> Wäre hier Triangulation anhand von 2 markanten Punkten links und rechts des Ziels sinnvoll? Einerseits könnte ich dadurch auch die zurückgelegte Strecke bis auf Ungenauigkeiten errechnen, andererseits könnte ich dadurch auc hdie Fehler verringern.
Da würde ich dann zwei Sharp-Infrarotsensoren auf Servos setzen und die so wärend der Fahrt dauerhaft auf die markanten Referenzpunkte ausgerichtet halten.
So, was haltet ihr jetzt davon? Gibt es da eventuell andere Möglichkeiten? Wie habt ihr das Problem gelöst?
LG
ijjiij
Nach diversen kleineren Projekten und Vorüberlegungen habe ich jetzt mein erstes größeres (zusammenhängendes) Projekt in Angriff genommen.
Für die meisten mag es Vielleicht jetzt nicht besonders spektakulär klingen, trotzdem ist es für mich ein großer Schritt und ich bin mit sicher ich werde dabei einige Fragen haben.
Technische Daten bis jetzt:
- Abmessung 25x25cm x 27cm
- Rahmen aus 4-Kant Holz
- Tamiya Twin Gearbox mittig des Gehäuses
- 1 Kugelrad zur Ballance
- AtMega32 zur Ansteuerung
- Motortreibermodul für 2 Motoren
- 2 Tastsensoren an der Vorderkante
- 2 zusätzliche Zahnräder mit Löchern oberhalb des Getriebes für die Odometrie
- 2 Gabellichtschranken zur Odometrie-Messung
Projektstatus bis jetzt:
(Stand 19.09.2012) Erste freie (unkoordinierte) Fahrmanöver mit Anstoß-Erkennung durch die Tastsensoren.
(Stand 27.09.2012) Der Roboter hat jetzt eine Platinenbefestigung in Sandwichbauweise bekommen. Außerdem wurde das Fahrgestell etwas umgebaut.
(Stand 05.10.2012) Die Odometrie funktioniert jetzt mittlerweile. Hier ist derzeit zwar nur eine Genauigkeit von ca 2.5cm zurückgelegter Wegstrecke möglich, aber immerhin ist es ein erster Schritt in Richtung Navigation und Umfahren von Hindernissen.
(Stand 16.10.2012) Ziel erreicht: Anfahren von mehreren Punkten (Wegmarken) in Folge.
Nächstes Ziel:
- Finden und Anfahren eines Festen Punktes (Parkposition).
- Umfahren von Hindernissen. (vermutlich mit A-Star Navigation)
- Kommunikation mit PC (USB oder Wlan).
- Datenlogger auf SD-Karte.
- LCD-Display zur direkten Ausgabe von geloggten Werten.
- Kartografierung der Wohnung für die A* Navigation.
23332
--------------------------------
So soviel mal zum aktuellen Status.
Jetzt zum nächsten Schritt, dem Auffinden eines Zielpunkts.
Und dazu hab ich mir auch schon ein paar Gedanken gemacht, zu deinen ich gerne eure Meinung hätte. Vermutlich denk ich hier auch mal wieder viel zu kompliziert.
Optimum für diese Situation wäre ja vermutlich, das der Roboter seine eigene Position in der Ebene, sowie die exakte Position des Ziels im in der Ebene kennt, daraus dann den entsprechenden Vektor berechnet, die Richtung einschlägt und hinfährt.
Dazu müsste der Roboter aber eben nicht nur seine eigene Position in der Ebene kennen, sondern außerdem noch dauerhaft seine Lage und Position in der Ebene überwachen können.
Wenn ich jetzt die komplette (mögliche) Fahrebene außer Acht lasse, kann ich das ganze System ja eigentlich auf die Verhältnismäßige Lage zwischen aktueller Position und Position des Zielpunkts reduzieren und spar mir dadurch doch einiges an Aufwand.
Breche ich das Problem jetzt noch einmal auf kleinere Bröckchen herunter, reduziert sich das Problem auf 4 Teile:
- Ausrichten des Roboters in Richtung des Ziels
- Fahren zum Ziel
- Kontrolle ob das Ziel schon erreicht ist
- Entsprechende Kurskorrektur (sowohl Winkel als auch Distanz)
Zur Ausrichtung auf das Ziel brauch ich ja wohl einen elektronischen Kompas. Alternative wäre Triangulation, aber die kann ich in dem Fall ja erst wärend der Fahrt anwenden, also der Winkel der Fahrtrichtung errechnet sich dann ja durch den Vergleich der Position zu Zeitpunkt 1 und Zeitpunkt 2, so wie beim Autonavi.
Also mein Lösungsvorschlag wäre der folgende:
- Ich errechne mir den benötigten Winkel um genau aufs Ziel ausgerichtet zu sein.
- Dann wird der entsprechende Winkel durch Drehung des Roboters um seine eigene Achse eingestellt.
- Jetzt wird einfach mal drauflos gefahren.
- Kommt es zu einer Abweichung im Winkel (zB durch Unebenheiten im Boden, Schlupf der Räder, etc) wird das möglichst sofort korrigiert.
-> hier können sich dann aber Fehler in den Winkelabweichungen aufsummieren, mal Abgesehen davon das ich noch absolut keine Messung der Weglänge habe
-> Ich könnte jetzt einfach hergehen, und sagen zähle für alle Winkel-Abweichungen nach Rechts eine Variable +1, für alle Abweichungen nach Links zähle -1. Ist am Ende die Variable (annähernd) 0 dann sollten sich die Fehler in Grenzen halten, andernfalls weiß ich in welcher Richtung ich Falsch stehe, aber noch nicht wie weit.
Wenn ich jetzt zB immer nach gefahrenen 5 Sekunden die Winkel kontrolliere und eine Abweichung feststelle weswegen ich die Variable hochzählen müsste, dann kann ich ja auch davon ausgehen das diese Winkeländerung statistisch gesehen nicht plötzlich passiert ist sondern ein schleichender Prozess war, den ich durch eine Kurve mit Ausgangssteigung 0° und Endsteigung x° beschreiben kann. So bekomme ich eine errechnete Abweichung in die entprechende Richtung. Wenn ich diesen Fehler jetzt aufsummiere, könnte ich am Ende der Fahrstrecke die Ausrichtung bzw. Fahrdauer korrigieren und anpassen, das der Roboter zumindest rechnerisch am Zielpunkt stehen sollte.
Nachdem ich aber weiterhin nicht die Fahrstrecke, sondern nur die Fahrzeit messen kann gibts hier wieder gewisse Ungenauigkeiten.
-> Wäre hier Triangulation anhand von 2 markanten Punkten links und rechts des Ziels sinnvoll? Einerseits könnte ich dadurch auch die zurückgelegte Strecke bis auf Ungenauigkeiten errechnen, andererseits könnte ich dadurch auc hdie Fehler verringern.
Da würde ich dann zwei Sharp-Infrarotsensoren auf Servos setzen und die so wärend der Fahrt dauerhaft auf die markanten Referenzpunkte ausgerichtet halten.
So, was haltet ihr jetzt davon? Gibt es da eventuell andere Möglichkeiten? Wie habt ihr das Problem gelöst?
LG
ijjiij