Package symbol

mvsim package from mvsim repo

mvsim

ROS Distro
humble

Package Summary

Version 1.3.0
License BSD
Build type CATKIN
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/MRPT/mvsim.git
VCS Type git
VCS Version develop
Last Updated 2026-03-17
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

A lightweight multivehicle simulation framework.

Additional Links

Maintainers

  • Jose-Luis Blanco-Claraco

Authors

No additional authors.
MVSim logo # MultiVehicle Simulator (MVSim) **Lightweight, realistic 2.5D dynamics simulator for mobile robots and multi-agent research** [![CI Linux](https://github.com/MRPT/mvsim/actions/workflows/build-linux.yml/badge.svg)](https://github.com/MRPT/mvsim/actions/workflows/build-linux.yml) [![Check clang-format](https://github.com/MRPT/mvsim/actions/workflows/check-clang-format.yml/badge.svg)](https://github.com/MRPT/mvsim/actions/workflows/check-clang-format.yml) [![Documentation](https://readthedocs.org/projects/mvsimulator/badge/?version=latest)](https://mvsimulator.readthedocs.io/en/latest/?badge=latest) [![License](https://img.shields.io/badge/license-BSD%203--Clause-blue.svg)](LICENSE) [**Documentation**](https://mvsimulator.readthedocs.io) · [**Installation**](https://mvsimulator.readthedocs.io/en/latest/install.html) · [**Demo worlds**](https://mvsimulator.readthedocs.io/en/latest/demo_worlds.html) · [**Cite**](#citation)

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

sudo apt install ros-$ROS_DISTRO-mvsim

Then follow the first-steps guide.

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:

```bash mvsim launch mvsim_tutorial/demo_warehouse.world.xml

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package mvsim

1.3.0 (2026-03-17)

  • docs: add logo to web
  • Modernize README
  • Clean up leftovers from temporary benchmark code
  • Creation of .rawlog files use ZStd if available
  • walls demo world: make all walls same thickness, and expose optional env var
  • Add MVSIM_SAVE_RAWLOG_FILENAME env var to some demo worlds
  • XML parser: env vars now can have a default value
  • docs: fix wrong referenc for {} usage
  • remove leftover dep
  • Merge pull request #95 from MRPT/nav-benchmark-greenhouse Nav benchmark greenhouse
  • Merge branch 'develop' into nav-benchmark-greenhouse
  • Add auto_start_recording property to vehicles
  • logistic center demo: add lidar sensors
  • Remove temporary adaptative friction class
  • remove temporary deps
  • Refactoring to use CsvLogger (by Claude Opus)
  • Refactor torque calculation by removing comments and logger Removed logging and comments related to torque calculation.
  • Changes for control benchmark paper
  • Contributors: Fernando Cañadas Aránega, Jose Luis Blanco-Claraco

1.2.0 (2026-02-24)

  • Merge pull request #94 from MRPT/feat/tune-pid Feature: tune pid
  • Support zones with different friction and rolling resistance
  • Better docs, expose more params
  • FIX: sliding bug on slopes
  • Add new unit test for ramps bug
  • fix stop exactly with any controller. Add rolling resistance
  • new PID tuning tool
  • add backwards compat method
  • Merge pull request #93 from MRPT/feat/add-trajectory-tests Add unit test for vehicle trajectory
  • CsvLogger: feature not to write to disk
  • minor edits in demo world
  • Fix bug in velocity composition
  • Clearer distinction between COM and REF point velocities
  • Add unit test for vehicle trajectory
  • Merge pull request #92 from MRPT/feat/truck-trailer-demo Feat/truck-trailer-demo
  • DefaultFriction: fix missing logged variables
  • Add new Ackermann ideal twist controller
  • Revert "fix bug in setTwist()": it was actually a serious regression This reverts commit 07a9fd2a0ab5b4665a4f2d07638f75c1737dbdec.
  • clang-tidy warning fixes
  • Add env var MVSIM_COLLISION_SHAPE_CACHE_VERBOSE
  • Contributors: Jose Luis Blanco-Claraco

1.1.0 (2026-02-16)

  • Merge pull request #91 from MRPT/fix/lidar-3d Lidar3D: fix min clip bug; add real intensity color
  • Lidar3D: fix min clip bug; add real intensity color
  • Contributors: Jose Luis Blanco-Claraco

1.0.0 (2026-02-08)

  • Merge pull request #89 from MRPT/fix/elevation-2-wheels Fix elevation maps for 2-wheels vehicles
  • Merge pull request #88 from MRPT/feat/human-actors Add: human actors
  • Merge pull request #86 from MRPT/feat/publish-log-to-ros Optional publish to ROS2 all CsvLogger entries
  • Merge pull request #85 from MRPT/feat/per-block-scale Feat/per-block-scale
  • Implement per block scale (Fixes #38)
  • Merge pull request #84 from MRPT/fix/box2d-bugs Fix/box2d-bugs
  • docs: add ROS2 topics
  • fix bug in setTwist()
  • Fix wrong collision detection (Fixes #42)
  • Fix linear acceleration
  • Merge pull request #83 from MRPT/feat/new-joints Implement joints between archors
  • Demo worlds: update to add RGBD camera in greenhouse
  • ROS node: fix missing publication of RGBD CameraInfo for RGB channel
  • Merge pull request #82 from MRPT/feat/rgbd-publish-new-types RGBD cameras: implement publishing depth and RGB clouds
  • RGBD cameras: implement publishing depth and RGB clouds
  • Merge pull request #81 from MRPT/fix/py-bytes Fix: use py-bytes
  • Fix trying to decode strings as utf-8 (Closes #62)
  • Merge pull request #80 from MRPT/feat/imu-noise IMU: add random walk and fix bug in

File truncated at 100 lines see the full file

Launch files

  • launch/launch_world.launch
    • Generic ROS1 launch file
      • world_file
      • headless [default: False]
      • do_fake_localization [default: True]
      • publish_tf_odom2baselink [default: True]
      • force_publish_vehicle_namespace [default: False]
      • use_rviz [default: True]
      • rviz_config_file [default: $(find mvsim)/mvsim_tutorial/demo_depth_camera.rviz]
  • mvsim_tutorial/ros1_1robot.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_1robot.world.xml]
      • mvsim_do_fake_localization [default: true]
  • mvsim_tutorial/ros1_2robots.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_2robots.world.xml]
  • mvsim_tutorial/ros1_camera.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_camera.world.xml]
  • mvsim_tutorial/ros1_depth_camera.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_depth_camera.world.xml]
  • mvsim_tutorial/ros1_greenhouse.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_greenhouse.world.xml]
      • headless [default: false]
  • mvsim_tutorial/ros1_jackal.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_jackal.world.xml]
  • mvsim_tutorial/ros1_turtlebot_world.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_turtlebot_world.world.xml]
  • mvsim_tutorial/ros1_warehouse.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_warehouse.world.xml]

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged mvsim at Robotics Stack Exchange

Package symbol

mvsim package from mvsim repo

mvsim

ROS Distro
jazzy

Package Summary

Version 1.3.0
License BSD
Build type CATKIN
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/MRPT/mvsim.git
VCS Type git
VCS Version develop
Last Updated 2026-03-17
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

A lightweight multivehicle simulation framework.

Additional Links

Maintainers

  • Jose-Luis Blanco-Claraco

Authors

No additional authors.
MVSim logo # MultiVehicle Simulator (MVSim) **Lightweight, realistic 2.5D dynamics simulator for mobile robots and multi-agent research** [![CI Linux](https://github.com/MRPT/mvsim/actions/workflows/build-linux.yml/badge.svg)](https://github.com/MRPT/mvsim/actions/workflows/build-linux.yml) [![Check clang-format](https://github.com/MRPT/mvsim/actions/workflows/check-clang-format.yml/badge.svg)](https://github.com/MRPT/mvsim/actions/workflows/check-clang-format.yml) [![Documentation](https://readthedocs.org/projects/mvsimulator/badge/?version=latest)](https://mvsimulator.readthedocs.io/en/latest/?badge=latest) [![License](https://img.shields.io/badge/license-BSD%203--Clause-blue.svg)](LICENSE) [**Documentation**](https://mvsimulator.readthedocs.io) · [**Installation**](https://mvsimulator.readthedocs.io/en/latest/install.html) · [**Demo worlds**](https://mvsimulator.readthedocs.io/en/latest/demo_worlds.html) · [**Cite**](#citation)

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

sudo apt install ros-$ROS_DISTRO-mvsim

Then follow the first-steps guide.

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:

```bash mvsim launch mvsim_tutorial/demo_warehouse.world.xml

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package mvsim

1.3.0 (2026-03-17)

  • docs: add logo to web
  • Modernize README
  • Clean up leftovers from temporary benchmark code
  • Creation of .rawlog files use ZStd if available
  • walls demo world: make all walls same thickness, and expose optional env var
  • Add MVSIM_SAVE_RAWLOG_FILENAME env var to some demo worlds
  • XML parser: env vars now can have a default value
  • docs: fix wrong referenc for {} usage
  • remove leftover dep
  • Merge pull request #95 from MRPT/nav-benchmark-greenhouse Nav benchmark greenhouse
  • Merge branch 'develop' into nav-benchmark-greenhouse
  • Add auto_start_recording property to vehicles
  • logistic center demo: add lidar sensors
  • Remove temporary adaptative friction class
  • remove temporary deps
  • Refactoring to use CsvLogger (by Claude Opus)
  • Refactor torque calculation by removing comments and logger Removed logging and comments related to torque calculation.
  • Changes for control benchmark paper
  • Contributors: Fernando Cañadas Aránega, Jose Luis Blanco-Claraco

1.2.0 (2026-02-24)

  • Merge pull request #94 from MRPT/feat/tune-pid Feature: tune pid
  • Support zones with different friction and rolling resistance
  • Better docs, expose more params
  • FIX: sliding bug on slopes
  • Add new unit test for ramps bug
  • fix stop exactly with any controller. Add rolling resistance
  • new PID tuning tool
  • add backwards compat method
  • Merge pull request #93 from MRPT/feat/add-trajectory-tests Add unit test for vehicle trajectory
  • CsvLogger: feature not to write to disk
  • minor edits in demo world
  • Fix bug in velocity composition
  • Clearer distinction between COM and REF point velocities
  • Add unit test for vehicle trajectory
  • Merge pull request #92 from MRPT/feat/truck-trailer-demo Feat/truck-trailer-demo
  • DefaultFriction: fix missing logged variables
  • Add new Ackermann ideal twist controller
  • Revert "fix bug in setTwist()": it was actually a serious regression This reverts commit 07a9fd2a0ab5b4665a4f2d07638f75c1737dbdec.
  • clang-tidy warning fixes
  • Add env var MVSIM_COLLISION_SHAPE_CACHE_VERBOSE
  • Contributors: Jose Luis Blanco-Claraco

1.1.0 (2026-02-16)

  • Merge pull request #91 from MRPT/fix/lidar-3d Lidar3D: fix min clip bug; add real intensity color
  • Lidar3D: fix min clip bug; add real intensity color
  • Contributors: Jose Luis Blanco-Claraco

1.0.0 (2026-02-08)

  • Merge pull request #89 from MRPT/fix/elevation-2-wheels Fix elevation maps for 2-wheels vehicles
  • Merge pull request #88 from MRPT/feat/human-actors Add: human actors
  • Merge pull request #86 from MRPT/feat/publish-log-to-ros Optional publish to ROS2 all CsvLogger entries
  • Merge pull request #85 from MRPT/feat/per-block-scale Feat/per-block-scale
  • Implement per block scale (Fixes #38)
  • Merge pull request #84 from MRPT/fix/box2d-bugs Fix/box2d-bugs
  • docs: add ROS2 topics
  • fix bug in setTwist()
  • Fix wrong collision detection (Fixes #42)
  • Fix linear acceleration
  • Merge pull request #83 from MRPT/feat/new-joints Implement joints between archors
  • Demo worlds: update to add RGBD camera in greenhouse
  • ROS node: fix missing publication of RGBD CameraInfo for RGB channel
  • Merge pull request #82 from MRPT/feat/rgbd-publish-new-types RGBD cameras: implement publishing depth and RGB clouds
  • RGBD cameras: implement publishing depth and RGB clouds
  • Merge pull request #81 from MRPT/fix/py-bytes Fix: use py-bytes
  • Fix trying to decode strings as utf-8 (Closes #62)
  • Merge pull request #80 from MRPT/feat/imu-noise IMU: add random walk and fix bug in

File truncated at 100 lines see the full file

Launch files

  • launch/launch_world.launch
    • Generic ROS1 launch file
      • world_file
      • headless [default: False]
      • do_fake_localization [default: True]
      • publish_tf_odom2baselink [default: True]
      • force_publish_vehicle_namespace [default: False]
      • use_rviz [default: True]
      • rviz_config_file [default: $(find mvsim)/mvsim_tutorial/demo_depth_camera.rviz]
  • mvsim_tutorial/ros1_1robot.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_1robot.world.xml]
      • mvsim_do_fake_localization [default: true]
  • mvsim_tutorial/ros1_2robots.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_2robots.world.xml]
  • mvsim_tutorial/ros1_camera.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_camera.world.xml]
  • mvsim_tutorial/ros1_depth_camera.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_depth_camera.world.xml]
  • mvsim_tutorial/ros1_greenhouse.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_greenhouse.world.xml]
      • headless [default: false]
  • mvsim_tutorial/ros1_jackal.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_jackal.world.xml]
  • mvsim_tutorial/ros1_turtlebot_world.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_turtlebot_world.world.xml]
  • mvsim_tutorial/ros1_warehouse.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_warehouse.world.xml]

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged mvsim at Robotics Stack Exchange

Package symbol

mvsim package from mvsim repo

mvsim

ROS Distro
kilted

Package Summary

Version 1.3.0
License BSD
Build type CATKIN
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/MRPT/mvsim.git
VCS Type git
VCS Version develop
Last Updated 2026-03-17
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

A lightweight multivehicle simulation framework.

Additional Links

Maintainers

  • Jose-Luis Blanco-Claraco

Authors

No additional authors.
MVSim logo # MultiVehicle Simulator (MVSim) **Lightweight, realistic 2.5D dynamics simulator for mobile robots and multi-agent research** [![CI Linux](https://github.com/MRPT/mvsim/actions/workflows/build-linux.yml/badge.svg)](https://github.com/MRPT/mvsim/actions/workflows/build-linux.yml) [![Check clang-format](https://github.com/MRPT/mvsim/actions/workflows/check-clang-format.yml/badge.svg)](https://github.com/MRPT/mvsim/actions/workflows/check-clang-format.yml) [![Documentation](https://readthedocs.org/projects/mvsimulator/badge/?version=latest)](https://mvsimulator.readthedocs.io/en/latest/?badge=latest) [![License](https://img.shields.io/badge/license-BSD%203--Clause-blue.svg)](LICENSE) [**Documentation**](https://mvsimulator.readthedocs.io) · [**Installation**](https://mvsimulator.readthedocs.io/en/latest/install.html) · [**Demo worlds**](https://mvsimulator.readthedocs.io/en/latest/demo_worlds.html) · [**Cite**](#citation)

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

sudo apt install ros-$ROS_DISTRO-mvsim

Then follow the first-steps guide.

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:

