[ROS2] Turtlesim으로 보는 ROS 2의 노드와 데이터 통신

강민우·2022년 12월 30일
2
post-thumbnail

[ROS 2로 시작하는 로봇 프로그래밍]에 기반한 정리글입니다.

turtlesim은 ROS의 유명한 패키지 중 하나이자 많은 사람들이 ROS 입문에 튜토리얼로 사용하는 패키지이다. 이번 포스팅에서는 turtlesim 패키지를 가지고 패키지 설치와 노드 실행, 노드 간 메시지 통신 방식인 토픽, 서비스, 액션, 파라미터를 알아본다.


1. Turtlesim 패키지

turtlesim 패키지는 ROS를 처음 접하는 유저들에게 튜토리얼로 제공하기 위해 ROS 패키지로 제작되었으며, 노드, 토픽, 서비스, 액션, 파라미터에 대한 기본적인 학습과, CLI 툴, rqt 툴 등을 체험해 볼 수 있다.

1.1 Turtlesim 설치 및 노드 실행

보통 개발환경 구성 중에 turtlesim 패키지가 설치되지만, 만약 없다면 아래와 같은 방식으로 설치할 수 있다.

$ sudo apt update
$ sudo apt install ros-foxy-turtlesim

turtlesim 패키지가 정상적으로 설치되었다면 아래 명령어를 통해 패키지 리스트에 turtlesim을 확인할 수 있다.
$ ros2 pkg list

아래 명령어를 통하여 turtlesim 패키지에 포함된 여러 노드를 확인할 수 있다.
$ ros2 pkg executables turtlesim

  • draw_square : 사각형 모양으로 turtle을 움직이게 하는 노드
  • mimic : 유저가 지정한 토픽으로 동일 움직임의 turtlesim_node를 복수 개 실행시킬 수 있는 노드
  • turtle_teleop_key : turtlesim_node를 움직이게 하는 속도 값을 publish하는 노드
  • turtlesim_node : turtle_teleop_key로부터 속도 값을 토픽으로 받아 움직이게 하는 2D 시뮬레이터 노드

Turtlesim 패키지의 노드를 실행하려면 아래의 명령어를 각기 다른 터미널에서 사용한다.
$ ros2 run turtlesim turtlesim_node
$ ros2 run turtlesim turtle_teleop_key

turtle_teleop_key를 실행한 터미널에서 키보드의 화살표 키나 알파벳을 이용하여 거북이를 회전, 이동시킬 수 있다.

1.2 노드, 토픽, 서비스, 액션 조회

ROS 2에서 현재 어떤 노드들이 실행되고 어떤 토픽, 서비스, 액션이 있는지 알 수 있다. 여기서 각 명령어들은 모두 turtlesim_nodeturtle_teleop_key 노드가 실행된 상태에서 새로운 터미널에 입력했다.

$ ros2 node list
$ ros2 topic list
$ ros2 service list
$ ros2 action list

또한 터미널 창에 rqt_grpah를 입력하면 각 노드와 토픽, 액션을 그래프로 확인할 수 있다.
여기서 service는 필요할 때 순간적으로 사용되는 형식이기 때문에 표시되지 않는다.
$ rqt_graph


2. ROS 2 노드와 데이터 통신

2.1 노드(Node)란?

노드(Node)는 최소 단위의 실행 가능한 프로세스를 가리키는 용어이다.

ROS에서는 최소한의 실행 단위로 프로그램을 나누어 작업하게 되는데, 각 노드의 역할을 목적에 맞춰 세분화하여 각 노드들 간의 의존성은 줄이고 독립성을 높여 다른 작업에서도 일부 노드를 재사용할 수 있게 한다.

ROS는 노드와 노드 사이에 입출력 데이터를 주고받을 수 있게 설계했고, 이를 메시지 통신 방식으로 처리했다. 여기서 데이터에 해당하는 메시지는 Integer, Float, Boolean, String과 같은 데이터 형태이고, 메시지 안에 메시지를 가지는 데이터 구조나 배열로도 사용이 가능하다.

노드들 간의 메시지 통신 방법은 토픽, 서비스, 액션, 파라미터로 나눌 수 있다.

2.2 노드 실행

앞에서 실행한 turtlesim_nodeturtle_teleop_key가 모두 노드이다. 해당 노드들을 실행한 채로 ros2 node list를 입력한다면 아래 그림과 같이 node list가 출력된다.

만약 동일 노드를 여러 개 실행시키려면 $ ros2 run turtlesim turtlesim_node와 같이 실행해도 되지만, 동일한 노드 이름으로 실행된다. 시스템을 구성하는 데에 있어서 동일 노드 이름은 좋지 않기 때문에 노드명을 변경하여 실행할 수 있다.
$ ros2 run turtlesim turtlesim_node __node:new_turtle

아래와 같이 node list를 조회하면 new_turtle이 출력됨을 알 수 있다.

노드의 정보를 확인하기 위해서는 $ ros2 node info 명령어에 정보를 보기 위한 노드명을 지정하면 된다.
$ ros2 node info /turtlesim
$ ros2 node info /teleop_turtle

3. 마무리

이번 포스팅에는 ROS의 튜토리얼 패키지인 turtlesim의 설치와, 이를 이용하여 노드를 실행하고 토픽, 서비스, 액션을 확인하고 그래프로 시각화할 수 있었다.

다음 포스팅에서는 ROS 2의 메시지 통신 방법인 토픽, 서비스, 액션, 파라미터를 알아본다.

profile
어제보다 성장한 오늘

2개의 댓글

comment-user-thumbnail
2022년 12월 31일

멋저요~~

1개의 답글