네트워크 & DDS 설정
개발 PC에서 로봇의 topic을 수신하고 명령을 보내기 위한 네트워크 설정 방법입니다.
네트워크 구성
| 호스트 | 역할 | 기본 IP |
|---|---|---|
| Wi-Fi AP | 로봇 ↔ PC 연결 | 192.168.0.1 |
| 로봇 PC | rbq_driver 실행, topic 발행 | 192.168.0.10 |
| 개발 PC | 사용자 ROS 2 노드 실행 | 192.168.0.12 (DHCP) |
로봇과 PC가 같은 서브넷(192.168.0.0/24)에 있어야 합니다. ping이 통하는지 먼저 확인하세요.
필수 설정
RMW 설정
로봇 드라이버와 개발 PC 모두 CycloneDDS를 사용해야 합니다:
bash
export RMW_IMPLEMENTATION=rmw_cyclonedds_cpp매번 설정하기 번거롭다면 ~/.bashrc에 추가하세요:
bash
echo 'export RMW_IMPLEMENTATION=rmw_cyclonedds_cpp' >> ~/.bashrc
source ~/.bashrcDomain ID
ROS_DOMAIN_ID는 로봇과 RBQ 스크립트 어디에도 설정되어 있지 않습니다. 로봇과 개발 PC 모두 **기본값(Domain 0)**을 사용하므로 별도 설정이 필요 없습니다.
연결 확인
bash
# 1. 로봇에 ping
ping 192.168.0.10
# 2. topic 목록 확인
ros2 topic list
# 3. 실시간 수신 확인
ros2 topic echo /rbq/imu/IMU_state --once방화벽
ping은 되는데 ros2 topic list가 비어 있으면 UFW가 multicast를 막고 있을 수 있습니다:
bash
# Wi-Fi 인터페이스에서 DDS 트래픽 허용 (wlp4s0을 실제 인터페이스로 변경)
sudo ufw allow in on wlp4s0
sudo ufw allow out on wlp4s0
# 또는 테스트 목적으로 UFW 비활성화
sudo ufw disable트러블슈팅
Topic이 안 보일 때
ping 192.168.0.10— 로봇과 네트워크 연결 확인RMW_IMPLEMENTATION=rmw_cyclonedds_cpp가 해당 터미널에 설정되어 있는지 확인- NIC가 여러 개인 경우(Wi-Fi + 유선 동시 연결 등) 인터페이스를 명시적으로 지정:
bash
export CYCLONEDDS_URI='<CycloneDDS><Domain><General><Interfaces>
<NetworkInterface name="wlp4s0"/>
</Interfaces></General></Domain></CycloneDDS>'인터페이스 이름은 ip link show로 확인합니다.
Topic은 보이는데 지연/드롭 발생
일부 공유기에서 multicast가 불안정한 경우 unicast로 피어를 직접 지정합니다:
bash
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 타입을 인식하지 못할 때
개발 PC에서 rbq_msgs 패키지를 직접 빌드하고 source해야 합니다:
bash
cd ros2
colcon build --packages-select rbq_msgs
source install/setup.bash