1.ROS2的基本组件
与ROS1类似的,ROS2也具有node
,topic
,service
,action
之类的组件,并且也具有rqt
等工具。
可以像使用ROS1的命令行的方式(参这里【ROS学习笔记7】ROS中的常用命令行),来查看ROS2中的这些组件,例如:
ros2 node list
ros2 topic list
ros2 service list
ros2 action list
与ROS1一致,ROS2中程序也是以节点node
为单位,通过topic
或者service
的方式来进行通信的,在ROS2中,单个可执行文件(Cpp可执行文件和Python程序)可以包含一个或者多个节点。在ROS2中取消了RosMaster的结构设计,节点之间的通信方式如下图所示:
在ROS2中,node
,topic
,service
的概念和ROS1中一致,这里不再详细赘述了,我们只在这里详细介绍一下action
。
action
动作,是ROS2中的通信类型之一,适用于长时间运行的任务。action
通常由三部分构成:目标、反馈和结果。action
是建立在主题和服务的基础之上的,它们的功能与服务类似,只是可以进行取消的操作,在服务响应完毕后还提供返回,而并不是单一的响应服务。action
使用client-service
的模型,“动作客户端“节点将目标发送到”动作服务器“节点后,”动作服务器“节点确认该目标并返回反馈流和结果。
据个例子:
使用turtlesim
中进行控制的示例
ros2 run turtlesim turtlesim_node
ros2 run turtlesim turtle_teleop_key
可以看到命令行中有这么一行
Use G|B|V|C|D|E|R|T keys to rotate to absolute orientations. 'F' to cancel a rotation.
我们可以通过键盘上的G|B|V|C|D|E|R|T
来制定海龟的旋转方向,并且可以使用F
来终止旋转,这一实现其实就是使用action
通信的。
我们可以查看当前节点的完整信息
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:
这里有Action Servers
来提供响应操作并且提供反馈输出。
然后查看控制节点的信息
ros2 node info /teleop_turtle
结果如下:
/teleop_turtle
Subscribers:
/parameter_events: rcl_interfaces/msg/ParameterEvent
Publishers:
/parameter_events: rcl_interfaces/msg/ParameterEvent
/rosout: rcl_interfaces/msg/Log
/turtle1/cmd_vel: geometry_msgs/msg/Twist
Service Servers:
/teleop_turtle/describe_parameters: rcl_interfaces/srv/DescribeParameters
/teleop_turtle/get_parameter_types: rcl_interfaces/srv/GetParameterTypes
/teleop_turtle/get_parameters: rcl_interfaces/srv/GetParameters
/teleop_turtle/list_parameters: rcl_interfaces/srv/ListParameters
/teleop_turtle/set_parameters: rcl_interfaces/srv/SetParameters
/teleop_turtle/set_parameters_atomically: rcl_interfaces/srv/SetParametersAtomically
Service Clients:
Action Servers:
Action Clients:
/turtle1/rotate_absolute: turtlesim/action/RotateAbsolute
这里实现了Action Clients
来调用服务。
可以直接使用
ros2 action list -t
来查看当前启动的各项action
通信方式,如下:
/turtle1/rotate_absolute [turtlesim/action/RotateAbsolute]
查看当前接口的详细信息
ros2 interface show turtlesim/action/RotateAbsolute
结果显示如下:
# The desired heading in radians
float32 theta
---
# The angular displacement in radians to the starting position
float32 delta
---
# The remaining rotation in radians
float32 remaining
1.1.ROS2中的launch文件
在ROS2中可以使用多种方式编写,比如Python
,XML
,YMAL
这三种方式,具体可以参考Using Python, XML, and YAML for ROS 2 Launch Files
一个使用Python编写的launch文件的示例:
ros2 launch turtlesim multisim.launch.py