ros2学习笔记(一)——基本概念(二)

  • Post author:
  • Post category:其他


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 #可以看到反馈的内容



版权声明:本文为weixin_47705183原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。