The Turtlebot3 firmware publishes a transform from base_link to imu_link. My understanding is that this transform is supposed to define where the IMU sensor is mounted relative to the robot's chassis so that the sensor readings can be correctly transformed into the robot's frame frame of reference. If my understanding is correct, then this transform should be static. The IMU frame moves and rotates together with the robot frame, so relative position of IMU frame should not change (presuming that the IMU is not moving within the robot, and on TB3, it is not).
However, looking at the TB3 firmware (https://github.com/ROBOTIS-GIT/OpenCR.git), file ./arduino/opencr_fw/opencr_fw_arduino/src/arduino/libraries/turtlebot3/turtlebot_waffle/turtlebot3_core/turtlebot3_core.ino, I see that the rotation component of the published transform is set to the orientation readings of the sensor.
Hence, the transform is actually the rotation observed by the IMU (and the same value is actually published as orientation in the IMU message, which is supposed to be the sensor reading within the IMU's frame of reference). That does not make sense to me. That means that within the fixed frame of reference, the orientation of the robot is 2x of what it should be (and I can see that clearly happen in the rviz).
Is this a bug and if it's not, does anyone have a meaningful explanation?
↧