Robot Operating System/Tutorial 따라하기

[Dashing][CLI Tools] 3. Understanding ROS 2 nodes

jstar0525 2021. 5. 7. 15:09
반응형

이 글은 아래의 자료를 참고로 만들어졌습니다.

 

docs.ros.org/en/dashing/Tutorials/Understanding-ROS2-Nodes.html

 

Understanding ROS 2 nodes — ROS 2 Documentation: Dashing 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


 

Understanding ROS 2 nodes

Goal: Learn about the function of nodes in ROS 2, and the tools to interact with them.

 

Tutorial level: Beginner

 

Background

1 The ROS 2 graph

이후의 몇 개의 튜토리얼들을 통해서,

“ROS 2 graph”를 구성하는 ROS 2의 핵심적인 개념들에 대해 배울 것입니다.

 

ROS graph는 ROS 2 요소들의 네트워크입니다.

ROS graph는 실행가능한 프로세스들(nodes)과 그것들의 통신방법(topics, services, actions, parameters)를 포함합니다.

2 Nodes in ROS 2

ROS에서 각각의 node는 하나의 용도를 가진 모듈이어야합니다.

(즉, 하나의 노드가 바퀴의 모터를 제어하고, 또 다른 하나의 노드가 레이저 거리 측정기를 제어해야합니다.)

각 노드는 topics, services, actions 또는, parameters을 통하여 데이터를 다른 노드에 보내거나 받을 수 있습니다.

 

 

로봇 전체의 시스템은 수 많은 노드이 함께 작동하도록 구성됩니다.

ROS 2에서는 단일 실행 파일(C++, Pyhton 등)은 하나 또는 그 이상의 노드들을 포함할 수 있습니다.

 

Prerequisites

이전 튜토리얼turtlesim package가 설치되어 있어야합니다.

 

그리고 매 새로운 terminal마다 설정 파일을 소싱하는 것을 잊지마세요.

 

Tasks

 

1 ros2 run

ros2 run 명령은 package에서 실행 파일을 시작합니다.

$ ros2 run <package_name> <executable_name>

turtlesim을 실행하기 위해서, 새로운 터미널을 열고 아래의 명령어를 입력합니다.

$ ros2 run turtlesim turtlesim_node

 

이전 튜토리얼에서 봤듯이, turtlsim 새로운 창이 열릴 것입니다.

여기서, turtlesim은 package 이름이며,

turtlesim_node는 실행파일입니다.

 

만약, node의 이름을 모르겠다면, ros2 node list 명령으로 node의 이름을 찾을 수 있습니다.

 

2 ros2 node list

ros2 node list 은 현재 실행 중인 노드들의 이름을 알려줍니다.

이 명령은 특히 노드와 상호작용하거나, 시스템에 많은 노드들이 있어 그것들을 추적할 때 유용합니다.

 

새로운 터미널을 열고, 다른 터미널에서 turtlesim이 실행 중일 때,

아래의 명령어를 입력하면 다음 결과를 반환합니다.

$ ros2 node list

/turtlesim

다른 새로운 터미널을 열고,

teleop node를 실행합니다.

$ ros2 run turtlesim turtle_teleop_key

그리고 다시 ros2 node list 명령어를 입력하면,

2개의 노드가 실행되었음을 확인할 수 있습니다.

$ ros2 node list

/turtlesim
/teleop_turtle

 

2.1 Remapping

Remapping은 노드 이름, 토픽 이름, 서비스 이름 등, default node의 속성을 custome value로 재할당합니다.

 

지난 튜토리얼에서는 turtle_teleop_key를 remapping하여

default turtle을 조종하는 것을 바꾸어 새로운 turtle을 조종하도록 하였습니다.

 

새로운 터미널에서 /trutlesim node의 이름을 재할당하는 명령은 아래와 같습니다.

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

turtlesim의 ros2 run 명령을 다시 실행하였기 때문에, 또 다른 turtlesim 화면이 열릴 것입니다.

하지만, ros2 node list를 다시 실행하여 보면, 3개의 노드가 실행 중임을 알 수 있습니다.

$ ros2 node list

/turtlesim
/my_turtle
/teleop_turtle

 

3 ros2 node info

지금까지는 노드들의 이름을 알아냈고,

더 많은 정보들을 보고 싶다면 아래의 명령을 실행합니다.

$ ros2 node info <node_name>

마지막 실행한 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
  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:

ros2 node info 명령은 해당 node와 상호작용하는 subscribers, publishers, services, and actions (the ROS graph connections)의 리스트를 보여줍니다.

 

그리고 /teleop_turtle node에 대해서는 아래와 같습니다.

$ ros2 node info /teleop_turtle

/teleop_turtle
  Subscribers:
    /parameter_events: rcl_interfaces/msg/ParameterEvent
    /turtle1/rotate_absolute/_action/feedback: turtlesim/action/RotateAbsolute_FeedbackMessage
    /turtle1/rotate_absolute/_action/status: action_msgs/msg/GoalStatusArray
  Publishers:
    /parameter_events: rcl_interfaces/msg/ParameterEvent
    /rosout: rcl_interfaces/msg/Log
    /turtle1/cmd_vel: geometry_msgs/msg/Twist
  Services:
    /teleop_turtle/describe_parameters: rcl_interfaces/srv/DescribeParameters
    /teleop_turtle/get_parameter_types: rcl_interfaces/srv/GetParameterTypes
    /teleop_turtle/get_parameters: rcl_interfaces/srv/GetParameters
    /teleop_turtle/list_parameters: rcl_interfaces/srv/ListParameters
    /teleop_turtle/set_parameters: rcl_interfaces/srv/SetParameters
    /teleop_turtle/set_parameters_atomically: rcl_interfaces/srv/SetParametersAtomically
    /turtle1/rotate_absolute/_action/cancel_goal: action_msgs/srv/CancelGoal
    /turtle1/rotate_absolute/_action/get_result: turtlesim/action/RotateAbsolute_GetResult
    /turtle1/rotate_absolute/_action/send_goal: turtlesim/action/RotateAbsolute_SendGoal
반응형