相关课程视频下载链接
和彩云 网盘链接:
链接:和彩云网盘
提取码:qo1z
简介:和彩云网盘是中国移动旗下的网盘,目前对免费用户下载不限速,只要简单注册一个账号就可以下载
迅雷云盘 网盘链接:
迅雷网盘链接
提取码:h22t
简介:迅雷网盘 免费用户下载虽然限速,但是比百度网盘要好
百度网盘:
链接:百度网盘链接
提取码:HHZN
简介:如果你是VIP那就用百度网盘吧。
上一篇:ROS服务通信
Action通信与服务通信一样也是双向通信,最主要的不同的是action通信可以在任务没结束前可以有很多中间状态的过程反馈,同时服务器上的服务同一时刻只能处理一个请求,因此先收到goal有可能被后来的goal给挤掉,所以异步竞争会有状态的转变。ROS把action通信都放在actionlib这个库中了。
action文件有三个区域组成:goal,result,feedback. goal部分由客户端发送目标任务的数值,result与feedback由服务器端反馈给客户端。以上是通信需求的应用,除此之外伴随着还有状态跟随。
- action通信的状态有:
- Pending: 当前goal等待服务器端处理
- Active: 激活当前goal准备处理。
- Recalling: goal还没有被处理,同时收到一个来自客户端的取消goal的请求,注意这个时候服务器端不能保证一定会取消这个goal.
- Preempting: 当前goal正在处理,但是收到客户端的取消这个goal的请求,同样服务器端不能保证会取消这个goal.
- Rejected: goal被拒绝,服务器没有处理,也没有收到客户端的取消请求。
- Succeeded: goal成功被服务器处理完成。
- Recalled: 在服务器端执行之前这个goal就被另一个goal或者客户端的取消请求给取消了。
- Preempted: 正在处理中的goal被另一个goal或者客户端的取消请求给取消了。
action通信,服务器端goal状态的转换图如下:
客戶端goal狀態圖變化:
Simple Action Client 类
simple action client 类已经简化状态转移,简化只剩下了三种状态:
多任务请求的情况:
由于不确定性,不能保证每次goal的申请都会被执行。
附上代码:
服务器端代码:
#include <ros/ros.h>
#include <actionlib/server/simple_action_server.h>
#include "action_demo/action_demoAction.h"
#include <vector>
#include <iostream>
#include <string>
#include <strstream>
/*该函数只是做打印杨辉三角*/
void PrintChineseAngle(
const uint & lines,
actionlib::SimpleActionServer<action_demo::action_demoAction> *as)
{
std::vector<int> ch_angle((1 + lines) * lines / 2, 1);
float offset_ = 100 / lines;
action_demo::action_demoFeedback feedback;
float complete_precent = 0.f;
int * left