```bash mvsim launch mvsim_tutorial/demo_warehouse.world.xml

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package mvsim

1.3.0 (2026-03-17)

  • docs: add logo to web
  • Modernize README
  • Clean up leftovers from temporary benchmark code
  • Creation of .rawlog files use ZStd if available
  • walls demo world: make all walls same thickness, and expose optional env var
  • Add MVSIM_SAVE_RAWLOG_FILENAME env var to some demo worlds
  • XML parser: env vars now can have a default value
  • docs: fix wrong referenc for {} usage
  • remove leftover dep
  • Merge pull request #95 from MRPT/nav-benchmark-greenhouse Nav benchmark greenhouse
  • Merge branch 'develop' into nav-benchmark-greenhouse
  • Add auto_start_recording property to vehicles
  • logistic center demo: add lidar sensors
  • Remove temporary adaptative friction class
  • remove temporary deps
  • Refactoring to use CsvLogger (by Claude Opus)
  • Refactor torque calculation by removing comments and logger Removed logging and comments related to torque calculation.
  • Changes for control benchmark paper
  • Contributors: Fernando Cañadas Aránega, Jose Luis Blanco-Claraco

1.2.0 (2026-02-24)

  • Merge pull request #94 from MRPT/feat/tune-pid Feature: tune pid
  • Support zones with different friction and rolling resistance
  • Better docs, expose more params
  • FIX: sliding bug on slopes
  • Add new unit test for ramps bug
  • fix stop exactly with any controller. Add rolling resistance
  • new PID tuning tool
  • add backwards compat method
  • Merge pull request #93 from MRPT/feat/add-trajectory-tests Add unit test for vehicle trajectory
  • CsvLogger: feature not to write to disk
  • minor edits in demo world
  • Fix bug in velocity composition
  • Clearer distinction between COM and REF point velocities
  • Add unit test for vehicle trajectory
  • Merge pull request #92 from MRPT/feat/truck-trailer-demo Feat/truck-trailer-demo
  • DefaultFriction: fix missing logged variables
  • Add new Ackermann ideal twist controller
  • Revert "fix bug in setTwist()": it was actually a serious regression This reverts commit 07a9fd2a0ab5b4665a4f2d07638f75c1737dbdec.
  • clang-tidy warning fixes
  • Add env var MVSIM_COLLISION_SHAPE_CACHE_VERBOSE
  • Contributors: Jose Luis Blanco-Claraco

1.1.0 (2026-02-16)

  • Merge pull request #91 from MRPT/fix/lidar-3d Lidar3D: fix min clip bug; add real intensity color
  • Lidar3D: fix min clip bug; add real intensity color
  • Contributors: Jose Luis Blanco-Claraco

1.0.0 (2026-02-08)

  • Merge pull request #89 from MRPT/fix/elevation-2-wheels Fix elevation maps for 2-wheels vehicles
  • Merge pull request #88 from MRPT/feat/human-actors Add: human actors
  • Merge pull request #86 from MRPT/feat/publish-log-to-ros Optional publish to ROS2 all CsvLogger entries
  • Merge pull request #85 from MRPT/feat/per-block-scale Feat/per-block-scale
  • Implement per block scale (Fixes #38)
  • Merge pull request #84 from MRPT/fix/box2d-bugs Fix/box2d-bugs
  • docs: add ROS2 topics
  • fix bug in setTwist()
  • Fix wrong collision detection (Fixes #42)
  • Fix linear acceleration
  • Merge pull request #83 from MRPT/feat/new-joints Implement joints between archors
  • Demo worlds: update to add RGBD camera in greenhouse
  • ROS node: fix missing publication of RGBD CameraInfo for RGB channel
  • Merge pull request #82 from MRPT/feat/rgbd-publish-new-types RGBD cameras: implement publishing depth and RGB clouds
  • RGBD cameras: implement publishing depth and RGB clouds
  • Merge pull request #81 from MRPT/fix/py-bytes Fix: use py-bytes
  • Fix trying to decode strings as utf-8 (Closes #62)
  • Merge pull request #80 from MRPT/feat/imu-noise IMU: add random walk and fix bug in

File truncated at 100 lines see the full file

Launch files

  • launch/launch_world.launch
    • Generic ROS1 launch file
      • world_file
      • headless [default: False]
      • do_fake_localization [default: True]
      • publish_tf_odom2baselink [default: True]
      • force_publish_vehicle_namespace [default: False]
      • use_rviz [default: True]
      • rviz_config_file [default: $(find mvsim)/mvsim_tutorial/demo_depth_camera.rviz]
  • mvsim_tutorial/ros1_1robot.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_1robot.world.xml]
      • mvsim_do_fake_localization [default: true]
  • mvsim_tutorial/ros1_2robots.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_2robots.world.xml]
  • mvsim_tutorial/ros1_camera.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_camera.world.xml]
  • mvsim_tutorial/ros1_depth_camera.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_depth_camera.world.xml]
  • mvsim_tutorial/ros1_greenhouse.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_greenhouse.world.xml]
      • headless [default: false]
  • mvsim_tutorial/ros1_jackal.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_jackal.world.xml]
  • mvsim_tutorial/ros1_turtlebot_world.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_turtlebot_world.world.xml]
  • mvsim_tutorial/ros1_warehouse.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_warehouse.world.xml]

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged mvsim at Robotics Stack Exchange

Package symbol

mvsim package from mvsim repo

mvsim

ROS Distro
rolling

Package Summary

Version 1.3.0
License BSD
Build type CATKIN
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/MRPT/mvsim.git
VCS Type git
VCS Version develop
Last Updated 2026-03-17
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

A lightweight multivehicle simulation framework.

Additional Links

Maintainers

  • Jose-Luis Blanco-Claraco

Authors

No additional authors.
MVSim logo # MultiVehicle Simulator (MVSim) **Lightweight, realistic 2.5D dynamics simulator for mobile robots and multi-agent research** [![CI Linux](https://github.com/MRPT/mvsim/actions/workflows/build-linux.yml/badge.svg)](https://github.com/MRPT/mvsim/actions/workflows/build-linux.yml) [![Check clang-format](https://github.com/MRPT/mvsim/actions/workflows/check-clang-format.yml/badge.svg)](https://github.com/MRPT/mvsim/actions/workflows/check-clang-format.yml) [![Documentation](https://readthedocs.org/projects/mvsimulator/badge/?version=latest)](https://mvsimulator.readthedocs.io/en/latest/?badge=latest) [![License](https://img.shields.io/badge/license-BSD%203--Clause-blue.svg)](LICENSE) [**Documentation**](https://mvsimulator.readthedocs.io) · [**Installation**](https://mvsimulator.readthedocs.io/en/latest/install.html) · [**Demo worlds**](https://mvsimulator.readthedocs.io/en/latest/demo_worlds.html) · [**Cite**](#citation)

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

sudo apt install ros-$ROS_DISTRO-mvsim

Then follow the first-steps guide.

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:

```bash mvsim launch mvsim_tutorial/demo_warehouse.world.xml

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package mvsim

1.3.0 (2026-03-17)

  • docs: add logo to web
  • Modernize README
  • Clean up leftovers from temporary benchmark code
  • Creation of .rawlog files use ZStd if available
  • walls demo world: make all walls same thickness, and expose optional env var
  • Add MVSIM_SAVE_RAWLOG_FILENAME env var to some demo worlds
  • XML parser: env vars now can have a default value
  • docs: fix wrong referenc for {} usage
  • remove leftover dep
  • Merge pull request #95 from MRPT/nav-benchmark-greenhouse Nav benchmark greenhouse
  • Merge branch 'develop' into nav-benchmark-greenhouse
  • Add auto_start_recording property to vehicles
  • logistic center demo: add lidar sensors
  • Remove temporary adaptative friction class
  • remove temporary deps
  • Refactoring to use CsvLogger (by Claude Opus)
  • Refactor torque calculation by removing comments and logger Removed logging and comments related to torque calculation.
  • Changes for control benchmark paper
  • Contributors: Fernando Cañadas Aránega, Jose Luis Blanco-Claraco

1.2.0 (2026-02-24)

  • Merge pull request #94 from MRPT/feat/tune-pid Feature: tune pid
  • Support zones with different friction and rolling resistance
  • Better docs, expose more params
  • FIX: sliding bug on slopes
  • Add new unit test for ramps bug
  • fix stop exactly with any controller. Add rolling resistance
  • new PID tuning tool
  • add backwards compat method
  • Merge pull request #93 from MRPT/feat/add-trajectory-tests Add unit test for vehicle trajectory
  • CsvLogger: feature not to write to disk
  • minor edits in demo world
  • Fix bug in velocity composition
  • Clearer distinction between COM and REF point velocities
  • Add unit test for vehicle trajectory
  • Merge pull request #92 from MRPT/feat/truck-trailer-demo Feat/truck-trailer-demo
  • DefaultFriction: fix missing logged variables
  • Add new Ackermann ideal twist controller
  • Revert "fix bug in setTwist()": it was actually a serious regression This reverts commit 07a9fd2a0ab5b4665a4f2d07638f75c1737dbdec.
  • clang-tidy warning fixes
  • Add env var MVSIM_COLLISION_SHAPE_CACHE_VERBOSE
  • Contributors: Jose Luis Blanco-Claraco

1.1.0 (2026-02-16)

  • Merge pull request #91 from MRPT/fix/lidar-3d Lidar3D: fix min clip bug; add real intensity color
  • Lidar3D: fix min clip bug; add real intensity color
  • Contributors: Jose Luis Blanco-Claraco

1.0.0 (2026-02-08)

  • Merge pull request #89 from MRPT/fix/elevation-2-wheels Fix elevation maps for 2-wheels vehicles
  • Merge pull request #88 from MRPT/feat/human-actors Add: human actors
  • Merge pull request #86 from MRPT/feat/publish-log-to-ros Optional publish to ROS2 all CsvLogger entries
  • Merge pull request #85 from MRPT/feat/per-block-scale Feat/per-block-scale
  • Implement per block scale (Fixes #38)
  • Merge pull request #84 from MRPT/fix/box2d-bugs Fix/box2d-bugs
  • docs: add ROS2 topics
  • fix bug in setTwist()
  • Fix wrong collision detection (Fixes #42)
  • Fix linear acceleration
  • Merge pull request #83 from MRPT/feat/new-joints Implement joints between archors
  • Demo worlds: update to add RGBD camera in greenhouse
  • ROS node: fix missing publication of RGBD CameraInfo for RGB channel
  • Merge pull request #82 from MRPT/feat/rgbd-publish-new-types RGBD cameras: implement publishing depth and RGB clouds
  • RGBD cameras: implement publishing depth and RGB clouds
  • Merge pull request #81 from MRPT/fix/py-bytes Fix: use py-bytes
  • Fix trying to decode strings as utf-8 (Closes #62)
  • Merge pull request #80 from MRPT/feat/imu-noise IMU: add random walk and fix bug in

File truncated at 100 lines see the full file

Launch files

  • launch/launch_world.launch
    • Generic ROS1 launch file
      • world_file
      • headless [default: False]
      • do_fake_localization [default: True]
      • publish_tf_odom2baselink [default: True]
      • force_publish_vehicle_namespace [default: False]
      • use_rviz [default: True]
      • rviz_config_file [default: $(find mvsim)/mvsim_tutorial/demo_depth_camera.rviz]
  • mvsim_tutorial/ros1_1robot.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_1robot.world.xml]
      • mvsim_do_fake_localization [default: true]
  • mvsim_tutorial/ros1_2robots.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_2robots.world.xml]
  • mvsim_tutorial/ros1_camera.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_camera.world.xml]
  • mvsim_tutorial/ros1_depth_camera.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_depth_camera.world.xml]
  • mvsim_tutorial/ros1_greenhouse.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_greenhouse.world.xml]
      • headless [default: false]
  • mvsim_tutorial/ros1_jackal.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_jackal.world.xml]
  • mvsim_tutorial/ros1_turtlebot_world.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_turtlebot_world.world.xml]
  • mvsim_tutorial/ros1_warehouse.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_warehouse.world.xml]

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged mvsim at Robotics Stack Exchange

No version for distro ardent showing humble. Known supported distros are highlighted in the buttons above.
Package symbol

mvsim package from mvsim repo

mvsim

ROS Distro
humble

Package Summary

Version 1.3.0
License BSD
Build type CATKIN
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/MRPT/mvsim.git
VCS Type git
VCS Version develop
Last Updated 2026-03-17
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

A lightweight multivehicle simulation framework.

Additional Links

Maintainers

  • Jose-Luis Blanco-Claraco

Authors

No additional authors.
MVSim logo # MultiVehicle Simulator (MVSim) **Lightweight, realistic 2.5D dynamics simulator for mobile robots and multi-agent research** [![CI Linux](https://github.com/MRPT/mvsim/actions/workflows/build-linux.yml/badge.svg)](https://github.com/MRPT/mvsim/actions/workflows/build-linux.yml) [![Check clang-format](https://github.com/MRPT/mvsim/actions/workflows/check-clang-format.yml/badge.svg)](https://github.com/MRPT/mvsim/actions/workflows/check-clang-format.yml) [![Documentation](https://readthedocs.org/projects/mvsimulator/badge/?version=latest)](https://mvsimulator.readthedocs.io/en/latest/?badge=latest) [![License](https://img.shields.io/badge/license-BSD%203--Clause-blue.svg)](LICENSE) [**Documentation**](https://mvsimulator.readthedocs.io) · [**Installation**](https://mvsimulator.readthedocs.io/en/latest/install.html) · [**Demo worlds**](https://mvsimulator.readthedocs.io/en/latest/demo_worlds.html) · [**Cite**](#citation)

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

sudo apt install ros-$ROS_DISTRO-mvsim

Then follow the first-steps guide.

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:

```bash mvsim launch mvsim_tutorial/demo_warehouse.world.xml

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package mvsim

1.3.0 (2026-03-17)

  • docs: add logo to web
  • Modernize README
  • Clean up leftovers from temporary benchmark code
  • Creation of .rawlog files use ZStd if available
  • walls demo world: make all walls same thickness, and expose optional env var
  • Add MVSIM_SAVE_RAWLOG_FILENAME env var to some demo worlds
  • XML parser: env vars now can have a default value
  • docs: fix wrong referenc for {} usage
  • remove leftover dep
  • Merge pull request #95 from MRPT/nav-benchmark-greenhouse Nav benchmark greenhouse
  • Merge branch 'develop' into nav-benchmark-greenhouse
  • Add auto_start_recording property to vehicles
  • logistic center demo: add lidar sensors
  • Remove temporary adaptative friction class
  • remove temporary deps
  • Refactoring to use CsvLogger (by Claude Opus)
  • Refactor torque calculation by removing comments and logger Removed logging and comments related to torque calculation.
  • Changes for control benchmark paper
  • Contributors: Fernando Cañadas Aránega, Jose Luis Blanco-Claraco

1.2.0 (2026-02-24)

  • Merge pull request #94 from MRPT/feat/tune-pid Feature: tune pid
  • Support zones with different friction and rolling resistance
  • Better docs, expose more params
  • FIX: sliding bug on slopes
  • Add new unit test for ramps bug
  • fix stop exactly with any controller. Add rolling resistance
  • new PID tuning tool
  • add backwards compat method
  • Merge pull request #93 from MRPT/feat/add-trajectory-tests Add unit test for vehicle trajectory
  • CsvLogger: feature not to write to disk
  • minor edits in demo world
  • Fix bug in velocity composition
  • Clearer distinction between COM and REF point velocities
  • Add unit test for vehicle trajectory
  • Merge pull request #92 from MRPT/feat/truck-trailer-demo Feat/truck-trailer-demo
  • DefaultFriction: fix missing logged variables
  • Add new Ackermann ideal twist controller
  • Revert "fix bug in setTwist()": it was actually a serious regression This reverts commit 07a9fd2a0ab5b4665a4f2d07638f75c1737dbdec.
  • clang-tidy warning fixes
  • Add env var MVSIM_COLLISION_SHAPE_CACHE_VERBOSE
  • Contributors: Jose Luis Blanco-Claraco

1.1.0 (2026-02-16)

  • Merge pull request #91 from MRPT/fix/lidar-3d Lidar3D: fix min clip bug; add real intensity color
  • Lidar3D: fix min clip bug; add real intensity color
  • Contributors: Jose Luis Blanco-Claraco

1.0.0 (2026-02-08)

  • Merge pull request #89 from MRPT/fix/elevation-2-wheels Fix elevation maps for 2-wheels vehicles
  • Merge pull request #88 from MRPT/feat/human-actors Add: human actors
  • Merge pull request #86 from MRPT/feat/publish-log-to-ros Optional publish to ROS2 all CsvLogger entries
  • Merge pull request #85 from MRPT/feat/per-block-scale Feat/per-block-scale
  • Implement per block scale (Fixes #38)
  • Merge pull request #84 from MRPT/fix/box2d-bugs Fix/box2d-bugs
  • docs: add ROS2 topics
  • fix bug in setTwist()
  • Fix wrong collision detection (Fixes #42)
  • Fix linear acceleration
  • Merge pull request #83 from MRPT/feat/new-joints Implement joints between archors
  • Demo worlds: update to add RGBD camera in greenhouse
  • ROS node: fix missing publication of RGBD CameraInfo for RGB channel
  • Merge pull request #82 from MRPT/feat/rgbd-publish-new-types RGBD cameras: implement publishing depth and RGB clouds
  • RGBD cameras: implement publishing depth and RGB clouds
  • Merge pull request #81 from MRPT/fix/py-bytes Fix: use py-bytes
  • Fix trying to decode strings as utf-8 (Closes #62)
  • Merge pull request #80 from MRPT/feat/imu-noise IMU: add random walk and fix bug in

File truncated at 100 lines see the full file

Launch files

  • launch/launch_world.launch
    • Generic ROS1 launch file
      • world_file
      • headless [default: False]
      • do_fake_localization [default: True]
      • publish_tf_odom2baselink [default: True]
      • force_publish_vehicle_namespace [default: False]
      • use_rviz [default: True]
      • rviz_config_file [default: $(find mvsim)/mvsim_tutorial/demo_depth_camera.rviz]
  • mvsim_tutorial/ros1_1robot.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_1robot.world.xml]
      • mvsim_do_fake_localization [default: true]
  • mvsim_tutorial/ros1_2robots.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_2robots.world.xml]
  • mvsim_tutorial/ros1_camera.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_camera.world.xml]
  • mvsim_tutorial/ros1_depth_camera.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_depth_camera.world.xml]
  • mvsim_tutorial/ros1_greenhouse.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_greenhouse.world.xml]
      • headless [default: false]
  • mvsim_tutorial/ros1_jackal.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_jackal.world.xml]
  • mvsim_tutorial/ros1_turtlebot_world.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_turtlebot_world.world.xml]
  • mvsim_tutorial/ros1_warehouse.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_warehouse.world.xml]

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged mvsim at Robotics Stack Exchange

No version for distro bouncy showing humble. Known supported distros are highlighted in the buttons above.
Package symbol

mvsim package from mvsim repo

mvsim

ROS Distro
humble

Package Summary

Version 1.3.0
License BSD
Build type CATKIN
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/MRPT/mvsim.git
VCS Type git
VCS Version develop
Last Updated 2026-03-17
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

A lightweight multivehicle simulation framework.

Additional Links

Maintainers

  • Jose-Luis Blanco-Claraco

Authors

No additional authors.
MVSim logo # MultiVehicle Simulator (MVSim) **Lightweight, realistic 2.5D dynamics simulator for mobile robots and multi-agent research** [![CI Linux](https://github.com/MRPT/mvsim/actions/workflows/build-linux.yml/badge.svg)](https://github.com/MRPT/mvsim/actions/workflows/build-linux.yml) [![Check clang-format](https://github.com/MRPT/mvsim/actions/workflows/check-clang-format.yml/badge.svg)](https://github.com/MRPT/mvsim/actions/workflows/check-clang-format.yml) [![Documentation](https://readthedocs.org/projects/mvsimulator/badge/?version=latest)](https://mvsimulator.readthedocs.io/en/latest/?badge=latest) [![License](https://img.shields.io/badge/license-BSD%203--Clause-blue.svg)](LICENSE) [**Documentation**](https://mvsimulator.readthedocs.io) · [**Installation**](https://mvsimulator.readthedocs.io/en/latest/install.html) · [**Demo worlds**](https://mvsimulator.readthedocs.io/en/latest/demo_worlds.html) · [**Cite**](#citation)

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

sudo apt install ros-$ROS_DISTRO-mvsim

Then follow the first-steps guide.

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:

```bash mvsim launch mvsim_tutorial/demo_warehouse.world.xml

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package mvsim

