Phoebe URDF: Fixing Functional Problems
Once I had a decent looking URDF for Phoebe up and running, I added it into the Phoebe launch files and started working on the problems exposed by putting it to work.
The first problems were the drive wheels. Visually, they were stuck at the origin and didn't move with the rest of the robot. Looking through error messages I realized ROS had expected me to read wheel encoder values and publish them as joint state. Since I hadn't done so, this meant the wheels (attached with "continuous" joint) didn't know their location. Until I get around to processing wheel encoder values, the joint type was changed to "fixed" to attach them to the chassis.
Looking at the model from multiple angles, I realized I forgot the caster wheel. Since it's not driven, it is represented as a simple sphere and also attached via a fixed joint.
That's enough to start driving around as a single unit, but the robot movement in RViz was reversed front/back with LIDAR data plot. This was caused by the fact I forgot to tell ROS the LIDAR is pointed backwards on the robot. Once I had done so, the 180 degree yaw is visible on the object axis visualization: The LIDAR's X-axis (red cylinder) is pointing backwards instead of forwards like all the other axis.
The final set of changes might be more cosmetic than functional. When reading about differential drive robots in ROS, it was brought up several times that the robot's X/Y origin base_link
need to be lined up with the pivoting axis of the robot. However, it wasn't clear where the Z axis is supposed to be. Perhaps this is different for each ROS mapping module? The algorithm hector_slam
defined several frames but they don't appear to be supported by gmapping
.
I first defined Phoebe origin as the center point between its two drive wheel axles. When rendered in RViz, this means the Z plane intersects the middle of the robot. It seems to work well, but the visualization looks a bit odd. Intuitively I want the Z plane to represent the ground, so I decided to drop the robot origin to ground level. In the object visualization, this is visible as the purple arrow heads all pointing at a center point below the robot. If I learn this was a bad move later, I'll have to change it back.
All these changes combined gave me a Phoebe URDF with minimal representation in RViz visualization of Phoebe behavior.
(Cross-posted to Hackaday.io)