恒美微站 Logo 恒美微站
  • 首页
  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心
  • 联系我们

ROS2 Action通信实战

  • 首页
  • 资讯中心
  • /
  • ROS2 Action通信实战

相关资讯

Java 第k个最小元素(K’th Smallest Element) 2026/8/26 17:27:20
哈森股份(603958)深度研究报告 2026/8/26 17:27:20
Python 第k个最小元素(K’th Smallest Element) 2026/8/26 17:27:20

最新资讯

手把手教还是戴VR眼镜?一文看懂人形机器人“数据喂养”的四大流派
2026年电钢琴选购避坑指南:6款高性价比机型实测拆解,从千元到万元怎么选?
LCR 173:在点名(二分查找) —— 题解
标尺在手,定量不愁:从土壤到肠道,绝对定量微生物一测到底
上线千舟报修云前后,景洪市民族中学后勤工作发生了什么?
【高级】系统架构师 | 案例分析专栏-信息安全案例详解

今日推荐

Python random 模块常用函数详解:从入门到实战
Hermes接入团队协作后,我推翻了三个效率假设
免费AI大模型调教指南:打造专属网文写作助手

本周热门

Nextcloud 桌面客户端:把同步交给它,你只管改文件
如何将 HTML 转成 Word 文档且格式不丢失?html-to-docx 使用教程
Anki 批量操作卡片完整指南:一次搞定上千张,不再逐张修改

本月精选

如何用DamaiHelper实现演唱会门票的智能自动化抢购:完整技术解决方案指南
第4篇:59 倍性能差距的索引瓶颈定位——一次教科书级的全表扫描调优
终极歌词批量下载神器:5分钟解决离线音乐库歌词同步难题

ROS2 Action通信实战

发布时间:2026/8/26 17:32:21
ROS2 Action通信实战 文章目录Action通信编写Action服务端编写Action客户端Action通信Action是ROS中最强大的一种核心通信机制是ROS2在底层利用多个 Topic 和 Service 组合封装而成专门用于长耗时、需反馈、可取消的任务。下面使用ROS2内置的Fibonacci Action 接口进行实战测试。在具体实现Topic通信的功能之前先创建工作空间具体可参考节点通信-创建工作空间。编写Action服务端在内层restaurant_robot中编写action_server.py内容如下importrclpyfromrclpy.nodeimportNodefromrclpy.actionimportActionServerfromexample_interfaces.actionimportFibonacciimporttimeclassFibonacciActionServer(Node):def__init__(self):super().__init__(fibonacci_action_server)# 创建 Action Server# 参数节点实例, Action类型, Action名称, 执行回调函数self._action_serverActionServer(self,Fibonacci,fibonacci_action,self.execute_callback)self.get_logger().info(Action Server start...)defexecute_callback(self,goal_handle):# goal_handle 包含了客户端发来的目标信息ordergoal_handle.request.order self.get_logger().info(freceived goal, calculate the first{order}items)feedback_msgFibonacci.Feedback()sequence[0,1]# 模拟长耗时任务循环计算foriinrange(1,order):# 【核心机制 1】检查客户端是否请求取消ifgoal_handle.is_cancel_requested:goal_handle.canceled()# 标记任务为已取消self.get_logger().info(goal canceled)returnFibonacci.Result()# 返回空结果# 计算下一项sequence.append(sequence[i]sequence[i-1])feedback_msg.sequencesequence# 【核心机制 2】发布实时反馈self.get_logger().info(fpublish feedback{feedback_msg.sequence})goal_handle.publish_feedback(feedback_msg)# 模拟计算耗时每秒计算一项time.sleep(1.0)# 【核心机制 3】任务完成标记为成功并返回最终结果goal_handle.succeed()resultFibonacci.Result()result.sequencesequence self.get_logger().info(任务完成返回最终结果)returnresultdefmain(argsNone):rclpy.init(argsargs)nodeFibonacciActionServer()try:rclpy.spin(node)exceptKeyboardInterrupt:passfinally:node.destroy_node()rclpy.shutdown()if__name____main__:main()退回上一级目录打开 setup.py在 console_scripts 列表中添加run_action_server restaurant_robot.action_server:main,接下来在工作空间最上层文件夹编译并运行colcon build source install/setup.bash ros2 run restaurant_robot run_action_server编写Action客户端客户端发送目标后需要注册三个回调函数处理服务端的“接受/拒绝”响应、处理“实时反馈”、处理“最终结果”。在同目录下新建文件 action_client.pyimportrclpyfromrclpy.nodeimportNodefromrclpy.actionimportActionClientfromexample_interfaces.actionimportFibonacciclassFibonacciActionClient(Node):def__init__(self):super().__init__(fibonacci_action_client)# 创建 Action Clientself._action_clientActionClient(self,Fibonacci,fibonacci_action)defsend_goal(self,order):goal_msgFibonacci.Goal()goal_msg.orderorder self.get_logger().info(wwait Action Server...)self._action_client.wait_for_server()self.get_logger().info(fsend goal: calculate the first{order}items)# 异步发送目标并绑定反馈回调函数self._send_goal_futureself._action_client.send_goal_async(goal_msg,feedback_callbackself.feedback_callback)# 当服务端返回“是否接受目标”的响应时触发 goal_response_callbackself._send_goal_future.add_done_callback(self.goal_response_callback)# 处理服务端的接受/拒绝响应defgoal_response_callback(self,future):goal_handlefuture.result()ifnotgoal_handle.accepted:self.get_logger().error(goal reffused)rclpy.shutdown()returnself.get_logger().info(goal accepted)# 异步请求最终结果绑定结果回调函数self._get_result_futuregoal_handle.get_result_async()self._get_result_future.add_done_callback(self.res_callback)# 处理实时反馈在任务执行过程中会被多次触发deffeedback_callback(self,feedback_msg):self.get_logger().info(freceived feedback:{feedback_msg.feedback.sequence})# 处理最终结果任务结束时触发一次defres_callback(self,future):resfuture.result().result self.get_logger().info(freceived result:{res.sequence})rclpy.shutdown()# 任务完成关闭节点defmain(argsNone):rclpy.init(argsargs)nodeFibonacciActionClient()# 发送目标计算前 5 项node.send_goal(5)# 保持节点运行以处理异步回调rclpy.spin(node)if__name____main__:main()同样在setup.py的console_scripyts列表中添加run_action_client restaurant_robot.action_client:main,至此在两个终端里分别运行服务端和客户端colcon build source install/setup.bash ros2 run restaurant_robot run_action_client运行结果如下[INFO][1785120497.952368565][fibonacci_action_client]:waitAction Server...[INFO][1785120498.527255191][fibonacci_action_client]: send goal: calculate the first5iterms[INFO][1785120498.530859965][fibonacci_action_client]: goal accepted[INFO][1785120498.535033490][fibonacci_action_client]: received feedback:array(i,[0,1,1])[INFO][1785120499.540644497][fibonacci_action_client]: received feedback:array(i,[0,1,1,2])[INFO][1785120500.544228609][fibonacci_action_client]: received feedback:array(i,[0,1,1,2,3])[INFO][1785120501.546219522][fibonacci_action_client]: received feedback:array(i,[0,1,1,2,3,5])[INFO][1785120502.549324776][fibonacci_action_client]: receved result: array(i,[0,1,1,2,3,5])

关于恒美微站

恒美微站专注于为个体商户、工作室提供极简自助建站服务,让每个人都能轻松拥有专业网站。

快速链接

  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心

服务项目

  • 可视化建站
  • 拖拽编辑
  • 主题定制
  • SEO 优化
  • 网站托管

联系方式

  • 📍 地址:北京市朝阳区建国路 88 号
  • 📞 电话:400-888-8888
  • ✉️ 邮箱:info@hmyw.cn
  • 🕐 时间:周一至周日 9:00-18:00

© 2024 恒美微站 hmyw.cn 版权所有 | 京 ICP 备 12345678 号