1.3.0 (2026-03-17)

  • docs: add logo to web
  • Modernize README
  • Clean up leftovers from temporary benchmark code
  • Creation of .rawlog files use ZStd if available
  • walls demo world: make all walls same thickness, and expose optional env var
  • Add MVSIM_SAVE_RAWLOG_FILENAME env var to some demo worlds
  • XML parser: env vars now can have a default value
  • docs: fix wrong referenc for {} usage
  • remove leftover dep
  • Merge pull request #95 from MRPT/nav-benchmark-greenhouse Nav benchmark greenhouse
  • Merge branch 'develop' into nav-benchmark-greenhouse
  • Add auto_start_recording property to vehicles
  • logistic center demo: add lidar sensors
  • Remove temporary adaptative friction class
  • remove temporary deps
  • Refactoring to use CsvLogger (by Claude Opus)
  • Refactor torque calculation by removing comments and logger Removed logging and comments related to torque calculation.
  • Changes for control benchmark paper
  • Contributors: Fernando Cañadas Aránega, Jose Luis Blanco-Claraco

1.2.0 (2026-02-24)

  • Merge pull request #94 from MRPT/feat/tune-pid Feature: tune pid
  • Support zones with different friction and rolling resistance
  • Better docs, expose more params
  • FIX: sliding bug on slopes
  • Add new unit test for ramps bug
  • fix stop exactly with any controller. Add rolling resistance
  • new PID tuning tool
  • add backwards compat method
  • Merge pull request #93 from MRPT/feat/add-trajectory-tests Add unit test for vehicle trajectory
  • CsvLogger: feature not to write to disk
  • minor edits in demo world
  • Fix bug in velocity composition
  • Clearer distinction between COM and REF point velocities
  • Add unit test for vehicle trajectory
  • Merge pull request #92 from MRPT/feat/truck-trailer-demo Feat/truck-trailer-demo
  • DefaultFriction: fix missing logged variables
  • Add new Ackermann ideal twist controller
  • Revert "fix bug in setTwist()": it was actually a serious regression This reverts commit 07a9fd2a0ab5b4665a4f2d07638f75c1737dbdec.
  • clang-tidy warning fixes
  • Add env var MVSIM_COLLISION_SHAPE_CACHE_VERBOSE
  • Contributors: Jose Luis Blanco-Claraco

1.1.0 (2026-02-16)

  • Merge pull request #91 from MRPT/fix/lidar-3d Lidar3D: fix min clip bug; add real intensity color
  • Lidar3D: fix min clip bug; add real intensity color
  • Contributors: Jose Luis Blanco-Claraco

1.0.0 (2026-02-08)

  • Merge pull request #89 from MRPT/fix/elevation-2-wheels Fix elevation maps for 2-wheels vehicles
  • Merge pull request #88 from MRPT/feat/human-actors Add: human actors
  • Merge pull request #86 from MRPT/feat/publish-log-to-ros Optional publish to ROS2 all CsvLogger entries
  • Merge pull request #85 from MRPT/feat/per-block-scale Feat/per-block-scale
  • Implement per block scale (Fixes #38)
  • Merge pull request #84 from MRPT/fix/box2d-bugs Fix/box2d-bugs
  • docs: add ROS2 topics
  • fix bug in setTwist()
  • Fix wrong collision detection (Fixes #42)
  • Fix linear acceleration
  • Merge pull request #83 from MRPT/feat/new-joints Implement joints between archors
  • Demo worlds: update to add RGBD camera in greenhouse
  • ROS node: fix missing publication of RGBD CameraInfo for RGB channel
  • Merge pull request #82 from MRPT/feat/rgbd-publish-new-types RGBD cameras: implement publishing depth and RGB clouds
  • RGBD cameras: implement publishing depth and RGB clouds
  • Merge pull request #81 from MRPT/fix/py-bytes Fix: use py-bytes
  • Fix trying to decode strings as utf-8 (Closes #62)
  • Merge pull request #80 from MRPT/feat/imu-noise IMU: add random walk and fix bug in

File truncated at 100 lines see the full file

Launch files

  • launch/launch_world.launch
    • Generic ROS1 launch file
      • world_file
      • headless [default: False]
      • do_fake_localization [default: True]
      • publish_tf_odom2baselink [default: True]
      • force_publish_vehicle_namespace [default: False]
      • use_rviz [default: True]
      • rviz_config_file [default: $(find mvsim)/mvsim_tutorial/demo_depth_camera.rviz]
  • mvsim_tutorial/ros1_1robot.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_1robot.world.xml]
      • mvsim_do_fake_localization [default: true]
  • mvsim_tutorial/ros1_2robots.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_2robots.world.xml]
  • mvsim_tutorial/ros1_camera.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_camera.world.xml]
  • mvsim_tutorial/ros1_depth_camera.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_depth_camera.world.xml]
  • mvsim_tutorial/ros1_greenhouse.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_greenhouse.world.xml]
      • headless [default: false]
  • mvsim_tutorial/ros1_jackal.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_jackal.world.xml]
  • mvsim_tutorial/ros1_turtlebot_world.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_turtlebot_world.world.xml]
  • mvsim_tutorial/ros1_warehouse.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_warehouse.world.xml]

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged mvsim at Robotics Stack Exchange

No version for distro crystal showing humble. Known supported distros are highlighted in the buttons above.
Package symbol

mvsim package from mvsim repo

mvsim

ROS Distro
humble

Package Summary

Version 1.3.0
License BSD
Build type CATKIN
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/MRPT/mvsim.git
VCS Type git
VCS Version develop
Last Updated 2026-03-17
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

A lightweight multivehicle simulation framework.

Additional Links

Maintainers

  • Jose-Luis Blanco-Claraco

Authors

No additional authors.
MVSim logo # MultiVehicle Simulator (MVSim) **Lightweight, realistic 2.5D dynamics simulator for mobile robots and multi-agent research** [![CI Linux](https://github.com/MRPT/mvsim/actions/workflows/build-linux.yml/badge.svg)](https://github.com/MRPT/mvsim/actions/workflows/build-linux.yml) [![Check clang-format](https://github.com/MRPT/mvsim/actions/workflows/check-clang-format.yml/badge.svg)](https://github.com/MRPT/mvsim/actions/workflows/check-clang-format.yml) [![Documentation](https://readthedocs.org/projects/mvsimulator/badge/?version=latest)](https://mvsimulator.readthedocs.io/en/latest/?badge=latest) [![License](https://img.shields.io/badge/license-BSD%203--Clause-blue.svg)](LICENSE) [**Documentation**](https://mvsimulator.readthedocs.io) · [**Installation**](https://mvsimulator.readthedocs.io/en/latest/install.html) · [**Demo worlds**](https://mvsimulator.readthedocs.io/en/latest/demo_worlds.html) · [**Cite**](#citation)

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

sudo apt install ros-$ROS_DISTRO-mvsim

Then follow the first-steps guide.

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:

```bash mvsim launch mvsim_tutorial/demo_warehouse.world.xml

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package mvsim

1.3.0 (2026-03-17)

  • docs: add logo to web
  • Modernize README
  • Clean up leftovers from temporary benchmark code
  • Creation of .rawlog files use ZStd if available
  • walls demo world: make all walls same thickness, and expose optional env var
  • Add MVSIM_SAVE_RAWLOG_FILENAME env var to some demo worlds
  • XML parser: env vars now can have a default value
  • docs: fix wrong referenc for {} usage
  • remove leftover dep
  • Merge pull request #95 from MRPT/nav-benchmark-greenhouse Nav benchmark greenhouse
  • Merge branch 'develop' into nav-benchmark-greenhouse
  • Add auto_start_recording property to vehicles
  • logistic center demo: add lidar sensors
  • Remove temporary adaptative friction class
  • remove temporary deps
  • Refactoring to use CsvLogger (by Claude Opus)
  • Refactor torque calculation by removing comments and logger Removed logging and comments related to torque calculation.
  • Changes for control benchmark paper
  • Contributors: Fernando Cañadas Aránega, Jose Luis Blanco-Claraco

1.2.0 (2026-02-24)

  • Merge pull request #94 from MRPT/feat/tune-pid Feature: tune pid
  • Support zones with different friction and rolling resistance
  • Better docs, expose more params
  • FIX: sliding bug on slopes
  • Add new unit test for ramps bug
  • fix stop exactly with any controller. Add rolling resistance
  • new PID tuning tool
  • add backwards compat method
  • Merge pull request #93 from MRPT/feat/add-trajectory-tests Add unit test for vehicle trajectory
  • CsvLogger: feature not to write to disk
  • minor edits in demo world
  • Fix bug in velocity composition
  • Clearer distinction between COM and REF point velocities
  • Add unit test for vehicle trajectory
  • Merge pull request #92 from MRPT/feat/truck-trailer-demo Feat/truck-trailer-demo
  • DefaultFriction: fix missing logged variables
  • Add new Ackermann ideal twist controller
  • Revert "fix bug in setTwist()": it was actually a serious regression This reverts commit 07a9fd2a0ab5b4665a4f2d07638f75c1737dbdec.
  • clang-tidy warning fixes
  • Add env var MVSIM_COLLISION_SHAPE_CACHE_VERBOSE
  • Contributors: Jose Luis Blanco-Claraco

1.1.0 (2026-02-16)

  • Merge pull request #91 from MRPT/fix/lidar-3d Lidar3D: fix min clip bug; add real intensity color
  • Lidar3D: fix min clip bug; add real intensity color
  • Contributors: Jose Luis Blanco-Claraco

1.0.0 (2026-02-08)

  • Merge pull request #89 from MRPT/fix/elevation-2-wheels Fix elevation maps for 2-wheels vehicles
  • Merge pull request #88 from MRPT/feat/human-actors Add: human actors
  • Merge pull request #86 from MRPT/feat/publish-log-to-ros Optional publish to ROS2 all CsvLogger entries
  • Merge pull request #85 from MRPT/feat/per-block-scale Feat/per-block-scale
  • Implement per block scale (Fixes #38)
  • Merge pull request #84 from MRPT/fix/box2d-bugs Fix/box2d-bugs
  • docs: add ROS2 topics
  • fix bug in setTwist()
  • Fix wrong collision detection (Fixes #42)
  • Fix linear acceleration
  • Merge pull request #83 from MRPT/feat/new-joints Implement joints between archors
  • Demo worlds: update to add RGBD camera in greenhouse
  • ROS node: fix missing publication of RGBD CameraInfo for RGB channel
  • Merge pull request #82 from MRPT/feat/rgbd-publish-new-types RGBD cameras: implement publishing depth and RGB clouds
  • RGBD cameras: implement publishing depth and RGB clouds
  • Merge pull request #81 from MRPT/fix/py-bytes Fix: use py-bytes
  • Fix trying to decode strings as utf-8 (Closes #62)
  • Merge pull request #80 from MRPT/feat/imu-noise IMU: add random walk and fix bug in

File truncated at 100 lines see the full file

Launch files

  • launch/launch_world.launch
    • Generic ROS1 launch file
      • world_file
      • headless [default: False]
      • do_fake_localization [default: True]
      • publish_tf_odom2baselink [default: True]
      • force_publish_vehicle_namespace [default: False]
      • use_rviz [default: True]
      • rviz_config_file [default: $(find mvsim)/mvsim_tutorial/demo_depth_camera.rviz]
  • mvsim_tutorial/ros1_1robot.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_1robot.world.xml]
      • mvsim_do_fake_localization [default: true]
  • mvsim_tutorial/ros1_2robots.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_2robots.world.xml]
  • mvsim_tutorial/ros1_camera.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_camera.world.xml]
  • mvsim_tutorial/ros1_depth_camera.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_depth_camera.world.xml]
  • mvsim_tutorial/ros1_greenhouse.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_greenhouse.world.xml]
      • headless [default: false]
  • mvsim_tutorial/ros1_jackal.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_jackal.world.xml]
  • mvsim_tutorial/ros1_turtlebot_world.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_turtlebot_world.world.xml]
  • mvsim_tutorial/ros1_warehouse.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_warehouse.world.xml]

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged mvsim at Robotics Stack Exchange

No version for distro eloquent showing humble. Known supported distros are highlighted in the buttons above.
Package symbol

mvsim package from mvsim repo

mvsim

ROS Distro
humble

Package Summary

Version 1.3.0
License BSD
Build type CATKIN
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/MRPT/mvsim.git
VCS Type git
VCS Version develop
Last Updated 2026-03-17
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

A lightweight multivehicle simulation framework.

Additional Links

Maintainers

  • Jose-Luis Blanco-Claraco

Authors

No additional authors.
MVSim logo # MultiVehicle Simulator (MVSim) **Lightweight, realistic 2.5D dynamics simulator for mobile robots and multi-agent research** [![CI Linux](https://github.com/MRPT/mvsim/actions/workflows/build-linux.yml/badge.svg)](https://github.com/MRPT/mvsim/actions/workflows/build-linux.yml) [![Check clang-format](https://github.com/MRPT/mvsim/actions/workflows/check-clang-format.yml/badge.svg)](https://github.com/MRPT/mvsim/actions/workflows/check-clang-format.yml) [![Documentation](https://readthedocs.org/projects/mvsimulator/badge/?version=latest)](https://mvsimulator.readthedocs.io/en/latest/?badge=latest) [![License](https://img.shields.io/badge/license-BSD%203--Clause-blue.svg)](LICENSE) [**Documentation**](https://mvsimulator.readthedocs.io) · [**Installation**](https://mvsimulator.readthedocs.io/en/latest/install.html) · [**Demo worlds**](https://mvsimulator.readthedocs.io/en/latest/demo_worlds.html) · [**Cite**](#citation)

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

sudo apt install ros-$ROS_DISTRO-mvsim

Then follow the first-steps guide.

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:

```bash mvsim launch mvsim_tutorial/demo_warehouse.world.xml

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package mvsim

