Initial Steps
Developing ROS 2 applications for cube:its is easiest and fastest when using VS Code Dev Containers. This is our recommended and supported workflow, because it gives you:
- a fully configured ROS 2 development environment
- the correct dependencies for cube:its and vanetza
- reproducible builds across Linux/macOS/Windows
- separation between your host system and your ROS 2 tooling
- seamless connection to the cube:evk over the network
With dev containers, you don't have to install ROS 2, colcon, Python tools, or build dependencies on your laptop—VS Code handles everything automatically.
1. Clone the Example Repository (Host)
We provide a complete ROS 2 workspace with cube:its examples:
host:~$ git clone https://github.com/cubesys-GmbH/ros_v2x_appshost:~$ cd ros_v2x_appsOpen this folder in VS Code (with the Dev Containers extension). When VS Code detects the .devcontainer/ folder, it will ask:
"Reopen in Container?"
Click Yes.
VS Code will now build the development container and open a full ROS 2 environment inside it.
2. Start cube:its in Remote Mode (On the cube:evk)
On the cube:evk, run:
cube:~$ start-its --remoteThis launches cube:its in a mode where it exposes all ROS 2 nodes and topics over your network. Your dev container on the host can now discover and interact with these topics.
3. Build the Workspace (Host, inside Dev Container)
Open a terminal inside the dev container:
host:~$ cd dev_ws/host:~$ colcon buildExample output:
Starting >>> v2x_appsFinished <<< v2x_apps [3.72s]
Summary: 1 package finished [4.62s]Source the workspace:
host:~$ source install/setup.bash4. Configure ROS Discovery for Remote Communication
To interact with cube:its running on the cube:evk, set the discovery domain and range:
host:~$ export ROS_DOMAIN_ID=42host:~$ export ROS_AUTOMATIC_DISCOVERY_RANGE=SUBNETDomain Id
cube:its uses ROS_DOMAIN_ID=42 by default. Both the host and cube must use the same domain ID.
5. Verify the Connection
Now your dev container should see all ROS 2 topics exposed by cube:its:
host:~$ ros2 topic listExample output:
/its/cam_ego_view/its/cam_provided/its/cam_received/its/cam_transmitted/its/denm_received/its/cpm_provided/its/cpm_received/its/cpm_transmitted/its/position_vector/kinematics/body_motion/kinematics/ground_motion/kinematics/ground_motion_vehicle/kinematics/position/vanetza/btp_indication...If you see these topics, you are now fully connected to cube:its from your Dev Container.
You can now:
- write ROS 2 nodes in Python or C++
- subscribe to CAM, CPM, DENM, or position topics
- publish your own DENMs
- access kinematic data (GNSS, heading, motion, IMU fusion)
- run tests and debug directly from your laptop
All without installing ROS 2 locally.
Why This Workflow?
This setup has become the standard because it offers:
✔ Isolation
Your laptop stays clean. ROS 2 stays inside the dev container.
✔ Reproducibility
Everyone developing on your team has the exact same environment.
✔ Seamless Integration
The cube runs the full V2X stack. Your laptop runs only your application code.
✔ Perfect for rapid experimentation
Write → build → run → test, all with full access to real V2X radio, GNSS, IMU, and facility layers.
Next Steps
You're now ready to develop and run ROS 2 applications that interact with the cube:evk.
- Write a subscriber for
/its/cam_received - Consume GNSS using
/its/position_vector - Build higher-level ITS applications using CPM, DENM, VAM, etc.
For detailed examples, continue with ITS Facilities.

