使用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的信息和用法。
