ROS 원격 노드 통신

BERT·2023년 4월 2일
0

ROS

목록 보기
7/23

ROS에서 node 통신

통신 프로토콜 (TCP/IP 계열)

  • XMLRPC 프로토콜 : node master
  • TCPROS 프로토콜 : node node

하나의 장치 안에서 여러 노드가 서로 통신

서로 다른 하드웨어 사이에서 네트워크 통신
단일 하드웨어 안에 있는 노드끼리도 네트워크 통신

원격 통신 예제 구동

PublisherSubscriber
programturtle_teleop_keyturtlesim_node
node/teleop_turtle/turtlesim
topic/turtle1/cmd_vel/turtle1/cmd_vel
dtypegeometry_msgs/Twistgeometry_msgs/Twist
iphttp://192.168.x.xxhttp://192.168.x.xx

원격 통신을 위한 환경설정

IP 주소 설정

ROS_MASTER_URI=로봇 IP 주소
ROS_HOSTNAME=내 PC IP 주소

sudo gedit ~/.bashrc

export ROS_MASTER_URI=http://192.168.x.xx:11311
export ROS_HOSTNAME=192.168.x.xx

source ~/.bashrc

구동

rosrun turtlesim turtle_teleop_key

노드간 메시지 확인

rostopic list
rosnode info /turtlesim
rostopic echo /turtle1/cmd_vel
rqt_graph


원격 통신 환경 구축

사설 IP를 가진 여러 장치를 port forwarding을 이용해 연결

PC공유기
사설 IP
192.168.x.xx
공인 IP
전세계에서 유일한 값
OS
ROS Version
사설 ip
hostname
pc에 DMZ 설정
공인 ip

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

  1. 공유기 포트 포워드 설정
    포트 범위 1024~65000
    DMZ 설정할 때 ROS 원격통신을 시도할 장치의 IP를 입력
    DMZ : 공유기의 모든 포트를 특정 사설 IP에 포트포워딩하는 것
  2. /etc/hosts 파일 수정
    PC
    PC 사설 IP local
    로봇 공인 IP 로봇 hostname
    로봇
    로봇 사설 IP local
    PC 공인 IP PC hostname
  3. ROS 환경변수 설정
    roscore는 ros 네트워크에서 반드시 하나만 실행되어야 함
    ROS Master 접근을 위해 로봇 공인 IP주소 필요
    ~/.bashrcROS_HOSTNAME 주석 처리(이미 /etc/hosts파일에서 수정)
    ROS_MASTER_URI에 로봇 공인 IP 입력
    로봇(roscore 가동)은 ROS_MASTER_URI에 본인 사설 IP 입력
  4. 실행 테스트
    Publisher : rostopic pub /chatter std_msgs/String hello
    Subscriber : rostopic echo /chatter

노드간 원격 통신 구성

xycar_ws
├ src
│  └ msg_send
│    ├ src 
│    │ ├ remote_teacher.py
│    │ └ remote_student.py
│    └ launch
│      └ remote.launch
├ build
└ devel

msg_receiver.py msg_sender.py 참고

로봇
roscore
rosrun msg_send remote_teacher.py

msg.first_name = "bert"
msg.last_name = "shim"
msg.id_number = 201914113
msg.phone_number = "010-0000-0000"

PC
rosrun msg_send remote_student.py
launch
roslaunch msg_send remote_launch

0개의 댓글