☰
新手学习ROS(一)从小乌龟示例通俗理解topic/service/action
2026/10/11 6:06:34 网站建设 项目流程

教程参考官方tutorial初级篇:https://ros2docs.robook.org/humble/Tutorials/Beginner-CLI-Tools/Launching-Multiple-Nodes/Launching-Multiple-Nodes.html

用最通俗的方式讲:把 ROS2 想象成一个社会,里面每个程序(节点)都是一个人。那 topic、service、action 就是三种不同的"沟通方式"。

先看一张总览图,再逐个用小乌龟举例:

一、Topic 话题 —— “收音机广播”

通俗理解:有人拿着喇叭一直喊,谁想听就把耳朵凑过去,喊的人根本不管有几个人在听。

小乌龟里的例子:

  • turtle_teleop_key(键盘节点)不停往/turtle1/cmd_vel这个话题喊:“往左转!往前爬!”
  • turtlesim_node(乌龟节点)订阅了这个话题,听到什么就动什么
  • 反过来,乌龟也在/turtle1/pose上不停汇报自己的位置,谁想看谁就ros2 topic echo /turtle1/pose

特点:单向、持续不断、发了就不管了。适合:源源不断的数据流。


二、Service 服务 —— “打电话问事”

通俗理解:你主动拨号问一件事,对方处理完给你一个答复,然后挂断。一次一通电话,打完就结束。

小乌龟里的例子:

  • ros2 service call /clear std_srvs/srv/Empty—— 相当于你打电话说"帮我清空画布",画布立刻被擦干净,并回你一句"办好了"
  • ros2 service call /spawn ...—— 你说"给我生成一只乌龟",它办完回你新乌龟的名字

特点:双向、一次就完、必须等到回复。适合:执行一个动作并拿到结果。


三、Action 动作 —— “点外卖”

通俗理解:你下一个要花时间的订单,然后可以随时查看"骑手到哪了",等不及还能取消订单,送到了给你最终结果。它是 Service 的"升级版"——多了进度反馈和可取消。

小乌龟里的例子:让乌龟转到 90°(这是要慢慢转的,不是瞬间完成):

ros2 action list# 可以看到 /turtle1/rotate_absoluteros2 action send_goal /turtle1/rotate_absolute turtlesim/action/RotateAbsolute"{theta: 1.57}"--feedback

执行后你会看到:

  1. 目标被接受(你下的单)
  2. 反馈不断刷新(--feedback让你看到"还差多少度"——就像"骑手还有 500 米")
  3. 最终结果(转到位了,返回剩余角度)

特点:长任务、有进度、可取消。适合:耗时较长的动作。


怎么选?一句话口诀

你的需求用哪个
要连续不断地传数据(传感器、速度)Topic
要立刻执行一件事并拿到结果(清空、生成)Service
要执行一个要花时间的大任务,还想看进度/能取消(转到某角度、导航到某点)Action

三者的关系(进阶理解)

Action 并不是完全独立的东西——它底层是"用 Topic 传进度和状态,用 Service 传目标和结果"组合出来的。所以你可以简单记成:

Topic = 广播(只发不管) Service = 一问一答(快,一次完成) Action = 一问一答 + 进度汇报 + 可取消(慢,分阶段完成)

实际开发中的对应:让机器人走一小段用 Topic;让机器人拍一张照立刻返回用 Service;让机器人自主导航到房间另一头(要几分钟、要报进度、可能要取消)用Action。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询