1.3.0 (2026-03-17)

  • docs: add logo to web
  • Modernize README
  • Clean up leftovers from temporary benchmark code
  • Creation of .rawlog files use ZStd if available
  • walls demo world: make all walls same thickness, and expose optional env var
  • Add MVSIM_SAVE_RAWLOG_FILENAME env var to some demo worlds
  • XML parser: env vars now can have a default value
  • docs: fix wrong referenc for {} usage
  • remove leftover dep
  • Merge pull request #95 from MRPT/nav-benchmark-greenhouse Nav benchmark greenhouse
  • Merge branch 'develop' into nav-benchmark-greenhouse
  • Add auto_start_recording property to vehicles
  • logistic center demo: add lidar sensors
  • Remove temporary adaptative friction class
  • remove temporary deps
  • Refactoring to use CsvLogger (by Claude Opus)
  • Refactor torque calculation by removing comments and logger Removed logging and comments related to torque calculation.
  • Changes for control benchmark paper
  • Contributors: Fernando Cañadas Aránega, Jose Luis Blanco-Claraco

1.2.0 (2026-02-24)

  • Merge pull request #94 from MRPT/feat/tune-pid Feature: tune pid
  • Support zones with different friction and rolling resistance
  • Better docs, expose more params
  • FIX: sliding bug on slopes
  • Add new unit test for ramps bug
  • fix stop exactly with any controller. Add rolling resistance
  • new PID tuning tool
  • add backwards compat method
  • Merge pull request #93 from MRPT/feat/add-trajectory-tests Add unit test for vehicle trajectory
  • CsvLogger: feature not to write to disk
  • minor edits in demo world
  • Fix bug in velocity composition
  • Clearer distinction between COM and REF point velocities
  • Add unit test for vehicle trajectory
  • Merge pull request #92 from MRPT/feat/truck-trailer-demo Feat/truck-trailer-demo
  • DefaultFriction: fix missing logged variables
  • Add new Ackermann ideal twist controller
  • Revert "fix bug in setTwist()": it was actually a serious regression This reverts commit 07a9fd2a0ab5b4665a4f2d07638f75c1737dbdec.
  • clang-tidy warning fixes
  • Add env var MVSIM_COLLISION_SHAPE_CACHE_VERBOSE
  • Contributors: Jose Luis Blanco-Claraco

1.1.0 (2026-02-16)

  • Merge pull request #91 from MRPT/fix/lidar-3d Lidar3D: fix min clip bug; add real intensity color
  • Lidar3D: fix min clip bug; add real intensity color
  • Contributors: Jose Luis Blanco-Claraco

1.0.0 (2026-02-08)

  • Merge pull request #89 from MRPT/fix/elevation-2-wheels Fix elevation maps for 2-wheels vehicles
  • Merge pull request #88 from MRPT/feat/human-actors Add: human actors
  • Merge pull request #86 from MRPT/feat/publish-log-to-ros Optional publish to ROS2 all CsvLogger entries
  • Merge pull request #85 from MRPT/feat/per-block-scale Feat/per-block-scale
  • Implement per block scale (Fixes #38)
  • Merge pull request #84 from MRPT/fix/box2d-bugs Fix/box2d-bugs
  • docs: add ROS2 topics
  • fix bug in setTwist()
  • Fix wrong collision detection (Fixes #42)
  • Fix linear acceleration
  • Merge pull request #83 from MRPT/feat/new-joints Implement joints between archors
  • Demo worlds: update to add RGBD camera in greenhouse
  • ROS node: fix missing publication of RGBD CameraInfo for RGB channel
  • Merge pull request #82 from MRPT/feat/rgbd-publish-new-types RGBD cameras: implement publishing depth and RGB clouds
  • RGBD cameras: implement publishing depth and RGB clouds
  • Merge pull request #81 from MRPT/fix/py-bytes Fix: use py-bytes
  • Fix trying to decode strings as utf-8 (Closes #62)
  • Merge pull request #80 from MRPT/feat/imu-noise IMU: add random walk and fix bug in

File truncated at 100 lines see the full file

Launch files

  • launch/launch_world.launch
    • Generic ROS1 launch file
      • world_file
      • headless [default: False]
      • do_fake_localization [default: True]
      • publish_tf_odom2baselink [default: True]
      • force_publish_vehicle_namespace [default: False]
      • use_rviz [default: True]
      • rviz_config_file [default: $(find mvsim)/mvsim_tutorial/demo_depth_camera.rviz]
  • mvsim_tutorial/ros1_1robot.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_1robot.world.xml]
      • mvsim_do_fake_localization [default: true]
  • mvsim_tutorial/ros1_2robots.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_2robots.world.xml]
  • mvsim_tutorial/ros1_camera.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_camera.world.xml]
  • mvsim_tutorial/ros1_depth_camera.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_depth_camera.world.xml]
  • mvsim_tutorial/ros1_greenhouse.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_greenhouse.world.xml]
      • headless [default: false]
  • mvsim_tutorial/ros1_jackal.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_jackal.world.xml]
  • mvsim_tutorial/ros1_turtlebot_world.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_turtlebot_world.world.xml]
  • mvsim_tutorial/ros1_warehouse.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_warehouse.world.xml]

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged mvsim at Robotics Stack Exchange

No version for distro dashing showing humble. Known supported distros are highlighted in the buttons above.
Package symbol

mvsim package from mvsim repo

mvsim

ROS Distro
humble

Package Summary

Version 1.3.0
License BSD
Build type CATKIN
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/MRPT/mvsim.git
VCS Type git
VCS Version develop
Last Updated 2026-03-17
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

A lightweight multivehicle simulation framework.

Additional Links

Maintainers

  • Jose-Luis Blanco-Claraco

Authors

No additional authors.
MVSim logo # MultiVehicle Simulator (MVSim) **Lightweight, realistic 2.5D dynamics simulator for mobile robots and multi-agent research** [![CI Linux](https://github.com/MRPT/mvsim/actions/workflows/build-linux.yml/badge.svg)](https://github.com/MRPT/mvsim/actions/workflows/build-linux.yml) [![Check clang-format](https://github.com/MRPT/mvsim/actions/workflows/check-clang-format.yml/badge.svg)](https://github.com/MRPT/mvsim/actions/workflows/check-clang-format.yml) [![Documentation](https://readthedocs.org/projects/mvsimulator/badge/?version=latest)](https://mvsimulator.readthedocs.io/en/latest/?badge=latest) [![License](https://img.shields.io/badge/license-BSD%203--Clause-blue.svg)](LICENSE) [**Documentation**](https://mvsimulator.readthedocs.io) · [**Installation**](https://mvsimulator.readthedocs.io/en/latest/install.html) · [**Demo worlds**](https://mvsimulator.readthedocs.io/en/latest/demo_worlds.html) · [**Cite**](#citation)

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

sudo apt install ros-$ROS_DISTRO-mvsim

Then follow the first-steps guide.

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:

```bash mvsim launch mvsim_tutorial/demo_warehouse.world.xml

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package mvsim

1.3.0 (2026-03-17)

  • docs: add logo to web
  • Modernize README
  • Clean up leftovers from temporary benchmark code
  • Creation of .rawlog files use ZStd if available
  • walls demo world: make all walls same thickness, and expose optional env var
  • Add MVSIM_SAVE_RAWLOG_FILENAME env var to some demo worlds
  • XML parser: env vars now can have a default value
  • docs: fix wrong referenc for {} usage
  • remove leftover dep
  • Merge pull request #95 from MRPT/nav-benchmark-greenhouse Nav benchmark greenhouse
  • Merge branch 'develop' into nav-benchmark-greenhouse
  • Add auto_start_recording property to vehicles
  • logistic center demo: add lidar sensors
  • Remove temporary adaptative friction class
  • remove temporary deps
  • Refactoring to use CsvLogger (by Claude Opus)
  • Refactor torque calculation by removing comments and logger Removed logging and comments related to torque calculation.
  • Changes for control benchmark paper
  • Contributors: Fernando Cañadas Aránega, Jose Luis Blanco-Claraco

1.2.0 (2026-02-24)

  • Merge pull request #94 from MRPT/feat/tune-pid Feature: tune pid
  • Support zones with different friction and rolling resistance
  • Better docs, expose more params
  • FIX: sliding bug on slopes
  • Add new unit test for ramps bug
  • fix stop exactly with any controller. Add rolling resistance
  • new PID tuning tool
  • add backwards compat method
  • Merge pull request #93 from MRPT/feat/add-trajectory-tests Add unit test for vehicle trajectory
  • CsvLogger: feature not to write to disk
  • minor edits in demo world
  • Fix bug in velocity composition
  • Clearer distinction between COM and REF point velocities
  • Add unit test for vehicle trajectory
  • Merge pull request #92 from MRPT/feat/truck-trailer-demo Feat/truck-trailer-demo
  • DefaultFriction: fix missing logged variables
  • Add new Ackermann ideal twist controller
  • Revert "fix bug in setTwist()": it was actually a serious regression This reverts commit 07a9fd2a0ab5b4665a4f2d07638f75c1737dbdec.
  • clang-tidy warning fixes
  • Add env var MVSIM_COLLISION_SHAPE_CACHE_VERBOSE
  • Contributors: Jose Luis Blanco-Claraco

1.1.0 (2026-02-16)

  • Merge pull request #91 from MRPT/fix/lidar-3d Lidar3D: fix min clip bug; add real intensity color
  • Lidar3D: fix min clip bug; add real intensity color
  • Contributors: Jose Luis Blanco-Claraco

1.0.0 (2026-02-08)

  • Merge pull request #89 from MRPT/fix/elevation-2-wheels Fix elevation maps for 2-wheels vehicles
  • Merge pull request #88 from MRPT/feat/human-actors Add: human actors
  • Merge pull request #86 from MRPT/feat/publish-log-to-ros Optional publish to ROS2 all CsvLogger entries
  • Merge pull request #85 from MRPT/feat/per-block-scale Feat/per-block-scale
  • Implement per block scale (Fixes #38)
  • Merge pull request #84 from MRPT/fix/box2d-bugs Fix/box2d-bugs
  • docs: add ROS2 topics
  • fix bug in setTwist()
  • Fix wrong collision detection (Fixes #42)
  • Fix linear acceleration
  • Merge pull request #83 from MRPT/feat/new-joints Implement joints between archors
  • Demo worlds: update to add RGBD camera in greenhouse
  • ROS node: fix missing publication of RGBD CameraInfo for RGB channel
  • Merge pull request #82 from MRPT/feat/rgbd-publish-new-types RGBD cameras: implement publishing depth and RGB clouds
  • RGBD cameras: implement publishing depth and RGB clouds
  • Merge pull request #81 from MRPT/fix/py-bytes Fix: use py-bytes
  • Fix trying to decode strings as utf-8 (Closes #62)
  • Merge pull request #80 from MRPT/feat/imu-noise IMU: add random walk and fix bug in

File truncated at 100 lines see the full file

Launch files

  • launch/launch_world.launch
    • Generic ROS1 launch file
      • world_file
      • headless [default: False]
      • do_fake_localization [default: True]
      • publish_tf_odom2baselink [default: True]
      • force_publish_vehicle_namespace [default: False]
      • use_rviz [default: True]
      • rviz_config_file [default: $(find mvsim)/mvsim_tutorial/demo_depth_camera.rviz]
  • mvsim_tutorial/ros1_1robot.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_1robot.world.xml]
      • mvsim_do_fake_localization [default: true]
  • mvsim_tutorial/ros1_2robots.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_2robots.world.xml]
  • mvsim_tutorial/ros1_camera.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_camera.world.xml]
  • mvsim_tutorial/ros1_depth_camera.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_depth_camera.world.xml]
  • mvsim_tutorial/ros1_greenhouse.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_greenhouse.world.xml]
      • headless [default: false]
  • mvsim_tutorial/ros1_jackal.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_jackal.world.xml]
  • mvsim_tutorial/ros1_turtlebot_world.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_turtlebot_world.world.xml]
  • mvsim_tutorial/ros1_warehouse.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_warehouse.world.xml]

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged mvsim at Robotics Stack Exchange

No version for distro galactic showing humble. Known supported distros are highlighted in the buttons above.
Package symbol

mvsim package from mvsim repo

mvsim

ROS Distro
humble

Package Summary

Version 1.3.0
License BSD
Build type CATKIN
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/MRPT/mvsim.git
VCS Type git
VCS Version develop
Last Updated 2026-03-17
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

A lightweight multivehicle simulation framework.

Additional Links

Maintainers

  • Jose-Luis Blanco-Claraco

Authors

No additional authors.
MVSim logo # MultiVehicle Simulator (MVSim) **Lightweight, realistic 2.5D dynamics simulator for mobile robots and multi-agent research** [![CI Linux](https://github.com/MRPT/mvsim/actions/workflows/build-linux.yml/badge.svg)](https://github.com/MRPT/mvsim/actions/workflows/build-linux.yml) [![Check clang-format](https://github.com/MRPT/mvsim/actions/workflows/check-clang-format.yml/badge.svg)](https://github.com/MRPT/mvsim/actions/workflows/check-clang-format.yml) [![Documentation](https://readthedocs.org/projects/mvsimulator/badge/?version=latest)](https://mvsimulator.readthedocs.io/en/latest/?badge=latest) [![License](https://img.shields.io/badge/license-BSD%203--Clause-blue.svg)](LICENSE) [**Documentation**](https://mvsimulator.readthedocs.io) · [**Installation**](https://mvsimulator.readthedocs.io/en/latest/install.html) · [**Demo worlds**](https://mvsimulator.readthedocs.io/en/latest/demo_worlds.html) · [**Cite**](#citation)

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

sudo apt install ros-$ROS_DISTRO-mvsim

Then follow the first-steps guide.

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:

```bash mvsim launch mvsim_tutorial/demo_warehouse.world.xml

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package mvsim

1.3.0 (2026-03-17)

  • docs: add logo to web
  • Modernize README
  • Clean up leftovers from temporary benchmark code
  • Creation of .rawlog files use ZStd if available
  • walls demo world: make all walls same thickness, and expose optional env var
  • Add MVSIM_SAVE_RAWLOG_FILENAME env var to some demo worlds
  • XML parser: env vars now can have a default value
  • docs: fix wrong referenc for {} usage
  • remove leftover dep
  • Merge pull request #95 from MRPT/nav-benchmark-greenhouse Nav benchmark greenhouse
  • Merge branch 'develop' into nav-benchmark-greenhouse
  • Add auto_start_recording property to vehicles
  • logistic center demo: add lidar sensors
  • Remove temporary adaptative friction class
  • remove temporary deps
  • Refactoring to use CsvLogger (by Claude Opus)
  • Refactor torque calculation by removing comments and logger Removed logging and comments related to torque calculation.
  • Changes for control benchmark paper
  • Contributors: Fernando Cañadas Aránega, Jose Luis Blanco-Claraco

1.2.0 (2026-02-24)

  • Merge pull request #94 from MRPT/feat/tune-pid Feature: tune pid
  • Support zones with different friction and rolling resistance
  • Better docs, expose more params
  • FIX: sliding bug on slopes
  • Add new unit test for ramps bug
  • fix stop exactly with any controller. Add rolling resistance
  • new PID tuning tool
  • add backwards compat method
  • Merge pull request #93 from MRPT/feat/add-trajectory-tests Add unit test for vehicle trajectory
  • CsvLogger: feature not to write to disk
  • minor edits in demo world
  • Fix bug in velocity composition
  • Clearer distinction between COM and REF point velocities
  • Add unit test for vehicle trajectory
  • Merge pull request #92 from MRPT/feat/truck-trailer-demo Feat/truck-trailer-demo
  • DefaultFriction: fix missing logged variables
  • Add new Ackermann ideal twist controller
  • Revert "fix bug in setTwist()": it was actually a serious regression This reverts commit 07a9fd2a0ab5b4665a4f2d07638f75c1737dbdec.
  • clang-tidy warning fixes
  • Add env var MVSIM_COLLISION_SHAPE_CACHE_VERBOSE
  • Contributors: Jose Luis Blanco-Claraco

