etsi_its_messages
ROS / ROS 2 Support for ETSI ITS Messages for V2X Communication
Science Score: 72.0%
This score indicates how likely this project is to be science-related based on various indicators:
-
✓CITATION.cff file
Found CITATION.cff file -
✓codemeta.json file
Found codemeta.json file -
✓.zenodo.json file
Found .zenodo.json file -
○DOI references
-
✓Academic publication links
Links to: arxiv.org, researchgate.net, ieee.org -
✓Committers with academic emails
8 of 12 committers (66.7%) from academic institutions -
✓Institutional organization owner
Organization ika-rwth-aachen has institutional domain (www.ika.rwth-aachen.de) -
○JOSS paper metadata
-
○Scientific vocabulary similarity
Low similarity (11.3%) to scientific vocabulary
Keywords
Repository
ROS / ROS 2 Support for ETSI ITS Messages for V2X Communication
Basic Info
Statistics
- Stars: 66
- Watchers: 11
- Forks: 17
- Open Issues: 9
- Releases: 14
Topics
Metadata Files
README.md
etsiitsmessages
ROS Support for ETSI ITS Messages for V2X Communication

The etsi_its_messages package stack allows to use standardized ETSI ITS messages for V2X communication in ROS 2 systems. Apart from the definition of ROS message equivalents to the ETSI ITS standards, this package stack also includes a conversion node for serializing the messages to and from a UDP payload, as well as RViz plugins for visualization.
All message definitions and conversion functions are automatically generated based on the ASN.1 definitions of the standardized ETSI ITS messages.
[!IMPORTANT]
This repository is open-sourced and maintained by the Institute for Automotive Engineering (ika) at RWTH Aachen University.
V2X Communication is one of many research topics within our Vehicle Intelligence & Automated Driving domain.
If you would like to learn more about how we can support your advanced driver assistance and automated driving efforts, feel free to reach out to us!
:email: opensource@ika.rwth-aachen.de
- Concept
- Supported ETSI ITS Messages
- Packages
- Installation
- Conversion Node
- Sample Messages
- Access Functions
- Code Generation
- V2AIX Dataset / Citation
- Acknowledgements
- Notice
[!NOTE]
Instructions for using the etsiitsmessages as a ROS driver for common V2X OBU/RSU hardware such as the Cohda Wireless MK5 are found inDRIVERS.md.
Concept

