Quantcast
Channel: Sam的技术Blog
Viewing all articles
Browse latest Browse all 158

ROS知识点之 ActionLib

$
0
0
作者: Sam (甄峰)  sam_code@hotmail.com

Sam在ROS学习中,遇到知识点actionLib, 觉得特别有用。学习记录之。

0. 基础知识:
actionlib是ROS一个功能包集(actionlib stack).
http://www.ros.org/browse/details.php?distro=kinetic&name=actionlib
http://wiki.ros.org/actionlib

在ROS系统中,向某个Node发送请求,并获取响应。可以通过ROS Srevice机制来满足。但如果执行某个请求的时间很长,(如要求机器人从A点移动到B点)在此期间,用户想要查看执行的进度或者干脆取消这个请求。Service机制就没法满足了,但是actionlib可以满足用户这种需求。
ActionLib栈提供工具,使用户可以创建一些Servers,这些Server用来执行较长时间的任务,并且任务可以被制止。同时ActionLib还提供了一些Client接口,用来给Server发请求。



1.ActionLib工作机制:
1.1:ActionCLlient和ActionServer通过"ROS Action Protocol"沟通。 ROS Action Protocol是ROS 消息方式传递。ActionClient和ActionServer提供一些简单的API,让用户可以发送Goals请求(Client端)以及执行Goals(在Server端)。


1.2:具体传输:


2:Action Specification:Goal, Feedback, Result.
为了能够让Action Client和Action Server通讯,定义了几个概念。Goal, Feedback和Result.

Goal: 代表一个任务。可以被ActionClient发送到ActionServer。比如在MoveBase案例中,它的类型是PoseStamped.包含了机器人应该去的信息。 在激光扫描云台控制案例中,Goal包含扫描的参数,min angle, max angle,speed等。

FeedBack:Server告知Client当前Goal执行过程中的情况。在Move Base案例中,它表示机器人当前姿态。在激光扫描云台控制案例中, 它表明剩余扫描时间。

Result:执行结果。在MoveBase中,结果和机器人pose. 激光扫描云台控制案例中, 给出请求的点云结果。

.action file:
Action 规格的定义,就放在Package内 action目录内的 .action文件中。文件内定义了Goal, FeedBack, Result等规格。
例如:

# Define the goal
uint32 dishwasher_id  # Specify which dishwasher we want to use
---
# Define the result
uint32 total_dishes_cleaned
---
# Define a feedback message
float32 percent_complete


3.实践:
3.1: 创建Package:
在catkin_ws/src目录下:
catkin_create_pkg actionlib_test roscpp std_msgs actionlib actionlib_msgs message_generation
此时,可以看到已经创建了actionlib_test Package。 

3.2:建立自己的action Specification
在Package目录内,创建action目录。并在其中建立Fibonacci.action文件:

#goal definition
int32 order
---
#result definition
int32[] sequence
---
#feedback definition
int32[] sequence

打开package.xml:

actionlib
actionlib_msgs

roscpp
rospy
这是因为在catkin_create 时,指定了依赖这些Package。
添加内容如下:

message_generation

CMakefile.txt:
## Add actions
add_action_files(DIRECTORY action FILES Fibonacci.action )

## Generate messages
generate_messages(DEPENDENCIES std_msgs actionlib_msgs)

$catkin_make clean
$catkin_make

可以看到,在devel/include/actionlib_test/中,创建了头文件。文件中定义了各Specification



 

Viewing all articles
Browse latest Browse all 158

Trending Articles