[ROS2] (4)-Node의 개념

Node 란

노드란 최소 기능을 수행하는 프로그램이라고 할 수 있다. 예를 들어, 모터를 제어하거나 센서 데이터를 받아오는 것과 같이 한 가지의 목적을 수행하는 작은 단위의 프로그램이다. 노드가 반드시 최소 기능만을 수행할 필요는 없다. 각자의 목적에 따라 여러가지의 기능을 수행하는 노드를 만들 수도 있다. 그러나 작은 단위의 노드를 여러개 만드는 것이 파일을 관리하고, 이슈를 추적하기에 훨씬 쉬울 것이다.

각 노드들은 다른 노드와 메시지를 주고 받음으로써 상호작용할 수 있다. ROS2에서는 하나의 실행파일이 여러 개의 노드를 포함할 수 있다.

Node 정보 확인하기

먼저, ros2 run <package_name> <executable_name> 명령어를 통해 패키지의 실행 파일을 실행할 수 있다. turtlesim 패키지의 turtlesim_node를 실행해보자.

$ ros2 run turtlesim turtlesim_node

ros2 node list를 실행하면 현재 실행 중인 node list를 출력한다. 현재 하나의 노드만 실행하고 있으므로 /turtlesim 이라는 노드만 출력된다.

ros2 node info <node_name>을 실행하면 해당 노드의 정보를 출력한다. /turtlesim 노드의 정보를 확인해보면 다음과 같이 출력된다.

/turtlesim
  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
    /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
    /turtlesim/describe_parameters: rcl_interfaces/srv/DescribeParameters
    /turtlesim/get_parameter_types: rcl_interfaces/srv/GetParameterTypes
    /turtlesim/get_parameters: rcl_interfaces/srv/GetParameters
    /turtlesim/list_parameters: rcl_interfaces/srv/ListParameters
    /turtlesim/set_parameters: rcl_interfaces/srv/SetParameters
    /turtlesim/set_parameters_atomically: rcl_interfaces/srv/SetParametersAtomically
  Service Clients:

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

remapping 노드 특성

노드를 실행할 때, 기본 노드 특성을 새롭게 부여할 수도 있다. 아래 명령어는 node 이름을 remapping 해주는 명령이다.

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

명령을 실행하면 turtlesim 창이 하나 더 뜬다. 다시 ros2 node list를 보면 /my_turtle이라는 노드가 실행 중인 것을 확인할 수 있다.

댓글남기기