参考
提示
前言
步骤记录
学习actionlib基础知识
定义:用来为预先发布的任务执行提供接口
综述
客户端-服务器模型(ROS Action Protocol)
action的具体消息定义(Action Specification)
构造描述文件
示例代码
提示
前言
步骤记录
学习actionlib基础知识
定义:用来为预先发布的任务执行提供接口
综述
客户端-服务器模型(ROS Action Protocol)
action的具体消息定义(Action Specification)
构造描述文件
示例代码
参考
Actionlib
Detailed_description
Tutorials
SimpleActionClientAPI
sstream double 字符串转换
tf API
提示
- 只有一个包或节点是消息,服务,动作的提供者时,在构造描述文件中才需要添加相应的描述语句,如果是接受者,那么不需要提供。
请比较rosaria和rosaria_client构造描述文件的区别
前言
- 基础技能,很重要
- 接上一篇日志
- 准备看完后,找一个时间给ROS for LabVIEW 加上Action功能,当前项目中利用ROS中一个Proxy节点,将服务请求转换为动作请求
步骤记录
学习actionlib基础知识
定义:用来为预先发布的任务执行提供接口
The actionlib stack provides a standardized interface for interfacing with preemptable tasks.
综述
在ROS中,已经有一种机制,让程序可以向一个节点发送任务请求并收到一次回应,这个机制叫做服务(service),但是在其他很多情况下,如果一个任务需要很长时间完成,用户想要周期性地收到服务器的反馈,这样的机制已经实现,叫做动作,action。
The actionlib package provides tools to create servers that execute long-running goals that can be preempted. It also provides a client interface in order to send requests to the server.
客户端-服务器模型(ROS Action Protocol)
协议建立在ros message机制上。
action的具体消息定义(Action Specification)
- Goal
- Feedback
- Result
- .action file
各种消息的具体定义都在这个文件中*.action
构造描述文件
find_package(catkin REQUIRED genmsg actionlib_msgs actionlib)
add_action_files(DIRECTORY action FILES DoDishes.action)
generate_messages(DEPENDENCIES actionlib_msgs)
<depend package="actionlib"/>
<depend package="actionlib_msgs"/>
示例代码
// sending the goal
ac.sendGoal(goal);
// wait until finish
while (!ac.waitForResult(ros::Duration(1.0)))
ROS_INFO("Running…");
// print result
if(ac.getState() == actionlib::SimpleClientGoalState::SUCCEEDED)
ROS_INFO("Hooray, the base moved 1 meter forward");
else
ROS_INFO("The base failed to move forward 1 meter for some reason");