The core concept of the etsiitsmessages is to automatically generate the ROS support code based on the ASN.1 definitions of the standardized ETSI ITS messages (CodeGen). The ROS support then allows ROS applications to not only natively use corresponding ETSI ITS message types, but to also exchange encoded ETSI ITS message payloads with the world outside of ROS (Runtime).
A given ASN.1 definition is used to generate corresponding C-structures, ROS message definitions, as well as conversion functions between those two formats (see Code Generation).
During runtime, the etsi_its_conversion ROS node converts incoming UDP payloads into corresponding ROS messages and vice versa (see Conversion Node). The ROS equivalents of the ETSI ITS messages can be used in any downstream ROS applications or visualized using the provided RViz plugins.
Supported ETSI ITS Messages
| Status | Acronym | Name | EN Specification | TS Specification | TR Specification | | --- | --- | --- | --- | --- | --- | | :whitecheckmark: | CAM | Cooperative Awareness Message | EN 302 637-2 V1.4.1 (ASN.1) | TS 103 900 V2.1.1 (ASN.1) | - | | :whitecheckmark: | CPM | Collective Perception Message | - | TS 103 324 V2.1.1 (ASN.1) | - | | :whitecheckmark: | DENM | Decentralized Environmental Notification Message | EN 302 637-3 V1.3.1 (ASN.1) | TS 103 831 V2.2.1 (ASN.1) | - | | :whitecheckmark: | MAPEM | Map Extended Message | - | TS 103 301 V2.1.1 (ASN.1) | - | | :whitecheckmark: | MCM | Maneuver Coordination Message | - | - | TR 103 578 proposal by Ulm University | | :whitecheckmark: | SPATEM | Signal Phase and Timing Extended Message | - | TS 103 301 V2.1.1 (ASN.1) | - | | :whitecheckmark: | VAM | VRU Awareness Message | - | TS 103 300-3 V2.2.1 (ASN.1) | - |
[!NOTE] Message types that are standardized as European Norms (EN) are available as, e.g.,
etsi_its_cam_msgs. New message types or revisions of existing message types that are only specified in Technical Specifications (TS) are available as, e.g.,etsi_its_cpm_ts_msgs.[!WARNING] Limitations -
RegionalExtension(defined inISO-TS-19091-addgrp-C-2018.asn) is not covered in ROS-equivalents of MAPEM and SPATEM messages
Packages
bash
etsi_its_messages
├── etsi_its_coding
│ ├── etsi_its_coding # metapackage including all coding packages
│ ├── etsi_its_cam_coding
│ ├── etsi_its_cam_ts_coding
│ ├── etsi_its_cpm_ts_coding
│ ├── etsi_its_denm_coding
│ ├── etsi_its_denm_ts_coding
│ ├── etsi_its_mapem_ts_coding
│ ├── etsi_its_mcm_uulm_coding
│ ├── etsi_its_spatem_ts_coding
│ └── etsi_its_vam_ts_coding
├── etsi_its_conversion
│ ├── etsi_its_conversion # conversion node depending on all conversion packages
│ ├── etsi_its_cam_conversion
│ ├── etsi_its_cam_ts_conversion
│ ├── etsi_its_cpm_ts_conversion
│ ├── etsi_its_denm_conversion
│ ├── etsi_its_denm_ts_conversion
│ ├── etsi_its_mapem_ts_conversion
│ ├── etsi_its_mcm_uulm_conversion
│ ├── etsi_its_primitives_conversion
│ ├── etsi_its_spatem_ts_conversion
│ └── etsi_its_vam_ts_conversion
├── etsi_its_messages # metapackage including all others
├── etsi_its_msgs
│ ├── etsi_its_msgs # metapackage including all msg packages
│ ├── etsi_its_cam_msgs
│ ├── etsi_its_cam_ts_msgs
│ ├── etsi_its_cpm_ts_msgs
│ ├── etsi_its_denm_msgs
│ ├── etsi_its_denm_ts_msgs
│ ├── etsi_its_mapem_ts_msgs
│ ├── etsi_its_mcm_uulm_msgs
│ ├── etsi_its_spatem_ts_msgs
│ └── etsi_its_vam_ts_msgs
├── etsi_its_msgs_utils
└── etsi_its_rviz_plugins
Installation
All etsiitsmessages packages are released as official ROS 2 packages and can easily be installed via a package manager.
```bash sudo apt update sudo apt install ros-$ROS_DISTRO-etsi-its-messages
or single packages, e.g.
sudo apt install ros-$ROS_DISTRO-etsi-its-cam-msgs ```
If you would like to install etsiitsmessages from source, simply clone this repository into your ROS workspace. All dependencies that are listed in the packages' package.xml can be installed using rosdep.
```bash
workspace$
rosdep install -r --ignore-src --from-paths src colcon build --packages-up-to etsiitsmessages --cmake-args -DCMAKEBUILDTYPE=Release ```
docker-ros
The etsiitsmessages package stack is also available as a Docker image, containerized through docker-ros. Note that launching these containers starts the etsi_its_conversion node by default.
bash
docker run --rm ghcr.io/ika-rwth-aachen/etsi_its_messages:latest
Conversion Node
The etsi_its_conversion package provides a ROS 2 C++ component node for converting etsi_its_msgs ROS messages to and from UPER-encoded udp_msgs/msg/UdpPacket payloads. This way, ETSI ITS messages cannot only be used within the ROS ecosystem, but may also be received from or sent to outside applications.
The package depends on one dedicated package for each ETSI ITS message type, e.g., etsi_its_cam_conversion. These packages hold header-only libraries with recursive conversion functions for each nested message type.
Usage
The conversion node bridges all ETSI ITS message types at the same time in both directions.
```bash ros2 launch etsiitsconversion converter.launch.py
or
ros2 run etsiitsconversion etsiitsconversionnode --ros-args -p etsitypes:=[cam,cpmts,denm,mapemts,mcmuulm,spatemts,vamts] -p hasbtpdestinationport:=true -p btpdestinationportoffset:=8 -p etsimessagepayloadoffset:=78 ```
Subscribed Topics
| Topic | Type | Description |
| --- | --- | --- |
| ~/udp/in | udp_msgs/msg/UdpPacket | UDP payload for conversion to ROS |
| ~/cam/in | etsi_its_cam_msgs/msg/CAM | CAM for conversion to UDP |
| ~/cam_ts/in | etsi_its_cam_ts_msgs/msg/CAM | CAM (TS) for conversion to UDP |
| ~/cpm_ts/in | etsi_its_cpm_ts_msgs/msg/CollectivePerceptionMessage | CPM for conversion to UDP |
| ~/denm/in | etsi_its_denm_msgs/msg/DENM | DENM for conversion to UDP |
| ~/denm_ts/in | etsi_its_denm_ts_msgs/msg/DENM | DENM (TS) for conversion to UDP |
| ~/mapem_ts/in | etsi_its_mapem_ts_msgs/msg/MAPEM | MAPEM (TS) for conversion to UDP |
| ~/mcm_uulm/in | etsi_its_mcm_uulm_msgs/msg/MCM | MCM (UULM) for conversion to UDP |
| ~/spatem_ts/in | etsi_its_spatem_ts_msgs/msg/SPATEM | SPATEM (TS) for conversion to UDP |
| ~/vam_ts/in | etsi_its_vam_ts_msgs/msg/VAM | VAM (TS) for conversion to UDP |
Published Topics
| Topic | Type | Description |
| --- | --- | --- |
| ~/udp/out | udp_msgs/msg/UdpPacket | UDP payload converted from ROS message |
| ~/cam/out | etsi_its_cam_msgs/msg/CAM | CAM converted from UDP payload |
| ~/cam_ts/out | etsi_its_cam_ts_msgs/msg/CAM | CAM (TS) converted from UDP payload |
| ~/cpm_ts/out | etsi_its_cpm_ts_msgs/msg/CollectivePerceptionMessage | CPM converted from UDP payload |
| ~/denm/out | etsi_its_denm_msgs/msg/DENM | DENM converted from UDP payload |
| ~/denm_ts/out | etsi_its_denm_ts_msgs/msg/DENM | DENM (TS) converted from UDP payload |
| ~/mapem_ts/out | etsi_its_mapem_ts_msgs/msg/MAPEM | MAPEM (TS) converted from UDP payload |
| ~/mcm_uulm/out | etsi_its_mcm_uulm_msgs/msg/MCM | MCM (UULM) converted from UDP payload |
| ~/spatem_ts/out | etsi_its_spatem_ts_msgs/msg/SPATEM | SPATEM (TS) converted from UDP payload |
| ~/vam_ts/out | etsi_its_vam_ts_msgs/msg/VAM | VAM (TS) converted from UDP payload |
Parameters
| Parameter | Type | Description | Options |
| --- | --- | --- | --- |
| has_btp_destination_port | bool | whether incoming/outgoing UDP messages include a 2-byte BTP destination port |
| btp_destination_port_offset | int | number of bytes before an optional 2-byte BTP destination port, see has_btp_destination_port (always 0 in outgoing UDP payload) |
| etsi_message_payload_offset | int | number of bytes before actual ETSI message payload (always 0 or 4 (if has_btp_destination_port) in outgoing UDP payload) |
| ros2udp_etsi_types | string[] | list of ETSI types to convert from etsi_its_msgs to udp_msgs (defaults to all supported ETSI types, including EN and TS versions) | cam, cam_ts, cpm_ts, denm, denm_ts, mapem_ts, mcm_uulm, spatem_ts, vam_ts |
| udp2ros_etsi_types | string[] | list of ETSI types to convert from udp_msgs to etsi_its_msgs (defaults to all supported ETSI types, either EN or TS version) | cam, cam_ts, cpm_ts, denm, denm_ts, mapem_ts, mcm_uulm, spatem_ts, vam_ts |
| subscriber_queue_size | int | queue size for incoming ROS messages |
| publisher_queue_size | int | queue size for outgoing ROS messages |
Sample Messages
The etsi_its_msgs_utils package contains simple ROS 2 nodes for publishing sample ROS 2 messages of the supported ETSI ITS message types, see ./etsi_its_msgs_utils/samples/. For example, publish a sample CPM by running the following.
bash
ros2 run etsi_its_msgs_utils publish_cpm_ts.py
You can then visualize the CPM in RViz with the provided demo configuration.
bash
ros2 launch etsi_its_rviz_plugins demo.launch.py
And finally, run the Conversion Node to convert ROS 2 messages to binary payloads.
bash
ros2 run etsi_its_conversion etsi_its_conversion_node \
--ros-args \
-r __node:=etsi_its_conversion \
-r /etsi_its_conversion/udp/out:=/etsi_its_conversion/udp/in \
-p has_btp_destination_port:=true \
-p btp_destination_port_offset:=0 \
-p etsi_message_payload_offset:=4
Access Functions
The etsi_its_msgs_utils package contains header-only libraries providing helpful access functions for modifying the deeply nested ROS messages equivalents of the ETSI ITS messages. All access functions are documented here.
```cpp
include
include // access functions
// ...
double speed = 10.0; // vehicle speed in m/s etsiitscammsgs::msg::CAM cam; etsiitscammsgs::access::setSpeed(cam, speed); // instead of cam.cam.camparameters.highfrequencycontainer.basicvehiclecontainerhighfrequency.speed.speedvalue.value = (uint16_t)(speed * 1e2);
// ... ```
Code Generation
[!NOTE] This section is only relevant if you would like to (re-)run the code generation for ROS support based on ASN.1 definitions. If you only wish to use the supported message types in ROS, see Installation and Conversion Node.
A given ASN.1 definition is used to generate corresponding C-structures, ROS message definitions, as well as conversion functions between those two formats. The raw ASN.1 definitions of the supported message types are included as Git submodules in the asn1/raw subdirectory. Make sure to clone recursively or initialize the submodules after cloning (git submodule update --init --recursive). Note that some of these definitions need to be downloaded and patched before code generation by running ./asn1/external/download.sh and ./asn1/patches/patch.sh.
The currently used code generation tool is Python-based. There is also an alternative Rust-based implementation that is currently not maintained anymore (added in #17, replaced again in #28, #48), but kept for reference.
If you would like to re-run the generation of supported message types, we recommend to use the VS Code debugging configurations pre-configured in .vscode/launch.json. All script calls defined there can obviously also run outside of VS Code. Note that Python and Docker are required for code generation.
If you would like to run the generation for new message types or message type versions, call the scripts defined in .vscode/launch.json on your custom ASN.1 definitions.
V2AIX Dataset / Citation
The etsiitsmessages package stack was created and used in order to record the V2AIX Dataset. Please consider citing our paper if you are also using the package stack in your own research.
V2AIX: A Multi-Modal Real-World Dataset of ETSI ITS V2X Messages in Public Road Traffic
(IEEE Xplore, arXiv, ResearchGate)Guido Küppers, Jean-Pierre Busch and Lennart Reiher, Lutz Eckstein
Institute for Automotive Engineering (ika), RWTH Aachen UniversityAbstract – Connectivity is a main driver for the ongoing megatrend of automated mobility: future Cooperative Intelligent Transport Systems (C-ITS) will connect road vehicles, traffic signals, roadside infrastructure, and even vulnerable road users, sharing data and compute for safer, more efficient, and more comfortable mobility. In terms of communication technology for realizing such vehicle-to-everything (V2X) communication, the WLAN-based peer-to-peer approach (IEEE 802.11p, ITS-G5 in Europe) competes with C-V2X based on cellular technologies (4G and beyond). Irrespective of the underlying communication standard, common message interfaces are crucial for a common understanding between vehicles, especially from different manufacturers. Targeting this issue, the European Telecommunications Standards Institute (ETSI) has been standardizing V2X message formats such as the Cooperative Awareness Message (CAM). In this work, we present V2AIX, a multi-modal real-world dataset of ETSI ITS messages gathered in public road traffic, the first of its kind. Collected in measurement drives and with stationary infrastructure, we have recorded more than 285 000 V2X messages from more than 2380 vehicles and roadside units in public road traffic. Alongside a first analysis of the dataset, we present a way of integrating ETSI ITS V2X messages into the Robot Operating System (ROS). This enables researchers to not only thoroughly analyze real-world V2X data, but to also study and implement standardized V2X messages in ROS-based automated driving applications. The full dataset is publicly available for non-commercial use at https://v2aix.ika.rwth-aachen.de.
Acknowledgements
This work is accomplished within the projects AIthena, 6GEM and AUTOtech.agil. We acknowledge the financial support for the projects by - the European Union’s Horizon Europe Research and Innovation Programme :eu: under Grant Agreement No 101076754 for AIthena, - and the Federal Ministry of Education and Research of Germany (BMBF) :de: for 6GEM (FKZ 16KISK036K) and AUTOtech.agil (FKZ 01IS22088A).
Notice
This repository is not endorsed by or otherwise affiliated with ETSI.
This repository uses the following software. For full license details, please refer to the specific license files of the respective software.
- asn1c
BSD 2-Clause License Copyright (c) 2003-2017 Lev Walkin <vlm@lionet.info> and contributors. All rights reserved. - asn1tools
MIT License Copyright (c) 2017-2019 Erik Moqvist - ETSI ITS ASN1
BSD 3-Clause License Copyright (c) ETSI - GeographicLib
MIT License Copyright (c) 2008-2023, Charles Karney - rasn
MIT License Copyright (c) 2016 Erin Power - ROS 2
Apache 2.0 License All rights reserved. - UULM MCM ASN.1 Definition
Apache 2.0 License All rights reserved.
Owner
- Name: Institut für Kraftfahrzeuge, RWTH Aachen, ika
- Login: ika-rwth-aachen
- Kind: organization
- Location: Aachen, Germany
- Website: https://www.ika.rwth-aachen.de
- Repositories: 16
- Profile: https://github.com/ika-rwth-aachen
Citation (CITATION.cff)
cff-version: 1.2.0
message: "We hope that our tools can help your research. If this is the case, please cite it using the following metadata."
title: etsi_its_messages
type: software
repository-code: "https://github.com/ika-rwth-aachen/etsi_its_messages"
date-released: 2023-11-29
authors:
- given-names: Guido
family-names: Küppers
- given-names: Jean-Pierre
family-names: Busch
- given-names: Lennart
family-names: Reiher
preferred-citation:
title: "V2AIX: A Multi-Modal Real-World Dataset of ETSI ITS V2X Messages in Public Road Traffic"
type: conference-paper
conference:
name: "International Conference on Intelligent Transportation Systems (ITSC)"
month: 9
year: 2024
doi: "10.1109/ITSC58415.2024.10920150"
authors:
- given-names: Guido
family-names: Küppers
orcid: "https://orcid.org/0000-0002-9688-6373"
- given-names: Jean-Pierre
family-names: Busch
orcid: "https://orcid.org/0009-0000-1417-0463"
- given-names: Lennart
family-names: Reiher
orcid: "https://orcid.org/0000-0002-7309-164X"
- given-names: Lutz
family-names: Eckstein
GitHub Events
Total
- Fork event: 10
- Create event: 35
- Commit comment event: 2
- Issues event: 16
- Release event: 6
- Watch event: 24
- Delete event: 28
- Member event: 2
- Issue comment event: 35
- Push event: 143
- Pull request review event: 93
- Pull request review comment event: 89
- Pull request event: 79
Last Year
- Fork event: 10
- Create event: 35
- Commit comment event: 2
- Issues event: 16
- Release event: 6
- Watch event: 24
- Delete event: 28
- Member event: 2
- Issue comment event: 35
- Push event: 143
- Pull request review event: 93
- Pull request review comment event: 89
- Pull request event: 79
Committers
Last synced: 8 months ago
Top Committers
| Name | Commits | |
|---|---|---|
| Lennart Reiher | l****r@i****e | 434 |
| Jean-Pierre Busch | j****h@i****e | 314 |
| Guido Küppers | g****s@i****e | 249 |
| Cilli Danker | c****r@i****e | 73 |
| Fabian Thomsen | f****n@i****e | 28 |
| v0-e | x****a@g****m | 25 |
| Oliver Kurzaj | k****j@i****e | 23 |
| Alexander Wilczynski | a****i@i****e | 22 |
| Raphael Riebl | r****l@n****m | 11 |
| Lukas Zanger | l****r@i****e | 9 |
| Apostolos Georgiadis | a****s@n****m | 2 |
| Amarin Kloeker | 6****r | 1 |
Committer Domains (Top 20 + Academic)
Issues and Pull Requests
Last synced: 6 months ago
All Time
- Total issues: 6
- Total pull requests: 35
- Average time to close issues: 20 days
- Average time to close pull requests: 5 days
- Total issue authors: 6
- Total pull request authors: 10
- Average comments per issue: 0.5
- Average comments per pull request: 0.49
- Merged pull requests: 20
- Bot issues: 0
- Bot pull requests: 0
Past Year
- Issues: 6
- Pull requests: 35
- Average time to close issues: 20 days
- Average time to close pull requests: 5 days
- Issue authors: 6
- Pull request authors: 10
- Average comments per issue: 0.5
- Average comments per pull request: 0.49
- Merged pull requests: 20
- Bot issues: 0
- Bot pull requests: 0
Top Authors
Issue Authors
- lreiher (2)
- riebl (1)
- james-ward (1)
- Annh770 (1)
- TiagoRG (1)
- v0-e (1)
- gkueppers (1)
- Foxei (1)
- lheg (1)
- FabianThomsen (1)
- jpbusch (1)
- Aruetiise (1)
Pull Request Authors
- lreiher (21)
- jpbusch (18)
- gkueppers (7)
- FabianThomsen (4)
- v0-e (4)
- riebl (4)
- AlexanderWilczynski (3)
- Copilot (2)
- apgeorg (2)
- Tanuj-D (1)
- cgeller (1)
- akloeker (1)
- Tezozomoc47 (1)