如果你问一个机器人工程师"ROS 2是什么",得到的回答大概率是"机器人操作系统"。但这个回答其实不太准确——ROS 2不是操作系统,它不管理CPU调度、不管理内存分配、不管理文件系统。它真正做的事情,是让机器人的各个模块能够可靠地通信。

摄像头在持续采集画面,视觉模型在理解环境,导航模块在规划路径,底盘在执行动作,机械臂可能还要同步响应。问题不在于这些模块有没有,而在于它们如何可靠地通信、同步、调度,以及在网络波动、算力紧张或某个模块异常时,系统还能不能正常运转。ROS 2要解决的,正是这件事。

一、ROS 2的层级架构:从应用到DDS

ROS 2的架构可以分为三层,每一层解决不同的问题。

最上层是Application Layer——开发者编写的节点代码,比如视觉推理节点、路径规划节点、电机控制节点。开发者在这一层使用Topic、Service、Action等概念来组织通信。

中间层是Middleware Layer——rmw(ROS Middleware Interface)接口层。这一层定义了抽象接口,让ROS 2可以适配不同的DDS实现。Fast DDS、Cyclone DDS、RTI Connext等不同的DDS中间件,都可以通过rmw接口接入ROS 2。这一层的存在,让ROS 2不绑定于任何单一DDS实现,开发者可以根据项目需求选择最合适的底层通信引擎。

最下层是DDS Layer——实际的数据传输层。DDS负责节点发现、数据序列化、网络传输和QoS策略执行。

这种分层设计的好处是:开发者只需要理解Topic、Service、Action这些高层概念,底层通信的复杂性被封装在Middleware和DDS层中。但当系统出现问题时,理解底层的DDS机制就变得至关重要。

二、Topic、Service、Action:三种通信模式的分工

ROS 2最常用的三种通信方式各有明确的适用边界。

Topic(话题) 适合持续发布的信息。例如摄像头持续发布图像,激光雷达持续发布点云,视觉模块持续发布"当前检测到的目标"或"当前环境状态"。发布方不需要知道谁在接收,订阅方也可以按需加入。Topic的典型延迟在毫秒级,是三种模式中实时性最好的。

Service(服务) 适合"一问一答"的请求。例如"重新加载地图""查询当前设备状态""执行一次模型配置更新"。请求方发出调用,服务端返回结果,流程相对明确。Service是同步阻塞调用,适合快速完成的任务。

Action(动作) 适合耗时较长、需要反馈和可取消的任务。例如"导航到某个位置""巡检一段路线""寻找指定目标"。机器人执行过程中可以持续反馈进度,也可以在环境变化后中止或调整任务。

一个常见的误区是在机械臂控制中错误使用Topic来发送目标位置指令。这种做法虽然能工作,但无法获得执行结果确认——你发了指令,但不知道机械臂有没有执行成功、执行到什么程度了。更优的方案是使用Action,获取执行反馈和最终结果。

简单理解:持续变化的信息用Topic,一次性查询或配置用Service,长时间执行的任务用Action。这套分工看似基础,却是机器人系统避免接口混乱的关键。

三、QoS配置:让通信适应真实环境

与早期ROS相比,ROS 2更强调分布式部署和工程可靠性,其底层通信基于DDS机制。这意味着它更适合多设备、多进程甚至多网络环境下的机器人系统:视觉计算单元、导航计算单元和控制器不一定要运行在同一台机器上,仍可以通过统一机制协同。

更关键的是,ROS 2通过DDS引入了QoS(服务质量)配置

不同信息,对"是否必须送达"的要求并不一样。

例如,控制指令、任务状态通常更关注可靠送达——一条急停指令如果丢失,后果可能是灾难性的。而连续视频帧更关注"新"——当系统来不及处理时,保留最新画面往往比堆积旧画面更有意义。如果视觉模块一直在分析几秒前的旧画面,机器人即使识别正确,也可能已经错过了最佳反应时机。