1.1.0 (2026-02-16)

  • Merge pull request #91 from MRPT/fix/lidar-3d Lidar3D: fix min clip bug; add real intensity color
  • Lidar3D: fix min clip bug; add real intensity color
  • Contributors: Jose Luis Blanco-Claraco

1.0.0 (2026-02-08)

  • Merge pull request #89 from MRPT/fix/elevation-2-wheels Fix elevation maps for 2-wheels vehicles
  • Merge pull request #88 from MRPT/feat/human-actors Add: human actors
  • Merge pull request #86 from MRPT/feat/publish-log-to-ros Optional publish to ROS2 all CsvLogger entries
  • Merge pull request #85 from MRPT/feat/per-block-scale Feat/per-block-scale
  • Implement per block scale (Fixes #38)
  • Merge pull request #84 from MRPT/fix/box2d-bugs Fix/box2d-bugs
  • docs: add ROS2 topics
  • fix bug in setTwist()
  • Fix wrong collision detection (Fixes #42)
  • Fix linear acceleration
  • Merge pull request #83 from MRPT/feat/new-joints Implement joints between archors
  • Demo worlds: update to add RGBD camera in greenhouse
  • ROS node: fix missing publication of RGBD CameraInfo for RGB channel
  • Merge pull request #82 from MRPT/feat/rgbd-publish-new-types RGBD cameras: implement publishing depth and RGB clouds
  • RGBD cameras: implement publishing depth and RGB clouds
  • Merge pull request #81 from MRPT/fix/py-bytes Fix: use py-bytes
  • Fix trying to decode strings as utf-8 (Closes #62)
  • Merge pull request #80 from MRPT/feat/imu-noise IMU: add random walk and fix bug in

File truncated at 100 lines see the full file

Launch files

  • launch/launch_world.launch
    • Generic ROS1 launch file
      • world_file
      • headless [default: False]
      • do_fake_localization [default: True]
      • publish_tf_odom2baselink [default: True]
      • force_publish_vehicle_namespace [default: False]
      • use_rviz [default: True]
      • rviz_config_file [default: $(find mvsim)/mvsim_tutorial/demo_depth_camera.rviz]
  • mvsim_tutorial/ros1_1robot.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_1robot.world.xml]
      • mvsim_do_fake_localization [default: true]
  • mvsim_tutorial/ros1_2robots.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_2robots.world.xml]
  • mvsim_tutorial/ros1_camera.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_camera.world.xml]
  • mvsim_tutorial/ros1_depth_camera.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_depth_camera.world.xml]
  • mvsim_tutorial/ros1_greenhouse.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_greenhouse.world.xml]
      • headless [default: false]
  • mvsim_tutorial/ros1_jackal.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_jackal.world.xml]
  • mvsim_tutorial/ros1_turtlebot_world.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_turtlebot_world.world.xml]
  • mvsim_tutorial/ros1_warehouse.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_warehouse.world.xml]

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged mvsim at Robotics Stack Exchange

Package symbol

mvsim package from mvsim repo

mvsim

ROS Distro
foxy

Package Summary

Version 1.3.0
License BSD
Build type CATKIN
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/MRPT/mvsim.git
VCS Type git
VCS Version develop
Last Updated 2026-03-17
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

A lightweight multivehicle simulation framework.

Additional Links

Maintainers

  • Jose-Luis Blanco-Claraco

Authors

No additional authors.
MVSim logo # MultiVehicle Simulator (MVSim) **Lightweight, realistic 2.5D dynamics simulator for mobile robots and multi-agent research** [![CI Linux](https://github.com/MRPT/mvsim/actions/workflows/build-linux.yml/badge.svg)](https://github.com/MRPT/mvsim/actions/workflows/build-linux.yml) [![Check clang-format](https://github.com/MRPT/mvsim/actions/workflows/check-clang-format.yml/badge.svg)](https://github.com/MRPT/mvsim/actions/workflows/check-clang-format.yml) [![Documentation](https://readthedocs.org/projects/mvsimulator/badge/?version=latest)](https://mvsimulator.readthedocs.io/en/latest/?badge=latest) [![License](https://img.shields.io/badge/license-BSD%203--Clause-blue.svg)](LICENSE) [**Documentation**](https://mvsimulator.readthedocs.io) · [**Installation**](https://mvsimulator.readthedocs.io/en/latest/install.html) · [**Demo worlds**](https://mvsimulator.readthedocs.io/en/latest/demo_worlds.html) · [**Cite**](#citation)

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

sudo apt install ros-$ROS_DISTRO-mvsim

Then follow the first-steps guide.

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:

```bash mvsim launch mvsim_tutorial/demo_warehouse.world.xml

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package mvsim

1.3.0 (2026-03-17)

  • docs: add logo to web
  • Modernize README
  • Clean up leftovers from temporary benchmark code
  • Creation of .rawlog files use ZStd if available
  • walls demo world: make all walls same thickness, and expose optional env var
  • Add MVSIM_SAVE_RAWLOG_FILENAME env var to some demo worlds
  • XML parser: env vars now can have a default value
  • docs: fix wrong referenc for {} usage
  • remove leftover dep
  • Merge pull request #95 from MRPT/nav-benchmark-greenhouse Nav benchmark greenhouse
  • Merge branch 'develop' into nav-benchmark-greenhouse
  • Add auto_start_recording property to vehicles
  • logistic center demo: add lidar sensors
  • Remove temporary adaptative friction class
  • remove temporary deps
  • Refactoring to use CsvLogger (by Claude Opus)
  • Refactor torque calculation by removing comments and logger Removed logging and comments related to torque calculation.
  • Changes for control benchmark paper
  • Contributors: Fernando Cañadas Aránega, Jose Luis Blanco-Claraco

1.2.0 (2026-02-24)

  • Merge pull request #94 from MRPT/feat/tune-pid Feature: tune pid
  • Support zones with different friction and rolling resistance
  • Better docs, expose more params
  • FIX: sliding bug on slopes
  • Add new unit test for ramps bug
  • fix stop exactly with any controller. Add rolling resistance
  • new PID tuning tool
  • add backwards compat method
  • Merge pull request #93 from MRPT/feat/add-trajectory-tests Add unit test for vehicle trajectory
  • CsvLogger: feature not to write to disk
  • minor edits in demo world
  • Fix bug in velocity composition
  • Clearer distinction between COM and REF point velocities
  • Add unit test for vehicle trajectory
  • Merge pull request #92 from MRPT/feat/truck-trailer-demo Feat/truck-trailer-demo
  • DefaultFriction: fix missing logged variables
  • Add new Ackermann ideal twist controller
  • Revert "fix bug in setTwist()": it was actually a serious regression This reverts commit 07a9fd2a0ab5b4665a4f2d07638f75c1737dbdec.
  • clang-tidy warning fixes
  • Add env var MVSIM_COLLISION_SHAPE_CACHE_VERBOSE
  • Contributors: Jose Luis Blanco-Claraco

1.1.0 (2026-02-16)

  • Merge pull request #91 from MRPT/fix/lidar-3d Lidar3D: fix min clip bug; add real intensity color
  • Lidar3D: fix min clip bug; add real intensity color
  • Contributors: Jose Luis Blanco-Claraco

1.0.0 (2026-02-08)

  • Merge pull request #89 from MRPT/fix/elevation-2-wheels Fix elevation maps for 2-wheels vehicles
  • Merge pull request #88 from MRPT/feat/human-actors Add: human actors
  • Merge pull request #86 from MRPT/feat/publish-log-to-ros Optional publish to ROS2 all CsvLogger entries
  • Merge pull request #85 from MRPT/feat/per-block-scale Feat/per-block-scale
  • Implement per block scale (Fixes #38)
  • Merge pull request #84 from MRPT/fix/box2d-bugs Fix/box2d-bugs
  • docs: add ROS2 topics
  • fix bug in setTwist()
  • Fix wrong collision detection (Fixes #42)
  • Fix linear acceleration
  • Merge pull request #83 from MRPT/feat/new-joints Implement joints between archors
  • Demo worlds: update to add RGBD camera in greenhouse
  • ROS node: fix missing publication of RGBD CameraInfo for RGB channel
  • Merge pull request #82 from MRPT/feat/rgbd-publish-new-types RGBD cameras: implement publishing depth and RGB clouds
  • RGBD cameras: implement publishing depth and RGB clouds
  • Merge pull request #81 from MRPT/fix/py-bytes Fix: use py-bytes
  • Fix trying to decode strings as utf-8 (Closes #62)
  • Merge pull request #80 from MRPT/feat/imu-noise IMU: add random walk and fix bug in

File truncated at 100 lines see the full file

Launch files

  • launch/launch_world.launch
    • Generic ROS1 launch file
      • world_file
      • headless [default: False]
      • do_fake_localization [default: True]
      • publish_tf_odom2baselink [default: True]
      • force_publish_vehicle_namespace [default: False]
      • use_rviz [default: True]
      • rviz_config_file [default: $(find mvsim)/mvsim_tutorial/demo_depth_camera.rviz]
  • mvsim_tutorial/ros1_1robot.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_1robot.world.xml]
      • mvsim_do_fake_localization [default: true]
  • mvsim_tutorial/ros1_2robots.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_2robots.world.xml]
  • mvsim_tutorial/ros1_camera.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_camera.world.xml]
  • mvsim_tutorial/ros1_depth_camera.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_depth_camera.world.xml]
  • mvsim_tutorial/ros1_greenhouse.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_greenhouse.world.xml]
      • headless [default: false]
  • mvsim_tutorial/ros1_jackal.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_jackal.world.xml]
  • mvsim_tutorial/ros1_turtlebot_world.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_turtlebot_world.world.xml]
  • mvsim_tutorial/ros1_warehouse.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_warehouse.world.xml]

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged mvsim at Robotics Stack Exchange

Package symbol

mvsim package from mvsim repo

mvsim

ROS Distro
iron

Package Summary

Version 1.3.0
License BSD
Build type CATKIN
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/MRPT/mvsim.git
VCS Type git
VCS Version develop
Last Updated 2026-03-17
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

A lightweight multivehicle simulation framework.

Additional Links

Maintainers

  • Jose-Luis Blanco-Claraco

Authors

No additional authors.
MVSim logo # MultiVehicle Simulator (MVSim) **Lightweight, realistic 2.5D dynamics simulator for mobile robots and multi-agent research** [![CI Linux](https://github.com/MRPT/mvsim/actions/workflows/build-linux.yml/badge.svg)](https://github.com/MRPT/mvsim/actions/workflows/build-linux.yml) [![Check clang-format](https://github.com/MRPT/mvsim/actions/workflows/check-clang-format.yml/badge.svg)](https://github.com/MRPT/mvsim/actions/workflows/check-clang-format.yml) [![Documentation](https://readthedocs.org/projects/mvsimulator/badge/?version=latest)](https://mvsimulator.readthedocs.io/en/latest/?badge=latest) [![License](https://img.shields.io/badge/license-BSD%203--Clause-blue.svg)](LICENSE) [**Documentation**](https://mvsimulator.readthedocs.io) · [**Installation**](https://mvsimulator.readthedocs.io/en/latest/install.html) · [**Demo worlds**](https://mvsimulator.readthedocs.io/en/latest/demo_worlds.html) · [**Cite**](#citation)

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

sudo apt install ros-$ROS_DISTRO-mvsim

Then follow the first-steps guide.

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:

```bash mvsim launch mvsim_tutorial/demo_warehouse.world.xml

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package mvsim

1.3.0 (2026-03-17)

  • docs: add logo to web
  • Modernize README
  • Clean up leftovers from temporary benchmark code
  • Creation of .rawlog files use ZStd if available
  • walls demo world: make all walls same thickness, and expose optional env var
  • Add MVSIM_SAVE_RAWLOG_FILENAME env var to some demo worlds
  • XML parser: env vars now can have a default value
  • docs: fix wrong referenc for {} usage
  • remove leftover dep
  • Merge pull request #95 from MRPT/nav-benchmark-greenhouse Nav benchmark greenhouse
  • Merge branch 'develop' into nav-benchmark-greenhouse
  • Add auto_start_recording property to vehicles
  • logistic center demo: add lidar sensors
  • Remove temporary adaptative friction class
  • remove temporary deps
  • Refactoring to use CsvLogger (by Claude Opus)
  • Refactor torque calculation by removing comments and logger Removed logging and comments related to torque calculation.
  • Changes for control benchmark paper
  • Contributors: Fernando Cañadas Aránega, Jose Luis Blanco-Claraco

1.2.0 (2026-02-24)

  • Merge pull request #94 from MRPT/feat/tune-pid Feature: tune pid
  • Support zones with different friction and rolling resistance
  • Better docs, expose more params
  • FIX: sliding bug on slopes
  • Add new unit test for ramps bug
  • fix stop exactly with any controller. Add rolling resistance
  • new PID tuning tool
  • add backwards compat method
  • Merge pull request #93 from MRPT/feat/add-trajectory-tests Add unit test for vehicle trajectory
  • CsvLogger: feature not to write to disk
  • minor edits in demo world
  • Fix bug in velocity composition
  • Clearer distinction between COM and REF point velocities
  • Add unit test for vehicle trajectory
  • Merge pull request #92 from MRPT/feat/truck-trailer-demo Feat/truck-trailer-demo
  • DefaultFriction: fix missing logged variables
  • Add new Ackermann ideal twist controller
  • Revert "fix bug in setTwist()": it was actually a serious regression This reverts commit 07a9fd2a0ab5b4665a4f2d07638f75c1737dbdec.
  • clang-tidy warning fixes
  • Add env var MVSIM_COLLISION_SHAPE_CACHE_VERBOSE
  • Contributors: Jose Luis Blanco-Claraco

1.1.0 (2026-02-16)

  • Merge pull request #91 from MRPT/fix/lidar-3d Lidar3D: fix min clip bug; add real intensity color
  • Lidar3D: fix min clip bug; add real intensity color
  • Contributors: Jose Luis Blanco-Claraco

1.0.0 (2026-02-08)

  • Merge pull request #89 from MRPT/fix/elevation-2-wheels Fix elevation maps for 2-wheels vehicles
  • Merge pull request #88 from MRPT/feat/human-actors Add: human actors
  • Merge pull request #86 from MRPT/feat/publish-log-to-ros Optional publish to ROS2 all CsvLogger entries
  • Merge pull request #85 from MRPT/feat/per-block-scale Feat/per-block-scale
  • Implement per block scale (Fixes #38)
  • Merge pull request #84 from MRPT/fix/box2d-bugs Fix/box2d-bugs
  • docs: add ROS2 topics
  • fix bug in setTwist()
  • Fix wrong collision detection (Fixes #42)
  • Fix linear acceleration
  • Merge pull request #83 from MRPT/feat/new-joints Implement joints between archors
  • Demo worlds: update to add RGBD camera in greenhouse
  • ROS node: fix missing publication of RGBD CameraInfo for RGB channel
  • Merge pull request #82 from MRPT/feat/rgbd-publish-new-types RGBD cameras: implement publishing depth and RGB clouds
  • RGBD cameras: implement publishing depth and RGB clouds
  • Merge pull request #81 from MRPT/fix/py-bytes Fix: use py-bytes
  • Fix trying to decode strings as utf-8 (Closes #62)
  • Merge pull request #80 from MRPT/feat/imu-noise IMU: add random walk and fix bug in

File truncated at 100 lines see the full file

Launch files

  • launch/launch_world.launch
    • Generic ROS1 launch file
      • world_file
      • headless [default: False]
      • do_fake_localization [default: True]
      • publish_tf_odom2baselink [default: True]
      • force_publish_vehicle_namespace [default: False]
      • use_rviz [default: True]
      • rviz_config_file [default: $(find mvsim)/mvsim_tutorial/demo_depth_camera.rviz]
  • mvsim_tutorial/ros1_1robot.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_1robot.world.xml]
      • mvsim_do_fake_localization [default: true]
  • mvsim_tutorial/ros1_2robots.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_2robots.world.xml]
  • mvsim_tutorial/ros1_camera.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_camera.world.xml]
  • mvsim_tutorial/ros1_depth_camera.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_depth_camera.world.xml]
  • mvsim_tutorial/ros1_greenhouse.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_greenhouse.world.xml]
      • headless [default: false]
  • mvsim_tutorial/ros1_jackal.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_jackal.world.xml]
  • mvsim_tutorial/ros1_turtlebot_world.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_turtlebot_world.world.xml]
  • mvsim_tutorial/ros1_warehouse.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_warehouse.world.xml]

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged mvsim at Robotics Stack Exchange

