CARLOS - An Open, Modular, and Scalable Simulation Framework for the Development and Testing of Software for C-ITS
This repository contains CARLOS, the official reference implementation of the open, modular and scalable simulation architecture presented in our paper. We provide a containerized simulation framework based on the open-source simulator CARLA and enable a simple integration of custom ROS applications. Find below a brief description of the architecture as well as configurations and instructions for demos of three example use cases:
Important
This repository is open-sourced and maintained by the Institute for Automotive Engineering (ika) at RWTH Aachen University.
Simulation, Containerization and DevOps for Automated Driving are some of many research topics within our Vehicle Intelligence & Automated Driving domain.
If you would like to learn more about how we can support your DevOps or automated driving efforts, feel free to reach out to us!
Timo Woopen - Manager Research Area Vehicle Intelligence & Automated Driving
+49 241 80 23549
timo.woopen@ika.rwth-aachen.de
CARLOS: An Open, Modular, and Scalable Simulation Framework for the Development and Testing of Software for C-ITS
Christian Geller, Benedikt Haas, Amarin Kloeker, Jona Hermens, Bastian Lampe, Till Beemelmanns, Lutz Eckstein Institute for Automotive Engineering (ika), RWTH Aachen University
Abstract – Future mobility systems and their components are increasingly defined by their software. The complexity of these cooperative intelligent transport systems (C-ITS) and the ever-changing requirements posed at the software require continual software updates. The dynamic nature of the system and the practically innumerable scenarios in which different software components work together necessitate efficient and automated development and testing procedures that use simulations as one core methodology. The availability of such simulation architectures is a common interest among many stakeholders, especially in the field of automated driving. That is why we propose CARLOS - an open, modular, and scalable simulation framework for the development and testing of software in C-ITS that leverages the rich CARLA and ROS ecosystems. We provide core building blocks for this framework and explain how it can be used and extended by the community. Its architecture builds upon modern microservice and DevOps principles such as containerization and continuous integration. In our paper, we motivate the architecture by describing important design principles and showcasing three major use cases - software prototyping, data-driven development, and automated testing. We make CARLOS and example implementations of the three use cases publicly available at https://github.com/ika-rwth-aachen/carlos.
Tip
Make sure your computer fulfills the requirements and feel free to first check out our comprehensive tutorial, which gives an overview of our simulation framework's main features, and describes how CARLA and ROS applications can be combined in a containerized composition.
This repository provides demos for different use cases. The demos can be used as an example or initial starting point for your own variations for the use cases. A specific demo can be started using the provided run-demo.sh script, for example:
./run-demo.sh software-prototyping
Hitting CTRL + C twice stops a demo.
Each link below provides a detailed description of a provided use case and instructions on how to adjust it to your needs.
Use Case | Integrated Components | Description |
---|---|---|
software-prototyping | carla-simulator, carla-ros-bridge, rviz | Transfers simulation data into the ROS ecosystem. |
data-driven-development | carla-simulator, carla-ros-bridge, carla-scenario-runner | Automated simulation configuration to capture sensor data at large scale. |
automated-testing | carla-simulator, carla-scenario-runner | Sequential simulation of multiple scenarios in OpenSCENARIO format with automated evaluation. |
Our architecture consists of several sub-layers encapsulating different components that serve individual purposes:
- Simulation Layer - simulation core equipped with low-level interfaces and capabilities;
- Control Layer - tools for interactions with the simulation core;
- Application Layer - software interacting with the simulation layer to achieve certain goals;
- Storage Layer - persistent data used for or generated by the simulation layer;
- Orchestation Layer - automated configuring, coordinating, and managing of all other layers.
The simulation layer contains the core of a simulation software. It performs the simulation work via its graphics and physics engine, and manages the world state. It comes with low-level interfaces that are often specific to the used software. The control layer provides tools for interactions with the simulation core via preferably standardized interfaces and communication protocols. The application layer contains application-specific user iterfaces and user-defined functions interacting with the simulation. These computational layers are accompanied by the storage layer which can both provide data to the other layers or record data generated by the other layers during simulation. Last, the orchestration layer automates the configuring, coordinating, and managing of the other layers.
The various layers are composed into a microservice architecture, fostering scalability, flexibility, reusability, maintainability. We achieve this through a very modular approach in which all major components are containerized.
CARLOS is a framework that implements the described architecture. We make use of already established software, especially the CARLA simulator. Some additional components from the rich CARLA ecosystem are crucial to our framework and available as specified GitHub forks. We extended these repositories by additional GitHub CI workflows to generate Docker images built with docker-ros. This approach enables an automatic and continual building of up-to-date container images with recent versions of, e.g., ROS, Python, and Ubuntu.
Simulation Core: carla-simulator
Communication Actor: carla-ros-bridge
The carla-ros-bridge is the component that facilitates the powerful combination of CARLA and ROS. It retrieves data from the simulation to publish it on ROS topics while simultaneously listening on different topics for requested actions, which are translated to commands to be executed in CARLA. It communicates via DDS to interact with ROS, and via RPC to interact with the CARLA Python API.
Control Actor: carla-scenario-runner
To enable scenario-based testing and evaluation, the carla-scenario-runner is used. It is a powerful engine that follows the OpenSCENARIO standard for scenario definitions. An additional ROS service allows other ROS nodes to dynamically issue the execution of a specified scenario using the carla-scenario-runner. For the creation of light-weight container images, a custom Dockerfile is used.
Note
For all provided use case examples we use predefined Docker services, listed in carla-components.yml and further described in the carla-components overview.
We hope that our simulation framework CARLOS can help your research. If this is the case, please cite it using the following metadata.
@inproceedings{CARLOS24,
author = {Geller, Christian and Haas, Benedikt and Kloeker, Amarin and Hermens, Jona and Lampe, Bastian and Beemelmanns, Till and Eckstein, Lutz},
booktitle={2024 IEEE Intelligent Vehicles Symposium (IV)},
title = {{CARLOS: An Open, Modular, and Scalable Simulation Framework for the Development and Testing of Software for C-ITS}},
url = {https://ieeexplore.ieee.org/document/10588502},
year = {2024},
pages={3100-3106},
doi={10.1109/IV55156.2024.10588502}
}
This research is accomplished within the project AUTOtech.agil (FKZ 01IS22088A). We acknowledge the financial support for the project by the Federal Ministry of Education and Research of Germany (BMBF).