以Isaac Sim中的QoS配置为例,默认的QoS Profile包含以下参数:

json

{
    "history": "keepLast",
    "depth": 10,
    "reliability": "reliable",
    "durability": "volatile",
    "deadline": 0.0,
    "lifespan": 0.0,
    "liveliness": "systemDefault",
    "leaseDuration": 0.0
}

对于传感器数据,通常使用BEST_EFFORT可靠性和KEEP_LAST历史策略,配合较小的depth(如1),确保总是处理最新数据。对于控制指令,则使用RELIABLE可靠性,确保指令不会丢失。

一项发表在IEEE的研究专门评估了ROS 2 QoS策略对四足机器人实时控制的影响。研究发现,在压力条件下,有限缓冲的配置比严格的Reliable模式实现了更一致的时间行为和更好的瞬态响应。研究强调,针对不同数据流进行特定的QoS调优,对于保持机器人通信的鲁棒性至关重要。

在双手灵巧操作的机器人系统中,研究者为关节控制指令配置了低延迟优先模式——这种模式优先保证指令流的整体连续性,即使偶尔丢弃数据包也在所不惜,以确保动作的极度流畅。而对于运动触发命令,则启用了高可靠性模式,确保每条关键指令都被确认送达,即使引入微小延迟也在所不惜。

四、模型接入机器人:ROS 2的工程价值

以连续视频理解、细粒度目标定位、短时行动决策这类能力为例,模型在机器人系统中通常只是一个节点,而不是全部。

一个更接近实际的链路可能是:摄像头持续采集画面 → 感知模块理解环境并输出目标或状态 → 系统结合坐标变换、定位和任务上下文 → 规划模块生成下一步动作 → 控制模块执行 → 新画面继续反馈。

其中,视觉模型解决"看见什么、目标在哪里、当前该关注什么";ROS 2解决"这些信息如何在不同模块间稳定传递、及时更新并被正确使用"。

以VLX系列模型为例,它的设计思路正好回应了这种工程需求:VLX-Flow负责流式视频理解,适合通过Topic持续发布环境状态;VLX-Seek负责细粒度视觉定位,定位结果需要被下游模块以低延迟方式消费;VLX-Go负责将感知结果转化为短时行动决策,其输出的航点需要通过Action或Topic传递给控制模块。这三层模型提供的是不同层次的感知与决策能力,但要让这些能力真正进入真实机器人任务,还需要ROS 2提供的通信、坐标变换、任务调度与控制模块来协同。

ROS 2还提供了节点生命周期管理机制,可将一个模块划分为"未配置、已配置、激活、停用、故障"等状态。模型尚未加载完成时,不应向外发布无效结果;传感器异常时,可以让相关模块进入降级状态;更新模型或参数时,不必粗暴地重启整套系统。

此外,ROS 2支持组件化部署和执行器调度。对于端侧设备而言,CPU、GPU、内存和带宽都有限,视觉推理、地图构建、控制循环不能互相抢占到失去实时性。如何安排任务优先级和资源使用,往往决定系统最终是"能演示"还是"能稳定运行"。

五、ROS 2不能替你解决什么

ROS 2很重要,但也不能被神化。它不能替代视觉模型的识别能力、SLAM和路径规划算法、相机标定和传感器融合、底盘控制和安全策略、模型的速度和精度优化。ROS 2更像是机器人系统的"协作语言"和"运行秩序"——它让不同算法、模型和硬件能更容易地组合,但不会自动让任何一个模块变得更聪明。

机器人项目最常见的误区,是只关注某个模型的单项能力。但真实落地时,决定体验的往往是整条链路:感知是否及时、坐标是否一致、任务是否可中断、异常是否可恢复、控制是否安全。当持续视频理解、细粒度视觉定位和短时行动决策进入同一套可靠的系统框架,机器人才能从"看得见",逐步走向"看得懂、做得到"。

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