Package symbol

mvsim package from mvsim repo

mvsim

ROS Distro
lunar

Package Summary

Version 1.3.0
License BSD
Build type CATKIN
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/ual-arm-ros-pkg/mvsim.git
VCS Type git
VCS Version master
Last Updated 2026-03-17
Dev Status MAINTAINED
Released UNRELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

A lightweight multivehicle simulation framework.

Additional Links

Maintainers

  • Jose-Luis Blanco-Claraco

Authors

No additional authors.
MVSim logo # MultiVehicle Simulator (MVSim) **Lightweight, realistic 2.5D dynamics simulator for mobile robots and multi-agent research** [![CI Linux](https://github.com/MRPT/mvsim/actions/workflows/build-linux.yml/badge.svg)](https://github.com/MRPT/mvsim/actions/workflows/build-linux.yml) [![Check clang-format](https://github.com/MRPT/mvsim/actions/workflows/check-clang-format.yml/badge.svg)](https://github.com/MRPT/mvsim/actions/workflows/check-clang-format.yml) [![Documentation](https://readthedocs.org/projects/mvsimulator/badge/?version=latest)](https://mvsimulator.readthedocs.io/en/latest/?badge=latest) [![License](https://img.shields.io/badge/license-BSD%203--Clause-blue.svg)](LICENSE) [**Documentation**](https://mvsimulator.readthedocs.io) · [**Installation**](https://mvsimulator.readthedocs.io/en/latest/install.html) · [**Demo worlds**](https://mvsimulator.readthedocs.io/en/latest/demo_worlds.html) · [**Cite**](#citation)

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

sudo apt install ros-$ROS_DISTRO-mvsim

Then follow the first-steps guide.

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:

```bash mvsim launch mvsim_tutorial/demo_warehouse.world.xml

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package mvsim

1.3.0 (2026-03-17)

  • docs: add logo to web
  • Modernize README
  • Clean up leftovers from temporary benchmark code
  • Creation of .rawlog files use ZStd if available
  • walls demo world: make all walls same thickness, and expose optional env var
  • Add MVSIM_SAVE_RAWLOG_FILENAME env var to some demo worlds
  • XML parser: env vars now can have a default value
  • docs: fix wrong referenc for {} usage
  • remove leftover dep
  • Merge pull request #95 from MRPT/nav-benchmark-greenhouse Nav benchmark greenhouse
  • Merge branch 'develop' into nav-benchmark-greenhouse
  • Add auto_start_recording property to vehicles
  • logistic center demo: add lidar sensors
  • Remove temporary adaptative friction class
  • remove temporary deps
  • Refactoring to use CsvLogger (by Claude Opus)
  • Refactor torque calculation by removing comments and logger Removed logging and comments related to torque calculation.
  • Changes for control benchmark paper
  • Contributors: Fernando Cañadas Aránega, Jose Luis Blanco-Claraco

1.2.0 (2026-02-24)

  • Merge pull request #94 from MRPT/feat/tune-pid Feature: tune pid
  • Support zones with different friction and rolling resistance
  • Better docs, expose more params
  • FIX: sliding bug on slopes
  • Add new unit test for ramps bug
  • fix stop exactly with any controller. Add rolling resistance
  • new PID tuning tool
  • add backwards compat method
  • Merge pull request #93 from MRPT/feat/add-trajectory-tests Add unit test for vehicle trajectory
  • CsvLogger: feature not to write to disk
  • minor edits in demo world
  • Fix bug in velocity composition
  • Clearer distinction between COM and REF point velocities
  • Add unit test for vehicle trajectory
  • Merge pull request #92 from MRPT/feat/truck-trailer-demo Feat/truck-trailer-demo
  • DefaultFriction: fix missing logged variables
  • Add new Ackermann ideal twist controller
  • Revert "fix bug in setTwist()": it was actually a serious regression This reverts commit 07a9fd2a0ab5b4665a4f2d07638f75c1737dbdec.
  • clang-tidy warning fixes
  • Add env var MVSIM_COLLISION_SHAPE_CACHE_VERBOSE
  • Contributors: Jose Luis Blanco-Claraco

1.1.0 (2026-02-16)

  • Merge pull request #91 from MRPT/fix/lidar-3d Lidar3D: fix min clip bug; add real intensity color
  • Lidar3D: fix min clip bug; add real intensity color
  • Contributors: Jose Luis Blanco-Claraco

1.0.0 (2026-02-08)

  • Merge pull request #89 from MRPT/fix/elevation-2-wheels Fix elevation maps for 2-wheels vehicles
  • Merge pull request #88 from MRPT/feat/human-actors Add: human actors
  • Merge pull request #86 from MRPT/feat/publish-log-to-ros Optional publish to ROS2 all CsvLogger entries
  • Merge pull request #85 from MRPT/feat/per-block-scale Feat/per-block-scale
  • Implement per block scale (Fixes #38)
  • Merge pull request #84 from MRPT/fix/box2d-bugs Fix/box2d-bugs
  • docs: add ROS2 topics
  • fix bug in setTwist()
  • Fix wrong collision detection (Fixes #42)
  • Fix linear acceleration
  • Merge pull request #83 from MRPT/feat/new-joints Implement joints between archors
  • Demo worlds: update to add RGBD camera in greenhouse
  • ROS node: fix missing publication of RGBD CameraInfo for RGB channel
  • Merge pull request #82 from MRPT/feat/rgbd-publish-new-types RGBD cameras: implement publishing depth and RGB clouds
  • RGBD cameras: implement publishing depth and RGB clouds
  • Merge pull request #81 from MRPT/fix/py-bytes Fix: use py-bytes
  • Fix trying to decode strings as utf-8 (Closes #62)
  • Merge pull request #80 from MRPT/feat/imu-noise IMU: add random walk and fix bug in

File truncated at 100 lines see the full file

Launch files

  • launch/launch_world.launch
    • Generic ROS1 launch file
      • world_file
      • headless [default: False]
      • do_fake_localization [default: True]
      • publish_tf_odom2baselink [default: True]
      • force_publish_vehicle_namespace [default: False]
      • use_rviz [default: True]
      • rviz_config_file [default: $(find mvsim)/mvsim_tutorial/demo_depth_camera.rviz]
  • mvsim_tutorial/ros1_1robot.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_1robot.world.xml]
      • mvsim_do_fake_localization [default: true]
  • mvsim_tutorial/ros1_2robots.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_2robots.world.xml]
  • mvsim_tutorial/ros1_camera.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_camera.world.xml]
  • mvsim_tutorial/ros1_depth_camera.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_depth_camera.world.xml]
  • mvsim_tutorial/ros1_greenhouse.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_greenhouse.world.xml]
      • headless [default: false]
  • mvsim_tutorial/ros1_jackal.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_jackal.world.xml]
  • mvsim_tutorial/ros1_turtlebot_world.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_turtlebot_world.world.xml]
  • mvsim_tutorial/ros1_warehouse.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_warehouse.world.xml]

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged mvsim at Robotics Stack Exchange

Package symbol

mvsim package from mvsim repo

mvsim

ROS Distro
jade

Package Summary

Version 1.3.0
License BSD
Build type CATKIN
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/ual-arm-ros-pkg/mvsim.git
VCS Type git
VCS Version master
Last Updated 2026-03-17
Dev Status MAINTAINED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

A lightweight multivehicle simulation framework.

Additional Links

Maintainers

  • Jose-Luis Blanco-Claraco

Authors

No additional authors.
MVSim logo # MultiVehicle Simulator (MVSim) **Lightweight, realistic 2.5D dynamics simulator for mobile robots and multi-agent research** [![CI Linux](https://github.com/MRPT/mvsim/actions/workflows/build-linux.yml/badge.svg)](https://github.com/MRPT/mvsim/actions/workflows/build-linux.yml) [![Check clang-format](https://github.com/MRPT/mvsim/actions/workflows/check-clang-format.yml/badge.svg)](https://github.com/MRPT/mvsim/actions/workflows/check-clang-format.yml) [![Documentation](https://readthedocs.org/projects/mvsimulator/badge/?version=latest)](https://mvsimulator.readthedocs.io/en/latest/?badge=latest) [![License](https://img.shields.io/badge/license-BSD%203--Clause-blue.svg)](LICENSE) [**Documentation**](https://mvsimulator.readthedocs.io) · [**Installation**](https://mvsimulator.readthedocs.io/en/latest/install.html) · [**Demo worlds**](https://mvsimulator.readthedocs.io/en/latest/demo_worlds.html) · [**Cite**](#citation)

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

sudo apt install ros-$ROS_DISTRO-mvsim

Then follow the first-steps guide.

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:

```bash mvsim launch mvsim_tutorial/demo_warehouse.world.xml

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package mvsim

1.3.0 (2026-03-17)

  • docs: add logo to web
  • Modernize README
  • Clean up leftovers from temporary benchmark code
  • Creation of .rawlog files use ZStd if available
  • walls demo world: make all walls same thickness, and expose optional env var
  • Add MVSIM_SAVE_RAWLOG_FILENAME env var to some demo worlds
  • XML parser: env vars now can have a default value
  • docs: fix wrong referenc for {} usage
  • remove leftover dep
  • Merge pull request #95 from MRPT/nav-benchmark-greenhouse Nav benchmark greenhouse
  • Merge branch 'develop' into nav-benchmark-greenhouse
  • Add auto_start_recording property to vehicles
  • logistic center demo: add lidar sensors
  • Remove temporary adaptative friction class
  • remove temporary deps
  • Refactoring to use CsvLogger (by Claude Opus)
  • Refactor torque calculation by removing comments and logger Removed logging and comments related to torque calculation.
  • Changes for control benchmark paper
  • Contributors: Fernando Cañadas Aránega, Jose Luis Blanco-Claraco

1.2.0 (2026-02-24)

  • Merge pull request #94 from MRPT/feat/tune-pid Feature: tune pid
  • Support zones with different friction and rolling resistance
  • Better docs, expose more params
  • FIX: sliding bug on slopes
  • Add new unit test for ramps bug
  • fix stop exactly with any controller. Add rolling resistance
  • new PID tuning tool
  • add backwards compat method
  • Merge pull request #93 from MRPT/feat/add-trajectory-tests Add unit test for vehicle trajectory
  • CsvLogger: feature not to write to disk
  • minor edits in demo world
  • Fix bug in velocity composition
  • Clearer distinction between COM and REF point velocities
  • Add unit test for vehicle trajectory
  • Merge pull request #92 from MRPT/feat/truck-trailer-demo Feat/truck-trailer-demo
  • DefaultFriction: fix missing logged variables
  • Add new Ackermann ideal twist controller
  • Revert "fix bug in setTwist()": it was actually a serious regression This reverts commit 07a9fd2a0ab5b4665a4f2d07638f75c1737dbdec.
  • clang-tidy warning fixes
  • Add env var MVSIM_COLLISION_SHAPE_CACHE_VERBOSE
  • Contributors: Jose Luis Blanco-Claraco

1.1.0 (2026-02-16)

  • Merge pull request #91 from MRPT/fix/lidar-3d Lidar3D: fix min clip bug; add real intensity color
  • Lidar3D: fix min clip bug; add real intensity color
  • Contributors: Jose Luis Blanco-Claraco

1.0.0 (2026-02-08)

  • Merge pull request #89 from MRPT/fix/elevation-2-wheels Fix elevation maps for 2-wheels vehicles
  • Merge pull request #88 from MRPT/feat/human-actors Add: human actors
  • Merge pull request #86 from MRPT/feat/publish-log-to-ros Optional publish to ROS2 all CsvLogger entries
  • Merge pull request #85 from MRPT/feat/per-block-scale Feat/per-block-scale
  • Implement per block scale (Fixes #38)
  • Merge pull request #84 from MRPT/fix/box2d-bugs Fix/box2d-bugs
  • docs: add ROS2 topics
  • fix bug in setTwist()
  • Fix wrong collision detection (Fixes #42)
  • Fix linear acceleration
  • Merge pull request #83 from MRPT/feat/new-joints Implement joints between archors
  • Demo worlds: update to add RGBD camera in greenhouse
  • ROS node: fix missing publication of RGBD CameraInfo for RGB channel
  • Merge pull request #82 from MRPT/feat/rgbd-publish-new-types RGBD cameras: implement publishing depth and RGB clouds
  • RGBD cameras: implement publishing depth and RGB clouds
  • Merge pull request #81 from MRPT/fix/py-bytes Fix: use py-bytes
  • Fix trying to decode strings as utf-8 (Closes #62)
  • Merge pull request #80 from MRPT/feat/imu-noise IMU: add random walk and fix bug in

File truncated at 100 lines see the full file

Launch files

  • launch/launch_world.launch
    • Generic ROS1 launch file
      • world_file
      • headless [default: False]
      • do_fake_localization [default: True]
      • publish_tf_odom2baselink [default: True]
      • force_publish_vehicle_namespace [default: False]
      • use_rviz [default: True]
      • rviz_config_file [default: $(find mvsim)/mvsim_tutorial/demo_depth_camera.rviz]
  • mvsim_tutorial/ros1_1robot.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_1robot.world.xml]
      • mvsim_do_fake_localization [default: true]
  • mvsim_tutorial/ros1_2robots.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_2robots.world.xml]
  • mvsim_tutorial/ros1_camera.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_camera.world.xml]
  • mvsim_tutorial/ros1_depth_camera.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_depth_camera.world.xml]
  • mvsim_tutorial/ros1_greenhouse.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_greenhouse.world.xml]
      • headless [default: false]
  • mvsim_tutorial/ros1_jackal.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_jackal.world.xml]
  • mvsim_tutorial/ros1_turtlebot_world.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_turtlebot_world.world.xml]
  • mvsim_tutorial/ros1_warehouse.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_warehouse.world.xml]

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged mvsim at Robotics Stack Exchange

Package symbol

mvsim package from mvsim repo

mvsim

ROS Distro
indigo

Package Summary

Version 1.3.0
License BSD
Build type CATKIN
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/ual-arm-ros-pkg/mvsim.git
VCS Type git
VCS Version master
Last Updated 2026-03-17
Dev Status MAINTAINED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

A lightweight multivehicle simulation framework.

Additional Links

Maintainers

  • Jose-Luis Blanco-Claraco

Authors

No additional authors.
MVSim logo # MultiVehicle Simulator (MVSim) **Lightweight, realistic 2.5D dynamics simulator for mobile robots and multi-agent research** [![CI Linux](https://github.com/MRPT/mvsim/actions/workflows/build-linux.yml/badge.svg)](https://github.com/MRPT/mvsim/actions/workflows/build-linux.yml) [![Check clang-format](https://github.com/MRPT/mvsim/actions/workflows/check-clang-format.yml/badge.svg)](https://github.com/MRPT/mvsim/actions/workflows/check-clang-format.yml) [![Documentation](https://readthedocs.org/projects/mvsimulator/badge/?version=latest)](https://mvsimulator.readthedocs.io/en/latest/?badge=latest) [![License](https://img.shields.io/badge/license-BSD%203--Clause-blue.svg)](LICENSE) [**Documentation**](https://mvsimulator.readthedocs.io) · [**Installation**](https://mvsimulator.readthedocs.io/en/latest/install.html) · [**Demo worlds**](https://mvsimulator.readthedocs.io/en/latest/demo_worlds.html) · [**Cite**](#citation)

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

sudo apt install ros-$ROS_DISTRO-mvsim

Then follow the first-steps guide.

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:

