diff --git a/README.md b/README.md index 173eb1e..a4d3bbb 100644 --- a/README.md +++ b/README.md @@ -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 | diff --git a/src/imu_node.py b/src/imu_node.py index b09fb6b..29ca353 100644 --- a/src/imu_node.py +++ b/src/imu_node.py @@ -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,