Knowhow/ROS2

[ROS2 Foxy Tutorial 한글 번역] 3. Understanding nodes

침닦는수건 2023. 1. 31. 20:54
반응형

Link

https://docs.ros.org/en/foxy/Tutorials/Beginner-CLI-Tools/Understanding-ROS2-Nodes/Understanding-ROS2-Nodes.html

 

Understanding nodes — ROS 2 Documentation: Foxy documentation

ros2 node list will show you the names of all running nodes. This is especially useful when you want to interact with a node, or when you have a system running many nodes and need to keep track of them. Open a new terminal while turtlesim is still running

docs.ros.org

 

Background

1. The ROS 2 graph

이 글을 포함한 앞으로 몇 건에 걸쳐 ROS (2) graph라고 불리는 ROS2의 핵심 개념 시리즈를 배우게 될 것이다. 

 

ROS graph는 데이터를 동시다발 적으로 처리하는 ROS2 요소들이 형성하는 네트워크다. 조금 더 확장해서 모든 실행형 파일 (executables)과 이들 사이의 연결까지 포함할 수 있는 개념이다. 

 

2. Nodes in ROS 2

ROS 의 node 하나 하나는 개별적으로 1개의 기능 및 목적을 담당하는 단위다. 예를 들어, 1개의 노드는 wheel motor만 제어하고, 또 다른 하나의 노드는 laser range finder만 제어한다. 각각의 node는 다른 node와 topic, service, action 혹은 parameter를 통해 데이터를 주고 받을 수 있게 설계되어 있다.

로봇 시스템 전체는 함께 동작하는 수많은 노드들의 집합으로 이루어져있다. ROS 2 에서는 하나의 실행 파일(executable)은 하나 혹은 여러 개의 node를 갖고 있을 수 있다. 

 

Prerequisites

2023.01.31 - [Develop/ROS2] - [ROS2 Foxy Tutorial 한글 번역] 2. Using turtlesim and rqt 에서 다룬 turtlesim을 계속해서 사용한다. 

 

당연하게도 ROS 2 를 sourcing하는 것을 잊지 말자. 

 

Tasks

1. ros2 run

"ros2 run" 이라는 커맨드는 패키지로부터 실행 파일(executable)을 실행(launch)하는 커맨드다.

ros2 run <package_name> <executable_name>

우리가 다루는 turtlesim 예제를 run하기 위해선 새로운 터미널을 열고 다음 커맨드를 입력하면 된다.

ros2 run turtlesim turtlesim_node

바로 이전 글에서 보았던 turtlesim 윈도우가 열릴 것이다. 

 

여기서 패키지 이름은 turtlesim 이며 executable의 이름은 turtlesim_node 이다. 

 

만약 이름을 모르는 상황이라면 "ros2 node list" 라는 커맨드로 출력하여 확인할 수 있다.

 

2. ros2 node list

"ros2 node list" 커맨드는 실행 중인 node 전체의 이름을 보여준다. 특정 node과 정보를 주고 받고자 할 때나 동작 중인 많은 node 중 하나를 추적해야할 경우 특히 유용하게 쓰인다. 

 

turtlesim이 실행 중일 텐데 또 다른 새로운 터미널을 열고 다음 커맨드를 입력해보자.

ros2 node list

다음과 같은 결과를 보여줄 것이다.

/turtlesim

또 다른 터미널을 열고 이번엔 teleop node를 실행시켜 보자.

ros2 run turtlesim turtle_teleop_key

여기서 다시 한 번 짚으면 패키지 이름은 똑같이 turtlesim 이지만 executable 이름은 turtle_teleop_key이다.

 

다시 한 번 "ros2 node list" 커맨드를 사용해보면 추가로 활성화된 node가 더 보이는 것을 알 수 있다. 

/turtlesim
/teleop_turtle

 

2.1 Remapping

Remapping은 기본 node property를 재설정하는 기능이다. 예를 들어 node 이름이나 topic 이름, service 이름 등을 사용자 정의 값으로 변경할 때 쓰인다. 지난 튜토리얼에서 turtle_teleop_key 를 remapping 해본 경험이 있을 것이다. 

 

여기선 /turtlesim node의 이름을 변경해볼 것이다. 새로운 터미널을 열고 다음 커맨드를 입력해보자.

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

turtlesim_node를 또 run한 것이기 때문에 또 다른 윈도우가 열렸을 것이다. 하지만 "ros2 node list"

를 다시 입력해보면 이전과 다르게 기본 이름이 아닌 임의로 지정한 my_turtle이라는 이름으로 출력되는 것을 볼 수 있다. 

/turtlesim
/teleop_turtle
/my_turtle

 

3. ros2 node info

이제 node의 모든 이름을 알 수 있다. 더 많은 정보를 얻는 커맨드는 다음과 같다.

ros2 node info <node_name>

my_turtle node를 예시로 들면 다음과 같이 입력하면 된다.

ros2 node info /my_turtle

"ros2 node info"는 node와 연관된 subscriber, publisher, service, action 모두를 출력한다. 출력 결과는 다음과 같이 나온다.

/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
  Services:
    /clear: std_srvs/srv/Empty
    /kill: turtlesim/srv/Kill
    /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
    /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
  Action Servers:
    /turtle1/rotate_absolute: turtlesim/action/RotateAbsolute
  Action Clients:

똑같이 /teleop_turtle에 대해서도 node info를 출력해보고 /my_turtle과 비교해보라. 

 

다음 튜토리얼에서는 message types을 포함해서 ROS graph connection 개념을 조금 더 알아볼 것이다. 

 

Summary

node는 ROS2 요소 중 기본적인 단위로 로봇 시스템에서 개별적으로 1개의 기능 및 목적을 수행한다. 

 

본 튜토리얼에서는 turtlesim 패키지로부터 turtlesim_node, turtle_teleop_key 라는 node를 생성해서 사용해보았다. 

 

또한 "ros2 node list"를 이용해 활성환된 node의 이름을 확인하는 방법을 알았고 "ros2 node info"를 이용해 더 많은 관련 정보를 보는 방법도 알았다. 이 두가지 커맨드는 실제 로봇 시스템 내에 흐르는 복잡한 데이터를 이해하는데 핵심적인 커맨드이다. 

반응형