MVSim simulates wheeled robots and vehicles with realistic physics, sensors, and multi-agent support. It is designed to be fast enough for large-scale experiments while remaining accurate enough for dynamics and sensor research.
Key properties:
- Fully configured via XML world files — no code changes needed for most experiments.
- Works standalone, as a ROS 2 node, or embedded in a C++ / Python application.
- Headless mode for CI pipelines and Docker containers.
- Multi-vehicle worlds with mutual sensing (robots see each other in LiDAR).
mvsim_demo_warehouse.mp4
mvsim-tractor-trailer.mp4
| Model | Description |
|---|---|
differential |
2-wheel or 4-wheel differential drive (e.g. TurtleBot, Jackal) |
ackermann |
Car-like Ackermann steering with kinematic or dynamic control |
ackermann_drivetrain |
Ackermann + realistic mechanical differentials (open / Torsen, 2WD / 4WD) |
| Articulated | Trailer-style articulated vehicles |
Controllers available: raw torque, twist PID, ideal twist.
Friction models: default Coulomb, Ward-Iagnemma (off-road), ellipse (slip angle + slip ratio).
| Sensor | Notes |
|---|---|
| 3D LiDARs | Velodyne VLP-16, Ouster OS1, Hesai Helios-32 (26°/31°/70° FOV) |
| 2D LiDAR | Generic + RPLidar A2; optional GPU-based 3D ray-tracing |
| RGB camera | Pinhole model, configurable intrinsics |
| RGBD camera | Depth + color (RealSense / Xtion-style), publishes pointcloud, depth image |
| IMU | White noise + bias random-walk (Forster 2016 model) |
| GNSS / GPS | Requires georeferenced world; configurable noise |
- Occupancy grid maps (image or MRPT binary)
- Elevation meshes (terrain with height)
- Textured 3D blocks and custom meshes (
.dae,.obj) - Friction zones (spatially-varying
mu, rolling resistance) - Multi-storey environments
- Lighting configuration
- Remote resource caching
- ROS 2 — full topic / TF / parameter interface (see mvsim_node docs)
- ZMQ / Protobuf — language-agnostic pub/sub for custom clients
- Python — direct API access
- C++ library — embed the simulator in your application
sudo apt install ros-$ROS_DISTRO-mvsimThen follow the first-steps guide.
git clone https://github.com/MRPT/mvsim.git --recursiveSee full installation instructions for cmake and colcon build options.
Standalone:
mvsim launch mvsim_tutorial/demo_warehouse.world.xml
mvsim launch mvsim_tutorial/demo_2robots.world.xml
mvsim launch mvsim_tutorial/demo_greenhouse.world.xmlROS 2:
ros2 launch mvsim demo_warehouse.launch.py
ros2 launch mvsim demo_depth_camera.launch.pyMove the robot with w/a/s/d (keyboard) or any standard cmd_vel publisher. In multi-robot worlds, press 1, 2, … to select the active robot.
See all demo worlds for the full list, including outdoor, road circuits, multi-storey, logistics center, articulated vehicles, and more.
| Distro | Dev build | Binary releases | Version |
|---|---|---|---|
| Humble (u22.04) | amd64 |
||
| Jazzy (u24.04) | amd64 |
||
| Kilted (u24.04) | amd64 |
||
| Rolling (u24.04) | amd64 |
Spanish talk with English slides and subtitles (slides):
If you use MVSim in your research, please cite:
@article{blanco2023mvsim,
title = {MultiVehicle Simulator (MVSim): Lightweight dynamics simulator for multiagents and mobile robotics research},
journal = {SoftwareX},
volume = {23},
pages = {101443},
year = {2023},
doi = {10.1016/j.softx.2023.101443},
url = {https://www.sciencedirect.com/science/article/pii/S2352711023001395},
author = {José-Luis Blanco-Claraco and Borys Tymchenko and Francisco José Mañas-Alvarez and Fernando Cañadas-Aránega and Ángel López-Gázquez and José Carlos Moreno}
}3-clause BSD License. Copyright (C) 2014-2026 Jose Luis Blanco (University of Almeria) and contributors.

