Ackermann Drive vs. Twist Msg

asked 2021-03-18 15:11:15 -0500

vinny gravatar image

I am conflicted on the preferred way to express commands between my system and my robot driver for an Ackermann Wheeled Robot. Am I to use Twist or an AckermannDrive messages?!

I am currently working on a ROS2 system, but the same question can apply to ROS1.

The way I see it, AckermannDrive is the correct message to use since Twist when commanding angular.z, the Twist message is suggesting a rotational velocity, rather than a steering angle. From my understanding, rotational velocity is not directly controllable in an Ackermann vehicle.

However, it is hard to get Nav Stack / Nav2 outputs (since those are Twist) in Ackermann msgs without doing conversions downstream of the navigation package. Additionally gazebo_ros_ackermann_drive gazebo_ros plugin uses Twist instead of AckermannDrive.

It appears that everyone uses Twist anyways which violates the definition of the message if taken in the strictest/most literal sense.

Are users of Ackermann Wheeled robots simply using twist and treating angular.z as their steering percentage? Am I missing something else super obvious?

Appreciate the discussion.

edit retag flag offensive close merge delete



Not an answer, but I believe you'll find this a related discussion: Is "Twist" (still) a good velocity command interface.

gvdhoorn gravatar image gvdhoorn  ( 2021-03-18 15:43:40 -0500 )edit