[Nav2] Reference ackermann robot simulation

Currently Nav2 has bringup examples and system tests for differential drive robots (turtlebot3). However, many robots use Ackermann Steering (car-like robots). Ackermann robots are supported by the Nav2 Regulated Pure Pursuit Controller, and it would be great to integrate a reference platform that can be used to test Nav2 features in simulation, and compare results for Ackermann vehicles.

There are some core libraries that I would expect an ackermann simulation to be built on:

I have found the following projects that contain full robots, but most of them are not very active, and none of them support ROS2.

Does anyone know of an open-source robot (URDF) that plays nice with gazebo and ROS2? Note that currently Nav2 is set up for classic gazebo, but I would still be interested to know about any ignition-based simulation set ups.


And eventually, probably sooner than later, we’ll be moving to Ignition so that is probably the best direction if given an option.

Note: We also support it via the new Smac Planners (Hybrid-A* and State Lattice) that take into account the curvature constraints. DWB can be made to work with Ackermann pretty easily with a new trajectory generator plugin if you want dynamic obstacle avoidance behavior. However, it does not as of time of writing.

1 Like

Maybe linorobot? There was a port to ROS2 Galactic a few days ago: GitHub - linorobot/linorobot2: Autonomous mobile robots (2WD, 4WD, Mecanum Drive). Seems promising:

Linorobot is a suite of Open Source ROS compatible robots that aims to provide students, developers, and researchers a low-cost platform in creating new exciting applications on top of ROS (Robot Operating System). Linorobot supports different robot bases you can build from the ground up.

Supports: 2WD, 4WD, Mecanum Drive, and Ackermann Steering.

1 Like

When you find a robot we can give it a try to enable/port arckermann controller to ros2_control. Simulation with Garebo or Ignition is trivial to relize.

1 Like

I raised Ackermann as an issue and opportunity to linorobot2 in Jan Ackermann 2wd support · Issue #5 · linorobot/linorobot2 · GitHub but the issue was closed. I know AgileX are working on a ROS2 version of their Limo robot, which includes differential, ackermann, mecanum and tracked drive. To date they seem to be avoiding the ackermann transition to ROS2 but I would like to help nudge them (or anyone else) towards a solution in ros2_control.

I don’t have the coding skills to create a new control, but would be happy to see if AgileX could fork ros2_control and put in a pull request.

If this is already being resolved, great - please point me in the direction :smiley:

All the best


I recently opened a PR to add a tricycle controller to ros2_controllers Tricycle controller by tonynajjar · Pull Request #345 · ros-controls/ros2_controllers · GitHub. I tried to follow the architecture of the diff_drive_controller as much as possible.
If this goes through, I think an ackermann controller would not be that far off from the tricycle controller.

I can also work on adding reference tricycle/ackermann examples for Nav2 @smac @aposhian.


Awesome!! Look forward to it!

Maybe this: GitHub - mgonzs13/ros2_rover something useful here