# 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.

edit retag close merge delete