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
可以獲得節點信息,這些信息對於理解一個複雜的、真實的機械人系統中的數據流至關重要。
如果給您帶來幫助,希望能給點個關注,以後還會陸續更新有關機械人的內容,點個關注不迷路~歡迎大家一起交流學習。
都看到這了,點個推薦再走吧~
未經允許,禁止轉載。