构建简单动作服务器的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实例。对于使用该服务器的客户端,可以发送一个包含目标值的消息给服务器,并接收服务器返回的结果消息。
