Hi all!
I’d love to introduce you all to my new project vehicle_dynamics_sim, an easy to configure and lightweight ROS 2 vehicle dynamics simulator focused on realistic actuator dynamics.
The main intended use case is as a development tool for trajectory following controllers, such as those part of the Nav2 stack (RPP, MPPI etc.), both in manual development and in automated testing (CI) pipelines.
Why do actuation dynamics matter? The video below shows an example with the Nav2 MPPI controller. The robot on the right has close to ideal actuators, and drives well, while the one on the left has more realistic actuation limits, and takes markedly longer to reach its goal:
This simulator allows you to easily simulate these actuation limits, allowing you to develop, tune and validate your controller more in simulation without ending up with something that doesn’t work on your real physical robot.
Key features
- Measurable parameters: All values directly observable in real systems (no abstract physics parameters or inverse modeling required).
- Elaborate actuator modeling (dead time, low pass effect, acceleration and velocity limits, etc.) as well as localization modeling (odometry random walk, measurement noise).
- Single YAML configuration: Fully configured through ROS parameters; no URDF editing required.
- 100% native ROS 2: straight pub-sub, no abstraction layers or bridges.
- Lightweight: <500 LOC main file (vehicles.cpp), <15% single-core CPU usage, launches in <1s.
Nice to haves:
- Compatible with Nav2, example config and launch files.
- Wall clock mode: just follows the wall clock progression, very close to how real hardware behaves. No need to use
use_sim_clock(though we do support that, if you need it). - Many vehicle types included: bicycle model (Ackermann), differential and omni, and for the bicycle model we support the four variations (steering rear/front and drive rear/front).
- Robot model visualization (URDF) generated on the fly based on the set ROS parameter values. (This simulator relies on RViz for its viewport.)
What it’s not
- A Gazebo / O3DE replacement: No! This simulator doesn’t simulate collisions, is limited to 2D movements and does not simulate any sensors (though it does provide rather realistic localization with configurable noise). That said: it’s considerably easier to set up than any of those two, the simulated dynamics are far more realistic out of the box, and it uses a fraction of the resources, making it rather a complementary piece of kit.
- Mature: just got released, and though it comes with several unit and integration tests, it probably has a few bugs. If anything doesn’t fully behave as expected, be sure to let know. Feature requests are also welcome

Links
- Code and documentation: GitHub - abaeyens/vehicle_dynamics_sim: A fast vehicle dynamics simulator focusing on faithful actuation limits simulation.
- My related blog post: Vehicle Dynamics Sim: accurately and easily simulate actuation limits | Arne Baeyens' website
I hope you enjoy using it, and all feedback welcome!
Best,
Arne