개발자와 함께하는 ROS2 Humble Node 이해하기, ROS2 명령어-2

IROBOU·2023년 8월 15일
1

인공지능_로봇개발

목록 보기
3/17

저번 포스트에서 ROS2 Humble(이하 ROS2)에서 사용되는 명령어 몇가지를 배웠다.

지난 포스트 링크: ROS2 명령어-1

오늘은 지난시간에 이어 추가로 node에 대한 명령어들을 배워보자


배경지식

1. ROS2 graph란

node 설명에 앞서 몇가지 배경지식을 쌓고가자.

ROS2 에는 ROS graph(이하 graph)라는 게 존재한다. 간단히 설명하자면 ROS2로 로봇개발을 하다보면 로봇내에서 메세지, 신호등의 교환이 일어나는데 이렇게 메세지, 신호들이 연결된 하나의 네트워크를 의미한다.

이 네트워크를 도식화 하게되면 네모, 동그라미 도형들이 선으로 연결된 것을 볼 수 있다.

2. Node란

node는 특정 임무를 수행하는 로봇의 작은 구성원(모듈)들 중 하나라 생각할 수 있다. 예를 들어 임의의 node 1은 센서 데이터를 발행 할 수 있고, 또 다른 node 2는 모터 제어를 담당할 수 있다.

이때 node는 아래와 같이 topic, service, action, parameter등을 통해 다른 node와 정보 및 신호를 주고 받을 수 있다.

topic, service, action, parameter는 또다른 포스트에서 배워보겠다.

아래 보이는 그림과 같이 로봇 시스템은 여러 노드를 포함하게 된다.
이때 executable(c++나 python으로 작성된 실행가능한 프로그램)은 한개 이상의 node를 포함 할 수 있다.

위의 그림은 하나의 로봇 시스템을 도식화 한 것인데, 그림에서 보이듯이 다음을 관찰 할 수 있다.

  • topic이라는 곳에 publisher가 message를 발행하면 subscriber들이 이를 구독한다.
  • service client가 서비스 서버로 하나의 서비스를 요청하면 service server는 이를 적절이 처리하고 다시 client로 응답을 보낸다.

준비물

지난 포스트에서 turtlesim과 rqt를 설치했어야한다.
혹시 안했다면 이전 게시물을 확인하자!
turtlesim, rqt 설치 게시물 바로가기


목표

  • node의 개념에 대해 배우고 node와 같이 사용되는 명령어를 익힌다.

예상 소요시간

  • 약 10분

영상 튜토리얼

  • 추후 업데이트

1. ros2 run 명령어

ros2 run 명령어는 패키지내 존재하는 executable(실행 프로그램 또는 실행 프로그램)을 실행(launch) 한다.

다음과 같은 문법을 갖는다.

ros2 run <패키지 이름> <실행 프로그램 이름>

turtlesim 패키지안에 있는 turtlesim_node라는 실행프로그램을 실행하려면 다음과 같이 명령어를 작성할 수 있겠다.

tip: 명령어 일부를 작성하고 Tab 키를 누르면 나머지 부분이 자동완성되는 경우가 있다! 명령어가 긴 경우 오타를 예방해주므로 적극적으로 활용하자.

ros2 run turtlesim turtlesim_node

실행 프로그램이 켜졌지만 아직 node이름은 모른다.

위에서 배경지식에서 말했던 것 처럼 executable에는 하나 이상의 node가 있을 수 있다고 했는데 node이름은 어떻게 확인 하는 것 일까?

2. ros2 node list

ros2 run list라는 명령어를 터미널에 입력하면 현재 실행중인 node의 이름을 볼수 있다.

ros2 node list

그러면 터미널에는 다음과 같이 /turtlesim 이라는 이름을 갖는 node가 있다고 말할 것이다.

/turtlesim

다른 터미널을 열어서 또 다른 실행 프로그램 turtle_teleop_key를 켜보자

ros2 run turtlesim turtle_teleop_key

다시 다른 터미널에서 ros2 node list를 입력하면 turtle_teleop_key 실행 프로그램에 의해 켜진 /teleop_turtle이라는 node를 볼 수 있을 것이다.

