在使用Movebase进行导航时,大部分情况下并不只是让机器人到达指定地点,而是需要到达目的地后执行进一步的动作。在发布goal后,需要获取导航执行进度,判断是否到达目的点,才能进行下一步动作。
显而易见的是ROS话题和服务通信无法提供反馈信息,从而无法获取到进度信息,而另一种通信机制Action正好带有反馈信息的功能,详细原理见http://www.guyuehome.com/908。并且Movebase实际上是actionlib的服务端的实现,如图示:
所以,我们只要实现客户端来发送goal并接受来自Action反馈的状态即可判断是否到达目标点了。
代码如下,实现了发送一个simple goal,并且判断Movebase执行是否完成。
/*
* 此处根据需要添加头文件
*/
#include <move_base_msgs/MoveBaseAction.h>
#include <actionlib/client/simple_action_client.h>
//使用Action通信所需要的头文件
using namespace std;
typedef actionlib::SimpleActionClient<move_base_msgs::MoveBaseAction> MoveBaseClient;
int main(int argc