节点(node)在ROS2中是发布和接收消息的主体,每个节点都是负责一个单一的模块用途,(如一个节点用于控制车轮电机,一个节点用于控制激光测距仪),每个节点都可以通过主题(topic)、服务(service)、动作(action)、或参数(parameter)向其他节点发送和接受数据。节点、主题、服务、动作和参数的关系见图:
一个完整的机器人系统由许多协同工作的节点(node)组成,在ROS2中,单个可执行文件(C++程序、Python程序等)可以包含一个或多个节点,如turtlesim包含节点:
(1)ros2 run():
ros2 run命令从包中启动一个可执行文件,命令格式是:
ros2 run <package_name> <executable_name>
例如启动小海龟的命令是:
ros2 run turtlesim turtlesim_node
其中turtlesim是包的名字,turtlesim_node是可执行文件的名字,此时可以通过ros2 node list 查看节点列表/turtlesim
通过命令:ros2 run turtlesim turtle_teleop_key启动小海龟控制器,再次通过ros2 node list查看节点列表:/teleop_turtle和/turtlesim
(2)remap(重新映射)
给默认节点属性(节点名词、主题名称、服务名称等)重新分配给自定义值。
运行代码:ros2 run turtlesim turtlesim_node --ros-args --remap __node:=my_turtle
可以看到重新打开了一个海龟窗口,运行 ros2 node list可以看到现在节点列表有三个值,分别为:/teleop_turtle,/turtlesim,/my_turtle
(3)ros2 node info (节点信息)
上一步知道节点名字,可以通过代码获取更多节点信息:ros2 node info <node_name>,如:
ros2 node info /my_turtle
可以看到节点/my_turtle的信息列表,包括节点的subscribers,publishers,services,actions,输出信息如下:
总结:节点是ROS2的基础元素, 在机器人系统中服务于单一的模块化的目的。通过运行可执行文件(executable):turtlesim_node和turtle_teleop_key从包<turtlesim>创建节点。
ros2节点名列表获取:ros2 node list
ros2节点信息获取:ros2 node info <node_name>(eg.ros2 node info my_turtle)