ROS2 기본 개념(노드, 토픽, 서비스, 액션)

3 minute read

ROS가 무엇일까?

  • 운영체제와 비슷한 하드웨어 추상화를 포함하고 있으면서도 전통적인 운영체제는 아니기에 이기종 하드웨어에서도 사용할 수 있는 특징이 있다.
    • 이기종 하드웨어
      • 임베디드 시스템과 같이 다양한 제조사의 센서, 마이크로컨트롤러 등이 혼합되어 하나의 시스템을 이루는 것
  • 로봇 응용 프로그램을 개발하기 위해 로봇에 특화된 다양한 개발환경을 제공하는 로봇 소프트웨어 플랫폼이자 로봇 소프트웨어 개발을 위한 일종의 툴

ROS2 기본 개념

  • 노드(Node)
    • 프로그램의 재사용성을 극대화하기 위해 최소 단위의 실행 가능한 프로세스라고 정의한 단어
      • 원본 영상을 출력하는 카메라 드라이버
      • 원본 영상에 필터링 하는 필터 노드
      • 필터링된 영상에서 특징점을 추출하는 노드
      • 특징점을 이용해 물건을 검출하는 노드
    • ros2 run 명령어를 통해서 노드를 실행한다.
    • ros2 launch 를 이용해서 하나 이상의 노드를 실행시킬 수 있다.
    • rqt_graph 명령어를 통해 노드와 노드 간의 메시지 통신을 그래프 형태로 볼 수 있다.

        # tutlesim 패키지의 특정 노드를 실행
        ros2 run turtlesim tutlesim_node
              
        ros2 run turtlesim tutle_teleop_key
      
    • ros2 node list 명령어로 현재 개발환경에서 동작 중인 노드 목록을 볼 수 있다.

      Untitled

      • rqt_graph 는 rqt 플러그인 형태로 실행되어 위와 같은 노드를 만들게 되는데, rqt는 다양한 툴을 복수 개 실행할 수 있도록 하기 위해 노드 이름 뒤에 프로세스 아이디가 붙는다.
    • ros2 run turtlesim turtlesim_node __node:=new_turtle 처럼 명령어를 입력하면 동일 노드를 다른 이름으로 복수 개 실행할 수 있다.
  • 패키지(Package)
    • 하나 이상의 노드 또는 노드 실행을 위한 정보 등을 묶어 놓은 것
  • 메타패키지(Metapackage)
    • 패키지의 묶음
  • 메시지(Message)
    • 노드와 노드 사이에 주고 받는 데이터
    • Integer, Floating point, Boolean, String 과 같은 데이터 형태이며 메시지 안에 메시지를 품고 있는 데이터 구조 또는 배열로도 사용할 수 있음
    • 메시지를 주고 받는 통신 방법에 따라 토픽(Topic), 서비스(Service), 액션(Action), 파라미터(Parameter)로 나눌 수 있음

