ROS / ROS 2 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 / 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 (ROS 2 only).
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!
Timo Woopen - Manager Research Area Vehicle Intelligence & Automated Driving
+49 241 80 23549
timo.woopen@ika.rwth-aachen.de
The core concept of the etsi_its_messages 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.
During runtime, the etsi_its_conversion
ROS node converts incoming UDP payloads into corresponding ROS messages and vice versa. The ROS equivalents of the ETSI ITS messages can be used in any downstream ROS applications or visualized using the provided RViz plugins.
Status | Acronym | Name | Version | Definition | Repository |
---|---|---|---|---|---|
✅ | CAM | Cooperative Awareness Message | 1.4.1 | Link | Link |
✅ | DENM | Decentralized Environmental Notification Message | 1.3.1 | Link | Link |
🔜 | MAPEM | Map Extended Message | - | - | - |
🔜 | SPATEM | Signal Phase and Timing Extended Message | - | - | - |
🔜 | CPM | Collective Perception Message | - | - | - |
etsi_its_messages
├── etsi_its_coding
│ ├── etsi_its_coding # metapackage including all coding packages
│ ├── etsi_its_cam_coding
│ └── etsi_its_denm_coding
├── etsi_its_conversion
│ ├── etsi_its_conversion # conversion node depending on all conversion packages
│ ├── etsi_its_cam_conversion
│ ├── etsi_its_denm_conversion
│ └── etsi_its_primitives_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_denm_msgs
└── etsi_its_rviz_plugins
The etsi_its_msgs
metapackage includes one dedicated package for each ETSI ITS message type, e.g., etsi_its_cam_msgs
. These packages define the ROS message equivalents to the ETSI ITS message types, e.g., etsi_its_cam_msgs/msg/CAM
.
In addition, the etsi_its_msgs
contains header-only libraries providing helpful access functions for modifying the deeply nested ROS messages.
The ROS message files are auto-generated based on the ASN.1 definitions of the ETSI ITS message standards. Note that the ASN.1 definitions are preprocessed to only include types relevant for the particular message type.
# etsi_its_messages$
./utils/codegen/scripts/asn1ToRosMsg.py \
asn1/reduced/cam/CAM-PDU-Descriptions.asn \
asn1/reduced/cam/ITS-Container.asn \
-o etsi_its_msgs/etsi_its_cam_msgs/msg
Click here to be taken to the API documentation for the implemented access functions.
The documentation can be generated by running Doxygen.
# etsi_its_messages/doc$
doxygen
The etsi_its_coding
metapackage includes one dedicated package for each ETSI ITS message type, e.g., etsi_its_cam_coding
. These packages provide C++ libraries containing a struct
implementation of the ETSI ITS message types including functions for encoding and decoding the structures to binary buffers.
The C/C++ implementation of the message types is auto-generated based on the ASN.1 definitions of the ETSI ITS message standards, using the ASN.1 Compiler asn1c. Note that the ASN.1 definitions are preprocessed to only include types relevant for the particular message type.
# etsi_its_messages$
./utils/codegen/scripts/asn1ToC.py
asn1/reduced/cam/CAM-PDU-Descriptions.asn \
asn1/reduced/cam/ITS-Container.asn \
-o etsi_its_coding/etsi_its_cam_coding
The etsi_its_conversion
package provides a C++ ROS nodelet or ROS 2 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.
The conversion node bridges all ETSI ITS message types at the same time in both directions.
# ROS 2
ros2 launch etsi_its_conversion converter.launch.py
# or
ros2 run etsi_its_conversion etsi_its_conversion_node --ros-args -p etsi_type:=auto
# ROS
roslaunch etsi_its_conversion converter.ros1.launch
# or
rosrun nodelet nodelet standalone etsi_its_conversion/Converter _etsi_type:=auto
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 |
~/denm/in |
etsi_its_denm_msgs/msg/DENM |
DENM for conversion to UDP |
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 |
~/denm/out |
etsi_its_denm_msgs/msg/DENM |
DENM converted from UDP payload |
Parameter | Type | Description | Options |
---|---|---|---|
etsi_type |
string |
if set to auto , in- and outgoing UDP payloads are expected to include a 4-byte BTP header |
auto , cam , denm |
The C++ conversion functions are auto-generated based on the ASN.1 definitions of the ETSI ITS message standards. Note that the ASN.1 definitions are preprocessed to only include types relevant for the particular message type.
# etsi_its_messages$
./utils/codegen/scripts/asn1ToConversionHeader.py
asn1/reduced/cam/CAM-PDU-Descriptions.asn \
asn1/reduced/cam/ITS-Container.asn \
-t cam \
-o etsi_its_conversion/etsi_its_cam_conversion/include/etsi_its_cam_conversion
All etsi_its_messages packages are released as official ROS / ROS 2 packages and can easily be installed via a package manager.
Warning
The initial release may not have been synced to the package managers yet. In the meantime, please refer to installation from source as shown below.
sudo apt update
sudo apt install ros-$ROS_DISTRO-etsi-its-messages
If you would like to install etsi_its_messages 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.
# etsi_its_messages$
rosdep install -r --ignore-src --from-paths .
# ROS 2
# workspace$
colcon build --packages-up-to etsi_its_messages --cmake-args -DCMAKE_BUILD_TYPE=Release
# ROS
# workspace$
catkin build -DCMAKE_BUILD_TYPE=Release etsi_its_messages
The etsi_its_messages 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.
# ROS 2
docker run --rm ghcr.io/ika-rwth-aachen/etsi_its_messages:ros2
# ROS
docker run --rm ghcr.io/ika-rwth-aachen/etsi_its_messages:ros
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 🇪🇺 under Grant Agreement No 101076754 for AIthena,
- and the Federal Ministry of Education and Research of Germany (BMBF) 🇩🇪 for 6GEM (FKZ 16KISK036K) and AUTOtech.agil (FKZ 01IS22088A).
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
- ROS
BSD 3-Clause License All rights reserved.
- ROS 2
Apache 2.0 License All rights reserved.