Network & DDS Configuration
The RBQ ROS 2 driver uses CycloneDDS as its middleware. This page explains how to configure the network so that your developer PC can discover and exchange topics with the robot.
Network topology
| Host | Role | Default IP |
|---|---|---|
| Wi-Fi Access Point | L2 bridge between robot and user PC | 192.168.0.1 |
| Robot PC (Motion) | Runs rbq_driver, publishes all topics | 192.168.0.10 |
| Developer PC | Runs your ROS 2 nodes | 192.168.0.12 (DHCP) |
Both machines must be on the same subnet (192.168.0.0/24) and reachable via ping before DDS discovery will work.
Required setup
1. Set the RMW implementation
Both the robot driver and your terminal must use CycloneDDS:
export RMW_IMPLEMENTATION=rmw_cyclonedds_cppAdd to ~/.bashrc to persist across terminals:
echo 'export RMW_IMPLEMENTATION=rmw_cyclonedds_cpp' >> ~/.bashrc
source ~/.bashrc2. Domain ID
ROS_DOMAIN_ID is not set by the robot or any RBQ script — both sides use the default domain 0. No extra configuration is needed.
Verify connectivity
# 1. Ping the robot
ping 192.168.0.10
# 2. Check topics appear
ros2 topic list
# 3. Echo a live topic
ros2 topic echo /rbq/imu/IMU_state --onceFirewall
If ros2 topic list returns nothing but ping succeeds, UFW may be blocking multicast:
# Allow DDS traffic on the Wi-Fi interface (replace wlp4s0)
sudo ufw allow in on wlp4s0
sudo ufw allow out on wlp4s0
# Or disable UFW entirely for testing
sudo ufw disableTroubleshooting
No topics appear
- Confirm both machines are on the same subnet:
ping 192.168.0.10 - Confirm
RMW_IMPLEMENTATION=rmw_cyclonedds_cppis set in every terminal you use - If you have multiple network interfaces (Wi-Fi + Ethernet), specify the correct one explicitly:
export CYCLONEDDS_URI='<CycloneDDS><Domain><General><Interfaces>
<NetworkInterface name="wlp4s0"/>
</Interfaces></General></Domain></CycloneDDS>'Replace wlp4s0 with your Wi-Fi interface name (ip link show to check).
Topics appear but lag or drop
Multicast may be unreliable over some Wi-Fi routers. Add a unicast peer hint:
export CYCLONEDDS_URI='<CycloneDDS><Domain><General>
<Interfaces><NetworkInterface name="wlp4s0"/></Interfaces>
</General><Discovery><Peers><Peer address="192.168.0.10"/></Peers></Discovery>
</Domain></CycloneDDS>'rbq_msgs types show as unknown
The custom message package must be built and sourced on your PC:
cd ros2
colcon build --packages-select rbq_msgs
source install/setup.bash