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
| Component | Requirement |
|---|---|
| OS | Ubuntu 22.04+, Debian 12+ |
| Architecture | x86_64, aarch64 |
| Memory | 2 GB RAM minimum |
| Disk | 500 MB for installation |
Installation Methods
From Package Repository (Recommended)
# 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
| Option | Default | Description |
|---|---|---|
HDDS_ENABLE_SECURITY | ON | DDS Security support |
HDDS_ENABLE_SHM | ON | Shared memory transport |
HDDS_ENABLE_LOGGING | ON | Debug logging |
HDDS_STATIC_LINK | OFF | Static 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
- Configuration - Configure rmw_hdds
- Migration from FastDDS - Switch from FastDDS
- Performance - ROS2 performance tuning