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

Python中使用SimpleActionServer()构建简单动作服务示例

发布时间:2023-12-19 05:12:10

SimpleActionServer是ROS提供的一个用于构建简单动作服务的类,在Python中可以通过导入rospy和actionlib模块来使用。SimpleActionServer的构造函数需要传入4个参数:服务器名称、动作类型、goal回调函数和取消回调函数。

首先,需要在Python代码中导入相应的模块:

import rospy
import actionlib
from actionlib_msgs.msg import *
from your_package.msg import YourAction

在上面的代码中,your_package是你自己定义的包名,YourAction是你自己定义的动作消息类型。

下面是一个使用SimpleActionServer构建简单动作服务的示例:

def goal_callback(goal):
    # 这里是你处理goal的逻辑
    # ...

    # 创建并初始化一个结果消息
    result = YourActionResult()
    result.result = goal.input + 1

    # 发布结果消息给客户端
    server.set_succeeded(result)

def cancel_callback():
    # 这里是你处理取消请求的逻辑
    # ...

    # 创建并初始化一个结果消息
    result = YourActionResult()
    result.result = -1

    # 发布结果消息给客户端
    server.set_preempted(result)

rospy.init_node('simple_action_server')

# 创建一个SimpleActionServer对象
server = actionlib.SimpleActionServer('simple_action', YourAction, goal_callback, cancel_callback, False)

# 开始运行服务
server.start()

# 进入主循环
rospy.spin()

在上面的代码中,goal_callback函数是当接收到一个goal时会被调用的回调函数,cancel_callback函数是当接收到一个取消请求时会被调用的回调函数。

在goal_callback函数中,你可以编写你自己的逻辑来处理接收到的goal,然后创建一个结果消息并调用server.set_succeeded(result)来发布结果消息给客户端。

在cancel_callback函数中,你同样可以编写你自己的逻辑来处理取消请求,然后创建一个结果消息并调用server.set_preempted(result)来发布结果消息给客户端。

最后,通过调用server.start()来启动服务,并且通过调用rospy.spin()来进入主循环,使得程序保持运行状态。

以上就是使用SimpleActionServer构建简单动作服务的示例。你可以根据自己的具体需求来编写goal回调函数和取消回调函数的逻辑,并在其中使用你自定义的消息类型来处理和发布相应的结果。