欢迎访问宙启技术站
智能推送

Python中actionlibSimpleActionServer()的主要功能和使用方法

发布时间:2023-12-31 17:42:14

actionlibSimpleActionServer()是Python中一个用于创建简单ROS action服务器的类,它提供了处理action请求和发送action结果的功能。主要功能有:

1. 初始化服务器:actionlibSimpleActionServer()类的初始化函数需要传入四个参数,分别为服务器的名称、action的类型、执行回调函数和是否自动启动服务器。

2. 启动服务器:使用actionlibSimpleActionServer()类的start()方法可以手动启动服务器,也可以在初始化时设置自动启动服务器。

3. 处理action请求:通过设置执行回调函数来处理收到的action请求。在收到action请求后,执行回调函数会被调用,并传入请求信息。执行回调函数需要接收两个参数, 个参数为action启动时传入的目标状态,第二个参数为action请求消息。

4. 发送action结果:通过调用actionlibSimpleActionServer()类的set_succeeded()、set_aborted()、set_preempted()等方法来发送不同的action结果。

下面是一个使用actionlibSimpleActionServer()的例子,实现了一个简单的action服务器,将两个整数进行相加:

import rospy
import actionlib
from my_action_pkg.msg import AddIntsAction, AddIntsResult

def execute_callback(goal):
    result = AddIntsResult()
    result.sum = goal.a + goal.b
    server.set_succeeded(result)

rospy.init_node('action_server')
server = actionlib.SimpleActionServer('add_ints', AddIntsAction, execute_callback, False)
server.start()
rospy.spin()

上述例子中,首先导入了相关的ROS和action库,然后定义了一个执行回调函数execute_callback,该函数接收一个AddIntsAction类型的消息goal作为参数,并将两个整数相加,并将结果存入一个AddIntsResult类型的消息result中。接着通过初始化action服务器,设置服务器的名称为'add_ints',action的类型为AddIntsAction,执行回调函数为execute_callback,并设置不自动启动服务器。最后通过调用start()方法手动启动服务器,并使用rospy.spin()来持续执行。

在使用该服务器时,可以使用rostopic命令来向服务器发送action请求,并查看服务器的响应结果:

$ rostopic pub /add_ints/goal my_action_pkg/AddIntsAction '{a: 10, b: 20}'

可以看到,上述例子中的服务器会收到一个包含整数a和b的请求消息,并将两个整数相加后返回结果。