Python中使用SimpleActionServer()实现简单的服务器端操作
发布时间:2024-01-18 05:39:08
SimpleActionServer是ROS中用于实现服务器端操作的Python类。使用SimpleActionServer可以轻松地编写一个可以提供服务的ROS节点。
下面是一个使用SimpleActionServer实现一个简单的服务器端操作的示例:
# 引入必要的包
import rospy
import actionlib
from my_package.msg import MyAction, MyActionFeedback, MyActionResult
# 定义服务器端操作的回调函数
def do_action(goal):
# 获取客户端发送的目标值
target_value = goal.target
# 创建一个用于发送反馈信息的对象
feedback = MyActionFeedback()
# 执行操作
current_value = 0
while current_value < target_value:
# 检查服务器是否被要求取消操作
if server.is_preempt_requested():
# 服务器被取消,设置执行结果为被取消
server.set_preempted()
rospy.loginfo('Action preempted')
return
# 更新当前的值
current_value += 1
# 设置反馈信息的值
feedback.current_value = current_value
# 发送反馈信息给客户端
server.publish_feedback(feedback)
# 模拟操作的延迟
rospy.sleep(1)
# 执行完成后,设置执行结果为成功
result = MyActionResult()
result.final_value = current_value
server.set_succeeded(result)
rospy.loginfo('Action completed successfully')
if __name__ == '__main__':
# 初始化ROS节点
rospy.init_node('action_server')
# 创建一个SimpleActionServer对象
server = actionlib.SimpleActionServer('my_action', MyAction, do_action, False)
# 启动服务器
server.start()
rospy.loginfo('Action server started')
# 等待服务器关闭
rospy.spin()
在上面的例子中,我们定义了一个名为my_action的Topic,用于实现服务器端操作。当客户端向该Topic发送一个action类型的消息时,服务器会执行do_action函数来完成操作。
在do_action函数中,我们首先获取客户端发送的目标值,并创建一个用于发送反馈信息的对象feedback。然后,在一个循环中逐步完成操作,并检查服务器是否被要求取消操作。如果是,我们设置执行结果为被取消,并返回。
操作完成后,我们设置执行结果为成功,并发送结果给客户端。在发送反馈信息的过程中,我们使用server.publish_feedback函数。
在代码的最后,我们初始化ROS节点,创建一个SimpleActionServer对象,并启动服务器。最后,我们调用rospy.spin()来等待服务器关闭。
以上是使用SimpleActionServer实现一个简单的服务器端操作的Python例子。你可以根据自己的需求修改和扩展这个例子。
