1.服务
应该了解:
>
服务与主题的不同点;
>
使用服务的方式,发布请求并获得响应
。
服务是 ROS graph中节点的另一种通信方式。 服务基于call-and-response模型,而不是主题的publisher-subscriber(发布者-订阅者)模型。
主题允许节点订阅数据流并获得持续更新,服务仅在客户端专门调用时才提供数据。
ros2服务调用
#服务调用的形式
ros2 service call <service_name> <service_type> <arguments>
#下方为两个例子
ros2 service call /clear std_srvs/srv/Empty
ros2 service call /spawn turtlesim/srv/Spawn "{x: 2, y: 2, theta: 0.2, name: ''}" #注意到x:有空格再加入数值,name:同样有空格再加入字符串
使用服务调用,必须知道service_name,service_type,arguments的形式
#返回系统中当前活动的所有服务的列表service_name
ros2 service list
#从以上知晓服务的名字后,可获取服务类型type_name
ros2 service type <service_name>
ros2 service list -t #同时获取服务名字及服务类型
#获取argument,从命令行调用服务时需要知道的输入参数结构。
ros2 interface show <type_name>
2.参数(parameter)
应该了解:
>
参数的获取、设置和保存
>
参数文件保存和设置
参数设置
#查看各个节点参数
ros2 param list
#显示参数的类型和当前值
ros2 param get <node_name> <parameter_name>
#修改参数值
ros2 param set <node_name> <parameter_name> <value>
设置参数
set
命令只会在当前的会话中更改它们,而不是永久更改。 但是,可以保存设置更改并在下次启动节点时重新加载它们。
参数转储
#将节点的所有当前参数值“转储”到一个文件中以供以后保存
ros2 param dump <node_name> #在工作区运行的目录中会生成一个新文件
#将参数从文件加载到当前运行的节点:
ros2 param load <node_name> <parameter_file>
#若在启动节点时就要加载参数,可用:
ros2 run <package_name> <executable_name> --ros-args --params-file <file_name>
3.操作(action)
应当了解:
>
action的基本概念
>
发送action的方式
操作(action)是 ROS 2 中的一种通信类型,用于长时间运行的任务。 它们由三部分组成:目标、反馈和结果。
操作建立在主题和服务上
。 它们的功能类似于服务,但可以取消操作。 它们还提供稳定的反馈,而不是返回单一响应的服务。
在客户端给出Goal Service Request后,服务器返回Response,而后客户端给出Result Service Request,服务器多次反馈后,再返回Response.
主题,服务与操作:
主题:单一方向持续数据流,传感器数据或机器人状态
服务:应答机制,调用服务,完成后受到回复,例如询问天气情况,查询电量
操作:一次无法完成,需要多次才可以完成,或者完成过程需要中断,甚至终止,例如导航,抓取动作。
查看节点的action
ros2 node info <node_name>
#对于返回结果,着重看底部的Action Servers以及Action Clients
查看当前ROS graph的action
ros2 action list
ros2 action list -t #会返回action_type
查看action的信息
ros2 action info <action_name>
#返回action_name,执行此action的客户端和服务器
在自己发送或执行操作目标之前,您还需要的另一条信息是
操作类型的结构
。
ros2 interface show <action_type>
#例子
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
#结果解析:第一部分是goal request的结构,第二部分是response的结构,第三部分是feedback的结构
发送action goal
ros2 action send_goal <action_name> <action_type> <values>
ros2 action send_goal <action_name> <action_type> <values> --feedback #可以看到反馈的内容