ROS2中的节点
节点应该负责一个单一的模块化功能,每个节点可通过主题(topics)、服务(services)、动作(actions)或参数(parameters)与其他节点进行数据的发送和接受
一个完整的的机器人系统由许多协同工作的节点组成。在ROS2中,但个可执行文件(C++程序、Python程序等)可以包含一个或多个节点
节点常用命令
-
ros2 run <package_name> <executable_name>
-
ros2 node list
然而,当我们不知道节点名称的时候,可以使用
ros2 node list
列出所有正在运行个的节点的名称。当你想与节点进行交互或者系统运行多个节点时需要跟踪它们时,是十分有效的 -
ros2 node info <node_name>
既然知道了节点的名称,可以通过以下指令去访问有关它们的更多信息:
初步实践
运行小乌龟:
ros2 run turtlesim turtletusim_node
# 输入
ros2 node list
# 输出
/turtlesim
# 输入
ros2 node info /turtlesim
# 输出
/turtlesim
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
/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
/turtlesim/describe_parameters: rcl_interfaces/srv/DescribeParameters
/turtlesim/get_parameter_types: rcl_interfaces/srv/GetParameterTypes
/turtlesim/get_parameters: rcl_interfaces/srv/GetParameters
/turtlesim/list_parameters: rcl_interfaces/srv/ListParameters
/turtlesim/set_parameters: rcl_interfaces/srv/SetParameters
/turtlesim/set_parameters_atomically: rcl_interfaces/srv/SetParametersAtomically
Service Clients:
Action Servers:
/turtle1/rotate_absolute: turtlesim/action/RotateAbsolute
Action Clients:
ROS2中的话题
ROS2将复杂系统分解为许多模块化节点。话题是ROS途中的重要组成部分,作为节点交换消息的总线,话题是发布-订阅模型
当然,一个节点发送者可以向任意数量的主题订阅者发布消息,一个节点的订阅者也可以订阅任意数量的主题
常用指令
-
rqt_graph
:可视化节点之间交互连接 -
ros2 topic list
:输出正在运行的所有话题列表
初步实践
-
运行小乌龟节点
ros2 run turtlesim turtlesim_node
-
运行小乌龟运行节点
ros2 run turtlesim turtle_teleop_key
-
可视化节点和话题之间的连接关系
rqt_graph
-
返回当前正在运行所有主题:
# 输入 ros2 topic list # 输出 /parameter_events /rosout /turtle1/cmd_vel /turtle1/color_sensor /turtle1/pose
ROS2 中的服务
服务是基于调用-响应模型,而不是主题的发布-订阅模型。虽然主题允许节点订阅数据流并获得持续更新,但服务仅在客户端特定调用时提供数据
常用指令:
ros2 service list
:返回当前系统中所有运行的服务列表ros2 service type <service_name>
:服务具有描述服务的请求和相应数据结构的类型。服务类型的定义类似与主题类型,但服务类型由请求部分和相应部分组成ros2 service fing <type_name>
:找到特定类型的所有服务ros2 interface show <service_name>
:可以从命令行查看特定服务类型的参数结构ros2 service call <service_name> <service_type> <arguments>
:既然知道了什么是服务类型,如何找到服务的类型,以及如何找到该类型参数的结构,可以通过此命令来调用服务
初步实践
-
ros2 run turtlesim turtlesim_node
-
ros2 run turtlesim turtle_teleop_key
-
# 输入 rso2 service list # 输出 /clear /kill /reset /spawn /teleop_turtle/describe_parameters /teleop_turtle/get_parameter_types /teleop_turtle/get_parameters /teleop_turtle/list_parameters /teleop_turtle/set_parameters /teleop_turtle/set_parameters_atomically /turtle1/set_pen /turtle1/teleport_absolute /turtle1/teleport_relative /turtlesim/describe_parameters /turtlesim/get_parameter_types /turtlesim/get_parameters /turtlesim/list_parameters /turtlesim/set_parameters /turtlesim/set_parameters_atomically
-
# 输入 ros2 service type /turtle1/teleport_absolute # 输出 turtlesim/srv/TeleportAbsolute
-
# 输入 ros2 interface show turtlesim/srv/TeleportAbsolute # 输出 float32 x float32 y float32 theta --- # 输入 ros2 interface show turtlesim/srv/Spawn # 输出 float32 x float32 y float32 theta string name # Optional. A unique name will be created and returned if this is empty --- string name
ROS2中的参数
参数是节点的配置值。您可以将参数视为节点设置。节点可以将参数存储为整数、浮点、布尔、字符串和列表
常用指令:
ros2 param list
:列出各自节点中的配置参数ros2 param get <node_name> <parameter_name>
:显示节点中对应参数名称的类型和当前值ros2 param set <node_name> <parameter_name> <value>
:更改参数的值ros2 param dump <node_name>
:查看节点的所有当前参数值ros2 param load <node_name> <parameter_file>
:将参数从文件加载到当前运行的节点ros2 run <package_name> <executable_name> --ros-args --params-file <file_name>
:使用保存的参数值启动相同的节点
ROS2中的行为
行为是ROS2中的一种通信类型,用于长时间运行的任务。他们由三个部分组成:目标(goal),反馈(feedback)和结果(result)
行为是建立在主题(topics)和服务(services)之上的。它们的功能类似于服务,但行为可以被取消。与只返回单个响应的服务不同,行为还能提供稳定的反馈。
一个行为客户端节点向一个行为服务端发送一个目标,服务段节点确认目标并返回一些列反馈和结果流
常用指令:
ros2 action list
:显示所有action的列表ros2 action info <action_name>
: 显示特定action的信息ros2 interface show <action_name>
: 显示特定action的参数结构ros2 action send_goal <action_name> <action_type> <values>
:发送一个action目标
启动节点
上述的例子中,每次运行节点都要新开一个终端,当运行很多节点时,可以启动包含了ROS2节点的多个可执行文件,使用ros2 launch
录制和回放数据
ros2 bag
是一个命令行工具,用于记录系统中发布在话题上的数据,会将话题传递的数据保存在数据库中,后续可以回放这些数据用于测试和实验的验证
常用指令
ros2 topic echo <topic_name>
:显示话题发布的数据ros2 bag record <topic_name>
:记录话题发布的数据ros2 bag info <bag_file_name>
:查看记录数据bag的详细信息ros2 bag play <bag_file_name>
:回放bag文件ros2 topic hz <topic_name>
:查看话题数据发布的频率