Python中SimpleActionClient()的参数设置和调整
SimpleActionClient是ROS中的一个类,用于实现对一个Action Server的简便调用。在Python中,可以使用rospy中提供的SimpleActionClient类来创建一个Action Client实例。
SimpleActionClient()的参数设置:
- action_name: 指定Action Server的名称。通常为包名/ActionName。
- ActionSpec: 指定Action类型的消息定义,可以使用包名/Action文件名。例如,如果Action消息文件在my_package/action目录下,文件名为MyAction.msg,那么ActionSpec参数应为'my_package/MyAction.action'。
- auto_start: 指定是否自动开始连接Action Server,默认为True。
例子:
import rospy
import actionlib
from my_package.msg import MyAction
def done_cb(state, result):
# 当Action完成时调用的回调函数
if state == actionlib.SimpleGoalState.DONE:
rospy.loginfo("Action completed successfully")
rospy.loginfo("Result: %s" % result.result)
def active_cb():
# 当Action进入活动状态时调用的回调函数
rospy.loginfo("Action is active")
def feedback_cb(feedback):
# 当接收到Action的反馈信息时调用的回调函数
rospy.loginfo("Received feedback: %s" % feedback.feedback)
if __name__ == '__main__':
rospy.init_node('my_action_client')
# 创建一个SimpleActionClient实例,连接到名为my_action_server的Action Server
client = actionlib.SimpleActionClient('my_action_server', MyAction)
# 等待Action Server启动
rospy.loginfo("Waiting for action server...")
client.wait_for_server()
rospy.loginfo("Action server started")
# 创建一个Goal消息,并设置相应参数
goal = MyAction()
goal.input = 10
# 发送Goal给Action Server,并指定回调函数
client.send_goal(goal, done_cb=done_cb, active_cb=active_cb, feedback_cb=feedback_cb)
# 等待Action完成
rospy.loginfo("Waiting for action to complete...")
client.wait_for_result()
rospy.loginfo("Action completed")
上述例子中,假设目标行为(MyAction)的消息类型定义在my_package/msg目录下的MyAction.msg文件中,其中MyAction消息包含一个输入(input)和一个输出(result)。我们使用一个简单的整数作为输入,并等待Action完成后打印输出结果。
在实例化SimpleActionClient时,我们指定了action_name为'my_action_server'和ActionSpec为'my_package/MyAction.action'。然后我们使用wait_for_server()方法等待与Action Server的连接建立。
之后,我们创建了一个Goal消息,并设置了输入参数。然后调用send_goal()方法将Goal发送给Action Server。我们还指定了回调函数done_cb,active_cb和feedback_cb,用于在相应的状态变化或接收到反馈信息时调用。
最后,我们使用wait_for_result()方法等待Action完成,并在完成后打印相应信息。
