State Estimation
Ein Roboter misst seinen Zustand nie direkt; er leitet Orientierung, Geschwindigkeit und Position aus verrauschten, mit Bias behafteten Sensoren ab. Diese Seite behandelt IMU-Modelle, Komplementär- und Mahony-Filter, das Kalman-Filter, Bein-Odometrie und LiDAR-SLAM sowie das, was Strido tatsächlich veröffentlicht.
In Strido
Der XIAO ESP32-S3 liest eine LSM6DSOX-IMU aus und führt in seiner Regelschleife mit firmware/strido_esp32s3/src/main.cpp, Periode kControlPeriodUs = 5000 in board_config.h). ros2/strido_control/strido_control/mcu_bridge.py veröffentlicht es erneut als /imu/data; gait_node.py veröffentlicht /odom per Koppelnavigation; ein RPLIDAR C1 veröffentlicht /scan (siehe docs/software.md und Sensoren).
IMU-Messmodelle
Eine inertiale Messeinheit enthält ein 3-Achsen-Gyroskop (Winkelgeschwindigkeit) und einen 3-Achsen-Beschleunigungssensor (spezifische Kraft). Beide werden im körperfesten Koordinatensystem des Sensors
Gyroskop.
Beschleunigungssensor. Er misst die Beschleunigung minus der Schwerkraft, in den Körper gedreht:
wobei
Die beiden Sensoren ergänzen sich: Das Gyroskop ist glatt, driftet aber; der Beschleunigungssensor ist verrauscht, aber driftfrei.
Das Komplementärfilter
Für einen Neigungswinkel
Im Frequenzbereich ist das ein Hochpass auf dem Gyroskop plus ein Tiefpass auf dem Beschleunigungssensor mit derselben Grenzfrequenz; die Übergangszeitkonstante ist
Rechenbeispiel. Bei
Das Mahony-Filter (das, was die Firmware ausführt)
Mahonys Filter ist ein Komplementärfilter auf der Rotationsgruppe und verwendet statt getrennter Winkel ein Quaternion
- Die Schwerkraftrichtung („oben“) aus der aktuellen Schätzung vorhersagen:
. - Den Beschleunigungssensor normieren:
. - Der Fehler ist die Drehung, die nötig ist, um beide auszurichten:
- Das Gyroskop mit proportionaler und integraler Rückführung korrigieren (der Integralterm konvergiert gegen den negativen Gyroskop-Bias und hebt ihn auf):
- Die Quaternion-Kinematik
integrieren und erneut normieren:
In der Firmware wird Adafruit_Mahony mit updateIMU gespeist (nur Gyroskop und Beschleunigungssensor, kein Magnetometer). Vor dem Filtern werden die Platinenachsen auf das Basiskoordinatensystem umgelegt, da die IMU mit ihrer
Der Sensor ist auf
Das Kalman-Filter
Das Kalman-Filter ist der optimale Schätzer für lineare Systeme mit gaußschem Rauschen. Zustand
Prädiktion (Modell fortschreiben; die Unsicherheit wächst):
Korrektur (eine Messung fusionieren; die Unsicherheit schrumpft):
Die Verstärkung
Bein-Odometrie
Rutscht ein Standfuß nicht, ist seine Weltposition fest, sodass sich die Körpergeschwindigkeit aus den Gelenkgeschwindigkeiten des Beins über die Vorwärtskinematik ergibt (siehe Kinematik):
gemittelt über die Standfüße und für die Position integriert. Fehler entstehen durch Rutschen, Kontakterkennung und Kalibrierung, daher driftet sie; moderne Vierbeiner fusionieren sie in einem EKF mit der IMU.
Die Hobby-Servos von Strido haben keine Positionsrückmeldung: /joint_states meldet die kommandierten Winkel nach der Begrenzung, keine gemessenen. Echte Bein-Odometrie ist daher nicht verfügbar, und gait_node.py macht etwas Einfacheres: Es integriert die kommandierte Körpergeschwindigkeit,
ohne Rutschmodell. Erreicht der Roboter tatsächlich 80 % eines Kommandos von /odom die Distanz um
LiDAR-Scan-Matching und SLAM
Ein 2D-LiDAR liefert Entfernungen
wobei /odom von Strido zuweist („ein Startwert für SLAM“).
Was Strido veröffentlicht
| Topic | Inhalt | Quelle |
|---|---|---|
/imu/data (sensor_msgs/Imu, Frame imu_link, Achsen an base_link ausgerichtet) | Orientierungsquaternion aus dem Mahony-Filter, Winkelgeschwindigkeit in | mcu_bridge.py, Zustandsstrom mit kStatePeriodMs = 10) |
/odom + TF odom base_link (nav_msgs/Odometry) | Koppelnavigation der kommandierten Geschwindigkeit | nur gait_node.py |
/scan (sensor_msgs/LaserScan, lidar_link) | RPLIDAR-C1-Entfernungen mit | sllidar_ros2 |
Die gelernte Policy verwendet nur /imu/data: das Gyroskop und die aus dem Quaternion abgeleitete Schwerkraftrichtung (siehe Reinforcement Learning).
Selbsttest
Warum kann ein Beschleunigungssensor Rollen und Nicken liefern, aber nicht Gieren?
Antwort
Er misst die Schwerkraftrichtung im Körperkoordinatensystem; eine Drehung um die Hochachse ändert diese Richtung nicht.
Welches
ergibt bei eine Zeitkonstante des Komplementärfilters von ? Antwort
, so . Was schätzt die Integralverstärkung
im Mahony-Filter, und was passiert bei ? Antwort
Den Gyroskop-Bias. Bei
hinterlässt ein konstanter Bias einen kleinen bleibenden Roll-/Nickversatz von etwa und unkorrigierte Gierdrift. Was passiert in der Kalman-Korrektur mit
, wenn ? Antwort
: Die Messung wird ignoriert und die Schätzung folgt der Prädiktion. Warum kann Strido keine klassische Bein-Odometrie durchführen?
Antwort
Seine Servos liefern keine Rückmeldung der Gelenkposition, daher sind die tatsächlichen
und unbekannt; nur Kommandos sind verfügbar.
Weiterführende Literatur
- R. Mahony, T. Hamel und J.-M. Pflimlin, „Nonlinear Complementary Filters on the Special Orthogonal Group“, IEEE Transactions on Automatic Control, 2008.
- S. Thrun, W. Burgard und D. Fox, Probabilistic Robotics, MIT Press, 2005.
- J. Solà, „Quaternion kinematics for the error-state Kalman filter“, arXiv:1711.02508, 2017.
- M. Bloesch et al., „State Estimation for Legged Robots — Consistent Fusion of Leg Kinematics and IMU“, Robotics: Science and Systems, 2012.
- W. Hess, D. Kohler, H. Rapp und D. Andor, „Real-Time Loop Closure in 2D LIDAR SLAM“ (Cartographer), IEEE ICRA, 2016.