```bash mvsim launch mvsim_tutorial/demo_warehouse.world.xml

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package mvsim

1.3.0 (2026-03-17)

  • docs: add logo to web
  • Modernize README
  • Clean up leftovers from temporary benchmark code
  • Creation of .rawlog files use ZStd if available
  • walls demo world: make all walls same thickness, and expose optional env var
  • Add MVSIM_SAVE_RAWLOG_FILENAME env var to some demo worlds
  • XML parser: env vars now can have a default value
  • docs: fix wrong referenc for {} usage
  • remove leftover dep
  • Merge pull request #95 from MRPT/nav-benchmark-greenhouse Nav benchmark greenhouse
  • Merge branch 'develop' into nav-benchmark-greenhouse
  • Add auto_start_recording property to vehicles
  • logistic center demo: add lidar sensors
  • Remove temporary adaptative friction class
  • remove temporary deps
  • Refactoring to use CsvLogger (by Claude Opus)
  • Refactor torque calculation by removing comments and logger Removed logging and comments related to torque calculation.
  • Changes for control benchmark paper
  • Contributors: Fernando Cañadas Aránega, Jose Luis Blanco-Claraco

1.2.0 (2026-02-24)

  • Merge pull request #94 from MRPT/feat/tune-pid Feature: tune pid
  • Support zones with different friction and rolling resistance
  • Better docs, expose more params
  • FIX: sliding bug on slopes
  • Add new unit test for ramps bug
  • fix stop exactly with any controller. Add rolling resistance
  • new PID tuning tool
  • add backwards compat method
  • Merge pull request #93 from MRPT/feat/add-trajectory-tests Add unit test for vehicle trajectory
  • CsvLogger: feature not to write to disk
  • minor edits in demo world
  • Fix bug in velocity composition
  • Clearer distinction between COM and REF point velocities
  • Add unit test for vehicle trajectory
  • Merge pull request #92 from MRPT/feat/truck-trailer-demo Feat/truck-trailer-demo
  • DefaultFriction: fix missing logged variables
  • Add new Ackermann ideal twist controller
  • Revert "fix bug in setTwist()": it was actually a serious regression This reverts commit 07a9fd2a0ab5b4665a4f2d07638f75c1737dbdec.
  • clang-tidy warning fixes
  • Add env var MVSIM_COLLISION_SHAPE_CACHE_VERBOSE
  • Contributors: Jose Luis Blanco-Claraco

1.1.0 (2026-02-16)

  • Merge pull request #91 from MRPT/fix/lidar-3d Lidar3D: fix min clip bug; add real intensity color
  • Lidar3D: fix min clip bug; add real intensity color
  • Contributors: Jose Luis Blanco-Claraco

1.0.0 (2026-02-08)

  • Merge pull request #89 from MRPT/fix/elevation-2-wheels Fix elevation maps for 2-wheels vehicles
  • Merge pull request #88 from MRPT/feat/human-actors Add: human actors
  • Merge pull request #86 from MRPT/feat/publish-log-to-ros Optional publish to ROS2 all CsvLogger entries
  • Merge pull request #85 from MRPT/feat/per-block-scale Feat/per-block-scale
  • Implement per block scale (Fixes #38)
  • Merge pull request #84 from MRPT/fix/box2d-bugs Fix/box2d-bugs
  • docs: add ROS2 topics
  • fix bug in setTwist()
  • Fix wrong collision detection (Fixes #42)
  • Fix linear acceleration
  • Merge pull request #83 from MRPT/feat/new-joints Implement joints between archors
  • Demo worlds: update to add RGBD camera in greenhouse
  • ROS node: fix missing publication of RGBD CameraInfo for RGB channel
  • Merge pull request #82 from MRPT/feat/rgbd-publish-new-types RGBD cameras: implement publishing depth and RGB clouds
  • RGBD cameras: implement publishing depth and RGB clouds
  • Merge pull request #81 from MRPT/fix/py-bytes Fix: use py-bytes
  • Fix trying to decode strings as utf-8 (Closes #62)
  • Merge pull request #80 from MRPT/feat/imu-noise IMU: add random walk and fix bug in

File truncated at 100 lines see the full file

Launch files

  • launch/launch_world.launch
    • Generic ROS1 launch file
      • world_file
      • headless [default: False]
      • do_fake_localization [default: True]
      • publish_tf_odom2baselink [default: True]
      • force_publish_vehicle_namespace [default: False]
      • use_rviz [default: True]
      • rviz_config_file [default: $(find mvsim)/mvsim_tutorial/demo_depth_camera.rviz]
  • mvsim_tutorial/ros1_1robot.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_1robot.world.xml]
      • mvsim_do_fake_localization [default: true]
  • mvsim_tutorial/ros1_2robots.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_2robots.world.xml]
  • mvsim_tutorial/ros1_camera.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_camera.world.xml]
  • mvsim_tutorial/ros1_depth_camera.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_depth_camera.world.xml]
  • mvsim_tutorial/ros1_greenhouse.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_greenhouse.world.xml]
      • headless [default: false]
  • mvsim_tutorial/ros1_jackal.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_jackal.world.xml]
  • mvsim_tutorial/ros1_turtlebot_world.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_turtlebot_world.world.xml]
  • mvsim_tutorial/ros1_warehouse.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_warehouse.world.xml]

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged mvsim at Robotics Stack Exchange

No version for distro hydro showing humble. Known supported distros are highlighted in the buttons above.
Package symbol

mvsim package from mvsim repo

mvsim

ROS Distro
humble

Package Summary

Version 1.3.0
License BSD
Build type CATKIN
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/MRPT/mvsim.git
VCS Type git
VCS Version develop
Last Updated 2026-03-17
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

A lightweight multivehicle simulation framework.

Additional Links

Maintainers

  • Jose-Luis Blanco-Claraco

Authors

No additional authors.
MVSim logo # MultiVehicle Simulator (MVSim) **Lightweight, realistic 2.5D dynamics simulator for mobile robots and multi-agent research** [![CI Linux](https://github.com/MRPT/mvsim/actions/workflows/build-linux.yml/badge.svg)](https://github.com/MRPT/mvsim/actions/workflows/build-linux.yml) [![Check clang-format](https://github.com/MRPT/mvsim/actions/workflows/check-clang-format.yml/badge.svg)](https://github.com/MRPT/mvsim/actions/workflows/check-clang-format.yml) [![Documentation](https://readthedocs.org/projects/mvsimulator/badge/?version=latest)](https://mvsimulator.readthedocs.io/en/latest/?badge=latest) [![License](https://img.shields.io/badge/license-BSD%203--Clause-blue.svg)](LICENSE) [**Documentation**](https://mvsimulator.readthedocs.io) · [**Installation**](https://mvsimulator.readthedocs.io/en/latest/install.html) · [**Demo worlds**](https://mvsimulator.readthedocs.io/en/latest/demo_worlds.html) · [**Cite**](#citation)

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

sudo apt install ros-$ROS_DISTRO-mvsim

Then follow the first-steps guide.

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:

```bash mvsim launch mvsim_tutorial/demo_warehouse.world.xml

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package mvsim

1.3.0 (2026-03-17)

  • docs: add logo to web
  • Modernize README
  • Clean up leftovers from temporary benchmark code
  • Creation of .rawlog files use ZStd if available
  • walls demo world: make all walls same thickness, and expose optional env var
  • Add MVSIM_SAVE_RAWLOG_FILENAME env var to some demo worlds
  • XML parser: env vars now can have a default value
  • docs: fix wrong referenc for {} usage
  • remove leftover dep
  • Merge pull request #95 from MRPT/nav-benchmark-greenhouse Nav benchmark greenhouse
  • Merge branch 'develop' into nav-benchmark-greenhouse
  • Add auto_start_recording property to vehicles
  • logistic center demo: add lidar sensors
  • Remove temporary adaptative friction class
  • remove temporary deps
  • Refactoring to use CsvLogger (by Claude Opus)
  • Refactor torque calculation by removing comments and logger Removed logging and comments related to torque calculation.
  • Changes for control benchmark paper
  • Contributors: Fernando Cañadas Aránega, Jose Luis Blanco-Claraco

1.2.0 (2026-02-24)

  • Merge pull request #94 from MRPT/feat/tune-pid Feature: tune pid
  • Support zones with different friction and rolling resistance
  • Better docs, expose more params
  • FIX: sliding bug on slopes
  • Add new unit test for ramps bug
  • fix stop exactly with any controller. Add rolling resistance
  • new PID tuning tool
  • add backwards compat method
  • Merge pull request #93 from MRPT/feat/add-trajectory-tests Add unit test for vehicle trajectory
  • CsvLogger: feature not to write to disk
  • minor edits in demo world
  • Fix bug in velocity composition
  • Clearer distinction between COM and REF point velocities
  • Add unit test for vehicle trajectory
  • Merge pull request #92 from MRPT/feat/truck-trailer-demo Feat/truck-trailer-demo
  • DefaultFriction: fix missing logged variables
  • Add new Ackermann ideal twist controller
  • Revert "fix bug in setTwist()": it was actually a serious regression This reverts commit 07a9fd2a0ab5b4665a4f2d07638f75c1737dbdec.
  • clang-tidy warning fixes
  • Add env var MVSIM_COLLISION_SHAPE_CACHE_VERBOSE
  • Contributors: Jose Luis Blanco-Claraco

1.1.0 (2026-02-16)

  • Merge pull request #91 from MRPT/fix/lidar-3d Lidar3D: fix min clip bug; add real intensity color
  • Lidar3D: fix min clip bug; add real intensity color
  • Contributors: Jose Luis Blanco-Claraco

1.0.0 (2026-02-08)

  • Merge pull request #89 from MRPT/fix/elevation-2-wheels Fix elevation maps for 2-wheels vehicles
  • Merge pull request #88 from MRPT/feat/human-actors Add: human actors
  • Merge pull request #86 from MRPT/feat/publish-log-to-ros Optional publish to ROS2 all CsvLogger entries
  • Merge pull request #85 from MRPT/feat/per-block-scale Feat/per-block-scale
  • Implement per block scale (Fixes #38)
  • Merge pull request #84 from MRPT/fix/box2d-bugs Fix/box2d-bugs
  • docs: add ROS2 topics
  • fix bug in setTwist()
  • Fix wrong collision detection (Fixes #42)
  • Fix linear acceleration
  • Merge pull request #83 from MRPT/feat/new-joints Implement joints between archors
  • Demo worlds: update to add RGBD camera in greenhouse
  • ROS node: fix missing publication of RGBD CameraInfo for RGB channel
  • Merge pull request #82 from MRPT/feat/rgbd-publish-new-types RGBD cameras: implement publishing depth and RGB clouds
  • RGBD cameras: implement publishing depth and RGB clouds
  • Merge pull request #81 from MRPT/fix/py-bytes Fix: use py-bytes
  • Fix trying to decode strings as utf-8 (Closes #62)
  • Merge pull request #80 from MRPT/feat/imu-noise IMU: add random walk and fix bug in

File truncated at 100 lines see the full file

Launch files

  • launch/launch_world.launch
    • Generic ROS1 launch file
      • world_file
      • headless [default: False]
      • do_fake_localization [default: True]
      • publish_tf_odom2baselink [default: True]
      • force_publish_vehicle_namespace [default: False]
      • use_rviz [default: True]
      • rviz_config_file [default: $(find mvsim)/mvsim_tutorial/demo_depth_camera.rviz]
  • mvsim_tutorial/ros1_1robot.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_1robot.world.xml]
      • mvsim_do_fake_localization [default: true]
  • mvsim_tutorial/ros1_2robots.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_2robots.world.xml]
  • mvsim_tutorial/ros1_camera.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_camera.world.xml]
  • mvsim_tutorial/ros1_depth_camera.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_depth_camera.world.xml]
  • mvsim_tutorial/ros1_greenhouse.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_greenhouse.world.xml]
      • headless [default: false]
  • mvsim_tutorial/ros1_jackal.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_jackal.world.xml]
  • mvsim_tutorial/ros1_turtlebot_world.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_turtlebot_world.world.xml]
  • mvsim_tutorial/ros1_warehouse.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_warehouse.world.xml]

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged mvsim at Robotics Stack Exchange

Package symbol

mvsim package from mvsim repo

mvsim

ROS Distro
kinetic

Package Summary

Version 1.3.0
License BSD
Build type CATKIN
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/ual-arm-ros-pkg/mvsim.git
VCS Type git
VCS Version master
Last Updated 2026-03-17
Dev Status MAINTAINED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

A lightweight multivehicle simulation framework.

Additional Links

Maintainers

  • Jose-Luis Blanco-Claraco

Authors

No additional authors.
MVSim logo # MultiVehicle Simulator (MVSim) **Lightweight, realistic 2.5D dynamics simulator for mobile robots and multi-agent research** [![CI Linux](https://github.com/MRPT/mvsim/actions/workflows/build-linux.yml/badge.svg)](https://github.com/MRPT/mvsim/actions/workflows/build-linux.yml) [![Check clang-format](https://github.com/MRPT/mvsim/actions/workflows/check-clang-format.yml/badge.svg)](https://github.com/MRPT/mvsim/actions/workflows/check-clang-format.yml) [![Documentation](https://readthedocs.org/projects/mvsimulator/badge/?version=latest)](https://mvsimulator.readthedocs.io/en/latest/?badge=latest) [![License](https://img.shields.io/badge/license-BSD%203--Clause-blue.svg)](LICENSE) [**Documentation**](https://mvsimulator.readthedocs.io) · [**Installation**](https://mvsimulator.readthedocs.io/en/latest/install.html) · [**Demo worlds**](https://mvsimulator.readthedocs.io/en/latest/demo_worlds.html) · [**Cite**](#citation)

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

sudo apt install ros-$ROS_DISTRO-mvsim

Then follow the first-steps guide.

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:

