IMU X und Y getauscht

This commit is contained in:
2026-05-28 20:32:45 +02:00
parent e7d7d2ae20
commit 5bfd5797fb
2 changed files with 17 additions and 8 deletions
+8
View File
@@ -162,6 +162,14 @@ docker exec -it exomy_autostart bash
- Grund: Der restliche ROS-Stack im Container nutzt noch überwiegend Python 2, der BNO085-Treiber benötigt aber Python 3.
- Der Service `exomy-imu-ros.service` liest den Sensor und publiziert über `rosbridge` nach ROS.
### IMU-Einbaulage und Achsen-Remapping
Der BNO085 ist um 90° um die Z-Achse verdreht eingebaut. Dadurch wären die X- und Y-Achsen des Sensors gegenüber dem Rover-Koordinatensystem vertauscht — Roll und Pitch kämen vertauscht an.
`imu_node.py` korrigiert das direkt beim Publizieren: X- und Y-Komponenten werden für Quaternion, Gyro, Beschleunigung und Magnetfeld getauscht. Alle anderen Teile des Systems (GUI, Admin-API) sehen bereits korrekte Daten und müssen nichts kompensieren.
Wenn der Sensor jemals neu ausgerichtet eingebaut wird, muss das Remapping in `publish_measurements()` in `imu_node.py` entsprechend angepasst oder entfernt werden.
### IMU-Topics
| Topic | Typ | Inhalt |
+9 -8
View File
@@ -141,24 +141,25 @@ def publish_measurements(imu_topic, mag_topic, status_topic, sensor):
magnetic = sensor.magnetic
quaternion = sensor.quaternion
# Sensor ist um 90° um die Z-Achse verdreht eingebaut → X- und Y-Achse tauschen
imu_topic.publish(roslibpy.Message({
'header': {'stamp': stamp, 'frame_id': FRAME_ID},
'orientation': {
'x': quaternion[0],
'y': quaternion[1],
'x': quaternion[1],
'y': quaternion[0],
'z': quaternion[2],
'w': quaternion[3],
},
'orientation_covariance': [0.0] * 9,
'angular_velocity': {
'x': gyro[0],
'y': gyro[1],
'x': gyro[1],
'y': gyro[0],
'z': gyro[2],
},
'angular_velocity_covariance': [0.0] * 9,
'linear_acceleration': {
'x': acceleration[0],
'y': acceleration[1],
'x': acceleration[1],
'y': acceleration[0],
'z': acceleration[2],
},
'linear_acceleration_covariance': [0.0] * 9,
@@ -167,8 +168,8 @@ def publish_measurements(imu_topic, mag_topic, status_topic, sensor):
mag_topic.publish(roslibpy.Message({
'header': {'stamp': stamp, 'frame_id': FRAME_ID},
'magnetic_field': {
'x': magnetic[0] * 1e-6,
'y': magnetic[1] * 1e-6,
'x': magnetic[1] * 1e-6,
'y': magnetic[0] * 1e-6,
'z': magnetic[2] * 1e-6,
},
'magnetic_field_covariance': [0.0] * 9,