Start Here
This page is the entry point for new users, for example students who want to use the CPM Lab for a thesis or a project. It lists what you should know beforehand, gives an overview of the system, and suggests a path through the documentation from your first simulation to an evaluated experiment with real vehicles.
Prerequisites
You do not need to know the CPM Lab, but you should be comfortable with the following topics. The linked tutorials are a good preparation.
Linux and the terminal: navigating directories, environment variables, editing files. The CPM Lab runs on Ubuntu.
Python or C++: motion planners can be written in either language. Python is the easier start.
ROS2 basics: nodes, topics, messages, launch files and parameters. Work through the ROS2 beginner tutorials, at least Beginner: CLI tools and Beginner: Client libraries (writing a publisher and subscriber, creating a package, using colcon).
ROS2 concepts used by the lab: Quality of Service and domain IDs.
Git: cloning, branches and submodules.
Helpful but not required: basic vehicle kinematics (bicycle model) and the Lanelet2 map format, see Lanelet2 Maps.
System Overview
The CPM Lab is a 1:18 scale testbed for connected and automated vehicles. Small vehicles, the muCars, drive on a track in the lab. A camera on the ceiling, the indoor positioning system, measures their poses. Your motion planner computes commands for the vehicles. Everything also works in simulation, so you can develop on your own computer and use the lab only for the final experiments.
---
config:
layout: elk
startOnLoad: false
---
flowchart TD
subgraph UI [User interface]
CC[Control Center in RViz<br/>or Lichtblick]
end
subgraph LAB [Lab domain, ROS_DOMAIN_ID 21]
CF[Control flow]
MAP[Map server]
IPS[Indoor positioning system]
V[muCars or<br/>simulated vehicles]
REC[Experiment recorder]
end
subgraph PLAN [Planner domain, ROS_DOMAIN_ID 1]
HLC[Your motion planner]
end
BR[Bridge]
CC -->|services| CF
CF -.->|starts| MAP
CF -.->|starts| IPS
CF -.->|starts| V
CF -.->|starts| BR
CF -.->|starts| REC
CF -.->|starts| HLC
IPS -->|observations| V
V -->|states| BR
MAP -->|map| BR
BR -->|states, map, triggers| HLC
HLC -->|commands| BR
BR -->|commands| V
Components of the CPM Lab and their ROS2 domains
The most important ideas:
The control flow starts and stops all components. The Control Center is only its user interface, see Running the Lab.
The lab is split into two ROS2 domains. Vehicles, IPS and map run in the lab domain (21), motion planners in the planner domain (1). The bridge connects both and only lets an experiment start when every component is ready, see Understanding the Domain IDs.
The vehicle controller on each vehicle follows the commands of your planner and stops the vehicle if anything goes wrong, see Understanding the Vehicle Controller.
Your motion planner receives the vehicle states and the map, and sends one command per vehicle and period, see Understanding the Motion Planner and Interface Reference.
Learning Path
Follow these steps in order. Each step builds on the previous one.
Install the CPM Lab on your computer: Install from Debian Packages, or use the Docker Images. On Windows or macOS, follow the Student Setup. If you want to change the CPM Lab itself, use Building from Source instead.
Run your first simulation with a built-in motion planner: First Simulation.
Understand how the lab runs: Running the Lab, Understanding the Domain IDs and Understanding the Motion Planner.
Write your own motion planner: Your First Motion Planner. Look up the messages, units and frames in the Interface Reference, the map in Lanelet2 Maps and the vehicle limits in Vehicle Limits and Simulation.
Record and evaluate your simulation runs: Recording and Evaluating Experiments and Evaluation Metrics and Own Analyses.
Drive real vehicles in the lab: Running Your Planner in the Lab and Experiments with Real Vehicles.
Develop efficiently: Development Workflow.
The Command Reference collects all commands for the daily use, the Glossary explains the terms used in this documentation, and the Troubleshooting Guide helps when something does not work. Questions? See Getting Help and FAQ.