Skip to content

Ackermann kinematic model#

Autoware now supports control inputs for vehicles based on an Ackermann kinematic model.
This section introduces you a brief concept of the Ackermann kinematic model and explains how Autoware controls it. Please remember, Autoware control output (/control/command/control_cmd) publishes lateral and longitudinal commands according to the Ackermann kinematic model.

Geometry#

The basic style of the Ackermann kinematic model has four wheels with an Ackermann link on the front, and it is powered by the rear wheels.
The key point of Ackermann kinematic model is that the axes of all wheels intersect at the same point, which means all wheels will trace a circular trajectory with a different radii but a common center point (See the figure below).
Therefore, this model has a great advantage that it minimizes the slippage of the wheels and prevents tires from getting worn soon.

In general, the Ackermann kinematic model accepts the longitudinal speed \(v\) and the steering angle \(\phi\) as inputs. In autoware, \(\phi\) is positive if it is steered counterclockwise, so the steering angle in the figure below is actually negative.

An Ackermann vehicle seen from above, first with the front wheels straight and then steered to the right, where the axes of all wheels meet at one center of rotation. The inputs are the speed v at the rear axle and the steering angle phi.Straight aheadvSteering to the rightCenter of rotationφφ is negative here: Autoware counts a counterclockwise steering angle as positive.v
An Ackermann kinematic model: on the left the vehicle drives straight ahead, and on the right it steers to the right.

Control#

Autoware publishes the control command on the /control/command/control_cmd topic. The type of this topic is autoware_control_msgs/msg/Control. It contains a lateral command and a longitudinal command:

Control
builtin_interfaces/Time stamp
builtin_interfaces/Time control_time
autoware_control_msgs/Lateral lateral
autoware_control_msgs/Longitudinal longitudinal

where,

Lateral
builtin_interfaces/Time stamp
builtin_interfaces/Time control_time
float32 steering_tire_angle
float32 steering_tire_rotation_rate
bool is_defined_steering_tire_rotation_rate
Longitudinal
builtin_interfaces/Time stamp
builtin_interfaces/Time control_time
float32 velocity
float32 acceleration
float32 jerk
bool is_defined_acceleration
bool is_defined_jerk

See Lateral.msg and Longitudinal.msg for details.

The vehicle interface should realize these control commands through your vehicle's control device.

Autoware also sends gear, turn indicator, and hazard light commands (see the vehicle interface design). The vehicle interface module must also handle these commands if the vehicle has devices for them.