Koordinatensysteme und Rotationen
Jede Zahl, die ein Roboter für Position oder Orientierung verwendet, bezieht sich auf ein Koordinatensystem (Frame). Diese Seite behandelt Frames, Rotationsmatrizen, Roll-Nick-Gier-Winkel und Gimbal Lock, Quaternionen und homogene Transformationen und zeigt dann, wie sie im Transformationsbaum (tf) von Strido zusammenspielen.
In Strido
- Basis-Frame: REP-103 (
xvorwärts,ylinks,zoben), mit dem Ursprung im Mittelpunkt der vier Schnittpunkte der Hüftachsen. Er ist inhardware/kinematics.yaml(base_frame) definiert, zusammen mit der Rotation aus dem CAD-Frame (STEP). - Frame-Baum:
ros2/strido_description/urdf/strido.urdf.xacrodefiniertbase_link,imu_link,lidar_link,camera_link,camera_optical_frameund für jedes Bein*_hip,*_thigh,*_calfund*_foot. - Orientierung: Die Firmware führt einen Mahony-Filter aus und gibt eine Quaternion aus (
firmware/strido_esp32s3/src/main.cpp).mcu_bridgeveröffentlicht sie als/imu/datainimu_link. - Beintransformationen im Code:
foot_positioninpackages/strido-core/src/strido/leg.py.
Frames
Ein Frame ist ein Ursprung plus drei orthogonale Einheitsachsen. Ein Punkt
ROS legt die Konventionen in REP-103 fest. Körper-Frames verwenden base_link-Ursprung ist der Mittelpunkt der vier Schnittpunkte der Hüftachsen, daher liegen die Hüften bei legs_base in hardware/kinematics.yaml).
Das CAD-Modell verwendet einen anderen Frame. hardware/kinematics.yaml speichert die Rotation, die STEP-Koordinaten in Basiskoordinaten abbildet:
Das ist eine Drehung um
Rotationsmatrizen
Die Orientierung von Frame
Rotationsmatrizen mit diesen Eigenschaften bilden die Gruppe
Rotationen werden durch Multiplikation verknüpft,
Rollen, Nicken, Gieren und Gimbal Lock
Eine Rotation hat drei Freiheitsgrade, ihre Matrix aber neun Zahlen. Euler-Winkel beschreiben sie mit drei aufeinanderfolgenden elementaren Rotationen. ROS und URDF verwenden Roll-Nick-Gier (RPY): Rollen
RPY ist leicht zu lesen. Die Kamera von Strido ist mit rpy="0 0.261799 0" montiert, einer Neigung von
RPY-Winkel haben eine Singularität. Bei
gehen gegen unendlich. Das liegt daran, dass die Matrix, die die Winkelgeschwindigkeit des Körpers auf
Quaternionen
Eine Einheitsquaternion
Rotationen werden durch das Quaternionenprodukt (Hamilton-Produkt) verknüpft.
Die Firmware von Strido erhält orientation.getQuaternion und sendet sie an den Pi. Die gelernte Policy verwendet nicht die rohen Winkel. Sie verwendet die Richtung der Schwerkraft aus Sicht des Körpers, packages/strido-sim/src/strido_sim/rl/env.py). Dieser Vektor ist für jede Orientierung glatt und hat keinen Gimbal Lock. Siehe State Estimation, wie der Filter
Homogene Transformationen
Eine Pose kombiniert eine Rotation und eine Translation. Eine homogene
Hier ist
Jedes URDF-Gelenk ist genau eine solche Transformation. Zuerst kommt der feste <origin xyz rpy>. Bei einem Drehgelenk folgt eine Rotation um <axis> um den Gelenkwinkel.
Der tf-Baum von Strido
robot_state_publisher berechnet die Beintransformationen aus den Gelenkwinkeln. Die Sensor-Frames sind fest. Zum Beispiel liegt imu_link bei base_link. camera_optical_frame verwendet rpy="-π/2 0 -π/2", damit seine odom → base_link kommt von gait_node, das die kommandierte Körpergeschwindigkeit integriert. Es ist keine gemessene Odometrie (siehe den Docstring von ros2/strido_control/strido_control/gait_node.py).
Für das vordere linke Bein lautet die URDF-Kette:
Rechenbeispiel: Abduktion des vorderen linken Beins
In der Standpose (stand_pose() in strido/gait.py, Körperhöhe
Nun Abduktion um
Addiert man den Hüftursprung base_link. foot_position("FL", (0.1745, 0.8121, -1.6761)) liefert denselben Punkt. Dieselbe Rotation als Quaternion ist
Prüfen Sie sich selbst
- Warum ist
einfach die Transponierte? - Der IMU-Frame ist parallel zu
base_link, aber um einige Zentimeter versetzt. Ändert der Versatz die gemessene Winkelgeschwindigkeit? Ändert er die gemessene Beschleunigung? - Warum beobachtet die Policy den Schwerkraftvektor statt Rollen, Nicken und Gieren?
- Schreiben Sie
mithilfe der URDF-Transformationen.
Antworten
- Die Spalten sind orthonormal, daher gilt
. - Die Winkelgeschwindigkeit ist überall auf einem starren Körper gleich, daher ändert der Versatz sie nicht. Die lineare Beschleunigung ändert sich: Ein versetzter Punkt sieht zusätzliche Terme
. - Er ist stetig und hat keine Singularität. Außerdem ist das Gieren mit einer IMU ohne Magnetometer nicht beobachtbar, und das Gehen braucht es nicht.
, wobei jeder Faktor aus xyzundrpydes Gelenks gebildet wird.
Weiterführende Literatur
- K. M. Lynch und F. C. Park, Modern Robotics: Mechanics, Planning, and Control, Cambridge University Press, 2017, Kap. 3 (Starrkörperbewegungen). Kostenloses PDF
- B. Siciliano, L. Sciavicco, L. Villani und G. Oriolo, Robotics: Modelling, Planning and Control, Springer, 2009, Kap. 2.
- REP-103: Standard Units of Measure and Coordinate Conventions und REP-105: Coordinate Frames for Mobile Platforms.
- J. Solà, „Quaternion kinematics for the error-state Kalman filter“, arXiv:1711.02508, 2017.
- ROS 2 und die Roboterbeschreibung in diesem Wiki.