Skip to main content

rmw_hdds Installation

Guide to installing the HDDS ROS2 middleware layer (rmw_hdds).

Prerequisites

ROS2 Distribution

rmw_hdds supports:

  • ROS2 Jazzy (recommended)
  • ROS2 Iron
  • ROS2 Humble

System Requirements

ComponentRequirement
OSUbuntu 22.04+, Debian 12+
Architecturex86_64, aarch64
Memory2 GB RAM minimum
Disk500 MB for installation

Installation Methods

# Add HDDS repository
sudo curl -fsSL https://repo.hdds.dev/gpg.key | sudo gpg --dearmor -o /usr/share/keyrings/hdds-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/hdds-archive-keyring.gpg] https://repo.hdds.dev/apt stable main" | sudo tee /etc/apt/sources.list.d/hdds.list

# Update and install
sudo apt update
sudo apt install ros-$ROS_DISTRO-rmw-hdds

From Source (Colcon Workspace)

# Create workspace
mkdir -p ~/ros2_ws/src
cd ~/ros2_ws/src

# Clone repositories
git clone https://github.com/example/hdds.git
git clone https://github.com/example/rmw_hdds.git

# Install dependencies
cd ~/ros2_ws
rosdep install --from-paths src --ignore-src -r -y

# Build
source /opt/ros/$ROS_DISTRO/setup.bash
colcon build --cmake-args -DCMAKE_BUILD_TYPE=Release

# Source workspace
source ~/ros2_ws/install/setup.bash

Using Docker

FROM ros:jazzy

# Install rmw_hdds
RUN apt-get update && apt-get install -y \
ros-jazzy-rmw-hdds \
&& rm -rf /var/lib/apt/lists/*

# Set as default RMW
ENV RMW_IMPLEMENTATION=rmw_hdds_cpp
# Build and run
docker build -t ros2-hdds .
docker run -it ros2-hdds

Setting HDDS as Default RMW

Temporary (Current Session)

export RMW_IMPLEMENTATION=rmw_hdds_cpp

Permanent (Shell Configuration)

# Add to ~/.bashrc or ~/.zshrc
echo 'export RMW_IMPLEMENTATION=rmw_hdds_cpp' >> ~/.bashrc
source ~/.bashrc

Per-Launch Configuration

# Single command
RMW_IMPLEMENTATION=rmw_hdds_cpp ros2 run demo_nodes_cpp talker

# Launch file
ros2 launch my_package my_launch.py --ros-args --enclave /my_enclave

Verification

Check Available RMW Implementations

ros2 doctor --report | grep rmw

Expected output:

middleware name    : rmw_hdds_cpp

Test Communication

Terminal 1:

export RMW_IMPLEMENTATION=rmw_hdds_cpp
ros2 run demo_nodes_cpp talker

Terminal 2:

export RMW_IMPLEMENTATION=rmw_hdds_cpp
ros2 run demo_nodes_cpp listener

Verify HDDS Version

ros2 run rmw_hdds_cpp rmw_hdds_info

Output:

rmw_hdds_cpp version: 1.0.0
HDDS version: 1.0.0
DDS domain: 0
Transport: UDP + SharedMemory

Build Options

CMake Options

colcon build --cmake-args \
-DCMAKE_BUILD_TYPE=Release \
-DHDDS_ENABLE_SECURITY=ON \
-DHDDS_ENABLE_SHM=ON \
-DHDDS_ENABLE_LOGGING=OFF
OptionDefaultDescription
HDDS_ENABLE_SECURITYONDDS Security support
HDDS_ENABLE_SHMONShared memory transport
HDDS_ENABLE_LOGGINGONDebug logging
HDDS_STATIC_LINKOFFStatic linking

Optimized Build

# Maximum performance
colcon build --cmake-args \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_CXX_FLAGS="-O3 -march=native" \
-DHDDS_ENABLE_LOGGING=OFF

Dependencies

Runtime Dependencies

# Automatically installed with package
libhdds1 # Core HDDS library
libhdds-cpp1 # C++ bindings

Build Dependencies (Source Build)

sudo apt install \
build-essential \
cmake \
cargo \
rustc \
libssl-dev

Troubleshooting Installation

Package Not Found

E: Unable to locate package ros-jazzy-rmw-hdds

Solution: Add the HDDS repository:

sudo curl -fsSL https://repo.hdds.dev/gpg.key | sudo gpg --dearmor -o /usr/share/keyrings/hdds-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/hdds-archive-keyring.gpg] https://repo.hdds.dev/apt stable main" | sudo tee /etc/apt/sources.list.d/hdds.list
sudo apt update

Build Fails: Rust Not Found

CMake Error: Could not find Rust compiler

Solution: Install Rust via rustup:

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source ~/.cargo/env

RMW Not Loading

[ERROR] [rmw_implementation]: Failed to load rmw implementation

Solution: Ensure library path is set:

export LD_LIBRARY_PATH=/opt/ros/$ROS_DISTRO/lib:$LD_LIBRARY_PATH

Shared Memory Permission Error

[WARN] [hdds]: Failed to create shared memory segment

Solution: Check shared memory limits:

# Increase limits
sudo sysctl -w kernel.shmmax=268435456
sudo sysctl -w kernel.shmall=65536

# Make permanent
echo "kernel.shmmax=268435456" | sudo tee -a /etc/sysctl.conf
echo "kernel.shmall=65536" | sudo tee -a /etc/sysctl.conf

Uninstallation

Package Installation

sudo apt remove ros-$ROS_DISTRO-rmw-hdds

Source Installation

cd ~/ros2_ws
rm -rf build/rmw_hdds install/rmw_hdds
colcon build

Next Steps