mvsim

A lightweight multivehicle simulation framework.

README

MVSim logo

MultiVehicle Simulator (MVSim)

Lightweight, realistic 2.5D dynamics simulator for mobile robots and multi-agent research

CI Linux Check clang-format Documentation License

Documentation · Installation · Demo worlds · Cite


Overview

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).

https://github.com/user-attachments/assets/766db164-2d16-44f4-acbf-2f15b73c1ab3

screenshot-demo

https://github.com/user-attachments/assets/93c95aeb-71e9-4c35-b1dc-ba895c79daf7


Features

Vehicle dynamics

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).

Sensors

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

World elements

  • 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

Interfaces

  • 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


Installation

Build from source

git clone https://github.com/MRPT/mvsim.git --recursive

See full installation instructions for cmake and colcon build options.


Quick start

Standalone:

mvsim launch mvsim_tutorial/demo_warehouse.world.xml
mvsim launch mvsim_tutorial/demo_2robots.world.xml
mvsim launch mvsim_tutorial/demo_greenhouse.world.xml

ROS 2:

ros2 launch mvsim demo_warehouse.launch.py
ros2 launch mvsim demo_depth_camera.launch.py

Move 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.


ROS 2 build status

Distro

Dev build

Binary releases

Version

Humble (u22.04)

amd64 arm64

Jazzy (u24.04)

amd64 arm64

Kilted (u24.04)

amd64 arm64

Rolling (u24.04)

amd64 arm64

EOL distros

Distro

Last stable version

ROS 1 Noetic (u20.04)

ROS 2 Iron (u22.04)


ROSCon talk

Spanish talk with English slides and subtitles (slides):

MvSim ROSCon talk


Citation

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}
}

License

3-clause BSD License. Copyright (C) 2014-2026 Jose Luis Blanco (University of Almeria) and contributors.