PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Navigation Robo-Plattform



Georg Hrabanek
10.05.2017, 11:32
Suche eine Lösung, um eine der üblichen Rasp PI Plattformen (2 Räder) selbstständig auf eine bestimmte Position (x,y) in einer zweidimensionalen Matrix fahren zu lassen. Hat jemand vielleicht schon so etwas gemacht?

HaWe
10.05.2017, 11:55
Suche eine Lösung, um eine der üblichen Rasp PI Plattformen (2 Räder) selbstständig auf eine bestimmte Position (x,y) in einer zweidimensionalen Matrix fahren zu lassen. Hat jemand vielleicht schon so etwas gemacht?

ja, habe ich, und zwar mit Hilfe von Encoder-Motoren (Odometrie) und Gyro-Sensor bzw. IMU.
Hier exakt wie bei deiner Fragestellung mit goto (x,y), allerdings auf Basis von NXC (Lego) und/oder C++ mit Arduino:
http://www.mindstormsforum.de/viewtopic.php?t=6746

und hier speziell ein Aufbau mit einem Raspi + Pololu Motorshield und ebenfalls Lego-Encodermotoren für Odometrie plus einem IMU zur Navigation , das goto noch nicht implementiert:
http://www.mindstormsforum.de/viewtopic.php?f=78&t=8851

(Forum ist zur Zeit mit Wartungsarbeiten beschäftigt, ggf. später probieren!)

Georg Hrabanek
10.05.2017, 12:19
Vielen Dank für Deine rasche Antwort! Fragen zu Deinen Lösungen: Kennt die Plattform ihre aktuelle Position? Wie ist die Matrix definiert? Wie erkennt die Plattform die Koordinaten?

HaWe
10.05.2017, 15:08
das siehst du am besten und genauesten, wenn du dir dort den Code ansiehst.
Die momentane Postion wird über unabh. Threads (Multithreading) ständig in real-time aus Odometrie und IMU-Daten berechnet und die Bewegungsänderungen (Winkel/Länge, also quasi Polarkoordinaten-Änderungen) in kartesische Koordinaten umgerechnet. Bezugssystem ist die geografische (Kompass-) Kartengeometrie, also 90° versetzt und im Drehsinn negativ zu mathematischen Koordinaten, damit die Bewegungen und Positionen auch sofort kompatibel zu GPS-Daten sind/wären.
Per Default ist der Nullpunkt des Koordinatenkreuzes der allererste Startpunkt (also nach dem Einschalten und Hochfahren des Systems), es sei denn, man definiert andere Defaults (z.B. aus GPS, oder mutwillige, ganz andere als rel. Bezugssystem).
Wenn ein Kompass verwendet wird (wie bei mir entweder zusätzlich zum Gyro oder den eingebauten im IMU), dann berechnet das System seine Ausrichtung hier nach, also absolut.
Damit bezieht sich dann das goto(x,y) immer auf den relativen Nullpunkt, will man eine absolute geografische Position anfahren, kann man das aber ebenso ganz einfach über die x,y offsets machen (die auch für den rel. Nullpunkt dann identisch sind), und Richtung nach vorn ist immer Kompass-Heading (Kompasskurs).
Ich habe bisher aber immer ausschließlich den relativen Nullpunkt verwendet (Startpunkt (0,0) für die relativen Koordinaten im jeweiligen Zimmer.

- - - Aktualisiert - - -

PS,
beim Lego-Modell mit getrenntem Gyro + Kompass werden alle Sensordaten für Strecke+Richtung (inkl. Odometrie) per einfacher statistischer Filter (Lowpass, Median)gewichtet und nach Plausibilität gefiltert (Ausreißer eliminieren, Gyro Drift beseitigen, Werte glätten), beim IMU (Arduino, Raspi) erledigt das für die Fahrtrichtung der im IMU eingebaute Signalprozessor per eigenem Kalmanfilter, wobei dann also nur die fusionierten IMU-Daten für die Richtung und nur die Odometrie-Daten für die Strecke verwendet werden (arithm. Mittel aus beiden Radencodern).

Georg Hrabanek
10.05.2017, 16:28
Merci!

Code werde ich mir anschauen

RP6conrad
12.05.2017, 08:08
Odometrie ist das Zauberwort. Hier noch zwei Beispielen :

https://www.youtube.com/watch?v=fp8s_tlwyIY
https://www.youtube.com/watch?v=8xiWVgNvO5o&t=12s
Ohne weitere Sensoren haben sie wel einen "Drift" von ihre Position durch Schlupf und andere Factoren.

Georg Hrabanek
12.05.2017, 08:33
Guten Morgen,
ich bin mir in der Zwischenzeit nicht mehr sicher, ob in meiner Aufgabenstellung nicht die Endpositionierung markierungsgestützt einfacher und vor allem exakter wäre. Ich würde in diesem Fall das Bewegungsfeld (ca 2x2m) als Matrix mit 10x10cm Feldern definieren und in diesen den exakten Mittelpunkt als Zielpunkt markieren; navigiert wird dann mit goto (x,y), positioniert wird jeweils auf dem markierten Mittelpunkt
Liebe Grüße aus Wien
Georg