ROS에서의 그래프는 데이터를 한 번에 처리하는 과정 속에서의 요소들의 네트워크이다.
매핑과 시각화한 모든 실행 파일과 연결 관계를 포함한다.
ROS에서의 각각의 노드들은 모듈의 용도를 담당해야 한다. 각 노드들은 topics, services, actions, parameters를 통해 통신할 수 있다. 큰 규모의 로봇은 매우 많은 노드들로 이루어져 있다. ROS 2에서의 단일 실행 파일(Python
, C++
등) 하나 이상의 노드를 포함할 수 있다.
ros2 run
ros2 run
명령어를 통해 패키지 내의 실행 파일을 실행할 수 있다.
ros2 run <package_name> <executable_name>
ros2 run
을 통해 turtlesim
를 실행해보자.
ros2 run turtlesim turtlesim_node
package_name
은 turtlesim
, executable_name
은 turtlesim_node
임을 알 수 있다.
ros2 node list
ros2 node list
명령어는 현재 실행 중인 노드들의 이름을 보여준다. 노드들의 상호작용과 노드를 추적할 때 유용하다.
새 터미널을 열고 명령을 수행하자.
ros2 node list
/turtlesim
노드의 이름이 /turtlesim
인 것을 알 수 있다.
또 다른 터미널을 열고 teleop
노드를 실행해 보자.
ros2 run turtlesim turtle_teleop_key
같은 방법으로 이름까지 확인하자.
ros2 node list
/turtlesim
/teleop_turtle
재매핑을 사용하면 node name, topic names, service names 등 기본 노드의 속성을 사용자 값으로 재할당할 수 있다. /turtlesim
노드의 이름을 재할당 해보자.
ros2 run turtlesim turtlesim_node --ros-args --remap __node:=my_turtle
다른 turtlesim
창이 새롭게 생성되었다. ros2 node list
명령어를 통해 노드의 이름을 확인해 보자.
/turtlesim
/teleop_turtle
/my_turtle
ros2 node info
노드의 이름을 통해 해당 노드의 자세한 정보를 알 수 있다.
ros2 node info <node_name>
ros2 node info /my_turtle
ros2 node info
는 해당 노드와 상호작용 하고있는 subscribers, publishers, services, actions(ROS Graph Connection)를 반환한다.
/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:
/teleop_turtle
에서도 똑같이 수행해 보자.
/teleop_turtle
Subscribers:
/parameter_events: rcl_interfaces/msg/ParameterEvent
Publishers:
/parameter_events: rcl_interfaces/msg/ParameterEvent
/rosout: rcl_interfaces/msg/Log
/turtle1/cmd_vel: geometry_msgs/msg/Twist
Service Servers:
/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
Service Clients:
Action Servers:
Action Clients:
/turtle1/rotate_absolute: turtlesim/action/RotateAbsolute