Python中SimpleActionServer()的使用及示例代码分析
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可以方便地实现异步执行的任务,并与客户端进行交互。
