ROS基础——动作编程
什么是动作(action)
- 一种问答通信机制
- 带有连续反馈
- 可以在任务过程中止运行
- 基于ROS的消息机制实现
Action的接口
- goal:发布任务目标
- cancel:请求取消任务
- status:通知客户端当前的状态
- feedback:周期反馈任务运行的监控数据
- result:向客户端发送任务的执行结果,只发布一次
一、定义action文件
cd ~/catkin_ws/src/learning_action/action
sudo gedit DoDishes.action
learning_action为功能包,如何创建见以下链接
DoDishes.action代码如下
#定义目标信息
uint32 dishwasher_id
---
#定义结果信息
uint32 total_dishes_cleaned
---
#定义周期反馈的消息
float32 percent_complete
在package.xml中添加功能包依赖
<build_depend>actionlib</build_depend>
<build_depend>actionlib_msgs</build_depend>
<exec_depend>actionlib</exec_depend>
<exec_depend>actionlib_msgs</exec_depend>
在CMakeLists.txt添加编译选项
如何实现一个动作服务器
- 初始化ROS节点
- 创建动作服务器实例
- 启动服务器,等待动作请求
- 在回调函数中完成动作服务功能的处理,并反馈进度信息
- 动作完成,发送结束信息
cd ~/catkin_ws/src/learning_action/src
sudo gedit DoDishes_server.cpp
sudo gedit DODishes_client.cpp
DoDishes_server.cpp
#include "ros/ros.h"
#include "actionlib/server/simple_action_server.h"
#include "learning_communication/DoDishesAction.h"
typedef actionlib::SimpleActionServer<learning_communication