Ich bin ein Softwareforscher, der in meiner Freizeit ein Roboterteam betreut und auf der Softwareseite hilft. Seit Jahren komme ich immer wieder auf dieselbe Frage zurück. Wie man die Position und den Kurs des Roboters während unserer Wettbewerbe bestimmt. Wir haben eine Reihe von Dingen mit unterschiedlichem Erfolg / Misserfolg ausprobiert. Encoder an den Antriebsrädern, Beschleunigungsmessern, Gyroskopen usw. Ich habe kürzlich eine IMU mit einem 3-Achsen-Beschleunigungsmesser, einem 3-Achsen-Kreisel und einem 3-Achsen-Magnetometer gekauft, die alle von einem Arduino vorverarbeitet wurden, und den Wert an eine serielle Schnittstelle ausgegeben. Ich dachte sicherlich, dass es einen Weg geben muss, all diese Messungen durchzuführen und eine zusammengesetzte Ansicht von Position und Richtung zu erhalten. Wir verwenden Mechanum-Räder für diesen speziellen Roboter, daher sind Radcodierer nicht besonders nützlich. Ich habe mich umgesehen und da ' Es wird viel über Orientierung mit Quaternion mit Sensorfusion unter Verwendung ähnlicher Boards gesprochen, aber es ist mir sehr unklar, wie ich die Quaternion und die Schätzung nehmen und den x, y-Abstand von der Startposition ermitteln soll. Jetzt ist mein Zeitfenster für diese Messungen klein, ~ 15 Sekunden, aber ich brauche es, um innerhalb dieses Fensters ziemlich genau zu sein. Ich bin kurz davor, die IMU zu verlassen und etwas anderes auszuprobieren. Eine Idee ist, eine USB-Ball-Maus zu verwenden, um die Roboterbewegung zu verfolgen, aber ich bin sicher, dass die Maus viel zu stark herumwirbelt, was zu Rauschen und ungültigen Ergebnissen führt. Als Randnotiz: Der Roboter hat eine Grundgewichtung von ca. 2 x 3 Fuß und ein Gewicht von 120 lbs. Alle Gedanken oder Vorschläge geschätzt. y Abstand von der Startposition. Jetzt ist mein Zeitfenster für diese Messungen klein, ~ 15 Sekunden, aber ich brauche es, um innerhalb dieses Fensters ziemlich genau zu sein. Ich bin kurz davor, die IMU zu verlassen und etwas anderes auszuprobieren. Eine Idee ist, eine USB-Ball-Maus zu verwenden, um die Roboterbewegung zu verfolgen, aber ich bin sicher, dass die Maus viel zu stark herumwirbelt, was zu Rauschen und ungültigen Ergebnissen führt. Als Randnotiz: Der Roboter hat eine Grundgewichtung von ca. 2 x 3 Fuß und ein Gewicht von 120 lbs. Alle Gedanken oder Vorschläge geschätzt. y Abstand von der Startposition. Jetzt ist mein Zeitfenster für diese Messungen klein, ~ 15 Sekunden, aber ich brauche es, um innerhalb dieses Fensters ziemlich genau zu sein. Ich bin kurz davor, die IMU zu verlassen und etwas anderes auszuprobieren. Eine Idee ist, eine USB-Ball-Maus zu verwenden, um die Roboterbewegung zu verfolgen, aber ich bin sicher, dass die Maus viel zu stark herumwirbelt, was zu Rauschen und ungültigen Ergebnissen führt. Als Randnotiz: Der Roboter hat eine Grundgewichtung von ca. 2 x 3 Fuß und ein Gewicht von 120 lbs. Alle Gedanken oder Vorschläge geschätzt. Ich bin mir sicher, dass die Maus viel zu stark herumwirbelt, was zu Rauschen und ungültigen Ergebnissen führt. Als Randnotiz: Der Roboter hat eine Grundgewichtung von ca. 2 x 3 Fuß und ein Gewicht von 120 lbs. Alle Gedanken oder Vorschläge geschätzt. Ich bin mir sicher, dass die Maus viel zu stark herumwirbelt, was zu Rauschen und ungültigen Ergebnissen führt. Als Randnotiz: Der Roboter hat eine Grundgewichtung von ca. 2 x 3 Fuß und ein Gewicht von 120 lbs. Alle Gedanken oder Vorschläge geschätzt.
quelle
Antworten:
Wie Sie die Position eines Roboters schätzen, hängt davon ab, wie gut Sie ihn schätzen möchten. Wenn Sie nur eine grobe Vermutung benötigen, versuchen Sie es mit Kilometerzähler, es funktioniert in Ordnung. Für bessere Ergebnisse müssen Sie mehr Sensoren einbauen. Dies ist ein inkrementeller Prozess, der viel Sensorfusion erfordert, und plötzlich haben Sie einen erweiterten Kalman-Filter erstellt.
Meiner Meinung nach ist es am besten, jeden Sensor zu verwenden, um eine eigene Schätzung zu erstellen. Nehmen Sie dann einen gewichteten Durchschnitt der resultierenden Schätzungen. Die Gewichte entsprechen der mit jeder Schätzung verbundenen Sicherheit. Dies ist im Wesentlichen der Kalman-Filter. Was fehlt, ist die Schätzung der Gewissheiten. Dies ist der schwierige Teil der KF. Probieren Sie zunächst einige Ad-hoc-Werte aus. Sie wären überrascht, wie gut dies funktionieren kann.
Dies wird in jedem wichtigen Robotik-Lehrbuch und sogar hier auf dieser Website als erste Hauptfrage behandelt.
Auf dieser Website haben wir viele Fragen zu diesem Problem beantwortet.
und viele mehr habe ich vermisst.
Aber ehrlich gesagt sind dies hartnäckige Ansätze. Sie müssen die Grundlagen verstehen (z. B. das Schätzen der Position anhand der Kilometerzähler), um den Rest zu verstehen.
quelle
Ich darf keinen Kommentar abgeben, daher muss ich eine Antwort hinzufügen. Mit Position meinen Sie die Position im Raum (also X-, Y-Koordinaten) oder die Ausrichtung (Neigung usw.)?
Bei Position können Sie die Beschleunigungsmesserwerte verwenden und die Beschleunigung integrieren, um die zurückgelegte Strecke zu ermitteln, obwohl dies ziemlich ungenau ist. Wir haben versucht, dies für einen Quadcopter zu tun, und die Drift aufgrund von Fehlern ist ziemlich groß.
Sie können einen Beschleunigungsmesser mit einem Gyroskop zusammen und einen Kalman-Filter verwenden, um eine bessere Vorstellung davon zu erhalten, wie weit sich der Roboter in jede Richtung bewegt hat. Hier ist eine vorherige Diskussion zu diesem Thema.
Die Neigung können Sie direkt aus den Beschleunigungsmesserwerten berechnen (aber filtern Sie sie, sogar ein FIR-Filter würde in Ordnung funktionieren).
Die Richtung können Sie vom Gyroskop und / oder vom Magnetometer erhalten. Das Gyroskop erkennt die Drehung. Stellen Sie daher sicher, dass es sich in der Nähe der Mitte Ihres Roboters befindet (oder wo immer sich die Drehachse befindet).
Ich hoffe das hilft. Ich muss unterrichten gehen, aber ich komme in einer Stunde zurück und füge weitere Informationen hinzu.
quelle