Link
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"를 이용해 더 많은 관련 정보를 보는 방법도 알았다. 이 두가지 커맨드는 실제 로봇 시스템 내에 흐르는 복잡한 데이터를 이해하는데 핵심적인 커맨드이다.
'Knowhow > ROS2' 카테고리의 다른 글
[ROS2 Foxy Tutorial 한글 번역] 6. Understanding parameters (0) | 2023.02.02 |
---|---|
[ROS2 Foxy Tutorial 한글 번역] 5. Understanding services (0) | 2023.02.01 |
[ROS2 Foxy Tutorial 한글 번역] 4. Understanding topics (0) | 2023.02.01 |
[ROS2 Foxy Tutorial 한글 번역] 2. Using turtlesim and rqt (0) | 2023.01.31 |
[ROS2 Foxy Tutorial 한글 번역] 1. Configuring environment (0) | 2023.01.31 |