```bash mvsim launch mvsim_tutorial/demo_warehouse.world.xml

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package mvsim

1.3.0 (2026-03-17)

  • docs: add logo to web
  • Modernize README
  • Clean up leftovers from temporary benchmark code
  • Creation of .rawlog files use ZStd if available
  • walls demo world: make all walls same thickness, and expose optional env var
  • Add MVSIM_SAVE_RAWLOG_FILENAME env var to some demo worlds
  • XML parser: env vars now can have a default value
  • docs: fix wrong referenc for {} usage
  • remove leftover dep
  • Merge pull request #95 from MRPT/nav-benchmark-greenhouse Nav benchmark greenhouse
  • Merge branch 'develop' into nav-benchmark-greenhouse
  • Add auto_start_recording property to vehicles
  • logistic center demo: add lidar sensors
  • Remove temporary adaptative friction class
  • remove temporary deps
  • Refactoring to use CsvLogger (by Claude Opus)
  • Refactor torque calculation by removing comments and logger Removed logging and comments related to torque calculation.
  • Changes for control benchmark paper
  • Contributors: Fernando Cañadas Aránega, Jose Luis Blanco-Claraco

1.2.0 (2026-02-24)

  • Merge pull request #94 from MRPT/feat/tune-pid Feature: tune pid
  • Support zones with different friction and rolling resistance
  • Better docs, expose more params
  • FIX: sliding bug on slopes
  • Add new unit test for ramps bug
  • fix stop exactly with any controller. Add rolling resistance
  • new PID tuning tool
  • add backwards compat method
  • Merge pull request #93 from MRPT/feat/add-trajectory-tests Add unit test for vehicle trajectory
  • CsvLogger: feature not to write to disk
  • minor edits in demo world
  • Fix bug in velocity composition
  • Clearer distinction between COM and REF point velocities
  • Add unit test for vehicle trajectory
  • Merge pull request #92 from MRPT/feat/truck-trailer-demo Feat/truck-trailer-demo
  • DefaultFriction: fix missing logged variables
  • Add new Ackermann ideal twist controller
  • Revert "fix bug in setTwist()": it was actually a serious regression This reverts commit 07a9fd2a0ab5b4665a4f2d07638f75c1737dbdec.
  • clang-tidy warning fixes
  • Add env var MVSIM_COLLISION_SHAPE_CACHE_VERBOSE
  • Contributors: Jose Luis Blanco-Claraco

1.1.0 (2026-02-16)

  • Merge pull request #91 from MRPT/fix/lidar-3d Lidar3D: fix min clip bug; add real intensity color
  • Lidar3D: fix min clip bug; add real intensity color
  • Contributors: Jose Luis Blanco-Claraco

1.0.0 (2026-02-08)

  • Merge pull request #89 from MRPT/fix/elevation-2-wheels Fix elevation maps for 2-wheels vehicles
  • Merge pull request #88 from MRPT/feat/human-actors Add: human actors
  • Merge pull request #86 from MRPT/feat/publish-log-to-ros Optional publish to ROS2 all CsvLogger entries
  • Merge pull request #85 from MRPT/feat/per-block-scale Feat/per-block-scale
  • Implement per block scale (Fixes #38)
  • Merge pull request #84 from MRPT/fix/box2d-bugs Fix/box2d-bugs
  • docs: add ROS2 topics
  • fix bug in setTwist()
  • Fix wrong collision detection (Fixes #42)
  • Fix linear acceleration
  • Merge pull request #83 from MRPT/feat/new-joints Implement joints between archors
  • Demo worlds: update to add RGBD camera in greenhouse
  • ROS node: fix missing publication of RGBD CameraInfo for RGB channel
  • Merge pull request #82 from MRPT/feat/rgbd-publish-new-types RGBD cameras: implement publishing depth and RGB clouds
  • RGBD cameras: implement publishing depth and RGB clouds
  • Merge pull request #81 from MRPT/fix/py-bytes Fix: use py-bytes
  • Fix trying to decode strings as utf-8 (Closes #62)
  • Merge pull request #80 from MRPT/feat/imu-noise IMU: add random walk and fix bug in

File truncated at 100 lines see the full file

Launch files

  • launch/launch_world.launch
    • Generic ROS1 launch file
      • world_file
      • headless [default: False]
      • do_fake_localization [default: True]
      • publish_tf_odom2baselink [default: True]
      • force_publish_vehicle_namespace [default: False]
      • use_rviz [default: True]
      • rviz_config_file [default: $(find mvsim)/mvsim_tutorial/demo_depth_camera.rviz]
  • mvsim_tutorial/ros1_1robot.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_1robot.world.xml]
      • mvsim_do_fake_localization [default: true]
  • mvsim_tutorial/ros1_2robots.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_2robots.world.xml]
  • mvsim_tutorial/ros1_camera.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_camera.world.xml]
  • mvsim_tutorial/ros1_depth_camera.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_depth_camera.world.xml]
  • mvsim_tutorial/ros1_greenhouse.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_greenhouse.world.xml]
      • headless [default: false]
  • mvsim_tutorial/ros1_jackal.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_jackal.world.xml]
  • mvsim_tutorial/ros1_turtlebot_world.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_turtlebot_world.world.xml]
  • mvsim_tutorial/ros1_warehouse.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_warehouse.world.xml]

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged mvsim at Robotics Stack Exchange

Package symbol

mvsim package from mvsim repo

mvsim

ROS Distro
melodic

Package Summary

Version 1.3.0
License BSD
Build type CATKIN
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/MRPT/mvsim.git
VCS Type git
VCS Version develop
Last Updated 2026-03-17
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

A lightweight multivehicle simulation framework.

Additional Links

Maintainers

  • Jose-Luis Blanco-Claraco

Authors

No additional authors.
MVSim logo # MultiVehicle Simulator (MVSim) **Lightweight, realistic 2.5D dynamics simulator for mobile robots and multi-agent research** [![CI Linux](https://github.com/MRPT/mvsim/actions/workflows/build-linux.yml/badge.svg)](https://github.com/MRPT/mvsim/actions/workflows/build-linux.yml) [![Check clang-format](https://github.com/MRPT/mvsim/actions/workflows/check-clang-format.yml/badge.svg)](https://github.com/MRPT/mvsim/actions/workflows/check-clang-format.yml) [![Documentation](https://readthedocs.org/projects/mvsimulator/badge/?version=latest)](https://mvsimulator.readthedocs.io/en/latest/?badge=latest) [![License](https://img.shields.io/badge/license-BSD%203--Clause-blue.svg)](LICENSE) [**Documentation**](https://mvsimulator.readthedocs.io) · [**Installation**](https://mvsimulator.readthedocs.io/en/latest/install.html) · [**Demo worlds**](https://mvsimulator.readthedocs.io/en/latest/demo_worlds.html) · [**Cite**](#citation)

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

sudo apt install ros-$ROS_DISTRO-mvsim

Then follow the first-steps guide.

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:

```bash mvsim launch mvsim_tutorial/demo_warehouse.world.xml

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package mvsim

1.3.0 (2026-03-17)

  • docs: add logo to web
  • Modernize README
  • Clean up leftovers from temporary benchmark code
  • Creation of .rawlog files use ZStd if available
  • walls demo world: make all walls same thickness, and expose optional env var
  • Add MVSIM_SAVE_RAWLOG_FILENAME env var to some demo worlds
  • XML parser: env vars now can have a default value
  • docs: fix wrong referenc for {} usage
  • remove leftover dep
  • Merge pull request #95 from MRPT/nav-benchmark-greenhouse Nav benchmark greenhouse
  • Merge branch 'develop' into nav-benchmark-greenhouse
  • Add auto_start_recording property to vehicles
  • logistic center demo: add lidar sensors
  • Remove temporary adaptative friction class
  • remove temporary deps
  • Refactoring to use CsvLogger (by Claude Opus)
  • Refactor torque calculation by removing comments and logger Removed logging and comments related to torque calculation.
  • Changes for control benchmark paper
  • Contributors: Fernando Cañadas Aránega, Jose Luis Blanco-Claraco

1.2.0 (2026-02-24)

  • Merge pull request #94 from MRPT/feat/tune-pid Feature: tune pid
  • Support zones with different friction and rolling resistance
  • Better docs, expose more params
  • FIX: sliding bug on slopes
  • Add new unit test for ramps bug
  • fix stop exactly with any controller. Add rolling resistance
  • new PID tuning tool
  • add backwards compat method
  • Merge pull request #93 from MRPT/feat/add-trajectory-tests Add unit test for vehicle trajectory
  • CsvLogger: feature not to write to disk
  • minor edits in demo world
  • Fix bug in velocity composition
  • Clearer distinction between COM and REF point velocities
  • Add unit test for vehicle trajectory
  • Merge pull request #92 from MRPT/feat/truck-trailer-demo Feat/truck-trailer-demo
  • DefaultFriction: fix missing logged variables
  • Add new Ackermann ideal twist controller
  • Revert "fix bug in setTwist()": it was actually a serious regression This reverts commit 07a9fd2a0ab5b4665a4f2d07638f75c1737dbdec.
  • clang-tidy warning fixes
  • Add env var MVSIM_COLLISION_SHAPE_CACHE_VERBOSE
  • Contributors: Jose Luis Blanco-Claraco

1.1.0 (2026-02-16)

  • Merge pull request #91 from MRPT/fix/lidar-3d Lidar3D: fix min clip bug; add real intensity color
  • Lidar3D: fix min clip bug; add real intensity color
  • Contributors: Jose Luis Blanco-Claraco

1.0.0 (2026-02-08)

  • Merge pull request #89 from MRPT/fix/elevation-2-wheels Fix elevation maps for 2-wheels vehicles
  • Merge pull request #88 from MRPT/feat/human-actors Add: human actors
  • Merge pull request #86 from MRPT/feat/publish-log-to-ros Optional publish to ROS2 all CsvLogger entries
  • Merge pull request #85 from MRPT/feat/per-block-scale Feat/per-block-scale
  • Implement per block scale (Fixes #38)
  • Merge pull request #84 from MRPT/fix/box2d-bugs Fix/box2d-bugs
  • docs: add ROS2 topics
  • fix bug in setTwist()
  • Fix wrong collision detection (Fixes #42)
  • Fix linear acceleration
  • Merge pull request #83 from MRPT/feat/new-joints Implement joints between archors
  • Demo worlds: update to add RGBD camera in greenhouse
  • ROS node: fix missing publication of RGBD CameraInfo for RGB channel
  • Merge pull request #82 from MRPT/feat/rgbd-publish-new-types RGBD cameras: implement publishing depth and RGB clouds
  • RGBD cameras: implement publishing depth and RGB clouds
  • Merge pull request #81 from MRPT/fix/py-bytes Fix: use py-bytes
  • Fix trying to decode strings as utf-8 (Closes #62)
  • Merge pull request #80 from MRPT/feat/imu-noise IMU: add random walk and fix bug in

File truncated at 100 lines see the full file

Launch files

  • launch/launch_world.launch
    • Generic ROS1 launch file
      • world_file
      • headless [default: False]
      • do_fake_localization [default: True]
      • publish_tf_odom2baselink [default: True]
      • force_publish_vehicle_namespace [default: False]
      • use_rviz [default: True]
      • rviz_config_file [default: $(find mvsim)/mvsim_tutorial/demo_depth_camera.rviz]
  • mvsim_tutorial/ros1_1robot.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_1robot.world.xml]
      • mvsim_do_fake_localization [default: true]
  • mvsim_tutorial/ros1_2robots.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_2robots.world.xml]
  • mvsim_tutorial/ros1_camera.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_camera.world.xml]
  • mvsim_tutorial/ros1_depth_camera.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_depth_camera.world.xml]
  • mvsim_tutorial/ros1_greenhouse.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_greenhouse.world.xml]
      • headless [default: false]
  • mvsim_tutorial/ros1_jackal.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_jackal.world.xml]
  • mvsim_tutorial/ros1_turtlebot_world.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_turtlebot_world.world.xml]
  • mvsim_tutorial/ros1_warehouse.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_warehouse.world.xml]

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged mvsim at Robotics Stack Exchange

Package symbol

mvsim package from mvsim repo

mvsim

ROS Distro
noetic

Package Summary

Version 1.3.0
License BSD
Build type CATKIN
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/ual-arm-ros-pkg/mvsim.git
VCS Type git
VCS Version develop
Last Updated 2026-03-17
Dev Status MAINTAINED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

A lightweight multivehicle simulation framework.

Additional Links

Maintainers

  • Jose-Luis Blanco-Claraco

Authors

No additional authors.
MVSim logo # MultiVehicle Simulator (MVSim) **Lightweight, realistic 2.5D dynamics simulator for mobile robots and multi-agent research** [![CI Linux](https://github.com/MRPT/mvsim/actions/workflows/build-linux.yml/badge.svg)](https://github.com/MRPT/mvsim/actions/workflows/build-linux.yml) [![Check clang-format](https://github.com/MRPT/mvsim/actions/workflows/check-clang-format.yml/badge.svg)](https://github.com/MRPT/mvsim/actions/workflows/check-clang-format.yml) [![Documentation](https://readthedocs.org/projects/mvsimulator/badge/?version=latest)](https://mvsimulator.readthedocs.io/en/latest/?badge=latest) [![License](https://img.shields.io/badge/license-BSD%203--Clause-blue.svg)](LICENSE) [**Documentation**](https://mvsimulator.readthedocs.io) · [**Installation**](https://mvsimulator.readthedocs.io/en/latest/install.html) · [**Demo worlds**](https://mvsimulator.readthedocs.io/en/latest/demo_worlds.html) · [**Cite**](#citation)

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

sudo apt install ros-$ROS_DISTRO-mvsim

Then follow the first-steps guide.

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:

```bash mvsim launch mvsim_tutorial/demo_warehouse.world.xml

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package mvsim

1.3.0 (2026-03-17)

  • docs: add logo to web
  • Modernize README
  • Clean up leftovers from temporary benchmark code
  • Creation of .rawlog files use ZStd if available
  • walls demo world: make all walls same thickness, and expose optional env var
  • Add MVSIM_SAVE_RAWLOG_FILENAME env var to some demo worlds
  • XML parser: env vars now can have a default value
  • docs: fix wrong referenc for {} usage
  • remove leftover dep
  • Merge pull request #95 from MRPT/nav-benchmark-greenhouse Nav benchmark greenhouse
  • Merge branch 'develop' into nav-benchmark-greenhouse
  • Add auto_start_recording property to vehicles
  • logistic center demo: add lidar sensors
  • Remove temporary adaptative friction class
  • remove temporary deps
  • Refactoring to use CsvLogger (by Claude Opus)
  • Refactor torque calculation by removing comments and logger Removed logging and comments related to torque calculation.
  • Changes for control benchmark paper
  • Contributors: Fernando Cañadas Aránega, Jose Luis Blanco-Claraco

1.2.0 (2026-02-24)

  • Merge pull request #94 from MRPT/feat/tune-pid Feature: tune pid
  • Support zones with different friction and rolling resistance
  • Better docs, expose more params
  • FIX: sliding bug on slopes
  • Add new unit test for ramps bug
  • fix stop exactly with any controller. Add rolling resistance
  • new PID tuning tool
  • add backwards compat method
  • Merge pull request #93 from MRPT/feat/add-trajectory-tests Add unit test for vehicle trajectory
  • CsvLogger: feature not to write to disk
  • minor edits in demo world
  • Fix bug in velocity composition
  • Clearer distinction between COM and REF point velocities
  • Add unit test for vehicle trajectory
  • Merge pull request #92 from MRPT/feat/truck-trailer-demo Feat/truck-trailer-demo
  • DefaultFriction: fix missing logged variables
  • Add new Ackermann ideal twist controller
  • Revert "fix bug in setTwist()": it was actually a serious regression This reverts commit 07a9fd2a0ab5b4665a4f2d07638f75c1737dbdec.
  • clang-tidy warning fixes
  • Add env var MVSIM_COLLISION_SHAPE_CACHE_VERBOSE
  • Contributors: Jose Luis Blanco-Claraco

1.1.0 (2026-02-16)

  • Merge pull request #91 from MRPT/fix/lidar-3d Lidar3D: fix min clip bug; add real intensity color
  • Lidar3D: fix min clip bug; add real intensity color
  • Contributors: Jose Luis Blanco-Claraco

1.0.0 (2026-02-08)

  • Merge pull request #89 from MRPT/fix/elevation-2-wheels Fix elevation maps for 2-wheels vehicles
  • Merge pull request #88 from MRPT/feat/human-actors Add: human actors
  • Merge pull request #86 from MRPT/feat/publish-log-to-ros Optional publish to ROS2 all CsvLogger entries
  • Merge pull request #85 from MRPT/feat/per-block-scale Feat/per-block-scale
  • Implement per block scale (Fixes #38)
  • Merge pull request #84 from MRPT/fix/box2d-bugs Fix/box2d-bugs
  • docs: add ROS2 topics
  • fix bug in setTwist()
  • Fix wrong collision detection (Fixes #42)
  • Fix linear acceleration
  • Merge pull request #83 from MRPT/feat/new-joints Implement joints between archors
  • Demo worlds: update to add RGBD camera in greenhouse
  • ROS node: fix missing publication of RGBD CameraInfo for RGB channel
  • Merge pull request #82 from MRPT/feat/rgbd-publish-new-types RGBD cameras: implement publishing depth and RGB clouds
  • RGBD cameras: implement publishing depth and RGB clouds
  • Merge pull request #81 from MRPT/fix/py-bytes Fix: use py-bytes
  • Fix trying to decode strings as utf-8 (Closes #62)
  • Merge pull request #80 from MRPT/feat/imu-noise IMU: add random walk and fix bug in

File truncated at 100 lines see the full file

Launch files

  • launch/launch_world.launch
    • Generic ROS1 launch file
      • world_file
      • headless [default: False]
      • do_fake_localization [default: True]
      • publish_tf_odom2baselink [default: True]
      • force_publish_vehicle_namespace [default: False]
      • use_rviz [default: True]
      • rviz_config_file [default: $(find mvsim)/mvsim_tutorial/demo_depth_camera.rviz]
  • mvsim_tutorial/ros1_1robot.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_1robot.world.xml]
      • mvsim_do_fake_localization [default: true]
  • mvsim_tutorial/ros1_2robots.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_2robots.world.xml]
  • mvsim_tutorial/ros1_camera.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_camera.world.xml]
  • mvsim_tutorial/ros1_depth_camera.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_depth_camera.world.xml]
  • mvsim_tutorial/ros1_greenhouse.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_greenhouse.world.xml]
      • headless [default: false]
  • mvsim_tutorial/ros1_jackal.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_jackal.world.xml]
  • mvsim_tutorial/ros1_turtlebot_world.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_turtlebot_world.world.xml]
  • mvsim_tutorial/ros1_warehouse.launch
    • ROS1 launch file. See *.launch.py files for ROS2 launch files
      • world_file [default: $(find mvsim)/mvsim_tutorial/demo_warehouse.world.xml]

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged mvsim at Robotics Stack Exchange