1. 课程导入
在自动驾驶与智能机器人系统中,软件需要同时处理感知、定位、预测、规划、控制等多类任务,这些任务往往以不同频率运行,并通过大量消息彼此协作。传统基于 ROS 1 的通信模型在时延、确定性和资源调度上逐渐难以满足车规级量产需求。Cyber RT 正是为高吞吐、低时延、强实时场景设计的运行时框架,它把“计算任务”抽象为组件,把“数据交换”抽象为通道,从而让开发者能够以声明式方式搭建复杂的数据流水线。
本课程围绕两条主线展开:数据通道与组件开发。数据通道解决“数据如何高效、可靠、可观测地流动”;组件开发解决“计算逻辑如何被组织、调度与复用”。二者共同构成 Cyber RT 应用开发的核心能力。
一、Cyber RT 的定位:从通信中间件到运行时框架
Cyber RT 并不是单纯的“消息队列”,而是一个完整的运行时框架。它向下封装操作系统线程、共享内存、网络传输与调度策略,向上提供节点、通道、服务、参数、定时器等编程接口。其关键定位可以概括为三点:
- 确定性调度:通过协程与调度器配合,减少线程切换与锁竞争,保证关键链路时延可控。
- 零拷贝与共享内存:同一主机内的大块数据(如点云、图像)通过共享内存传递,避免序列化与复制开销。
- 组件化复用:算法以 Component 形式封装,通过配置文件声明输入输出通道,便于替换与组合。
一句话理解:Cyber RT = 通信中间件 + 调度运行时 + 组件容器。数据通道是“血管”,组件是“器官”,调度器是“心跳”。
二、整体知识框架与数据流全景
下图展示了本课程的知识框架:左侧是数据通道相关能力,右侧是组件开发相关能力,中间通过调度器与运行时连接。理解这张图,有助于建立后续章节的坐标感。
三、学习目标与实战路线
完成本课程后,你应当能够独立完成一个可运行的 Cyber RT 应用:定义消息、编写组件、配置 DAG、启动运行、观测通道并定位性能问题。具体目标如下:
- 理解 Cyber RT 的节点、通道、组件、调度器四类核心概念及其关系。
- 能够使用 Protobuf 定义消息,并通过 Channel 完成跨组件通信。
- 能够编写 Component 并正确实现 Init 与 Proc 回调。
- 能够编写 dag 配置文件,完成通道绑定、参数注入与调度策略选择。
- 能够使用 cyber_monitor、cyber_channel 等工具观测数据流并排查异常。
- 能够针对时延、丢包、CPU 占用等问题进行基础调优。
实战路线建议按“先跑通、再理解、后优化”的顺序推进。下面给出一个典型的最小可运行工程结构,后续章节会逐步填充每个文件的内容。
my_cyber_demo/
├── BUILD
├── conf/
│ └── demo.dag
├── proto/
│ └── demo_msg.proto
└── src/
├── driver_component.cc
├── driver_component.h
├── process_component.cc
└── process_component.h
四、核心概念对照与常见误区
初学者最容易混淆的是“通道”和“组件”的职责边界。下表给出对照,帮助建立正确的心智模型。
| 维度 | 数据通道 Channel | 组件 Component |
|---|---|---|
| 核心职责 | 承载并传输消息 | 执行计算逻辑 |
| 关注点 | 时延、吞吐、可靠性、QoS | 算法正确性、调度频率、资源占用 |
| 配置方式 | 通道名、消息类型、传输策略 | dag 文件中的 readers/writers 绑定 |
| 常见问题 | 丢包、背压、序列化开销 | 阻塞、超时、线程竞争 |
| 观测工具 | cyber_monitor、cyber_channel | 日志、性能剖析、调度统计 |
常见误区一:把 Channel 当成“函数调用”。Channel 是异步数据流,写入后并不保证立即被消费,也不保证消费顺序与写入顺序完全一致,除非显式配置可靠性策略。
常见误区二:在 Proc 中执行耗时阻塞操作。Proc 运行在调度器管理的协程中,长时间阻塞会拖慢同调度组内的其他组件。
常见误区三:忽略消息定义版本兼容。Protobuf 字段编号一旦发布不应随意修改,否则会导致上下游解析失败。
五、案例场景:一个感知到控制的闭环
假设我们要搭建一个简化闭环:摄像头驱动组件发布图像,感知组件订阅图像并输出障碍物,规划组件订阅障碍物并输出轨迹,控制组件订阅轨迹并输出控制指令。每个箭头都是一条 Channel,每个方框都是一个 Component。这个场景贯穿本课程:
- 驱动组件使用 Timer 定时触发,按固定频率写入图像通道。
- 感知组件以图像通道为输入,输出障碍物通道,采用 CLASSIC 调度。
- 规划与控制组件通过 dag 文件串联,形成有向无环图。
- 通过 cyber_monitor 观察各通道频率与延迟,定位瓶颈环节。
学习建议:每学完一个知识点,就在自己的最小工程中增加一个组件或一条通道,并立即用工具观测效果。Cyber RT 的很多特性只有在真实运行时才能被直观感受到。