4. ROS의 중요 컨셉

Speedwell🍀·2022년 3월 8일
0

ROS 용어 정리

Node, Package, Message

  • Node

    • 최소 단위의 실행 가능한 프로세서
    • 하나의 실행 가능한 프로그램
    • ROS에서는 최소한의 실행 단위로 프로그램을 나누어 작업
    • 각 노드는 메시지 통신으로 데이터를 주고 받음
  • Package

    • 하나 이상의 노드, 노드 실행을 위한 정보 등을 묶어 놓은 것
    • 패키지의 묶음을 메타패키지라 하여 따로 분리
  • Message

    • 메시지를 통해 노드 간의 데이터를 주고 받음
    • 메시지는 integer, floating point, boolean와 같은 변수형태
    • 메시지 안에 메시지를 품고 있는 간단한 데이터 구조 및 메시지들의 배열과 같은 구조도 사용 가능

Topic, Publisher, Subscriber

  • Topic

    • 메시지 통신 방법 중 하나
    • 단방향
    • 연속성
    • 주로 일방적인 데이터를 계속(연속적으로) 보내야 하는 상황에 사용 (ex. 센서데이터)
  • Publisher

    • 메시지를 보내는 노드
  • Subscriber

    • 메시지를 받는 노드

Service, Service server, Service client

  • Service

    • 양방향
    • 일회성
    • 한 번 주고 받으면 접속 끊김. 다시 하려면 재접속
  • Service client

    • 명령 요청
  • Service server

    • client의 요청에 맞춰 로봇 동장, 관련 프로세싱 처리
    • 요청한 것에 대해 끝났다고 알림

Action, Action server, Action client

실질적으로 많이 사용하지는 않음

Sevice랑 비슷하지만 중간에 피드백을 전달한다는 점이 다름

주로 복잡하고 오래 걸리는 task, 중간중간 결과물을 알고 싶을 때 사용


보통 ROS 프로그램을 짤 때 80~90% Topic을 쓰고, 적은 비중으로 Service를 쓰고, 더 적은 비중으로 Action을 씀


메시지 통신

📌 ROS에서 가장 기본이 되는 기술적 포인트
: 노드간의 메시지 통신!


1. 마스터 구동: XMLRPC(XML-Remote Procedure Call)

$ roscore

마스터는 노드 정보를 관리!

그 데이터에 관여하거나 프로세싱을 하는 것은 아니지만, 실행되는 노드들의 정보를 관리해서 노드들의 통신을 연결하는 매개체 역할


2. Subscriber 노드 구동

$ rosrun 패키지이름 노드이름

서브스크라이버 노드 정보를 마스터에 전달

이때 정보는 노드 이름, 토픽 이름, 메시지 타입(ex. 카메라, 모터), IP 번호와 Port 번호


3. Publisher 노드 구동

$ rosrun 패키지이름 노드이름

위와 마찬가지로 노드 이름, 토픽 이름, 메시지 타입, IP 번호와 Port 번호 전달


4. Publisher 정보 알림

마스터는 서브스크라이버 노드에게 새로운 퍼블리셔 정보를 알림

(결혼정보회사에서 프로필을 비교해서 잘 맞는 둘을 서로 소개시켜주는 느낌)


5. Publisher 노드에 접속 요청

마스터로부터 받은 퍼블리셔 정보를 이용하여 TCPROS 접속을 요청

(결혼회사에서 상대방 전화번호를 받아서 직접 연락하는 느낌)


6. Subscriber 노드에 접속 응답

접속 응답에 해당되는 자신의 TCP URI 주소와 포트번호를 전송


7. TCP 접속

TCPROS를 이용하여 퍼블리셔 노드와 직접 연결


8. 메시지 전송

발생자 노드는 서브스크라이버 노드에게 메시지를 전송 (토픽)

토픽 방식에서는 접속을 끊지 않는 이상 지속적으로 메시지를 전송한다. 즉, 연속성.


9. 서비스 요청 및 응답

1회에 한해 접속, 서비스 요청 및 서비스 응답이 수행되고 서로간의 접속을 끊는다.

서비스는 토픽과 달리 1회에 한해 접속하고 서비스 요청 및 서비스 응답이 수행한 후 서로 간의 접속을 끊는다. 즉, 1회성이다.


10. 예제 - turtlesim


ROS 메시지

메시지는 노드 간에 데이터를 주고 받을 때 사용하는 데이터의 형태


예: geometry_msgs/Twist


Name, TF, Client Library, 이기종 디바이스 간의 통신

네임(Names)

  • 노드, 메시지(토픽, 서비스, 액션, 파라미터) 가지는 고유의 식별자

  • ROS는 그래프(graph)라는 추상 데이터 형태(abstract data type) 지원

  • 글로벌(global)

    • 문자 없이 네임을 바로 쓰거나 네임 앞에 슬래쉬(/)를 붙임
  • 프라이빗(private)

    • 네임 앞에 틸트(~)를 붙임
  • 예제는 7장 ROS 기본 프로그래밍 roslaunch 부분에서 다룸


좌표 변환 (TF, transform)

  • 각 조인트(joint)들의 상대 좌표 변환
    • 트리(tree) 형태로 조인트들간의 관계도를 표시
    • 예제는 10장 TF 및 13장 모델링에서

클라이언트 라이브러리 (Client Library)

  • 다양한 프로그래밍 언어 지원

    • roscpp, rospy, roslisp
    • rosjava, roscs, roseus, rosgo, roshask, rosnodejs, RobotOS.jl, roslua, PhaROS, rosR, rosruby, Unreal-Ros-Plugin
  • MATLAB for ROS

  • LabVIEW for ROS


이기종 디바이스 간의 통신

예제1) 원격으로 이미지 전송

8장 카메라 참고


예제2) 안드로이드 스마트폰의 가속도 값을 PC에서 확인하기


예제3) 안드로이드 스마트폰으로 TurtleBot 제어하기


참고)
강의: https://www.youtube.com/watch?v=skqzz_xQQXg&list=PLRG6WP3c31_VIFtFAxSke2NG_DumVZPgw&index=4&ab_channel=ROBOTISOpenSourceTeam
자료: https://github.com/robotpilot/ros-seminar/blob/master/04_ROS%EC%9D%98_%EC%A4%91%EC%9A%94_%EC%BB%A8%EC%85%89.pdf

0개의 댓글