Please ask about problems and questions regarding this tutorial on answers.ros.org. Don't forget to include in your question the link to this page, the versions of your OS & ROS, and also add appropriate tags. |
编写一个简单的行为客户端(Python)
Description: 本教程涵盖了使用action_client库和Python创建一个Fibonacci简单行为库。Tutorial Level: BEGINNER
本教程中的代码和示例可以在actionlib_tutorials包中找到。你也许需要在开始本教程之前阅读actionlib包。
代码
以下的代码可以在actionlib_tutorials存储库找到,和实现一个简单的python行为客户端用于fibonacci行为.
1 #! /usr/bin/env python
2
3 import rospy
4 from __future__ import print_function
5
6 # 加载SimpleActionClient
7 import actionlib
8
9 # 加载fibonacci行为消息,包含
10 # 目标消息和结果消息
11 import actionlib_tutorials.msg
12
13 def fibonacci_client():
14 # 创建SimpleActionClient,传递行为类型
15 # (FibonacciAction) 到构造函数。
16 client = actionlib.SimpleActionClient('fibonacci', actionlib_tutorials.msg.FibonacciAction)
17
18 # 等待,直到行为服务器挂起或运行。
19 # 监听目标。
20 client.wait_for_server()
21
22 # 创建一个目标发送到行为服务器。
23 goal = actionlib_tutorials.msg.FibonacciGoal(order=20)
24
25 # 发送目标到行为服务器。
26 client.send_goal(goal)
27
28 # 等待服务器完成处理行为。
29 client.wait_for_result()
30
31 # 打印运行行为结果。
32 return client.get_result() # A FibonacciResult
33
34 if __name__ == '__main__':
35 try:
36 # Initializes a rospy node so that the SimpleActionClient can
37 # publish and subscribe over ROS.
38 rospy.init_node('fibonacci_client_py')
39 result = fibonacci_client()
40 print("Result:", ', '.join([str(n) for n in result.sequence]))
41 except rospy.ROSInterruptException:
42 print("program interrupted before completion", file=sys.stderr)
代码解释
11 import actionlib_tutorials.msg
指定的行为服务器生成消息用于发送目标、接收反馈等等。这一行加载生成的消息。
16 client = actionlib.SimpleActionClient('fibonacci', actionlib_tutorials.msg.FibonacciAction)
行为客户端和服务器通过一组话题通信,内容在actionlib通信协议。行为名称描述命名空间包含这些话题,并且指定的行为消息描述什么消息需要在这些话题中传递。
20 client.wait_for_server()
在行为服务器开启后发送目标,否则无用。这一行等待直到我们连接到行为服务器。
创建一个目标并且发送到行为服务器。
行为服务器将处理目标并且最终终止。我们想要从终止中得到结果,但我们需要等待直到服务器完成目标。
运行客户端
在运行客户端之前,我们假设roscore和行为服务器已经从之前的界面中启动。
开启客户端。它将运行,发送一个目标到服务器,等待目标完成,然后退出。
$ rosrun actionlib_tutorials fibonacci_client.py