Hi, today I was playing with the gazebo simulation and it appears that front_wheel_left->base_link and front_wheel_right->base_link transforms are not published by gazebo.
I noticed it when I added a RobotModel panel in rviz2 to show the robot, and it started to complain repeatedly about it:
[rviz2-6] Warning: Invalid frame ID "front_wheel_left" passed to canTransform argument source_frame - frame does not exist
[rviz2-6] at line 133 in /tmp/binarydeb/ros-foxy-tf2-0.13.13/src/buffer_core.cpp
[rviz2-6] Warning: Invalid frame ID "front_wheel_right" passed to canTransform argument source_frame - frame does not exist
[rviz2-6] at line 133 in /tmp/binarydeb/ros-foxy-tf2-0.13.13/src/buffer_core.cpp
[rviz2-6] Warning: Invalid frame ID "front_wheel_left" passed to canTransform argument source_frame - frame does not exist
[rviz2-6] at line 133 in /tmp/binarydeb/ros-foxy-tf2-0.13.13/src/buffer_core.cpp
[rviz2-6] Warning: Invalid frame ID "front_wheel_right" passed to canTransform argument source_frame - frame does not exist
[rviz2-6] at line 133 in /tmp/binarydeb/ros-foxy-tf2-0.13.13/src/buffer_core.cpp
[rviz2-6] Warning: Invalid frame ID "front_wheel_left" passed to canTransform argument source_frame - frame does not exist
[rviz2-6] at line 133 in /tmp/binarydeb/ros-foxy-tf2-0.13.13/src/buffer_core.cpp
[rviz2-6] Warning: Invalid frame ID "front_wheel_right" passed to canTransform argument source_frame - frame does not exist
[rviz2-6] at line 133 in /tmp/binarydeb/ros-foxy-tf2-0.13.13/src/buffer_core.cpp
Looking to the nanosaur.gazebo.xacro file and in nanosaur_description package I saw that it depends on how it was implemented the diff_drive_emulation; basically rearranging some robot frames to match a differential drive steering model.
I think that we can solve it better by simply taking advantage of the libgazebo_ros_diff_drive support for skid steering drive. To do this we just need to pass the right distance between the front sprockets and rear wheels in wheel_separation argument and then increase the rear wheels torsional coefficients mu1,mu2 so that they don't simply slip while rotating.
I've already tested it sending some inputs with the nanosaur teleop command and it seems working fine:
Do you think its a good solution? If so I can do a pull request so you can check my code.