ROS 노드간 원격 통신

  • ROS에서 노드와 노드가 서로 통신하며 협업
  • 서로 다른 하드웨어 사이에서 네트워크로 통신
  • 단일 하드웨어 안에 있는 노드끼리도 네트워크로 통신
    • 단일 하드웨어끼리 통신할때는 굳이?
      • 약간 오버헤드가 있고 불필요하지만 나중의 확장성을 생각해서 인터넷 통신을 함

image

  • 통신 프로토콜(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

네트워크 환경설정 작업순서 및 흐름

  1. 공유기 포트포워딩 설정
  2. /etc/hosts 파일 수정
  3. ROS 환경변수 설정
  4. 실행 테스트
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 주소가 필요

image

  • 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 보내기
  • 반대로 하면 반대로 메시지를 보낼 수 있음