ROS2學習之旅(4)——理解ROS2 Graph中的節點

ROS(2)圖(ROS(2) graph)是一個同時處理數據的基於ROS2元素的網絡,它包含了所有的可執行文件以及它們之間的連接。圖中的基本元素包括:節點(nodes)、話題(topics)、服務(services)、參數(parameters)以及動作(actions)。下面對ROS2中的節點進行介紹。ROS中的每個節點應具有一個單獨的模塊化用途(例如,一個節點用於控制電機,一個節點用於控制激光雷達等)。每個節點都可以通過話題、服務、動作或參數向其他節點發送和接收數據。

一個完整的機械人系統應該由許多協同工作的節點組成。在ROS2中,單個可執行文件(c++程序、Python程序等)可以包含一個或多個節點,這一點與ROS1不同,在ROS1中,單個可執行文件只能包含一個節點。

在開始接下來的操作之前,確保已經完成turtlesim的安裝以及配置好ROS2的環境,可以參考我之前寫的ROS2學習之旅系列的文章。

1. ros2 run

ROS2中的ros2 run命令與ROS1中的rosrun命令功能相同,即運行功能包中的可執行程序:

ros2 run <package_name> <executable_name>

接下來運行turtlesim,在終端中運行:

ros2 run turtlesim turtlesim_node

在這裡,包名稱為turtlesim,可執行程序的名稱為turtlesim_node

2. ros2 node list

運行ros2 node list命令將會顯示所有運行節點的名稱。當系統中運行有多個節點時,可以通過此命令對節點進行跟蹤。

當turtlesim還在終端中運行時,打開一個新的終端,並輸入以下命令:

ros2 node list

此時,終端會返回節點名稱:

turtlesim

打開另一個終端,運行teleop節點:

ros2 run turtlesim turtle_teleop_key

此時,再次在turtlesim包中進行搜索,並執行名為turtle_teleop_key的可執行程序。

運行ros2 node list,將會得到活躍的兩個節點:

/turtlesim
/teleop_turtle

2.1重映射

重映射可以將默認節點屬性(如節點名稱、話題名稱、服務名稱等)重新分配給自定義值。在上一篇博文中,在turtle_teleop_key上使用了重映射來更改默認被控制的海龜。

接下來,對節點/turtlesim進行重映射,在終端中運行:

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

此時,將會打開另一個turtlesim窗口。再次運行ros2 ndoe list將會得到:

/turtlesim
/teleop_turtle
/my_turtle

3.ros2 node info

在知道節點名稱的前提下,可以通過info獲得有關節點的更多信息:

ros2 node info <node_name>

例如,想要知道節點my_turtle的更多信息,可以在終端運行:

ros2 node info /my_turtle

ros2 node info會返回與該節點交互的訂閱者,發佈者,服務以及動作的列表,此時終端輸出:

/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:

4.總結

節點是ROS2的基本元素,在ROS中具有單一的模塊化功能。通過ros2 node list/info可以獲得節點信息,這些信息對於理解一個複雜的、真實的機械人系統中的數據流至關重要。

如果給您帶來幫助,希望能給點個關注,以後還會陸續更新有關機械人的內容,點個關注不迷路~歡迎大家一起交流學習。

都看到這了,點個推薦再走吧~

未經允許,禁止轉載。

Tags: