Python中使用SimpleActionServer()构建基本行为服务的示例
在Python中,可以使用SimpleActionServer()来构建基本行为服务。行为服务用于执行一系列预定义的操作,并根据结果返回响应。下面是一个带有使用例子的示例:
首先,我们需要安装rospy和actionlib库,这两个库是用于ROS中的行为服务开发的必需库。可以使用以下命令来安装它们:
pip install rospy pip install actionlib
接下来,我们将创建一个名为SimpleServer的节点,实现一个行为服务器来执行square操作。行为服务器将接收整数输入,并将其平方返回。
import rospy
import actionlib
from demo.msg import SquareAction, SquareResult
class SimpleServer:
def __init__(self):
# 初始化动作服务器
self.server = actionlib.SimpleActionServer('square_action', SquareAction, self.execute, False)
self.server.start()
rospy.loginfo("Action server started")
def execute(self, goal):
# 行为执行的回调函数
result = SquareResult()
# 获取输入的整数值
number = goal.number
rospy.loginfo("Received goal: %d", number)
# 计算平方并设置结果
result.squared_number = number * number
# 设置行为的执行状态为成功
self.server.set_succeeded(result)
rospy.loginfo("Goal achieved: %d", result.squared_number)
if __name__ == '__main__':
rospy.init_node('simple_server')
server = SimpleServer()
rospy.spin()
在上面的示例中,我们首先导入了必要的库,并创建了一个SimpleServer类。然后,我们在构造函数中初始化了一个SimpleActionServer实例,该实例使用SquareAction消息类型作为行为的目标和结果。SquareAction消息类型定义了一个整数字段number,用于传递输入值。SquareResult消息类型定义了一个整数字段squared_number,表示计算结果。
在execute方法中,我们获取输入的整数值,计算其平方,并设置结果。然后,我们将行为的执行状态设置为成功,并输出结果。最后,在main函数中,我们初始化了一个ROS节点,并创建了一个SimpleServer对象。rospy.spin()函数用于保持程序持续运行,并处理ROS消息。
要在ROS中运行这个示例,我们还需要定义SquareAction和SquareResult消息类型。在ROS工作空间的src/demo/msg文件夹中,我们可以创建一个名为SquareAction.msg的文件,输入以下内容:
int32 number --- int32 squared_number
然后,我们运行以下命令来构建ROS包:
catkin_make
最后,我们可以在终端运行该示例:
rosrun demo simple_server.py
现在,我们可以使用rostopic pub命令来调用行为服务器并发送目标值:
rostopic pub /square_action demo/SquareAction "{number: 5}"
在终端中,我们将看到行为服务器输出的日志信息,包括接收的目标值和计算的结果。
