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回调函数和取消回调函数的逻辑,并在其中使用你自定义的消息类型来处理和发布相应的结果。
