Python中使用actionlibSimpleActionServer()处理动作请求的简单示例
发布时间:2023-12-31 17:36:13
Actionlib是ROS(Robotic Operating System)中用于处理行为动作的库。actionlib包提供了一个客户端-服务器模型,可以在两个或多个节点之间进行通信,以实现高效的异步通信。
Action服务器是一个提供行为执行的节点,而Action客户端是发送行为请求的节点。服务器节点根据客户端的请求执行相应的行为,然后返回结果。
下面是一个使用actionlib SimpleActionServer的简单示例:
1. 首先,导入所需的库:
import rospy import actionlib from actionlib.msg import TestAction, TestGoal, TestResult, TestFeedback
2. 创建一个Action服务器:
def action_callback(goal):
# 在此处理行为请求
result = TestResult() # 创建行为结果对象
feedback = TestFeedback() # 创建行为反馈对象
# 执行行为操作,并在需要时更新结果和反馈
for i in range(1, goal.max_count + 1):
# 检查是否有被取消的请求
if action_server.is_preempt_requested():
rospy.loginfo('行为请求被取消')
action_server.set_preempted() # 取消请求
return
# 更新反馈信息
feedback.current_count = i
action_server.publish_feedback(feedback)
# 执行行为操作
# ...
# 更新结果信息
result.final_count = goal.max_count
action_server.set_succeeded(result) # 设置行为完成
3. 创建一个ROS节点并初始化Action服务器:
rospy.init_node('action_server_node')
# 创建Action服务器对象
action_server = actionlib.SimpleActionServer('test_action', TestAction, execute_cb=action_callback, auto_start=False)
# 启动Action服务器
action_server.start()
# 启动ROS主循环
rospy.spin()
在上面的示例中,我们创建了一个名为'test_action'的Action服务器,使用TestAction消息类型处理行为请求。然后我们定义了一个名为action_callback的函数作为回调函数来处理请求。
在回调函数中,我们首先创建了行为结果对象和行为反馈对象。然后,我们执行所需的行为操作,并在需要时更新结果和反馈信息。
在每次循环迭代中,我们检查是否有被取消的请求。如果有,则取消请求并返回。否则,我们更新反馈信息并执行所需的操作。
最后,在循环结束时,我们更新结果信息,并使用set_succeeded()函数将行为标记为已完成。
以上是使用actionlib SimpleActionServer处理动作请求的简单示例。您可以根据实际需求进行修改和扩展。
