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

Python中SimpleActionServer()的使用及示例代码分析

发布时间:2023-12-19 05:14:42

SimpleActionServer是一个用于实现ROS动作服务器的Python类。动作是一个可以异步执行的任务,例如移动机器人到某个目标位置,或者执行某个复杂的计算任务。

SimpleActionServer类的构造函数需要传入4个参数:action_name、action_type、execute_callback和auto_start。

1. action_name:动作服务器的名称。

2. action_type:动作的类型,通常是ROS消息类型。

3. execute_callback:一个回调函数,当接收到客户端发送的动作请求时会调用该函数执行具体的任务,并返回任务的结果。

4. auto_start:是否自动启动动作服务器。

下面是一个使用SimpleActionServer的示例代码:

import rospy
import actionlib
from my_pkg.msg import MyAction, MyActionFeedback, MyActionResult

def execute_callback(goal):
    # 执行具体的任务,例如移动机器人到目标位置
    # ...
    # 返回任务的结果,包括成功或失败,以及相应的状态信息
    # ...
    # 更新任务执行的反馈信息
    # ...

    # 如果任务成功完成,则设置任务的结果为成功
    result = MyActionResult()
    result.success = True

    # 设置任务的反馈信息
    feedback = MyActionFeedback()
    feedback.status = "任务成功完成"

    # 返回任务的结果和反馈信息
    server.set_succeeded(result, feedback)

rospy.init_node("action_server_example")
server = actionlib.SimpleActionServer("my_action", MyAction, execute_callback, auto_start=False)
server.start()

rospy.spin()

在这个示例中,我们首先导入所需要的模块和消息类型。接着定义了一个回调函数execute_callback,它接收一个goal参数,代表客户端发送的任务目标。

在execute_callback函数中,可以执行具体的任务,例如移动机器人到目标位置。任务执行的结果可以是成功或失败,可以包括相应的状态信息。我们还可以通过设置反馈信息,实时更新任务的执行进度给客户端。

最后,我们通过SimpleActionServer类创建了一个动作服务器server,并传入所需的参数。设置auto_start为False,表示不自动启动动作服务器。然后通过调用start方法启动动作服务器。

最后,我们调用rospy.spin()来阻塞程序,等待任务的到来。

在实际使用中,我们可以根据具体的需求修改回调函数execute_callback来执行不同的任务,并根据任务的执行情况设置相应的结果和反馈信息。

总结:

SimpleActionServer是一个用于实现ROS动作服务器的Python类。通过传入动作名称、动作类型、回调函数和启动参数,我们可以创建一个动作服务器,并在回调函数中执行具体的任务,并设置结果和反馈信息。使用SimpleActionServer可以方便地实现异步执行的任务,并与客户端进行交互。