Ackermann Drive vs. Twist Msg
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.
Not an answer, but I believe you'll find this a related discussion: Is "Twist" (still) a good velocity command interface.