/turtlesim
/teleop_turtle

2.1 Remapping 실습

Remapping이란 node 이름, node가 갖는 topic이름, service 이름등의 특성들을 사용자가 설정하는 값으로 변환 할 수 있는 기능을 말한다.

예를 들어 다음과 같은 명령어를 사용하면 /turtlesim이라는 node 이름 대신 /my_turtle 이라는 특정 이름을 지정해줄 수 있다.

ros2 run turtlesim turtlesim_node --ros-args --remap __node:=my_turtle

따라서 ros2 node list를 다른 터미널에 입력해보면 다음과 같이 총 3개의 node가 실행된 것을 확인 할 수 있다.

/my_turtle
/turtlesim
/teleop_turtle

3. ros2 node info 실습

일단 node 이름을 알면 node의 정보는 ros2 node info라는 명령어로 확인 가능하다.
문법은 다음과 같다.

ros2 node info <node 이름>

그럼 해당 명령어를 활용하여 우리가 실행한 /my_turtle의 정보를 확인해보자

ros2 node info /my_turtle

다음과 같은 어마어마한 정보들이 터미널에 출력됐을 것이다.

/my_turtle
  Subscribers:
    /parameter_events: rcl_interfaces/msg/ParameterEvent
    /turtle1/cmd_vel: geometry_msgs/msg/Twist
  Publishers:
    /parameter_events: rcl_interfaces/msg/ParameterEvent
    /rosout: rcl_interfaces/msg/Log
    /turtle1/color_sensor: turtlesim/msg/Color
    /turtle1/pose: turtlesim/msg/Pose
  Service Servers:
    /clear: std_srvs/srv/Empty
    /kill: turtlesim/srv/Kill
    /my_turtle/describe_parameters: rcl_interfaces/srv/DescribeParameters
    /my_turtle/get_parameter_types: rcl_interfaces/srv/GetParameterTypes
    /my_turtle/get_parameters: rcl_interfaces/srv/GetParameters
    /my_turtle/list_parameters: rcl_interfaces/srv/ListParameters
    /my_turtle/set_parameters: rcl_interfaces/srv/SetParameters
    /my_turtle/set_parameters_atomically: rcl_interfaces/srv/SetParametersAtomically
    /reset: std_srvs/srv/Empty
    /spawn: turtlesim/srv/Spawn
    /turtle1/set_pen: turtlesim/srv/SetPen
    /turtle1/teleport_absolute: turtlesim/srv/TeleportAbsolute
    /turtle1/teleport_relative: turtlesim/srv/TeleportRelative
  Service Clients:

  Action Servers:
    /turtle1/rotate_absolute: turtlesim/action/RotateAbsolute
  Action Clients:

보기만 해도 어질어질 한데 사실 내용을 별게 없다.

/my_turtle이라는 node가 갖고 있는 subscriber, publisher, service server, service client, action server, action client를 나열해주고 있다.
이들은 나중에 topic, service, action에 대해 개념을 배우고 실습하고 나면 익숙해 질 것이니 지금 당장 각각 publisher, service server/client, action server/client가 뭐하는 건지 몰라도 걱정말자!


여태까지 node란 무엇인가 개념을 알아보았고 이에 관련된 터미널 명령어도 살펴보았다.

완전히 이해하지 못 했는가?

전혀 상관없다. 반복해서 연습하다보면 지금 베일에 싸여있는 개념들이 하나씩 드러나기 시작할 것이다.

여기까지 왔다면 스스로를 칭찬해주자. 토닥토닥

질문하고 싶거나 인공지능 / 로봇 개발에 대한 올려줬으면 하는 주제를 댓글로 남겨주세요~

문의메일: irobou0915@gmail.com
오픈톡 문의: https://open.kakao.com/o/sXMqcQAf
IRoboU 유튜브 채널: https://www.youtube.com/channel/UC2-d99PrBwJy15MjPa32zYg

참고 문헌: https://docs.ros.org/en/humble/Tutorials/Beginner-CLI-Tools/Understanding-ROS2-Nodes/Understanding-ROS2-Nodes.html

profile
지식이 현실이 되는 공간

0개의 댓글