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

Python中实现SimpleActionServer()的步骤

发布时间:2023-12-16 06:06:24

在Python中,可以使用 simplaction_server 模块中的 SimpleActionServer 类来实现一个简单的Action Server。SimpleActionServer 类提供了一个方便的接口,用于处理Action请求和生成Action结果。下面是使用例子,以说明如何在Python中实现 SimpleActionServer

步骤1:引入相应的模块和消息类型

首先,我们需要引入相应的模块和消息类型。在这个例子中,我们将使用一个名为 MyAction 的自定义Action消息类型。

import rospy
import actionlib
from my_package.msg import MyAction, MyActionGoal, MyActionResult

步骤2:实现一个回调函数来处理Action请求

接下来,我们需要实现一个回调函数,用于处理Action请求。在这个例子中,我们的回调函数将简单地在控制台上打印收到的目标(goal)。

def goal_callback(goal):
    print("Received goal: {}".format(goal))

步骤3:初始化Action Server

然后,我们需要初始化Action Server。在初始化过程中,我们需要指定Action类型和处理目标的回调函数。

rospy.init_node("action_server_node")
server = actionlib.SimpleActionServer(
    "my_action",    # Action名称,应与客户端匹配
    MyAction,       # Action消息类型
    goal_callback,  # 处理目标的回调函数
    False           # 自动启动Action Server
)

步骤4:启动Action Server

最后,我们需要启动Action Server,开始监听Action请求。在启动之前,我们可以选择调用 server.start(),或者设为自动启动(在初始化时设置为 True)。

server.start()
rospy.spin()

完整的示例代码如下所示:

import rospy
import actionlib
from my_package.msg import MyAction, MyActionGoal, MyActionResult

def goal_callback(goal):
    print("Received goal: {}".format(goal))

rospy.init_node("action_server_node")
server = actionlib.SimpleActionServer(
    "my_action",
    MyAction,
    goal_callback,
    False
)

server.start()
rospy.spin()

在上述例子中,我们创建了一个名为 my_action 的Action Server,并将其与 MyAction 消息类型相关联。在收到Action请求时,我们的回调函数 goal_callback 将被调用,并打印收到的目标。

需要注意的是,我们需要根据实际的项目设置正确的消息类型和回调函数,以确保Action Server能正确地处理收到的请求。

希望这个例子能够帮助你理解如何在Python中使用 SimpleActionServer 实现一个简单的Action Server。