ROS中action的使用

例如说:
我的Action的文件为BBB.action,它在CCC的包里面
客户端和服务端:

  1. action的类型:CCC::BBBAction
  2. action的头文件: CCC/BBBAction.h,服务端和客户端都要include一下

服务端:

  1. action的服务端都要加上 #include<actionlib/server/simple_action_server.h>
  2. 声明服务器对象:
    actionlib::SimpleActionServer <CCC::BBBAction> action_server_
  3. 回调函数为:
    void EEE::ServerCallBack(const actionlib::SimpleActionServer<CCC::BBBAction>::GoalConstPtr& goal);
  4. 在类中使用初始化列表初始化:
    action_server_(nh, “/DDD”,boost::bind(&EEE::ServerCallBack,this, _1),false)
    其中nh为ros::NodeHandle
    EEE为类名
    DDD为标识action的字符串,服务端和客户端要一致
    "false”的意思是暂时不启动这个server(在这个构造函数中的后面会启动server)
  5. 启动server
    action_server_.start()
  6. 需要返回东西的时候,调用
    action_server_.setSucceeded(result, “”);
    其中action_server_是类型的对象
    result是CCC::BBBResult类型的对象
    注意不是CCC::BBBActionResult这个类型,CCC::BBBActionResult这个类型是存在的,但是这个setSucceeded的参数需要的是CCC::BBBResult

客户端:

  1. action的客户端都要加上#include <actionlib/client/simple_action_client.h>
  2. 声明客户端对象actionlib::SimpleActionClient<CCC::BBBAction> action_client_;
  3. 在类中使用初始化列表初始化:action_client_("/DDD", true)
    DDD为标识action的字符串,服务端和客户端要一致
    参数“true”是为了说明新的client将作为一个单线程运行
  4. bool server_exists = action_client_.waitForServer(ros::Duration(3.0));
    在三秒时间内查看是否存在对应服务端,这个一般返回得很快,一瞬间就可以了
  5. 回调函数为:
    void FFF::ClientCallBack(const actionlib::SimpleClientGoalState& state, const CCC::BBBResultConstPtr& result)
    actionlib::SimpleClientGoalState表示处理的状态,源文件为http://docs.ros.org/hydro/api/actionlib/html/simple__client__goal__state_8h_source.html
  6. 发送goal且指定回调函数action_client_.sendGoal(goal_,boost::bind(&FFF::ClientCallBack,this,_1,_2));

BBB包的CMakeLists.txt:

  1. find_package加上actionlib和actionlib_msgs
  2. add_action_files及上 BBB.action
  3. generate_messages 加上 actionlib_msgs
  4. catkin_package 的 CATKIN_DEPENDS加上 actionlib

服务端和客户端的包的CMakeLists.txt:

  1. find_package 加上 BBB

参考博客:
https://blog.csdn.net/will_ye/article/details/79589319

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值