本文的目标:了解ROS 2中nodes的功能,以及与它们交互的工具。
Background
1 The ROS 2 graph
ROS graph是ROS2元素同时一起处理数据的网络。它包含了所有可执行文件以及它们之间的连接,如果要将它们全部映射出来并可视化的话。
ROS2中的nodes
ROS中的每个node都应负责单一的模块化目的,例如控制车轮电机或发布激光测距仪的传感器数据。每个nodes可以通过topics, services, actions, or parameters.发送和接收来自其他nodes的数据。
一个完整的机器人系统由许多协同工作的节点组成。在ROS2中,单个可执行文件(C++程序、Python程序等)可以包含一个或多个nodes。
理解ROS2中的nodes
1 ros2 run
首先要运行人ros2,ros2 run从包中启动一个可执行文件的命令的语法:
ros2 run <package_name> <executable_name>
要运行turtlesim,请打开一个新终端,然后输入以下命令:
ros2 run turtlesim turtlesim_node
turtlesim窗口将打开,这里,包的名称是turtlesim,可执行文件的名称是turtlesim_node。还可以使用ros2 node list
查找节点名称。
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的终端并再次运行。现在,将看到两个活动节点的名称:
2.1 重映射
重新映射允许将默认节点属性(如nodes名称、Topics名称、Services名称等)重新分配给自定义值。在文章开始学习使用 turtlesim, ros2, and rqt使用了turtle_teleop_key上的重新映射来更改cmd_vel Topics和目标 turtle2。
现在,重新分配 /turtlesim 节点的名称。在新终端中,运行以下命令:
ros2 run turtlesim turtlesim_node --ros-args --remap __node:=my_turtle
3 ros2 node info
现在知道了节点的名称,可以使用以下方法访问有关它们的更多信息:
ros2 node info <node_name>
若要检查最新节点,my_turtle,请运行以下命令:
ros2 node info /my_turtle
ROS2 节点信息返回subscribers, publishers, services, and actions的列表。即与该节点交互的ROS图连接。输出应如下所示:
/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 节点上运行相同的命令,并查看其连接与my_turtle有何不同。
总结
nodes是基本的 ROS2元件,在机器人系统中具有单一的模块化用途。
在本文中,运行可执行文件turtlesim_node和turtle_teleop_key来利用在 turtlesim 包中创建的节点。
学习了如何使用 ros2 节点列表来发现活动节点名称和 ros2 节点信息以自检单个nodes。