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

构建简单动作服务器的Python实例:actionlibSimpleActionServer()

发布时间:2023-12-31 17:35:44

actionlib是ROS中用于实现通信机制的库,它允许机器人或系统之间进行高效的通信。在actionlib中,服务器端负责执行某个任务(Action)并提供结果,而客户端则可以发送请求并接收结果。

actionlibSimpleActionServer是actionlib库中的一个类,它用于创建一个简单的动作服务器。下面是一个Python实例,演示了如何使用actionlibSimpleActionServer创建一个服务器端,用于执行一个简单的动作任务。

import rospy
import actionlib
from my_robot_msgs.msg import SimpleAction, SimpleGoal, SimpleResult

# 回调函数,在接收到客户端的请求时调用
def execute_callback(goal):
    # 获取客户端发送的目标
    target = goal.target

    # 执行任务
    result = SimpleResult()

    if target > 10:
        result.success = True
        result.message = "目标值大于10,任务执行成功!"
    else:
        result.success = False
        result.message = "目标值小于等于10,任务执行失败!"

    # 发送任务执行结果给客户端
    server.set_succeeded(result)

if __name__ == "__main__":
    # 初始化ROS节点
    rospy.init_node("simple_action_server")

    # 创建动作服务器
    server = actionlib.SimpleActionServer("simple_action", SimpleAction, execute_callback, auto_start=False)

    # 开启服务器
    server.start()

    # 打印服务器已经启动
    rospy.loginfo("动作服务器已启动!")

    # 进入ROS循环
    rospy.spin()

上述代码中,我们首先导入了必要的库和消息类型。然后定义了一个回调函数execute_callback,该函数在接收到客户端的请求时被调用。

回调函数中,我们首先从客户端发送的目标中获取到需要执行的任务。然后执行任务,并根据任务的执行结果创建结果对象SimpleResult,设置结果结果的success字段和message字段。

最后,我们使用server.set_succeeded()将任务执行结果发送给客户端。

在主程序中,我们首先初始化了ROS节点。然后创建了一个动作服务器,指定了服务器的名称simple_action、消息类型SimpleAction、回调函数execute_callback,并将auto_start设置为False。最后通过server.start()启动服务器。

最后,我们通过rospy.spin()进入ROS循环,等待接收客户端的请求。

这是一个简单的actionlibSimpleActionServer的Python实例。对于使用该服务器的客户端,可以发送一个包含目标值的消息给服务器,并接收服务器返回的结果消息。