Skip to content

Commit

Permalink
Add Cyclone DDS ROS RMW (#7)
Browse files Browse the repository at this point in the history
* Add cyclone DDS as ROS RMW + configurate it to support high msg
throughput
* Avoid `dev.sh` override `latest` docker tag for convenience
* Rename docker images' names from `aw_radar_bridge_humble` to
`av_radar_bridge`
* Rename `aw_radar_bridge` pkg to `av_radar_bridge` 
* Enable colorised ROS log
* Synchronise host time with docker container
  • Loading branch information
hect95 authored May 21, 2024
1 parent 2b11773 commit d11e37b
Show file tree
Hide file tree
Showing 10 changed files with 59 additions and 28 deletions.
17 changes: 15 additions & 2 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -7,19 +7,32 @@ RUN apt-get update \
# Install ROS msg dependencies
ros-"$ROS_DISTRO"-radar-msgs \
ros-"$ROS_DISTRO"-sensor-msgs \
# Install Cyclone DDS ROS RMW
ros-"$ROS_DISTRO"-rmw-cyclonedds-cpp \
&& rm -rf /var/lib/apt/lists/*

# Setup ROS workspace folders
ENV ROS_WS=/opt/ros_ws
WORKDIR $ROS_WS

# Set cyclone DDS ROS RMW
ENV RMW_IMPLEMENTATION=rmw_cyclonedds_cpp

COPY ./cyclone_dds.xml $ROS_WS/

# Configure Cyclone cfg file
ENV CYCLONEDDS_URI=file://${ROS_WS}/cyclone_dds.xml

# Enable ROS log colorised output
ENV RCUTILS_COLORIZED_OUTPUT=1

# -----------------------------------------------------------------------

FROM base AS prebuilt

# Copy ROS2 msg files and bridge code over
COPY ecal_to_ros/ros2/ src/ecal_to_ros/
COPY aw_radar_bridge src/aw_radar_bridge
COPY av_radar_bridge src/av_radar_bridge

# Source ROS2 setup for dependencies and build our code
RUN . /opt/ros/"$ROS_DISTRO"/setup.sh && \
Expand Down Expand Up @@ -63,4 +76,4 @@ RUN sed --in-place --expression \
/ros_entrypoint.sh

# Launch ros package
CMD ["ros2", "launch", "aw_radar_bridge", "aw_radar_bridge.launch.xml"]
CMD ["ros2", "launch", "av_radar_bridge", "av_radar_bridge.launch.xml"]
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# AW Radar Bridge
# Av Radar Bridge

Repo for bridging between internal Continental Radar msgs and standard ROS msgs.

Expand Down Expand Up @@ -36,5 +36,5 @@ Prepare a development setting that reflects local code modifications and simplif
./dev.sh
```

- **Live Code Synchronization**: Mounts local `aw_radar_bridge` and `ecal_to_ros` directories with the container.
- **Live Code Synchronization**: Mounts local `av_radar_bridge` and `ecal_to_ros` directories with the container.
- **Convenience Alias**: The development container features a `colcon_build` alias, which simplifies the ROS2 build process. Executing `colcon_build` runs `colcon build --symlink-install --cmake-args -DCMAKE_BUILD_TYPE=Release` and then sources the `setup.bash` to ensure the environment is updated with the latest build artifacts. This alias enhances productivity by combining build commands and environment setup into a single, easy command.
Original file line number Diff line number Diff line change
@@ -1,7 +1,14 @@
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Changelog for package aw_radar_bridge
Changelog for package av_radar_bridge
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Forthcoming
-----------
* Add cyclone DDS as ROS RMW + configurate it to support high msg throughput
* Avoid `dev.sh` override `latest` docker tag for convenience
* Enable colorised ROS log
* Synchronise host time with docker container

1.0.0 (2024-05-01)
------------------
* Initial Radar configuration PR (`#1 <https://github.com/ipab-rad/av_radar_bridge/issues/1>`_)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
cmake_minimum_required(VERSION 3.8)
project(aw_radar_bridge)
project(av_radar_bridge)

# Default to C++14
if(NOT CMAKE_CXX_STANDARD)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,49 +4,49 @@

<!-- Radars component container A -->
<node_container pkg="rclcpp_components" exec="component_container" name="radars_container_a" namespace="">
<composable_node pkg="aw_radar_bridge" plugin="sensor::RadarBridge" name="radar_bumper_front_centre_far" namespace="">
<composable_node pkg="av_radar_bridge" plugin="sensor::RadarBridge" name="radar_bumper_front_centre_far" namespace="">
<param name="frame_id" value="radar_bumper_front_centre_mount"/>
<param name="input_topic" value="/sensor/radar/bumper_front_centre/far/image"/>
<param name="output_topic" value="/output/radar/bumper_front_centre/far/image"/>
</composable_node>

<composable_node pkg="aw_radar_bridge" plugin="sensor::RadarBridge" name="radar_bumper_front_centre_near" namespace="">
<composable_node pkg="av_radar_bridge" plugin="sensor::RadarBridge" name="radar_bumper_front_centre_near" namespace="">
<param name="frame_id" value="radar_bumper_front_centre_mount"/>
<param name="input_topic" value="/sensor/radar/bumper_front_centre/near/image"/>
<param name="output_topic" value="/output/radar/bumper_front_centre/near/image"/>
</composable_node>

<composable_node pkg="aw_radar_bridge" plugin="sensor::RadarBridge" name="radar_bumper_front_left_far" namespace="">
<composable_node pkg="av_radar_bridge" plugin="sensor::RadarBridge" name="radar_bumper_front_left_far" namespace="">
<param name="frame_id" value="radar_bumper_front_left_mount"/>
<param name="input_topic" value="/sensor/radar/bumper_front_left/far/image"/>
<param name="output_topic" value="/output/radar/bumper_front_left/far/image"/>
</composable_node>

<composable_node pkg="aw_radar_bridge" plugin="sensor::RadarBridge" name="radar_bumper_front_left_near" namespace="">
<composable_node pkg="av_radar_bridge" plugin="sensor::RadarBridge" name="radar_bumper_front_left_near" namespace="">
<param name="frame_id" value="radar_bumper_front_left_mount"/>
<param name="input_topic" value="/sensor/radar/bumper_front_left/near/image"/>
<param name="output_topic" value="/output/radar/bumper_front_left/near/image"/>
</composable_node>

<composable_node pkg="aw_radar_bridge" plugin="sensor::RadarBridge" name="radar_bumper_front_right_far" namespace="">
<composable_node pkg="av_radar_bridge" plugin="sensor::RadarBridge" name="radar_bumper_front_right_far" namespace="">
<param name="frame_id" value="radar_bumper_front_right_mount"/>
<param name="input_topic" value="/sensor/radar/bumper_front_right/far/image"/>
<param name="output_topic" value="/output/radar/bumper_front_right/far/image"/>
</composable_node>

<composable_node pkg="aw_radar_bridge" plugin="sensor::RadarBridge" name="radar_bumper_front_right_near" namespace="">
<composable_node pkg="av_radar_bridge" plugin="sensor::RadarBridge" name="radar_bumper_front_right_near" namespace="">
<param name="frame_id" value="radar_bumper_front_right_mount"/>
<param name="input_topic" value="/sensor/radar/bumper_front_right/near/image"/>
<param name="output_topic" value="/output/radar/bumper_front_right/near/image"/>
</composable_node>

<composable_node pkg="aw_radar_bridge" plugin="sensor::RadarBridge" name="radar_bumper_rear_centre_far" namespace="">
<composable_node pkg="av_radar_bridge" plugin="sensor::RadarBridge" name="radar_bumper_rear_centre_far" namespace="">
<param name="frame_id" value="radar_bumper_rear_centre_mount"/>
<param name="input_topic" value="/sensor/radar/bumper_rear_centre/far/image"/>
<param name="output_topic" value="/output/radar/bumper_rear_centre/far/image"/>
</composable_node>

<composable_node pkg="aw_radar_bridge" plugin="sensor::RadarBridge" name="radar_bumper_rear_centre_near" namespace="">
<composable_node pkg="av_radar_bridge" plugin="sensor::RadarBridge" name="radar_bumper_rear_centre_near" namespace="">
<param name="frame_id" value="radar_bumper_rear_centre_mount"/>
<param name="input_topic" value="/sensor/radar/bumper_rear_centre/near/image"/>
<param name="output_topic" value="/output/radar/bumper_rear_centre/near/image"/>
Expand All @@ -55,49 +55,49 @@

<!-- Radars component container B -->
<node_container pkg="rclcpp_components" exec="component_container" name="radars_container_b" namespace="">
<composable_node pkg="aw_radar_bridge" plugin="sensor::RadarBridge" name="radar_roof_left_front_far" namespace="">
<composable_node pkg="av_radar_bridge" plugin="sensor::RadarBridge" name="radar_roof_left_front_far" namespace="">
<param name="frame_id" value="radar_roof_left_front_mount"/>
<param name="input_topic" value="/sensor/radar/roof_left_front/far/image"/>
<param name="output_topic" value="/output/radar/roof_left_front/far/image"/>
</composable_node>

<composable_node pkg="aw_radar_bridge" plugin="sensor::RadarBridge" name="radar_roof_left_front_near" namespace="">
<composable_node pkg="av_radar_bridge" plugin="sensor::RadarBridge" name="radar_roof_left_front_near" namespace="">
<param name="frame_id" value="radar_roof_left_front_mount"/>
<param name="input_topic" value="/sensor/radar/roof_left_front/near/image"/>
<param name="output_topic" value="/output/radar/roof_left_front/near/image"/>
</composable_node>

<composable_node pkg="aw_radar_bridge" plugin="sensor::RadarBridge" name="radar_roof_left_rear_far" namespace="">
<composable_node pkg="av_radar_bridge" plugin="sensor::RadarBridge" name="radar_roof_left_rear_far" namespace="">
<param name="frame_id" value="radar_roof_left_rear_mount"/>
<param name="input_topic" value="/sensor/radar/roof_left_rear/far/image"/>
<param name="output_topic" value="/output/radar/roof_left_rear/far/image"/>
</composable_node>

<composable_node pkg="aw_radar_bridge" plugin="sensor::RadarBridge" name="radar_roof_left_rear_near" namespace="">
<composable_node pkg="av_radar_bridge" plugin="sensor::RadarBridge" name="radar_roof_left_rear_near" namespace="">
<param name="frame_id" value="radar_roof_left_rear_mount"/>
<param name="input_topic" value="/sensor/radar/roof_left_rear/near/image"/>
<param name="output_topic" value="/output/radar/roof_left_rear/near/image"/>
</composable_node>

<composable_node pkg="aw_radar_bridge" plugin="sensor::RadarBridge" name="radar_roof_right_front_far" namespace="">
<composable_node pkg="av_radar_bridge" plugin="sensor::RadarBridge" name="radar_roof_right_front_far" namespace="">
<param name="frame_id" value="radar_roof_right_front_mount"/>
<param name="input_topic" value="/sensor/radar/roof_right_front/far/image"/>
<param name="output_topic" value="/output/radar/roof_right_front/far/image"/>
</composable_node>

<composable_node pkg="aw_radar_bridge" plugin="sensor::RadarBridge" name="radar_roof_right_front_near" namespace="">
<composable_node pkg="av_radar_bridge" plugin="sensor::RadarBridge" name="radar_roof_right_front_near" namespace="">
<param name="frame_id" value="radar_roof_right_front_mount"/>
<param name="input_topic" value="/sensor/radar/roof_right_front/near/image"/>
<param name="output_topic" value="/output/radar/roof_right_front/near/image"/>
</composable_node>

<composable_node pkg="aw_radar_bridge" plugin="sensor::RadarBridge" name="radar_roof_right_rear_far" namespace="">
<composable_node pkg="av_radar_bridge" plugin="sensor::RadarBridge" name="radar_roof_right_rear_far" namespace="">
<param name="frame_id" value="radar_roof_right_rear_mount"/>
<param name="input_topic" value="/sensor/radar/roof_right_rear/far/image"/>
<param name="output_topic" value="/output/radar/roof_right_rear/far/image"/>
</composable_node>

<composable_node pkg="aw_radar_bridge" plugin="sensor::RadarBridge" name="radar_roof_right_rear_near" namespace="">
<composable_node pkg="av_radar_bridge" plugin="sensor::RadarBridge" name="radar_roof_right_rear_near" namespace="">
<param name="frame_id" value="radar_roof_right_rear_mount"/>
<param name="input_topic" value="/sensor/radar/roof_right_rear/near/image"/>
<param name="output_topic" value="/output/radar/roof_right_rear/near/image"/>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<?xml version="1.0"?>
<?xml-model href="http://download.ros.org/schema/package_format3.xsd" schematypens="http://www.w3.org/2001/XMLSchema"?>
<package format="3">
<name>aw_radar_bridge</name>
<name>av_radar_bridge</name>
<version>1.0.0</version>
<description>Bridge from internal radar msgs to Autoware radar msgs</description>
<maintainer email="[email protected]">Alejandro Bordallo</maintainer>
Expand Down
File renamed without changes.
9 changes: 9 additions & 0 deletions cyclone_dds.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8" ?>
<CycloneDDS xmlns="https://cdds.io/config" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="https://cdds.io/config
https://raw.githubusercontent.com/eclipse-cyclonedds/cyclonedds/master/etc/cyclonedds.xsd">
<Domain id="any">
<Internal>
<SocketReceiveBufferSize min="10MB"/>
</Internal>
</Domain>
</CycloneDDS>
7 changes: 4 additions & 3 deletions dev.sh
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,13 @@

# Build docker image up to dev stage
DOCKER_BUILDKIT=1 docker build \
-t aw_radar_bridge_humble \
-t av_radar_bridge:latest-dev \
-f Dockerfile --target dev .

# Run docker image with local code volumes for development
docker run -it --rm --net host --privileged \
-v /dev/shm:/dev/shm \
-v /etc/localtime:/etc/localtime:ro \
-v ./ecal_to_ros/ros2:/opt/ros_ws/src/ecal_to_ros \
-v ./aw_radar_bridge:/opt/ros_ws/src/aw_radar_bridge \
aw_radar_bridge_humble
-v ./av_radar_bridge:/opt/ros_ws/src/av_radar_bridge \
av_radar_bridge:latest-dev
5 changes: 3 additions & 2 deletions runtime.sh
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,11 @@ fi

# Build docker image only up to prebuilt stage
DOCKER_BUILDKIT=1 docker build \
-t aw_radar_bridge_humble \
-t av_radar_bridge:latest \
-f Dockerfile --target runtime .

# Run docker image without volumes
docker run -it --rm --net host --privileged \
-v /dev/shm:/dev/shm \
aw_radar_bridge_humble $CMD
-v /etc/localtime:/etc/localtime:ro \
av_radar_bridge:latest $CMD

0 comments on commit d11e37b

Please sign in to comment.