Package Summary
| Version | 1.2.0 |
| License | BSD |
| Build type | CATKIN |
| Use | RECOMMENDED |
Repository Summary
| Description | |
| Checkout URI | https://github.com/MRPT/mvsim.git |
| VCS Type | git |
| VCS Version | develop |
| Last Updated | 2026-03-01 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Jose-Luis Blanco-Claraco
Authors
MultiVehicle simulator (MVSim)
Lightweight, realistic dynamical simulator for 2D (“2.5D”) vehicles and robots. It is tailored to analysis of vehicle dynamics, wheel-ground contact forces and accurate simulation of typical robot sensors (e.g. 2D and 3D lidars).
This package includes C++ libraries, standalone applications, and ROS 1 and ROS 2 nodes.
License: 3-clause BSD License Copyright (C) 2014-2026 Jose Luis Blanco jlblanco@ual.es (University of Almeria) and collaborators
Please, refer to the MVSim SoftwareX paper (or the ArXiV preprint) for a gentle introduction to the project architecture. If you want to cite MVSim in your work, please use:
@article{blanco2023mvsim,
title = {MultiVehicle Simulator (MVSim): Lightweight dynamics simulator for multiagents and mobile robotics research},
journal = {SoftwareX},
volume = {23},
pages = {101443},
year = {2023},
issn = {2352-7110},
doi = {https://doi.org/10.1016/j.softx.2023.101443},
url = {https://www.sciencedirect.com/science/article/pii/S2352711023001395},
author = {José-Luis Blanco-Claraco and Borys Tymchenko and Francisco José Mañas-Alvarez and Fernando Cañadas-Aránega and Ángel López-Gázquez and José Carlos Moreno}
}
ROSCon talk
Spanish talk with English slides and subtitles (slides here):
Installation
See installation documentation for all the details and options.
The easiest way to install if you already have ROS 1 or ROS 2 is:
sudo apt install ros-$ROS_DISTRO-mvsim
Then jump to next steps to see how to launch some of the demo worlds.
Demo videos
https://github.com/user-attachments/assets/766db164-2d16-44f4-acbf-2f15b73c1ab3

https://github.com/user-attachments/assets/93c95aeb-71e9-4c35-b1dc-ba895c79daf7
Build matrix status
| Distro | Build dev | Build releases | Stable version |
|---|---|---|---|
| ROS 2 Humble (u22.04) | amd64 arm64 |
||
| ROS 2 Jazzy @ u24.04 | amd64 arm64 |
||
| ROS 2 Kilted @ u24.04 | amd64 arm64 |
||
| ROS 2 Rolling (u24.04) | amd64 arm64 |
| EOL distro | Stable version |
|---|---|
| ROS 1 Melodic (u18.04) | |
| ROS 1 Noetic (u20.04) | |
| ROS 2 Foxy (u20.04) | |
| ROS 2 Iron (u22.04) |
Docs
If you clone this repository, remember to checkout the git submodules too:
git clone https://github.com/MRPT/mvsim.git --recursive
Launch demos
See more on first steps here.
Standalone:
mvsim launch mvsim_tutorial/demo_warehouse.world.xml
mvsim launch mvsim_tutorial/demo_2robots.world.xml
mvsim launch mvsim_tutorial/test_mesh.world.xml
File truncated at 100 lines see the full file
Changelog for package mvsim
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 acceleration
- Fix g sign
- Bump copyright year
- BUG FIX: Fix wrong linear acceleration in IMU readings
- Implement IMU noise model with random walk biases
- Rename ROS1 launch files so they don't interfere with autocomplete for ROS2
- indoor_outdoor demo: add IMU to robot
- Contributors: Jose Luis Blanco-Claraco
0.16.0 (2026-01-29)
- docs: add new demo worlds
- Remove debian leftover
- Merge pull request #78 from MRPT/feat/new-indoor-outdoor-world Feat/new-indoor-outdoor-world
- fix: ros node didn't publish CGenericPointsMap
- Functional walls with doors and windows with thickness
- Update vertical plane to have doors, windows, and thickness
- fix: lidar3d error with latest mrpt api
- docs: improve vehicles and physics docs
- CircleCI: update to build for u22.04
- Remove #if pragmas for too old mrpt versions
- Implement GNSS honor 'gps_no_coverage' property
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Dependant Packages
| Name | Deps |
|---|---|
| mrpt_tutorials | |
| mrpt_path_planning |
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
Services
Plugins
Recent questions tagged mvsim at Robotics Stack Exchange
Package Summary
| Version | 1.2.0 |
| License | BSD |
| Build type | CATKIN |
| Use | RECOMMENDED |
Repository Summary
| Description | |
| Checkout URI | https://github.com/MRPT/mvsim.git |
| VCS Type | git |
| VCS Version | develop |
| Last Updated | 2026-03-01 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Jose-Luis Blanco-Claraco
Authors
MultiVehicle simulator (MVSim)
Lightweight, realistic dynamical simulator for 2D (“2.5D”) vehicles and robots. It is tailored to analysis of vehicle dynamics, wheel-ground contact forces and accurate simulation of typical robot sensors (e.g. 2D and 3D lidars).
This package includes C++ libraries, standalone applications, and ROS 1 and ROS 2 nodes.
License: 3-clause BSD License Copyright (C) 2014-2026 Jose Luis Blanco jlblanco@ual.es (University of Almeria) and collaborators
Please, refer to the MVSim SoftwareX paper (or the ArXiV preprint) for a gentle introduction to the project architecture. If you want to cite MVSim in your work, please use:
@article{blanco2023mvsim,
title = {MultiVehicle Simulator (MVSim): Lightweight dynamics simulator for multiagents and mobile robotics research},
journal = {SoftwareX},
volume = {23},
pages = {101443},
year = {2023},
issn = {2352-7110},
doi = {https://doi.org/10.1016/j.softx.2023.101443},
url = {https://www.sciencedirect.com/science/article/pii/S2352711023001395},
author = {José-Luis Blanco-Claraco and Borys Tymchenko and Francisco José Mañas-Alvarez and Fernando Cañadas-Aránega and Ángel López-Gázquez and José Carlos Moreno}
}
ROSCon talk
Spanish talk with English slides and subtitles (slides here):
Installation
See installation documentation for all the details and options.
The easiest way to install if you already have ROS 1 or ROS 2 is:
sudo apt install ros-$ROS_DISTRO-mvsim
Then jump to next steps to see how to launch some of the demo worlds.
Demo videos
https://github.com/user-attachments/assets/766db164-2d16-44f4-acbf-2f15b73c1ab3

https://github.com/user-attachments/assets/93c95aeb-71e9-4c35-b1dc-ba895c79daf7
Build matrix status
| Distro | Build dev | Build releases | Stable version |
|---|---|---|---|
| ROS 2 Humble (u22.04) | amd64 arm64 |
||
| ROS 2 Jazzy @ u24.04 | amd64 arm64 |
||
| ROS 2 Kilted @ u24.04 | amd64 arm64 |
||
| ROS 2 Rolling (u24.04) | amd64 arm64 |
| EOL distro | Stable version |
|---|---|
| ROS 1 Melodic (u18.04) | |
| ROS 1 Noetic (u20.04) | |
| ROS 2 Foxy (u20.04) | |
| ROS 2 Iron (u22.04) |
Docs
If you clone this repository, remember to checkout the git submodules too:
git clone https://github.com/MRPT/mvsim.git --recursive
Launch demos
See more on first steps here.
Standalone:
mvsim launch mvsim_tutorial/demo_warehouse.world.xml
mvsim launch mvsim_tutorial/demo_2robots.world.xml
mvsim launch mvsim_tutorial/test_mesh.world.xml
File truncated at 100 lines see the full file
Changelog for package mvsim
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 acceleration
- Fix g sign
- Bump copyright year
- BUG FIX: Fix wrong linear acceleration in IMU readings
- Implement IMU noise model with random walk biases
- Rename ROS1 launch files so they don't interfere with autocomplete for ROS2
- indoor_outdoor demo: add IMU to robot
- Contributors: Jose Luis Blanco-Claraco
0.16.0 (2026-01-29)
- docs: add new demo worlds
- Remove debian leftover
- Merge pull request #78 from MRPT/feat/new-indoor-outdoor-world Feat/new-indoor-outdoor-world
- fix: ros node didn't publish CGenericPointsMap
- Functional walls with doors and windows with thickness
- Update vertical plane to have doors, windows, and thickness
- fix: lidar3d error with latest mrpt api
- docs: improve vehicles and physics docs
- CircleCI: update to build for u22.04
- Remove #if pragmas for too old mrpt versions
- Implement GNSS honor 'gps_no_coverage' property
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Dependant Packages
| Name | Deps |
|---|---|
| mrpt_tutorials | |
| mrpt_path_planning |
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
Services
Plugins
Recent questions tagged mvsim at Robotics Stack Exchange
Package Summary
| Version | 1.2.0 |
| License | BSD |
| Build type | CATKIN |
| Use | RECOMMENDED |
Repository Summary
| Description | |
| Checkout URI | https://github.com/MRPT/mvsim.git |
| VCS Type | git |
| VCS Version | develop |
| Last Updated | 2026-03-01 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Jose-Luis Blanco-Claraco
Authors
MultiVehicle simulator (MVSim)
Lightweight, realistic dynamical simulator for 2D (“2.5D”) vehicles and robots. It is tailored to analysis of vehicle dynamics, wheel-ground contact forces and accurate simulation of typical robot sensors (e.g. 2D and 3D lidars).
This package includes C++ libraries, standalone applications, and ROS 1 and ROS 2 nodes.
License: 3-clause BSD License Copyright (C) 2014-2026 Jose Luis Blanco jlblanco@ual.es (University of Almeria) and collaborators
Please, refer to the MVSim SoftwareX paper (or the ArXiV preprint) for a gentle introduction to the project architecture. If you want to cite MVSim in your work, please use:
@article{blanco2023mvsim,
title = {MultiVehicle Simulator (MVSim): Lightweight dynamics simulator for multiagents and mobile robotics research},
journal = {SoftwareX},
volume = {23},
pages = {101443},
year = {2023},
issn = {2352-7110},
doi = {https://doi.org/10.1016/j.softx.2023.101443},
url = {https://www.sciencedirect.com/science/article/pii/S2352711023001395},
author = {José-Luis Blanco-Claraco and Borys Tymchenko and Francisco José Mañas-Alvarez and Fernando Cañadas-Aránega and Ángel López-Gázquez and José Carlos Moreno}
}
ROSCon talk
Spanish talk with English slides and subtitles (slides here):
Installation
See installation documentation for all the details and options.
The easiest way to install if you already have ROS 1 or ROS 2 is:
sudo apt install ros-$ROS_DISTRO-mvsim
Then jump to next steps to see how to launch some of the demo worlds.
Demo videos
https://github.com/user-attachments/assets/766db164-2d16-44f4-acbf-2f15b73c1ab3

https://github.com/user-attachments/assets/93c95aeb-71e9-4c35-b1dc-ba895c79daf7
Build matrix status
| Distro | Build dev | Build releases | Stable version |
|---|---|---|---|
| ROS 2 Humble (u22.04) | amd64 arm64 |
||
| ROS 2 Jazzy @ u24.04 | amd64 arm64 |
||
| ROS 2 Kilted @ u24.04 | amd64 arm64 |
||
| ROS 2 Rolling (u24.04) | amd64 arm64 |
| EOL distro | Stable version |
|---|---|
| ROS 1 Melodic (u18.04) | |
| ROS 1 Noetic (u20.04) | |
| ROS 2 Foxy (u20.04) | |
| ROS 2 Iron (u22.04) |
Docs
If you clone this repository, remember to checkout the git submodules too:
git clone https://github.com/MRPT/mvsim.git --recursive
Launch demos
See more on first steps here.
Standalone:
mvsim launch mvsim_tutorial/demo_warehouse.world.xml
mvsim launch mvsim_tutorial/demo_2robots.world.xml
mvsim launch mvsim_tutorial/test_mesh.world.xml
File truncated at 100 lines see the full file
Changelog for package mvsim
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 acceleration
- Fix g sign
- Bump copyright year
- BUG FIX: Fix wrong linear acceleration in IMU readings
- Implement IMU noise model with random walk biases
- Rename ROS1 launch files so they don't interfere with autocomplete for ROS2
- indoor_outdoor demo: add IMU to robot
- Contributors: Jose Luis Blanco-Claraco
0.16.0 (2026-01-29)
- docs: add new demo worlds
- Remove debian leftover
- Merge pull request #78 from MRPT/feat/new-indoor-outdoor-world Feat/new-indoor-outdoor-world
- fix: ros node didn't publish CGenericPointsMap
- Functional walls with doors and windows with thickness
- Update vertical plane to have doors, windows, and thickness
- fix: lidar3d error with latest mrpt api
- docs: improve vehicles and physics docs
- CircleCI: update to build for u22.04
- Remove #if pragmas for too old mrpt versions
- Implement GNSS honor 'gps_no_coverage' property
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Dependant Packages
| Name | Deps |
|---|---|
| mrpt_tutorials | |
| mrpt_path_planning |
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
Services
Plugins
Recent questions tagged mvsim at Robotics Stack Exchange
Package Summary
| Version | 1.2.0 |
| License | BSD |
| Build type | CATKIN |
| Use | RECOMMENDED |
Repository Summary
| Description | |
| Checkout URI | https://github.com/MRPT/mvsim.git |
| VCS Type | git |
| VCS Version | develop |
| Last Updated | 2026-03-01 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Jose-Luis Blanco-Claraco
Authors
MultiVehicle simulator (MVSim)
Lightweight, realistic dynamical simulator for 2D (“2.5D”) vehicles and robots. It is tailored to analysis of vehicle dynamics, wheel-ground contact forces and accurate simulation of typical robot sensors (e.g. 2D and 3D lidars).
This package includes C++ libraries, standalone applications, and ROS 1 and ROS 2 nodes.
License: 3-clause BSD License Copyright (C) 2014-2026 Jose Luis Blanco jlblanco@ual.es (University of Almeria) and collaborators
Please, refer to the MVSim SoftwareX paper (or the ArXiV preprint) for a gentle introduction to the project architecture. If you want to cite MVSim in your work, please use:
@article{blanco2023mvsim,
title = {MultiVehicle Simulator (MVSim): Lightweight dynamics simulator for multiagents and mobile robotics research},
journal = {SoftwareX},
volume = {23},
pages = {101443},
year = {2023},
issn = {2352-7110},
doi = {https://doi.org/10.1016/j.softx.2023.101443},
url = {https://www.sciencedirect.com/science/article/pii/S2352711023001395},
author = {José-Luis Blanco-Claraco and Borys Tymchenko and Francisco José Mañas-Alvarez and Fernando Cañadas-Aránega and Ángel López-Gázquez and José Carlos Moreno}
}
ROSCon talk
Spanish talk with English slides and subtitles (slides here):
Installation
See installation documentation for all the details and options.
The easiest way to install if you already have ROS 1 or ROS 2 is:
sudo apt install ros-$ROS_DISTRO-mvsim
Then jump to next steps to see how to launch some of the demo worlds.
Demo videos
https://github.com/user-attachments/assets/766db164-2d16-44f4-acbf-2f15b73c1ab3

https://github.com/user-attachments/assets/93c95aeb-71e9-4c35-b1dc-ba895c79daf7
Build matrix status
| Distro | Build dev | Build releases | Stable version |
|---|---|---|---|
| ROS 2 Humble (u22.04) | amd64 arm64 |
||
| ROS 2 Jazzy @ u24.04 | amd64 arm64 |
||
| ROS 2 Kilted @ u24.04 | amd64 arm64 |
||
| ROS 2 Rolling (u24.04) | amd64 arm64 |
| EOL distro | Stable version |
|---|---|
| ROS 1 Melodic (u18.04) | |
| ROS 1 Noetic (u20.04) | |
| ROS 2 Foxy (u20.04) | |
| ROS 2 Iron (u22.04) |
Docs
If you clone this repository, remember to checkout the git submodules too:
git clone https://github.com/MRPT/mvsim.git --recursive
Launch demos
See more on first steps here.
Standalone:
mvsim launch mvsim_tutorial/demo_warehouse.world.xml
mvsim launch mvsim_tutorial/demo_2robots.world.xml
mvsim launch mvsim_tutorial/test_mesh.world.xml
File truncated at 100 lines see the full file
Changelog for package mvsim
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 acceleration
- Fix g sign
- Bump copyright year
- BUG FIX: Fix wrong linear acceleration in IMU readings
- Implement IMU noise model with random walk biases
- Rename ROS1 launch files so they don't interfere with autocomplete for ROS2
- indoor_outdoor demo: add IMU to robot
- Contributors: Jose Luis Blanco-Claraco
0.16.0 (2026-01-29)
- docs: add new demo worlds
- Remove debian leftover
- Merge pull request #78 from MRPT/feat/new-indoor-outdoor-world Feat/new-indoor-outdoor-world
- fix: ros node didn't publish CGenericPointsMap
- Functional walls with doors and windows with thickness
- Update vertical plane to have doors, windows, and thickness
- fix: lidar3d error with latest mrpt api
- docs: improve vehicles and physics docs
- CircleCI: update to build for u22.04
- Remove #if pragmas for too old mrpt versions
- Implement GNSS honor 'gps_no_coverage' property
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Dependant Packages
| Name | Deps |
|---|---|
| mrpt_tutorials | |
| mrpt_path_planning |
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
Services
Plugins
Recent questions tagged mvsim at Robotics Stack Exchange
Package Summary
| Version | 1.2.0 |
| License | BSD |
| Build type | CATKIN |
| Use | RECOMMENDED |
Repository Summary
| Description | |
| Checkout URI | https://github.com/MRPT/mvsim.git |
| VCS Type | git |
| VCS Version | develop |
| Last Updated | 2026-03-01 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Jose-Luis Blanco-Claraco
Authors
MultiVehicle simulator (MVSim)
Lightweight, realistic dynamical simulator for 2D (“2.5D”) vehicles and robots. It is tailored to analysis of vehicle dynamics, wheel-ground contact forces and accurate simulation of typical robot sensors (e.g. 2D and 3D lidars).
This package includes C++ libraries, standalone applications, and ROS 1 and ROS 2 nodes.
License: 3-clause BSD License Copyright (C) 2014-2026 Jose Luis Blanco jlblanco@ual.es (University of Almeria) and collaborators
Please, refer to the MVSim SoftwareX paper (or the ArXiV preprint) for a gentle introduction to the project architecture. If you want to cite MVSim in your work, please use:
@article{blanco2023mvsim,
title = {MultiVehicle Simulator (MVSim): Lightweight dynamics simulator for multiagents and mobile robotics research},
journal = {SoftwareX},
volume = {23},
pages = {101443},
year = {2023},
issn = {2352-7110},
doi = {https://doi.org/10.1016/j.softx.2023.101443},
url = {https://www.sciencedirect.com/science/article/pii/S2352711023001395},
author = {José-Luis Blanco-Claraco and Borys Tymchenko and Francisco José Mañas-Alvarez and Fernando Cañadas-Aránega and Ángel López-Gázquez and José Carlos Moreno}
}
ROSCon talk
Spanish talk with English slides and subtitles (slides here):
Installation
See installation documentation for all the details and options.
The easiest way to install if you already have ROS 1 or ROS 2 is:
sudo apt install ros-$ROS_DISTRO-mvsim
Then jump to next steps to see how to launch some of the demo worlds.
Demo videos
https://github.com/user-attachments/assets/766db164-2d16-44f4-acbf-2f15b73c1ab3

https://github.com/user-attachments/assets/93c95aeb-71e9-4c35-b1dc-ba895c79daf7
Build matrix status
| Distro | Build dev | Build releases | Stable version |
|---|---|---|---|
| ROS 2 Humble (u22.04) | amd64 arm64 |
||
| ROS 2 Jazzy @ u24.04 | amd64 arm64 |
||
| ROS 2 Kilted @ u24.04 | amd64 arm64 |
||
| ROS 2 Rolling (u24.04) | amd64 arm64 |
| EOL distro | Stable version |
|---|---|
| ROS 1 Melodic (u18.04) | |
| ROS 1 Noetic (u20.04) | |
| ROS 2 Foxy (u20.04) | |
| ROS 2 Iron (u22.04) |
Docs
If you clone this repository, remember to checkout the git submodules too:
git clone https://github.com/MRPT/mvsim.git --recursive
Launch demos
See more on first steps here.
Standalone:
mvsim launch mvsim_tutorial/demo_warehouse.world.xml
mvsim launch mvsim_tutorial/demo_2robots.world.xml
mvsim launch mvsim_tutorial/test_mesh.world.xml
File truncated at 100 lines see the full file
Changelog for package mvsim
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 acceleration
- Fix g sign
- Bump copyright year
- BUG FIX: Fix wrong linear acceleration in IMU readings
- Implement IMU noise model with random walk biases
- Rename ROS1 launch files so they don't interfere with autocomplete for ROS2
- indoor_outdoor demo: add IMU to robot
- Contributors: Jose Luis Blanco-Claraco
0.16.0 (2026-01-29)
- docs: add new demo worlds
- Remove debian leftover
- Merge pull request #78 from MRPT/feat/new-indoor-outdoor-world Feat/new-indoor-outdoor-world
- fix: ros node didn't publish CGenericPointsMap
- Functional walls with doors and windows with thickness
- Update vertical plane to have doors, windows, and thickness
- fix: lidar3d error with latest mrpt api
- docs: improve vehicles and physics docs
- CircleCI: update to build for u22.04
- Remove #if pragmas for too old mrpt versions
- Implement GNSS honor 'gps_no_coverage' property
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Dependant Packages
| Name | Deps |
|---|---|
| mrpt_tutorials | |
| mrpt_path_planning |
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
Services
Plugins
Recent questions tagged mvsim at Robotics Stack Exchange
Package Summary
| Version | 1.2.0 |
| License | BSD |
| Build type | CATKIN |
| Use | RECOMMENDED |
Repository Summary
| Description | |
| Checkout URI | https://github.com/MRPT/mvsim.git |
| VCS Type | git |
| VCS Version | develop |
| Last Updated | 2026-03-01 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Jose-Luis Blanco-Claraco
Authors
MultiVehicle simulator (MVSim)
Lightweight, realistic dynamical simulator for 2D (“2.5D”) vehicles and robots. It is tailored to analysis of vehicle dynamics, wheel-ground contact forces and accurate simulation of typical robot sensors (e.g. 2D and 3D lidars).
This package includes C++ libraries, standalone applications, and ROS 1 and ROS 2 nodes.
License: 3-clause BSD License Copyright (C) 2014-2026 Jose Luis Blanco jlblanco@ual.es (University of Almeria) and collaborators
Please, refer to the MVSim SoftwareX paper (or the ArXiV preprint) for a gentle introduction to the project architecture. If you want to cite MVSim in your work, please use:
@article{blanco2023mvsim,
title = {MultiVehicle Simulator (MVSim): Lightweight dynamics simulator for multiagents and mobile robotics research},
journal = {SoftwareX},
volume = {23},
pages = {101443},
year = {2023},
issn = {2352-7110},
doi = {https://doi.org/10.1016/j.softx.2023.101443},
url = {https://www.sciencedirect.com/science/article/pii/S2352711023001395},
author = {José-Luis Blanco-Claraco and Borys Tymchenko and Francisco José Mañas-Alvarez and Fernando Cañadas-Aránega and Ángel López-Gázquez and José Carlos Moreno}
}
ROSCon talk
Spanish talk with English slides and subtitles (slides here):
Installation
See installation documentation for all the details and options.
The easiest way to install if you already have ROS 1 or ROS 2 is:
sudo apt install ros-$ROS_DISTRO-mvsim
Then jump to next steps to see how to launch some of the demo worlds.
Demo videos
https://github.com/user-attachments/assets/766db164-2d16-44f4-acbf-2f15b73c1ab3

https://github.com/user-attachments/assets/93c95aeb-71e9-4c35-b1dc-ba895c79daf7
Build matrix status
| Distro | Build dev | Build releases | Stable version |
|---|---|---|---|
| ROS 2 Humble (u22.04) | amd64 arm64 |
||
| ROS 2 Jazzy @ u24.04 | amd64 arm64 |
||
| ROS 2 Kilted @ u24.04 | amd64 arm64 |
||
| ROS 2 Rolling (u24.04) | amd64 arm64 |
| EOL distro | Stable version |
|---|---|
| ROS 1 Melodic (u18.04) | |
| ROS 1 Noetic (u20.04) | |
| ROS 2 Foxy (u20.04) | |
| ROS 2 Iron (u22.04) |
Docs
If you clone this repository, remember to checkout the git submodules too:
git clone https://github.com/MRPT/mvsim.git --recursive
Launch demos
See more on first steps here.
Standalone:
mvsim launch mvsim_tutorial/demo_warehouse.world.xml
mvsim launch mvsim_tutorial/demo_2robots.world.xml
mvsim launch mvsim_tutorial/test_mesh.world.xml
File truncated at 100 lines see the full file
Changelog for package mvsim
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 acceleration
- Fix g sign
- Bump copyright year
- BUG FIX: Fix wrong linear acceleration in IMU readings
- Implement IMU noise model with random walk biases
- Rename ROS1 launch files so they don't interfere with autocomplete for ROS2
- indoor_outdoor demo: add IMU to robot
- Contributors: Jose Luis Blanco-Claraco
0.16.0 (2026-01-29)
- docs: add new demo worlds
- Remove debian leftover
- Merge pull request #78 from MRPT/feat/new-indoor-outdoor-world Feat/new-indoor-outdoor-world
- fix: ros node didn't publish CGenericPointsMap
- Functional walls with doors and windows with thickness
- Update vertical plane to have doors, windows, and thickness
- fix: lidar3d error with latest mrpt api
- docs: improve vehicles and physics docs
- CircleCI: update to build for u22.04
- Remove #if pragmas for too old mrpt versions
- Implement GNSS honor 'gps_no_coverage' property
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Dependant Packages
| Name | Deps |
|---|---|
| mrpt_tutorials | |
| mrpt_path_planning |
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
Services
Plugins
Recent questions tagged mvsim at Robotics Stack Exchange
Package Summary
| Version | 1.2.0 |
| License | BSD |
| Build type | CATKIN |
| Use | RECOMMENDED |
Repository Summary
| Description | |
| Checkout URI | https://github.com/MRPT/mvsim.git |
| VCS Type | git |
| VCS Version | develop |
| Last Updated | 2026-03-01 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Jose-Luis Blanco-Claraco
Authors
MultiVehicle simulator (MVSim)
Lightweight, realistic dynamical simulator for 2D (“2.5D”) vehicles and robots. It is tailored to analysis of vehicle dynamics, wheel-ground contact forces and accurate simulation of typical robot sensors (e.g. 2D and 3D lidars).
This package includes C++ libraries, standalone applications, and ROS 1 and ROS 2 nodes.
License: 3-clause BSD License Copyright (C) 2014-2026 Jose Luis Blanco jlblanco@ual.es (University of Almeria) and collaborators
Please, refer to the MVSim SoftwareX paper (or the ArXiV preprint) for a gentle introduction to the project architecture. If you want to cite MVSim in your work, please use:
@article{blanco2023mvsim,
title = {MultiVehicle Simulator (MVSim): Lightweight dynamics simulator for multiagents and mobile robotics research},
journal = {SoftwareX},
volume = {23},
pages = {101443},
year = {2023},
issn = {2352-7110},
doi = {https://doi.org/10.1016/j.softx.2023.101443},
url = {https://www.sciencedirect.com/science/article/pii/S2352711023001395},
author = {José-Luis Blanco-Claraco and Borys Tymchenko and Francisco José Mañas-Alvarez and Fernando Cañadas-Aránega and Ángel López-Gázquez and José Carlos Moreno}
}
ROSCon talk
Spanish talk with English slides and subtitles (slides here):
Installation
See installation documentation for all the details and options.
The easiest way to install if you already have ROS 1 or ROS 2 is:
sudo apt install ros-$ROS_DISTRO-mvsim
Then jump to next steps to see how to launch some of the demo worlds.
Demo videos
https://github.com/user-attachments/assets/766db164-2d16-44f4-acbf-2f15b73c1ab3

https://github.com/user-attachments/assets/93c95aeb-71e9-4c35-b1dc-ba895c79daf7
Build matrix status
| Distro | Build dev | Build releases | Stable version |
|---|---|---|---|
| ROS 2 Humble (u22.04) | amd64 arm64 |
||
| ROS 2 Jazzy @ u24.04 | amd64 arm64 |
||
| ROS 2 Kilted @ u24.04 | amd64 arm64 |
||
| ROS 2 Rolling (u24.04) | amd64 arm64 |
| EOL distro | Stable version |
|---|---|
| ROS 1 Melodic (u18.04) | |
| ROS 1 Noetic (u20.04) | |
| ROS 2 Foxy (u20.04) | |
| ROS 2 Iron (u22.04) |
Docs
If you clone this repository, remember to checkout the git submodules too:
git clone https://github.com/MRPT/mvsim.git --recursive
Launch demos
See more on first steps here.
Standalone:
mvsim launch mvsim_tutorial/demo_warehouse.world.xml
mvsim launch mvsim_tutorial/demo_2robots.world.xml
mvsim launch mvsim_tutorial/test_mesh.world.xml
File truncated at 100 lines see the full file
Changelog for package mvsim
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 acceleration
- Fix g sign
- Bump copyright year
- BUG FIX: Fix wrong linear acceleration in IMU readings
- Implement IMU noise model with random walk biases
- Rename ROS1 launch files so they don't interfere with autocomplete for ROS2
- indoor_outdoor demo: add IMU to robot
- Contributors: Jose Luis Blanco-Claraco
0.16.0 (2026-01-29)
- docs: add new demo worlds
- Remove debian leftover
- Merge pull request #78 from MRPT/feat/new-indoor-outdoor-world Feat/new-indoor-outdoor-world
- fix: ros node didn't publish CGenericPointsMap
- Functional walls with doors and windows with thickness
- Update vertical plane to have doors, windows, and thickness
- fix: lidar3d error with latest mrpt api
- docs: improve vehicles and physics docs
- CircleCI: update to build for u22.04
- Remove #if pragmas for too old mrpt versions
- Implement GNSS honor 'gps_no_coverage' property
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Dependant Packages
| Name | Deps |
|---|---|
| mrpt_tutorials | |
| mrpt_path_planning |
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
Services
Plugins
Recent questions tagged mvsim at Robotics Stack Exchange
Package Summary
| Version | 1.2.0 |
| License | BSD |
| Build type | CATKIN |
| Use | RECOMMENDED |
Repository Summary
| Description | |
| Checkout URI | https://github.com/MRPT/mvsim.git |
| VCS Type | git |
| VCS Version | develop |
| Last Updated | 2026-03-01 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Jose-Luis Blanco-Claraco
Authors
MultiVehicle simulator (MVSim)
Lightweight, realistic dynamical simulator for 2D (“2.5D”) vehicles and robots. It is tailored to analysis of vehicle dynamics, wheel-ground contact forces and accurate simulation of typical robot sensors (e.g. 2D and 3D lidars).
This package includes C++ libraries, standalone applications, and ROS 1 and ROS 2 nodes.
License: 3-clause BSD License Copyright (C) 2014-2026 Jose Luis Blanco jlblanco@ual.es (University of Almeria) and collaborators
Please, refer to the MVSim SoftwareX paper (or the ArXiV preprint) for a gentle introduction to the project architecture. If you want to cite MVSim in your work, please use:
@article{blanco2023mvsim,
title = {MultiVehicle Simulator (MVSim): Lightweight dynamics simulator for multiagents and mobile robotics research},
journal = {SoftwareX},
volume = {23},
pages = {101443},
year = {2023},
issn = {2352-7110},
doi = {https://doi.org/10.1016/j.softx.2023.101443},
url = {https://www.sciencedirect.com/science/article/pii/S2352711023001395},
author = {José-Luis Blanco-Claraco and Borys Tymchenko and Francisco José Mañas-Alvarez and Fernando Cañadas-Aránega and Ángel López-Gázquez and José Carlos Moreno}
}
ROSCon talk
Spanish talk with English slides and subtitles (slides here):
Installation
See installation documentation for all the details and options.
The easiest way to install if you already have ROS 1 or ROS 2 is:
sudo apt install ros-$ROS_DISTRO-mvsim
Then jump to next steps to see how to launch some of the demo worlds.
Demo videos
https://github.com/user-attachments/assets/766db164-2d16-44f4-acbf-2f15b73c1ab3

https://github.com/user-attachments/assets/93c95aeb-71e9-4c35-b1dc-ba895c79daf7
Build matrix status
| Distro | Build dev | Build releases | Stable version |
|---|---|---|---|
| ROS 2 Humble (u22.04) | amd64 arm64 |
||
| ROS 2 Jazzy @ u24.04 | amd64 arm64 |
||
| ROS 2 Kilted @ u24.04 | amd64 arm64 |
||
| ROS 2 Rolling (u24.04) | amd64 arm64 |
| EOL distro | Stable version |
|---|---|
| ROS 1 Melodic (u18.04) | |
| ROS 1 Noetic (u20.04) | |
| ROS 2 Foxy (u20.04) | |
| ROS 2 Iron (u22.04) |
Docs
If you clone this repository, remember to checkout the git submodules too:
git clone https://github.com/MRPT/mvsim.git --recursive
Launch demos
See more on first steps here.
Standalone:
mvsim launch mvsim_tutorial/demo_warehouse.world.xml
mvsim launch mvsim_tutorial/demo_2robots.world.xml
mvsim launch mvsim_tutorial/test_mesh.world.xml
File truncated at 100 lines see the full file
Changelog for package mvsim
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 acceleration
- Fix g sign
- Bump copyright year
- BUG FIX: Fix wrong linear acceleration in IMU readings
- Implement IMU noise model with random walk biases
- Rename ROS1 launch files so they don't interfere with autocomplete for ROS2
- indoor_outdoor demo: add IMU to robot
- Contributors: Jose Luis Blanco-Claraco
0.16.0 (2026-01-29)
- docs: add new demo worlds
- Remove debian leftover
- Merge pull request #78 from MRPT/feat/new-indoor-outdoor-world Feat/new-indoor-outdoor-world
- fix: ros node didn't publish CGenericPointsMap
- Functional walls with doors and windows with thickness
- Update vertical plane to have doors, windows, and thickness
- fix: lidar3d error with latest mrpt api
- docs: improve vehicles and physics docs
- CircleCI: update to build for u22.04
- Remove #if pragmas for too old mrpt versions
- Implement GNSS honor 'gps_no_coverage' property
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Dependant Packages
| Name | Deps |
|---|---|
| mrpt_rbpf_slam |
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
Services
Plugins
Recent questions tagged mvsim at Robotics Stack Exchange
Package Summary
| Version | 1.2.0 |
| License | BSD |
| Build type | CATKIN |
| Use | RECOMMENDED |
Repository Summary
| Description | |
| Checkout URI | https://github.com/ual-arm-ros-pkg/mvsim.git |
| VCS Type | git |
| VCS Version | develop |
| Last Updated | 2026-03-01 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Jose-Luis Blanco-Claraco
Authors
MultiVehicle simulator (MVSim)
Lightweight, realistic dynamical simulator for 2D (“2.5D”) vehicles and robots. It is tailored to analysis of vehicle dynamics, wheel-ground contact forces and accurate simulation of typical robot sensors (e.g. 2D and 3D lidars).
This package includes C++ libraries, standalone applications, and ROS 1 and ROS 2 nodes.
License: 3-clause BSD License Copyright (C) 2014-2026 Jose Luis Blanco jlblanco@ual.es (University of Almeria) and collaborators
Please, refer to the MVSim SoftwareX paper (or the ArXiV preprint) for a gentle introduction to the project architecture. If you want to cite MVSim in your work, please use:
@article{blanco2023mvsim,
title = {MultiVehicle Simulator (MVSim): Lightweight dynamics simulator for multiagents and mobile robotics research},
journal = {SoftwareX},
volume = {23},
pages = {101443},
year = {2023},
issn = {2352-7110},
doi = {https://doi.org/10.1016/j.softx.2023.101443},
url = {https://www.sciencedirect.com/science/article/pii/S2352711023001395},
author = {José-Luis Blanco-Claraco and Borys Tymchenko and Francisco José Mañas-Alvarez and Fernando Cañadas-Aránega and Ángel López-Gázquez and José Carlos Moreno}
}
ROSCon talk
Spanish talk with English slides and subtitles (slides here):
Installation
See installation documentation for all the details and options.
The easiest way to install if you already have ROS 1 or ROS 2 is:
sudo apt install ros-$ROS_DISTRO-mvsim
Then jump to next steps to see how to launch some of the demo worlds.
Demo videos
https://github.com/user-attachments/assets/766db164-2d16-44f4-acbf-2f15b73c1ab3

https://github.com/user-attachments/assets/93c95aeb-71e9-4c35-b1dc-ba895c79daf7
Build matrix status
| Distro | Build dev | Build releases | Stable version |
|---|---|---|---|
| ROS 2 Humble (u22.04) | amd64 arm64 |
||
| ROS 2 Jazzy @ u24.04 | amd64 arm64 |
||
| ROS 2 Kilted @ u24.04 | amd64 arm64 |
||
| ROS 2 Rolling (u24.04) | amd64 arm64 |
| EOL distro | Stable version |
|---|---|
| ROS 1 Melodic (u18.04) | |
| ROS 1 Noetic (u20.04) | |
| ROS 2 Foxy (u20.04) | |
| ROS 2 Iron (u22.04) |
Docs
If you clone this repository, remember to checkout the git submodules too:
git clone https://github.com/MRPT/mvsim.git --recursive
Launch demos
See more on first steps here.
Standalone:
mvsim launch mvsim_tutorial/demo_warehouse.world.xml
mvsim launch mvsim_tutorial/demo_2robots.world.xml
mvsim launch mvsim_tutorial/test_mesh.world.xml
File truncated at 100 lines see the full file
Changelog for package mvsim
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 acceleration
- Fix g sign
- Bump copyright year
- BUG FIX: Fix wrong linear acceleration in IMU readings
- Implement IMU noise model with random walk biases
- Rename ROS1 launch files so they don't interfere with autocomplete for ROS2
- indoor_outdoor demo: add IMU to robot
- Contributors: Jose Luis Blanco-Claraco
0.16.0 (2026-01-29)
- docs: add new demo worlds
- Remove debian leftover
- Merge pull request #78 from MRPT/feat/new-indoor-outdoor-world Feat/new-indoor-outdoor-world
- fix: ros node didn't publish CGenericPointsMap
- Functional walls with doors and windows with thickness
- Update vertical plane to have doors, windows, and thickness
- fix: lidar3d error with latest mrpt api
- docs: improve vehicles and physics docs
- CircleCI: update to build for u22.04
- Remove #if pragmas for too old mrpt versions
- Implement GNSS honor 'gps_no_coverage' property
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Dependant Packages
| Name | Deps |
|---|---|
| mrpt_path_planning | |
| mrpt_rbpf_slam |
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]

