# \[Nav2\] Reference ackermann robot simulation

**URL:** <https://discourse.openrobotics.org/t/nav2-reference-ackermann-robot-simulation/24901>\
**Category:** Navigation\
**Tags:** ros2, gazebo, ignition\
**Created:** [March 29, 2022, 6:49pm UTC](https://discourse.openrobotics.org/t/nav2-reference-ackermann-robot-simulation/24901 "2022-03-29T18:49:07Z")\
**Posts on this page:** 8\
**Page:** 1

<div class="post-metadata">

**Author:** ![aposhian](https://sea2.discourse-cdn.com/flex022/user_avatar/discourse.openrobotics.org/aposhian/32/10388_2.png) [@aposhian](https://discourse.openrobotics.org/u/aposhian)\
**Post date:** [March 29, 2022, 6:49pm UTC](https://discourse.openrobotics.org/t/nav2-reference-ackermann-robot-simulation/24901/1 "2022-03-29T18:49:07Z")

</div>

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:

- For gazebo: [gazebo\_ros\_pkgs/gazebo\_plugins/include/gazebo\_plugins/gazebo\_ros\_ackermann\_drive.hpp at galactic · ros-simulation/gazebo\_ros\_pkgs · GitHub](https://github.com/ros-simulation/gazebo_ros_pkgs/blob/galactic/gazebo_plugins/include/gazebo_plugins/gazebo_ros_ackermann_drive.hpp)
- For ignition gazebo: [https://ignitionrobotics.org/api/gazebo/6.1/classignition\_1\_1gazebo\_1\_1systems\_1\_1AckermannSteering.html](https://ignitionrobotics.org/api/gazebo/6.1/classignition_1_1gazebo_1_1systems_1_1AckermannSteering.html)

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

- [GitHub - mit-racecar/racecar\_gazebo: A gazebo-based simulator of the MIT Racecar.](https://github.com/mit-racecar/racecar_gazebo)
- [GitHub - gkouros/ackermann\_vehicle: ROS packages for simulating a vehicle with Ackermann steering](https://github.com/gKouros/ackermann_vehicle)
- [GitHub - hdh7485/ackermann\_vehicle: Gazebo ackermann vehicle model](https://github.com/hdh7485/ackermann_vehicle)
- [GitHub - srmainwaring/steer\_bot: Simulate a simple Ackermann steering vehicle in Gazebo using ros\_control.](https://github.com/srmainwaring/steer_bot)
- [GitHub - froohoo/ackermansteer: A Gazebo / ROS plugin Implementing Ackermann steering on a 4 wheel robot](https://github.com/froohoo/ackermansteer)
- [GitHub - robustify/audibot](https://github.com/robustify/audibot)
- [GitHub - chrissunny94/ackerman\_ros\_robot\_gazebo\_simulation: Ackerman robot on Gazebo ROS with move\_base gmapping SLAM TEB planner](https://github.com/chrissunny94/ackerman_ros_robot_gazebo_simulation)

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.

---

<div class="post-metadata">

**Author:** ![smac](https://sea2.discourse-cdn.com/flex022/user_avatar/discourse.openrobotics.org/smac/32/6763_2.png) [@smac](https://discourse.openrobotics.org/u/smac)\
**Post date:** [March 29, 2022, 6:52pm UTC](https://discourse.openrobotics.org/t/nav2-reference-ackermann-robot-simulation/24901/2 "2022-03-29T18:52:10Z")

</div>

> [@aposhian](#):
>
> 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.

---

<div class="post-metadata">

**Author:** ![ljaniec](https://sea2.discourse-cdn.com/flex022/user_avatar/discourse.openrobotics.org/ljaniec/32/9719_2.png) [@ljaniec](https://discourse.openrobotics.org/u/ljaniec)\
**Post date:** [March 31, 2022, 11:30pm UTC](https://discourse.openrobotics.org/t/nav2-reference-ackermann-robot-simulation/24901/3 "2022-03-31T23:30:03Z")

</div>

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

> Linorobot is a suite of Open Source [ROS](http://www.ros.org/about-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.

---

<div class="post-metadata">

**Author:** ![destogl](https://sea2.discourse-cdn.com/flex022/user_avatar/discourse.openrobotics.org/destogl/32/7158_2.png) [@destogl](https://discourse.openrobotics.org/u/destogl)\
**Post date:** [April 1, 2022, 5:16pm UTC](https://discourse.openrobotics.org/t/nav2-reference-ackermann-robot-simulation/24901/4 "2022-04-01T17:16:33Z")

</div>

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.

---

<div class="post-metadata">

**Author:** ![brianlmerritt](https://avatars.discourse-cdn.com/v4/letter/b/e68b1a/32.png) [@brianlmerritt](https://discourse.openrobotics.org/u/brianlmerritt)\
**Post date:** [May 12, 2022, 2:39pm UTC](https://discourse.openrobotics.org/t/nav2-reference-ackermann-robot-simulation/24901/5 "2022-05-12T14:39:56Z")

</div>

I raised Ackermann as an issue and opportunity to linorobot2 in Jan [Ackermann 2wd support · Issue #5 · linorobot/linorobot2 · GitHub](https://github.com/linorobot/linorobot2/issues/5) 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 😃

All the best

Brian

---

<div class="post-metadata">

**Author:** ![tnajjar](https://sea2.discourse-cdn.com/flex022/user_avatar/discourse.openrobotics.org/tnajjar/32/8137_2.png) [@tnajjar](https://discourse.openrobotics.org/u/tnajjar)\
**Post date:** [May 12, 2022, 5:08pm UTC](https://discourse.openrobotics.org/t/nav2-reference-ackermann-robot-simulation/24901/6 "2022-05-12T17:08:37Z")

</div>

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](https://github.com/ros-controls/ros2_controllers/pull/345). 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.

---

<div class="post-metadata">

**Author:** ![smac](https://sea2.discourse-cdn.com/flex022/user_avatar/discourse.openrobotics.org/smac/32/6763_2.png) [@smac](https://discourse.openrobotics.org/u/smac)\
**Post date:** [May 12, 2022, 5:16pm UTC](https://discourse.openrobotics.org/t/nav2-reference-ackermann-robot-simulation/24901/7 "2022-05-12T17:16:47Z")

</div>

Awesome!! Look forward to it!

---

<div class="post-metadata">

**Author:** ![samuk](https://sea2.discourse-cdn.com/flex022/user_avatar/discourse.openrobotics.org/samuk/32/12748_2.png) [@samuk](https://discourse.openrobotics.org/u/samuk)\
**Post date:** [June 6, 2022, 11:11pm UTC](https://discourse.openrobotics.org/t/nav2-reference-ackermann-robot-simulation/24901/8 "2022-06-06T23:11:32Z")

</div>

Maybe this: [GitHub - mgonzs13/ros2\_rover: A version of Sawppy the Rover for ROS 2](https://github.com/mgonzs13/ros2_rover/#readme) something [useful here](https://github.com/mgonzs13/ros2_rover/blob/a12f773d32d3b8ae1ec08c8e8c0633ba6605e3c5/rover_motor_controller_cpp/src/motor_controller/vel_parser_node.cpp#L45)
