[2023-03-29] 2. ROS 원격 노드 통신
ROS 노드간 원격 통신
- ROS에서 노드와 노드가 서로 통신하며 협업
- 서로 다른 하드웨어 사이에서 네트워크로 통신
- 단일 하드웨어 안에 있는 노드끼리도 네트워크로 통신
- 단일 하드웨어끼리 통신할때는 굳이?
- 약간 오버헤드가 있고 불필요하지만 나중의 확장성을 생각해서 인터넷 통신을 함
- 단일 하드웨어끼리 통신할때는 굳이?
-
통신 프로토콜(TCP/IP 계열)
- XMLRPC 프로토콜 : 노드들이 마스터와 통신할 때 이용
- TCPROS 프로토콜 : 각 노드간 통신할 때 이용
ROS 원격통신을 위한 환경 설정
$ sudo gedit ~/.bashrc
를 입력해 아래와 같이 IP 주소 설정
ROS_MASTER_URI = roscore가 구동되는 장치(Teacher)의 공유기의 공용IP 주소
ROS_HOSTNAME = 내 PC/노트북의 IP 주소
- ` $ source.bashrc` 를 입력해 수정한 내용을 시스템에 반영
ROS 원격통신 실습 내용
$ rosrun turtlesim turtle_teleop_key
를 입력해 돌려보기- 노드간 메시지 흐름 확인
- 새로운 터미널 창을 열어서 작업
$ rostopic list
$ rosnode info /turtlesim
$ rostopic echo /turtle1/cmd_vel
$ rqt_graph
네트워크 환경설정 작업순서 및 흐름
- 공유기 포트포워딩 설정
- /etc/hosts 파일 수정
- ROS 환경변수 설정
- 실행 테스트
1. 공유기 포트포워딩 설정
-
포트포워딩이란 외부에서 내부 네트워크로 들어오는 데이터를 올바른 기기로 전달하기 위한 방법
-
공유기 제조사마다 설정 방법이 다르므로 공유기 메뉴얼을 보고 설정할 것
-
포트 포워딩을 설정할 때 포트 범위를 1024 ~ 65000으로 할 것
-
DMZ를 설정할 때 ROS 원격통신을 시도할 장치의 IP를 입력할 것
2. /etc/hosts 파일 수정
- Student(집)쪽에서 /etc/hosts 파일을 열어 실습실의 Teacher(실습실)의 공유기의 공인IP와 Teacher의 Hostname을 입력
- Teacher쪽에서 /etc/hosts 파일을 열어 Student의 공유기의 공인IP와 Student의 Hostname을 입력
3. ROS 환경변수 세팅
- ROS 네트워크에서 반드시 하나만 실행되어야 함
- Student에서 Teacher 컴퓨터의 ROS Master에 접속하려면 Teacher의 공인 IP 주소가 필요
- ROS_HOSTNAME을 주석 처리 하면 됨
- /etc/hosts 파일을 수정하면서 이미 Hostname에 대한 설정을 마쳤으므로
4. 원격통신 제대로 설정되었는지 테스트
- Student의 PC에서 Publish 해보자 : Student쪽의 키보드 입력이 Teacher 화면에 표시되면 OK
- Teacher(Sub)에서
$ rostopic echo /chatter
- Student (Pub)에서
$ rostopic pub /chatter std_msgs/String hello
을 입력해 Sub로 hello 보내기 - 반대로 하면 반대로 메시지를 보낼 수 있음