Untitled 1

  • 토픽(Topic)

    Untitled 2

    • Node A - Node B처럼 비동기식 단방향 메시지 송수신 방식으로 msg 인터페이스 형태의 메시지를 퍼블리시하는 Publisher 와 메시지를 서브스크라이브하는 Subscriber 간의 통신
    • 1:1 통신을 기본으로 하지만 구성 방식에 따라 1:N, N:1, N:N 통신도 가능
    • ROS 메시지 통신에서 가장 널리 사용되는 방법
    • 노드는 하나 이상의 토픽을 퍼블리시할 수 있을 뿐만 아니라 동시에 토픽을 서브스크라이브하는 Subcriver 역할도 동시에 수행할 수 있다.
    • 기본 특징으로 비동기성과 연속성을 가지고 있어서 센서 값 전송 및 항시 정보를 주고 받아야 하는 부분에서 주로 사용된다.
    • ros2 node info /turtlesim
      • tutlesim 노드의 토픽 정보를 확인할 수 있다.
      • 서브스크라이브 하고 있는 msg와 퍼블리시 하고 있는 msg가 무엇인지 알 수 있다.

      Untitled 3

    • ros2 topic info /turtle1/cmd_vel
      • 토픽 메시지 형태, 토픽의 퍼블리셔 및 서브스크라이버 정보를 확인할 수 있다.
    • ros2 topic echo /turtle1/cmd_vel
      • /turtle1/cmd_vel 토픽의 값을 확인할 수 있다.
      • teleop_turtle 노드를 실행한 터미널 창에서 키보드를 눌러 내린 명령에 대한 값을 확인할 수 있음
    • ros2 topic bw /turtle1/cmd_vel
      • 송수신 받는 토픽의 초당 대역폭을 볼 수 있다.
    • ros2 topic hz /turtle1/cmd_vel
      • 토픽의 전송 주기를 확인할 수 있다.
    • ros2 topic pub <topic_name> <msg_type> "<args"
      • 토픽을 직접 퍼블리시 하는 명령어이다.
    • ros2 bag record <topic_name1> <topic_name2> <topic_name3>
      • 퍼블리시되는 토픽을 파일 형태로 저장하고 필요할 때 저장된 토픽을 다시 불러와 동일한 주기로 재생할 수 있는 기능이다.
    • ros2 bag info rosbag2_2023_12_19-23_35_31/
      • rosbag 파일의 정보를 확인할 수 있다.
    • ros2 bag play rosbag2_2023_12_19-23_35_31/
      • rosbag 를 재생한다.
  • 서비스(sevice)

    Untitled 4

    • Node A - Node B 처럼 동기식 양방향 메시지 송수신 방식
    • 서비스 요청을 하는 쪽을 Sevice Client, 요청 받은 서비스를 수행한 후 응답하는 쪽을 Service Server 라고 한다.
    • 특정 요청을 하는 클라이언트 단과 요청받은 일을 수행한 후에 결과값을 전달하는 서버 단과의 통신이다.

    Untitled 5

    • ros2 service list -t
      • 서비스 목록과 형태를 볼 수 있다.
    • ros2 service call <service_name> <service_type> "<arguments>"
      • 서비스 요청 방법이다.
    • ros2 service call /clear std_srvs/srv/Empty
      • /clear 서비스를 요청하는 방법이다.
      • turtlesim 창에서 표시된 이동 궤적을 지우는 서비스이다.

      Untitled 6

    • ros2 service call /kill turtlesim/srv/Kill “name: ‘turtle1’”
      • 지정된 이름의 거북이를 없앤다.

      Untitled 7

    • ros2 service call /turtle1/set_pen turtlesim/srv/SetPen "{r: 255, g: 255, b: 255, width: 10}"
      • r, g, b 값을 조합하여 궤적의 색을 지정하고, width 로 궤적의 크기를 지정할 수 있다.
    • ros2 service call /spawn turtlesim/srv/Spawn "{x: 5.5, y: 7, theta: 1.57, name: "raffaello'}"
      • 지정한 위치 및 자세로 지정한 이름의 거북이를 추가한다.

      Untitled 8

      Untitled 9

  • 액션(Action)

    Untitled 10

    • 비동기식, 동기식 양방향 메시지 송수신 방식으로 액션 목표를 지정하는 Action Client 와 액션 목표를 받아 특정 태스크를 수행하면서 중간 결괏값을 전송하는 액션 피드백 그리고 최종 결괏값을 담은 액션 결과를 전송하는 Action Server 간의 통신이다.

    Untitled 11

    • ROS1과 달리 ROS2에서는 목표, 피드백, 결과값을 주고 받기 위해 토픽과 서비스를 혼합하여 사용한다.
      • 목표 전달(send_goal), 목표 취소(cancle_goal), 결과 받기(get_result) 액션에는 서비스 통신이 활용된다.

토픽, 서비스, 액션 비교

  토픽(Topic) 서비스(Service) 액션(Action)
연속성 연속성 일회성 복합(토픽+서비스)
방향성 단방향 양방향 양방향
동기성 비동기 동기 동기 + 비동기
연결 1:1, 1:N, N:1, N:N (Publisher:Subscriber) 1:1 (Server:Client) 1:1 (Server:Client)
노드 역할 퍼블리셔(Publisher), 서브스크라이버(Subscriber) 서버(Server), 클라이언트(Client) 서버(Server), 클라이언트(Client)
동작 트리거 퍼블리셔 클라이언트 클라이언트
인터페이스 msg 인터페이스 srv 인터페이스 action 인터페이스
CLI 명령어 ros2 topic, ros2 interface ros2 service, ros2 interface ros2 action, ros2 interface
사용 예 센서 데이터, 로봇 상태, 로봇 좌표, 로봇 속도 명령 등 LED 제어, 모터 토크 On/Off, IK/FK 계산, 이동 경로 계산 목적지로 이동, 물건 파지, 복합 테스트 등

#### Reference

  • ROS2로 시작하는 로봇 프로그래밍 서적

Categories:

Updated:

Leave a comment