SimPRIVE
SimPRIVE
a Simulation framework for Physical Robot Interaction with Virtual Environments
🧪 SimPRIVE
SimPRIVE is a flexible simulation framework designed to let physical robots in the real world interact with virtual environment, adopting a vehicle-in-the-loop simulation paradigm. SimPRIVE allows interaction with any ROS2-enabled robot. This first version is specifically designed for vehicles, but additional features will be released. SimPRIVE was accepted for publication at the 2025 IEEE Intelligent Transportation System Conference.
Don’t hesitate to contact us to collaborate on extensions, new features, and specific applications!
Figure 1: SimPRIVE platform architecture and workflow overview.
📄 Research
Check out our research on simulators at Retis Lab!
TrainSim
Simulation framework for railway scenarios
SynDRA dataset
Synthetic dataset for railway applications
Carla-GeAR
A CARLA-based tool and dataset for neural network adversarial robustness evaluation
🎬 Demo
Watch the demo above showing SimPRIVE in action.
📸 Screenshots
🛠️ Instructions
The setup includes two phases: (i) Unreal Engine setup, and (ii) ROS2 setup.
For UE, it is recommended to use a Windows 11 machine and download UE5.2. For ROS2, it is recommended to use Ubuntu 22 and ROS2 Humble.
⚙️ UE5 setup
- Create a new UE5.2 project (use any desired template).
- Download and place SimPRIVE plugin in your project’s
Pluginsfolder. - Download and place UE5-compatible ROSIntegration plugin in
Plugins. - Enable both plugins from the UE editor (Edit->Plugins). Restart if necessary.
- Edit the plugin JSON config (
SimPRIVE/Content/Config/IPConfig.json) to set the correct ROS2 IP and PORT. This must match the IP and port of your ROSBridge setup. - Go to
Project Settings → Maps & Modes → Game Instance Classand set it toSimPRIVEGameInstance.
🌍 Level Setup
- Create a new level.
- Set collision for each object of the environment. Enable “Generate Overlap Events” and Set custom collision presets (important for interactions). The collisions have to be enabled (Query and Physics), while the Collision Responses must be set to “Overlap” for every channel except for the Visibility Trace Response (Block).
- Add the Rover object and define the height in the Details panel. The static mesh assigned by default is the AgileX Scout Mini but it can be customized.
- Add the SpawningManager. You must create a few splines (
Add splinebutton). These splines define the region where the objects are going to spawn when the reset topic is published in. - Fill in the Static Mesh Library with meshes of your choice to allow object spawning; fill in the Skeletal Mesh and the Animation Libraries with assets of your choice to spawn animated objects.
- Add ROSOrchestrator and:
- Assign references to Rover and SpawningManager objects.
- define ROS topic names (odometry, episode reset/pause/resume).
- define the number of objects/pedestrians to be spawned.
Note: this version only supports messages of type nav_msgs/Odometry. For additional types, feel free to contact us.
🔄 ROS 2 Setup
Install rosbridge_suite
-
Launch the ROS 2 TCP server:
ros2 launch rosbridge_server rosbridge_tcp_launch.xml - Ensure a ROS node is publishing to
/odom. - Click PLAY in Unreal Engine – everything should work!
📚 Citation
To cite this work, use the following BibTeX entry:
@INPROCEEDINGS{11423662,
author={Nesti, Federico and D'Amico, Gianluca and Marinoni, Mauro and Buttazzo, Giorgio},
booktitle={2025 IEEE 28th International Conference on Intelligent Transportation Systems (ITSC)},
title={SimPRIVE: A Simulation Framework for Physical Robot Interaction with Virtual Environments},
year={2025},
volume={},
number={},
pages={907-913},
keywords={Navigation;Software algorithms;Virtual environments;Reinforcement learning;Robot sensing systems;Rendering (computer graphics);Digital twins;Collision avoidance;Robots;Engines},
doi={10.1109/ITSC60802.2025.11423662}}