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

Python中如何创建和使用SimpleActionClient()对象

发布时间:2023-12-15 22:25:47

在Python中,可以使用actionlib库中的SimpleActionClient()类来创建和使用一个简单的Action客户端对象。Action客户端对象可以用于与Action服务器进行通信,并发送和接收Action消息。

首先,要使用SimpleActionClient()类,需要导入actionlib库中的SimpleActionClient类和相关的消息类型。例如,如果要使用一个名为MyAction的Action消息类型,可以使用以下代码导入相关类和消息类型:

import rospy
import actionlib
from my_action_pkg.msg import MyAction, MyActionGoal
from my_action_pkg.msg import MyActionResult, MyActionFeedback

接下来,可以使用SimpleActionClient()类来创建Action客户端对象。在创建对象时,需要指定所使用的Action消息类型以及Action服务器的名称。以下是创建Action客户端对象的示例代码:

client = actionlib.SimpleActionClient('my_action_server', MyAction)

在创建Action客户端对象之后,需要先调用wait_for_server()方法来等待Action服务器的启动,然后才能开始发送和接收Action消息。以下是等待Action服务器的示例代码:

client.wait_for_server()

Action客户端对象有以下几个常用的方法和属性可用于发送和接收Action消息:

- send_goal(goal, done_cb=None, active_cb=None, feedback_cb=None):发送一个Action目标(goal)给Action服务器。可以传入回调函数来处理Action完成、激活和反馈事件。

- cancel_goal():取消当前正在执行的Action目标。

- wait_for_result(timeout=rospy.Duration()):等待Action服务器返回结果。可以传入超时时间来设置等待时间。

- get_state():获取当前Action的状态。

- get_result():获取Action的结果。

- get_feedback():获取Action的反馈信息。

以下是一个完整的使用SimpleActionClient()类的示例代码:

import rospy
import actionlib
from my_action_pkg.msg import MyAction, MyActionGoal
from my_action_pkg.msg import MyActionResult, MyActionFeedback

def done_cb(state, result):
    rospy.loginfo("Action completed with state %d", state)
    rospy.loginfo("Action result: %s", result)

def active_cb():
    rospy.loginfo("Action is active")

def feedback_cb(feedback):
    rospy.loginfo("Action feedback: %s", feedback)

rospy.init_node('my_action_client')

client = actionlib.SimpleActionClient('my_action_server', MyAction)
client.wait_for_server()

goal = MyActionGoal()
# ... Fill in the goal fields here ...

client.send_goal(goal, done_cb=done_cb, active_cb=active_cb, feedback_cb=feedback_cb)

rospy.loginfo("Waiting for result...")
client.wait_for_result()

result = client.get_result()
rospy.loginfo("Action result: %s", result)

rospy.loginfo("Action completed")

在上面的例子中,首先初始化了ROS节点。然后创建一个SimpleActionClient()对象,并等待Action服务器的启动。在发送Action目标之前,定义了回调函数来处理Action完成、激活和反馈事件。接着,调用send_goal()方法发送一个Action目标,并使用wait_for_result()方法等待Action服务器返回结果。最后,获取和打印Action的结果。

总结来说,使用SimpleActionClient()类,可以方便地创建和使用一个简单的Action客户端对象,与Action服务器进行通信,并发送和接收Action消息。