ROS通信编程_动作编程_server编程

系统环境:Ubuntu16.04

实现一个动作服务器:
1.初始化ROS节点
2.创建动作服务器实例
3.启动服务器,等待动作请求
4.在回调函数中完成动作服务功能的处理,并反馈进度信息
5.动作完成,发送结束信息

在功能包/src下新建文件DoDishes_server.cpp,输入以下内容并保存退出。

例程:
#include <ros/ros.h>
//此动作库用于实现简单动作
#include <actionlib/server/simple_action_server.h>
#include “learning_communication/DoDishesAction.h”
//提前定义一下,方便后面使用。
typedef actionlib::SimpleActionServer<learning_communication::DoDishesAction> Server;

// 收到action的goal后调用该回调函数
void execute(const learning_communication::DoDishesGoalConstPtr& goal, Server* as)
{
ros::Rate r(1);
//定义反馈
learning_communication::DoDishesFeedback feedback;

ROS_INFO("Dishwasher %d is working.", goal->dishwasher_id);

// 假设洗盘子的进度,并且按照1hz的频率发布进度feedback
for(int i=1; i<=10; i++)
{
    feedback.percent_complete = i * 10;
    as->publishFeedback(feedback);
    r.sleep();
}

// 当action完成后,向客户端返回结果
ROS_INFO("Dishwasher %d finish working.", goal->dishwasher_id);
as->setSucceeded();

}

int main(int argc, char** argv)
{
ros::init(argc, argv, “do_dishes_server”);
ros::NodeHandle n;

// 定义一个服务器
Server server(n, "do_dishes", boost::bind(&execute, _1, &server), false);

// 服务器开始运行
server.start();

ros::spin();

return 0;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值