Multi-GEM is a modular framework for research and development with multiple GEM autonomous vehicles, with a special focus on game-theoretic approaches to multi-agent coordination and control. It provides tools, controllers, and utilities for experimenting with and deploying advanced strategies—including those based on game theory—in scenarios involving multiple GEM vehicles, both in simulation and on real hardware.
The framework supports a variety of driving environments—including highways, intersections, and roundabouts—and enables the integration of both classical and advanced control strategies such as Model Predictive Control (MPC) and game-theoretic decision making. Multi-GEM is designed to facilitate rapid prototyping, testing, and deployment of multi-vehicle algorithms, making it ideal for academic research, education, and real-world experimentation.
Key features include:
- Support for multi-agent coordination and control using game-theoretic and classical methods
- Ready-to-use modules for common driving scenarios
- Integration with ROS and Gazebo for seamless simulation and real-vehicle interfacing
- Extensible architecture for custom controllers and environments
- Utilities for data logging, visualization, and analysis
Whether you are developing new game-theoretic control algorithms, testing cooperative driving strategies, or deploying on real GEM vehicles, Multi-GEM provides a robust foundation for your work.
Note: For the simulator, please visit https://github.com/yejimun/GEM_simulator.
Shahabedin Sagheb, Ye-Ji Mun, Neema Ahmadian, Benjamin A. Christie, Andrea Bajcsy, Katherine Driggs-Campbell, Dylan P. Losey. IEEE International Conference on Robotics and Automation (ICRA), 2023. Original paper | arXiv preprint
GEMstack uses Python 3.7+ and ROS Noetic.
(It is possible to do some offline and simulation work without ROS, but it is highly recommended to install it if you are working on any onboard behavior or training for rosbag files.)
To run this project, install the following Python packages:
pip install -r requirements.txt
matplotlib==3.7.4
numpy==1.23.5
open3d==0.13.0
opencv-python==4.9.0.80
pandas==2.0.3
pygame==2.6.1
scipy==1.3.3Please pay attention to MAIN ****
- 🟥 TODO
- 🟧 early development (usable, but many features not complete or tested)
- 🟨 in development (usable but to be tuned)
- 🟩 stable (most features complete and tested)
- 🟦 mature
.
├── src/ # ROS catkin workspace (Noetic)
│ ├── CMakeLists.txt → /opt/ros/noetic/share/catkin/cmake/toplevel.cmake
│ ├── basic_launch/ # Launch files for quick testing
│ ├── hardware_drivers/ # Low-level CAN / PACMod / sensor nodes
│ ├── readme.txt
│ ├── utility/ # Generic ROS utilities (tf, loggers…)
│ └── vehicle_drivers/ # GEM-specific high-level drivers
| ├── gem_gnss_control
├── gem_ss_control
│ ├── actor_collision # simulator support
| ├── src
├── carlo ------------------ 🟨 ← MAIN MPC VEHICLE MODEL FUNCTIONS
├── entities.py ------------------ 🟨 ← MAIN MPC VEHICLE KINEMATIC MODEL
├── highbay.py ------------------ 🟩 ← MAIN MPC POLICY API
├── mpc_highway.py --------------- 🟨 ← MAIN MPC COST FUNCTION
├── agents.py ------------------ 🟩 ← MAIN IMAGINARY CAR CLASSES
├── world.py ------------------ 🟩 ← MAIN IMAGINARY CARLO WORLD
├── main_highbay_steering_mpc.py ---------- 🟧 ← MAIN MPC RUN FILE
├── controller.py ------------------ 🟧 ← MAIN MPC CLASS
│ ├── notebooks
│ └── velodyne_simulator # simulator support
└── gem_visualization # simulator support
We build a MPC for GEMSTACK in real world from a relatively sophisticated simulation platform carlo, the pipline of making this work is to pass real world data ( lon to x, lat to y, absolute yaw) to simulation carlo world(Imaginary). After small horizon iteration, we would have output data (acceleration in m/s^2, heading) from carlo. In order to make these output data align to ackermn cmd, we make calibration with respect to
-
GEM_e4 as autonomous vehicle with inertial frame (0,0), GEM_e2 as human driver.
-
Alignment of all units as meter
-
Alignment of different coordinate system of GNSS sensor yaw, Imaginary world simulation heading and real world steering wheel.
-
Alignment between ros update rate and ros communication delay.
After all, ackermn cmd control gas pedal and steering wheel (radians).
```sh
cd ~/Multi-GEM
```
```sh
catkin_make
```
```sh
source devel/setup.bash
```
Example launch commands:
roslaunch basic_launch sensor_init.launch
roslaunch basic_launch visualization.launch
roslaunch basic_launch dbw_joystick.launchTo run the GNSS tracker script:
python3 src/vehicle_drivers/gem_gnss_control/scripts/gem_gnss_tracker_pp.pyTo run the ss control script:
python3 src/vehicle_drivers/gem_ss_control/mp2/src/main_highbay_steering_mpc.pyOnline documentation About the GEM e2 vehicle
- See src/readme.txt for more launch and usage examples.
- Refer to each package's README for specific instructions.
Team Members:
- Yan Bai - [yanb2@illinois.edu]
- Tianhao Ji - [davehaoooo@gmail.com]
- Sridharan Subramanian - [ss233@illinois.edu]
Advisors:
- Ye-Ji Mun - [yejimun2@illinois.edu]
- Mahsa Golchoubian - [mahsa.golchoubian@gmail.com]
Faculty Advisors:
- Katie Driggs-Campbell - [krdc@illinois.edu]
This work builds upon several open-source projects and research contributions:
- GEMstack: https://github.com/krishauser/GEMstack
- POLARIS_GEM_e2_Real: https://github.com/hangcui1201/POLARIS_GEM_e2_Real
- GEM Simulator: https://github.com/yejimun/GEM_simulator
- LiDAR-Based-Lane-Navigation: https://github.com/Bryan1203/LiDAR-Based-Lane-Navigation
- CARLO: https://github.com/Stanford-ILIAD/CARLO
