ROS 使用方法 关于actionlib

主要作用

在ros中,如果想要发送一个request给一个节点该节点完成一些任务,并且给出一个回复,这样可以使用ros中的service完成。但是有一些应用中任务执行的时间很长,用户需要查看执行的进度如何,以及或者取消该任务,ros中提供了一个actionlib package来建立服务,执行一个长时间运行的可抢占目标。
使用client server接口,使用ROS action 协议通信。client和server都提供一套简单的API给用户来执行任务。
这里写图片描述

为了能够通信,需要定义少量的messages,也就是action specification。定义包括Goal, FEedback, Result.

使用方法

定义类

typedef actionlib::SimpleActionClient<dji_sdk::DroneTaskAction> DroneTaskActionClient;
DroneTaskActionClient drone_task_action_client;

定义了client之后可以调用给出的很多API函数

void    cancelAllGoals ()
void    cancelGoal ()
void    cancelGoalsAtAndBeforeTime (const ros::Time &time)
ResultConstPtr  getResult () const
SimpleClientGoalState   getState () const
bool    isServerConnected () const
void    sendGoal (const Goal &goal, SimpleDoneCallback done_cb=SimpleDoneCallback(), SimpleActiveCallback active_cb=SimpleActiveCallback(), SimpleFeedbackCallback feedback_cb=SimpleFeedbackCallback())
SimpleClientGoalState   sendGoalAndWait (const Goal &goal, const ros::Duration &execute_timeout=ros::Duration(0, 0), const ros::Duration &preempt_timeout=ros::Duration(0, 0))
SimpleActionClient (const std::string &name, bool spin_thread=true)
SimpleActionClient (ros::NodeHandle &n, const std::string &name, bool spin_thread=true)
void    stopTrackingGoal ()
bool    waitForResult (const ros::Duration &timeout=ros::Duration(0, 0))
bool    waitForServer (const ros::Duration &timeout=ros::Duration(0, 0)) const

定义server端

typedef actionlib::SimpleActionServer<dji_sdk::DroneTaskAction> DroneTaskActionServer;
DroneTaskActionServer* drone_task_action_server;
dji_sdk::DroneTaskFeedback drone_task_feedback;
dji_sdk::DroneTaskResult drone_task_result;
bool drone_task_action_callback(const dji_sdk::DroneTaskGoalConstPtr& goal);
drone_task_action_server = new DroneTaskActionServer(nh,
"dji_sdk/drone_task_action",
boost::bind(&DJISDKNode::drone_task_action_callback, this, _1), false);
drone_task_action_server->start();

在回调函数中给出feedback, result等,feedback, result都是messages.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值