ROS学习笔记(六) ROS通信架构(四)

ROS通信架构(四)

ROS的通信方式有以下四种:

Topic 主题
Service 服务
Parameter Service 参数服务器
Actionlib 动作库

Actionlib

actionlib是ROS中的一个库,也是请求响应机制的通信方式(类似service),主要弥补了service通信的一个不足:若执行长时间任务时,利用service通信机制,Client会长时间接收不到reply,通信受阻。actionlib比较适合较长时间的通信过程,actionlib通信过程随时查看过程进度,也可以终止请求。

通信原理

Client-Server模式,也是一个双向的通信模式,在ROS Action Protocol通过消息进行数据的交流通信。client和server为用户提供一个简单的API来请求目标(在客户端)或通过函数调用和回调来执行目标(在服务器端)。

工作模式:

在这里插入图片描述
交流通信:

通信双方在ROS Action Protocal下进行交流通信是通过接口来实现的
在这里插入图片描述
客户端向服务器发送目标指令(goal)和取消动作指令(cancel),服务器给客户端发送实时状态信息、结果信息、反馈信息等(service无法做到)

Actionlib进行请求响应,action包括目标goal,反馈feedback,结果result。
目标:
给机器人明确的移动目标信息,包括参数的设定,方向、角度、速度等。
反馈:
动作进行过程中实时的信息反馈给Client,动作完成的状态等,令Client能做出相应的修正命令。
结果:
动作完成后,Action server 把本次运动的结果数据发送给Client,使Client得到本次动作的全部信息,比如运动的时长,最终的姿势等。

Action文件格式

Action文件后缀为.action

#define the goal
uint 32 a
---
#define the result
uint32 b
---
#define the feedback
flat32 c

CMakeLists.txt

...
find_package(...
genmsg
actionlib
actionlib_msgs
)
...
add_action_files(
DIRESTORY action FILES te.action
)
generate_messages(
DEPENDENCIES actionlib_msgs
)
...

package.xml

<build_depend>actionlib</build_depend>
<build_depend>actionlib_msgs</build_depend>
<run_depend>actionlib</run_depend>
<run_depend>actionlib_msgs</run_depend>

常见action类型

AddTwoInts.action

#文件位置:自定义action文件
#表示将两个整数求和
int64 a
int64 b
---
int64 sum
---

AutoDocking.action

#文件位置:自定义action文件
#gosl
---
#result
string text
---
#feedback
string state
string text

GetMap.action

#文件位置:nav_msgs/GetMap.action
#获取地图信息,响应部分为空

---
nav_msgs/OccupancyGrid map
---
#无返回部分

MoveBase.action

#文件位置:geometry_msgs/MoveBase.action
geometry_msgs/POseStamped target_pose
---

---
geometry_msgs/PoseStamped base_position
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值