I bought a Turtlebot3-Burger recently and have been dealing with a Dynamixel (XL430-W250) encoder problem basically since I’ve assembled and set it up and hope someone can help me with that.
I’ve followed the instructions from the robotis homepage to set it up with Ubuntu 20.04 and ROS foxy.
The problem I am facing are encoder wheel position spikes. They occur usually for only one frame and always have the value -33686019 for left and right encoder, while the torque value jumps from false to true. Below is an example of sensor_state topic output in ros2 when it happens.
header: stamp: sec: 1673189780 nanosec: 348095519 frame_id: '' bumper: 0 cliff: 0.0 sonar: 0.0 illumination: 0.0 led: 0 button: 0 torque: true left_encoder: -33686019 right_encoder: -33686019 battery: 12.0
I can trigger these when going full speed with negative velocity and then stopping. In some rarer cases the encoder values stay like this for several frames right after starting the robot. I’ve also managed to trigger this behavior without any control input and just trying to gently apply external torque on the motor wheels.
All in all, this leads to very messed up odometry values and thus transformation issues. I’ve traced it down in the ROS nodes to the point of knowing that the values are already wrong when read using dxl_sdk_wrapper here and here.
I have recorded respective ROS bags of these situations but don’t know if they are of any help. I’ve played around a bit with the Arduino IDE. Followed these install instructions and then tried to run the DynamixelWorkbench examples.
23:42:48.519 -> Find 0 Dynamixels 23:42:49.742 -> Succeed to init : 1000000 23:42:55.303 -> Find 2 Dynamixels 23:42:55.303 -> id : 1 model name : XL430-W250 23:42:55.303 -> id : 2 model name : XL430-W250 23:42:56.493 -> Succeed to init : 2000000 23:43:02.087 -> Find 0 Dynamixels 23:43:03.277 -> Succeed to init : 3000000 23:43:08.872 -> Find 0 Dynamixels 23:43:10.093 -> Succeed to init : 4000000 23:43:15.683 -> Find 0 Dynamixels
However, I couldn’t make the last part of the p_Monitor example work, i.e. the wheel don’t turn.
Also interesting but maybe unrelated: When I run above linked p_Monitor example and execute bulk_read command, my PC loses connection to the board and I have to reset it before I can re-establish a connection.
Is this a known software issue or is this likely faulty hardware?
If you need any other info, please let me know. Thank you for your help in advance!