I would like to ask you your opinion concerning the differential drive or other way to drive a 4 wheels model.
I’m trying to drive my model (4 wheels forklift) and so far I’ve done my best to use the ackermann formula.
I was able to send velocity and angular message using the cmd_vel topic but when I’ve tried to use the ROS2 navigation, my model didn’t moved as expected - wrong orientation with angular value and steering value too high - (I may have a radian←→degree issue )
I’ve checked the carter navigation and iw_hub navigation from the robotics example.
It seems that the iw_hub example is the closest to my forklift model for the differential drive but checking the differential drive action graph, it seems that the swivel joints are not used.
Only the drive joints (left_wheel_joint and right_wheel_joint) are being set.
My question is, for a forklift model (drive and swivel on the left and right rear wheels), is the differential drive action graph from the iw_hub example best way of doing it?
Would you recommend another way to set the drive and swivel joint based on the ROS2 Subscribe Twist node?
Hi @ludokun. Differential drive is primarily for vehicles with two driven wheels and no swivel capability. So it is not ideal for your use case since you have swivel joints.
Hi @zhengwang .
Thank you very much for your reply.
I ended up using the ackermann formula and setting the drive and swivel joints directly.
I saw the ackermann tutorial (Ackermann Controller — Isaac Sim Documentation) but ROS2 Subscribe Twist node was not used so from the Twist node, I would still have to perform the ackermann formula in order to use the Ackermann Controller node.
For my previous issue with the orientation, it was because the way I set it was for swivel set in the front wheels. Because my swivels are on the rear, I had to multiply by -1 the angular velocity value to fix the issue.
After fixing the angular velocity value I was able to use the navigation2.
One thing though, I based my yaml from the multi robot carter navigation example but it seems that there is an issue in the example yaml.
in the controller_server::ros__paramters, the carter example has the following line: goal_checker_plugin: [“stopped_goal_checker”]
However that way stopped_goal_checker will never be reached. Because it was set as an array the following line fixed the issue (just by adding an ‘s‘ at the end) goal_checker_plugins: [“stopped_goal_checker”]