So verfolgen Sie die Roboterposition

7

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.

Michael Coss
quelle
Haben Sie einen Kalman-Filter ausprobiert?
Paul
Ich habe über Kalman-Filter gelesen, aber noch nie einen geschrieben.
Michael Coss
Wenn Sie ~ $ 1600 ausgeben müssen, hat Analog Devices eine IMU mit einem eingebetteten erweiterten Kalman-Filter (ich arbeite nicht für AD). Link
Matt Brown
Ich denke, dass jede Maus die gleiche Art von Bewegung messen würde wie eine Ballmaus. Gibt es einen bestimmten Grund, warum es eine Ballmaus sein sollte? Eine mit einer roten LED kann aufgrund von physischem Drängeln weniger Rauschen verursachen. Beide würden physischen Kontakt (oder in der Nähe davon) mit der Straßenoberfläche erfordern. Mäuse können gut linear translatieren, aber sie würden wahrscheinlich Rotationsbewegungen verpassen.
Octopus

Antworten:

5

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.

Josh Vander Hook
quelle
Auf hohem Niveau verstehe ich die damit verbundenen Probleme. Und habe dies mit verschiedenen Robotern versucht. Wir hatten Encoder und berechneten Geschwindigkeit und zurückgelegte Strecke, fanden aber diesen Schlupf und drückten von anderen Robotern verzerrte Dinge. Wir haben die doppelte Integration eines Beschleunigungsmessers durchgeführt und festgestellt, dass der zusammengesetzte Fehler den Wert ziemlich schnell unbrauchbar macht. Wir hatten einen Kreisel und fanden die Drift der relativ billigen Komponenten, die wir früher waren, ein Problem. Also kaufte ich etwas etwas teureres in der Hoffnung, dass es besser sein könnte. Vielen Dank für die Links, ich werde einen Blick darauf werfen
Michael Coss
1
Hallo, ich wollte nicht implizieren, dass du es nicht getan hast. Nur dass jeder Sensor eine unabhängige Positionsschätzung liefert , und überraschenderweise können Sie durch Zusammenführen eine kombinierte Schätzung erhalten, die besser als die beste ist. Dies ist das Grundkonzept, das verwendet werden muss, wenn kein einzelner Sensor gut genug ist.
Josh Vander Hook
Einverstanden, und war die Entstehung meiner Frage. Wie man sie verschmilzt und ein besseres Ergebnis erzielt. Fazit ist, dass ich das Bewegungsmodell und die Kovarianzmatrix nicht vollständig verstehe und warum ich nie den Weg der Implementierung eines Kalman-Filters für unsere Roboter beschritten habe. Selbst wenn ich nicht verstehe, wie man die Verstärkungen des Filters einstellt, hilft es nicht, nur Code zu holen. Eine IMU mit integriertem Kalman-Filter ist möglicherweise die bessere Lösung. Ich habe einige andere Alternativen zu Kalman gesehen, Madgwicks IMU / AHRS-Algo, aber das sah nicht so aus, wie ich es wollte
Michael Coss,
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.
Josh Vander Hook
4

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.

Mewa
quelle
Ich habe mir verschiedene Dokumente zu Kalman-Filtern angesehen und dies scheint die allgemeine Antwort für die Reduzierung des Rauschens im Beschleunigungsmesser zu sein, aber ich habe noch nie Code für einen solchen Filter geschrieben, und ich bin mir nicht sicher, wo ich mit der Integration des anderen beginnen soll Sensoren. Es ist nicht schwer zu erkennen, dass die zweimalige Integration des Beschleunigungsmessers in der lauten, vibrationsgefüllten Umgebung unseres Roboters ziemlich schrecklich ist. Ebenso würde ich denken, dass die Berücksichtigung der anderen Sensoren den Fehler reduzieren würde, vorausgesetzt, dass zu Beginn eine ordnungsgemäße Kalibrierung erfolgt. In erster Linie benötigen wir nur x-, y-Koordinaten und eine Richtungsüberschrift.
Michael Coss
@MichaelCoss: Es gibt eine Menge Software, die Kalman-Filter für Sie implementiert. Die Hauptschwierigkeit für den Anfänger besteht darin, ein geeignetes Bewegungsmodell zu entwickeln und die Kovarianz im Sensormodell zu charakterisieren.
Paul
@ MichaelCoss, es gibt Arduino-Code online für Kalman. Hier ist eine nette Diskussion über das Stimmen eines Kalman. und Arduino-Code für Kreisel + Beschleunigungsmesser und Anleitung hier . Sie könnten mehr Glück haben, wenn Sie sich Kalman-Filter für Quadcopter-Code ansehen - es ist ziemlich beliebt.
Mewa
@MichaelCoss, auch zur Berechnung des Steuerkurses mit Magnetometern . Ich denke jedoch, dass Motoren und Neigung in Ihrem Roboter die Genauigkeit dieser Messung beeinflussen. In diesem Fall möchten Sie möglicherweise einen Beschleunigungsmesser verwenden, um zu messen, ob der Roboter gerade ist (kalibrieren Sie ihn auf einen bestimmten Stand), und dann Ihre Magnetometerwerte
Mewa