Python中使用SimpleActionServer()搭建一个简单的服务器端
发布时间:2024-01-18 05:40:23
在Python中,可以使用SimpleActionServer()类来搭建一个简单的服务器端。SimpleActionServer()是ROS(机器人操作系统)中的一个类,用于实现action服务器端。
首先,需要安装并配置ROS。可以参考ROS官方网站(http://wiki.ros.org/)上的文档进行安装和配置。
接下来,可以使用以下代码搭建一个简单的服务器端,并提供一个例子来说明其使用。
import rospy
import actionlib
from std_msgs.msg import Empty
from my_msgs.msg import MyAction, MyActionFeedback, MyActionResult
# 回调函数,处理action请求
def do_action(goal):
# 初始化反馈消息
feedback = MyActionFeedback()
# 初始化结果消息
result = MyActionResult()
# 根据goal执行相应的操作
for i in range(1, goal.count + 1):
# 模拟执行操作
print("Performing action %d..." % i)
rospy.sleep(1) # 假设每个操作需要1秒钟的时间
# 更新反馈消息
feedback.current_count = i
server.publish_feedback(feedback)
# 设置操作完成结果
result.final_count = goal.count
server.set_succeeded(result)
if __name__ == "__main__":
# 初始化节点
rospy.init_node("action_server_node")
# 创建action服务器端
server = actionlib.SimpleActionServer("my_action", MyAction, do_action, False)
# 开启服务器
server.start()
# 输出服务器开始的信息
rospy.loginfo("Action server started")
# 阻塞主线程,等待退出信号
rospy.spin()
在上述示例中,我们创建了一个名为my_action的action服务器端。my_action是自定义的action类型,需要在my_msgs包中定义。
do_action()函数是处理action请求的回调函数。在这个例子中,我们仅仅为了演示目的,在服务器端执行了goal.count次操作,每个操作之间暂停1秒钟,然后更新反馈消息并发布。最后,我们设置了操作完成的结果。
运行上述代码后,服务器会开始处理来自客户端的action请求。可以使用以下代码创建一个简单的客户端,并向服务器发送请求。
import rospy
import actionlib
from my_msgs.msg import MyAction, MyGoal, MyResult
if __name__ == "__main__":
# 初始化节点
rospy.init_node("action_client_node")
# 创建action客户端
client = actionlib.SimpleActionClient("my_action", MyAction)
# 等待服务器启动
client.wait_for_server()
# 创建并填充goal消息
goal = MyGoal()
goal.count = 5
# 发送goal消息给服务器
client.send_goal(goal)
# 等待结果返回
client.wait_for_result()
# 输出结果
result = client.get_result()
rospy.loginfo("Final count: %d" % result.final_count)
在上述示例中,我们创建了一个名为my_action的action客户端,并向服务器发送了一个具有count属性为5的goal消息。然后,我们等待服务器返回结果,并输出结果中的final_count属性。
注意,在运行此代码之前,需要确保服务器端已经在运行,并且已经成功启动。
以上就是使用SimpleActionServer()搭建一个简单的服务器端的示例。通过使用这个类,我们可以方便地处理action请求并向客户端提供反馈和结果。
