통신 프로토콜
- 노드와 마스터 노드 간의 통신은 XMLRPC 프로토콜을 사용한다.
- 노드와 노드 간의 통신은 TCPROS 프로토콜을 사용한다.
- 동일한 장치의 노드 간 통신에도 TCP/IP 기반의 인터넷 기반의 통신이 이루어진다(오버헤드 발생).
원격 통신을 위한 환경 설정
1. 환경 변수 설정
$ sudo gedit ~/.bashrc
ROS_MASTER_URI = [roscore가 구동중인 장치의 IP 주소]
# ROS_HOSTNAME = [현재 장치의 IP주소] (주석)
$ sourch .bashrc
2. 공유기 설정 (포트포워딩)
- 공유기의 포트포워드 옵션에서 1024~65000 범위에 대해 포워딩을 설정한다.
or
- 원격 장치의 IP로 DMZ(공유기의 모든 포트를 특정 사설 IP에 포트포워딩)를 설정한다.
3. /etc/hosts 수정
# PC 설정
192.168.123.123(PC의 사설 IP) local
123.123.123.123(자동차의 공인 IP) tegra-uabuntu (계정명)
# 자동차 설정
192.168.123.123(자동차의 사설 IP) xycar
123.123.123.123(PC의 공인 IP) DESKTOP-XCQCJ (계정명)
4. 테스트
- 아래 두 명령어를 이용하여 통신 상태를 확인한다.
$ rostopic pub /chatter std_msgs/String hello
$ rostopic echo /cahtter