6.22-Actionlib

Posted lizhensheng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了6.22-Actionlib相关的知识,希望对你有一定的参考价值。

TOC

参考

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");

以上是关于6.22-Actionlib的主要内容,如果未能解决你的问题,请参考以下文章