Study/ROS (robot operating system)

ROS에서 중요한 개념들

13.d_dk 2023. 3. 13. 00:04
728x90
반응형

ROS의 기본 용어 및 개념 정리

  • Node(노드)
    : 최소 단위의 실행 가능한 프로세스. 하나의 실행이 가능한 프로그램으로 생각할 수 있음. ROS에서의 최소 실행단위가 노드이며 이를 프로그램으로 두고 나누어 작업하도록 함. 각 노드는 메시지 통신으로 데이터를 주고받음.
  • Package(패키지)
    : 하나 이상의 노드를 포함하며 노드 실행을 수행하기 위한 정보들을 묶어 놓은 것임. 또 이러한 패키지의 묶음을 meta-package(메타-패키지)로 분리하기도 함.
  • message(메시지)
    : 메시지를 통해 노드 간의 데이터를 주고받을 수 있음. 메시지는 integer, floating, point, boolean과 같은 변수의 형태를 지님. 또 메시지 안에 메시지를 포함하는 데이터 구조 및 메시지의 배열 같은 구조를 만들어 사용할 수도 있음.
  • master(마스터)
    : 여러 노드들 사이의 연결과 통신을 위한 name server 같은 역할.(인터넷의 DNS;domain name server 같은 역할!) 'roscore'가 실행 명령어임. 이 마스터 없이는 노드 간의 접속 및 여러 메시지를 사용하는 통신들을 사용할 수 없음.
  • name(네임)
    : 노드 및 메시지(그리고 각 종 통신들; topic, service, action, parameter; 아래 참조)가 가지는 고유의 식별자. 이와 관련한 몇 가지 특징은 아래와 같음.
  1. ROS는 graph(그래프)라는 abstract data type(추상 데이터 형태) 지원.
  2. global(글로벌) : 문자 없이 네임을 바로 쓰거나, 네임 앞에 '/'(슬래쉬)를 붙여서 사용.
  3. private(프라이빗) : 네임 앞에 '~'(틸트)를 붙여서 사용.

ROS에서 중요한 개념들 사이의 관계

  • TF, transform(좌표 변환)
    : ROS에서는 로봇이 가지는 각각의 joint(조인트)들의 상대 좌표 변환을 지원. tree(트리) 구조로 조인트들 사이의 관계도를 표시할 수 있음.
  • client library(클라이언트 라이브러리)
    : ROS를 작업할 수 있는(노드를 소스 코드로 생성할 수 있는) 여러 프로그래밍 언어를 말함. 아래와 같은 대표적인 클라이언트 라이브러리가 있음.
  1. rospy
  2. roscpp
  3. etc.(roslisp, rosjava, rosgo, rosnodejs, rosR, rosruby, roseus, MATLAB for ROS, LabVIEW for ROS...)

 

ROS에서 message를 사용하는 통신 개념 정리

    • 메시지는 노드 사이에서 데이터를 주고받는 통신에서 사용되는 데이터의 형태
    • topic(토픽), service(서비스), action(액션), parameter(파라미터) 등의 통신 방법이 있음
    • topic(토픽)
      : 토픽은 하나의 노드에서 다른 노드로 메시지를 보내는 통신. 즉, 하나의 노드에서 다른 노드로 비동기식 단방향 메시지 송수신을 사용함. 토픽은 이러한 메시지를 발간하는(publish)하는 publisher와 이 메시지를 구독(subscribe)하는 subscriber 사이의 통신을 말함. 노드들의 구성이 1:1, 1:N, N:N이 되어 동작하는 것도 가능함. ROS 통신 방법 중 가장 많이 사용됨.

Topic

    • service(서비스)
      : 서비스는 서로 다른 두 노드 사이의 요청과 응답으로 이루어진 통신. 이는 동기식 양방향 메시지 송수신을 사용하는 통신 방식임. 서비스의 두 노드에서 메시지 데이터를 요청하는(request) 노드를 service client라고 부르며, 메시지 데이터를 보내어 응답하는(response) 노드를 service server라고 부름. 이처럼 노드들의 구성은 1:1의 동작임. 즉, 서비스는 일을 요청하는 클라이언트 부분과 일을 수행하고 결괏값으로 응답하는 서버 부분 사이의 통신임. 서비스의 요청 및 응답을 묶어서 서비스 메시지(srv message)라고도 함.

Service

    • action(액션)
      : 액션은 서로 다른 두 노드 사이에서 목표를 전달하고 이에 따른 여러 태스크를 수행하며 중간 피드백과 결과를 받는 통신. 이는 비동기식과 동기식 양방향 메시지 송수신 방식을 사용함. action client에서 액션 목표(goal)를 지정하고 다른 노드에 송신. 이후 action server에서 이 목표를 이루기 위한 여러 태스크(task)를 수행. 이때, 여러 태스크 중 완료된 태스크가 발생할 때마다 액션 피드백(feedback)을 action client로 보냄. action server에서 모든 태스크를 완료하여 목표를 달성하면 결과(result)를 action client로 보냄. 위의 토픽과 서비스의 혼합이라고도 볼 수 있음. 액션의 목표와 피드백 및 결과를 묶어서 액션 메시지(action message)라고도 함.

Action

    • parameter(파라미터)
      : 각 노드에 있는 파라미터를 변경하는 통신. 여기서 파라미터란 노드 내의 매개변수 및 글로벌 매개변수를 말함. 각 노드에 있는 parameter server를 외부의 parameter client가 실행하여 통신. 이러한 통신을 통해 파라미터를 외부에서 지정(set)하거나 가져와서(get) 사용할 수 있음. 서비스와 동일한 모양의 통신이나 목적이 다르다고 할 수 있음.
반응형