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

使用SimpleActionServer()在Python中创建一个简单的动作服务器

发布时间:2024-01-18 05:39:32

SimpleActionServer()是ROS(Robot Operating System)中的一个类,用于创建一个简单的动作服务器,可以接收和处理动作请求,并向客户端发送反馈和结果。

以下是一个使用SimpleActionServer()创建一个简单的动作服务器的示例:

#!/usr/bin/env python

import rospy
import actionlib
from my_package.msg import MyAction, MyFeedback, MyResult

def action_callback(goal):
    # 计算并执行动作
    max_count = goal.count
    feedback = MyFeedback()
    result = MyResult()
    success = False

    for i in range(max_count):
        # 执行动作的任务
        # 更新反馈信息
        feedback.current_count = i
        server.publish_feedback(feedback)

        # 检查是否取消了动作
        if server.is_preempt_requested():
            rospy.loginfo('动作被取消')
            server.set_preempted()
            success = False
            break

        # 等待一段时间,模拟执行动作
        rospy.sleep(1)

    if success:
        rospy.loginfo('动作完成')
        result.final_count = max_count
        server.set_succeeded(result)

def main():
    rospy.init_node('action_server')

    server = actionlib.SimpleActionServer('my_action', MyAction, action_callback, False)
    server.start()

    rospy.spin()

if __name__ == '__main__':
    main()

上述代码创建了一个名为my_action的动作服务器,它可以接收类型为MyAction的动作请求。在action_callback回调函数中,我们计算并执行动作,并在每次循环中发送反馈信息。如果动作被取消,我们调用set_preempted()来取消执行,并向客户端发送相应的反馈信息。当动作完成后,我们调用set_succeeded()来发送结果给客户端。

要使用SimpleActionServer(),需要创建一个动作请求和动作反馈的消息类型(例如MyAction和MyFeedback)。你需要根据自己的需求自定义这些消息类型,并将其包含在你的程序中。

为了运行这个动作服务器,你需要编译和设置相应的ROS工作空间,并将上述代码放在源代码目录下的正确位置。你还需要确保安装了相关的ROS软件包,并正确配置了ROS环境。

在启动ROS节点后,你可以使用以下命令来测试这个动作服务器:

rosrun my_package my_action_server.py

然后,你可以使用以下命令来发送动作请求:

rostopic pub /my_action my_package/MyAction "{count: 10}"

这将发送一个包含计数值为10的动作请求。动作服务器将计算并执行该动作,并向您发送反馈信息。一旦动作完成,会将结果发送给您。

以上是一个使用SimpleActionServer()在Python中创建一个简单的动作服务器的例子。你可以根据自己的需求对其进行更改和扩展。请参阅ROS文档以获得更多关于SimpleActionServer的信息和用法。