共计 1680 个字符,预计需要花费 5 分钟才能阅读完成。
系统架构概览
Apollo 采用经典的三层架构:感知 (Sensing)- 决策(Decision)- 控制(Control)。通过/apollo/modules/common/msgs 下的 proto 文件可以看到模块间通信的数据结构定义。核心流程如下:
- 感知层 :激光雷达 / 摄像头数据通过
/apollo/modules/perception处理,输出障碍物列表 - 决策层 :
/apollo/modules/planning生成轨迹路径 - 控制层 :
/apollo/modules/control将路径转化为油门 / 刹车指令

Lidar 目标检测实战
以 /apollo/modules/perception/lidar/lib/detection/lidar_point_pillars 为例,关键处理流程:
// 点云预处理(移除地面点)void PointPillarsDetection::Process(/*...*/) {ground_detector_->Detect(frame); // 使用 GPF 算法
roi_filter_->Filter(frame); // 感兴趣区域过滤
// ...
}
// 特征提取网络(基于 PaddlePaddle)void FeatureNet::Forward(/*...*/) {paddle::Tensor input_tensor = ConvertToPaddleTensor(points);
feature_extractor_->Run(input_tensor);
}
Apollo 特有的Cyber 组件命名规则:
– Component后缀表示数据处理器
– Updater后缀表示状态维护模块
– Adapter后缀用于硬件接口
调试工具对比
Dreamview vs Cyber RT Monitor:
| 工具 | 延迟显示 | 数据回放 | 模块状态监控 |
|---|---|---|---|
| Dreamview | 500ms | ✅ | 图形化 |
| Cyber Monitor | 50ms | ❌ | 终端输出 |
推荐开发期使用 Cyber RT 命令行工具:
# Ubuntu 18.04 需先安装 ncurses
cyber_monitor -c /apollo/data/bag/2023-01-01/channel_list.txt
Docker 部署避坑
GPU 驱动版本矩阵:
| Apollo 版本 | CUDA | 驱动最低版本 |
|---|---|---|
| 6.0 | 11.1 | 450.80.02 |
| 7.0 | 11.4 | 470.57.02 |
常见报错解决方法:
# 检查 NVIDIA 容器工具包
docker run --gpus all nvidia/cuda:11.4-base nvidia-smi
# 修复 libnvidia-ml.so 缺失
sudo apt install --reinstall nvidia-utils-$(dpkg -l | grep nvidia-driver | awk '{print $3}')
CAN 总线数据解析
使用 /apollo/modules/canbus/proto/chassis.proto 定义的数据结构:
from modules.canbus.proto import chassis_pb2
# 解析 CAN 帧(需要先安装 apollo-wheel)def parse_can_data(raw_bytes):
chassis = chassis_pb2.Chassis()
chassis.ParseFromString(raw_bytes)
print(f"车速: {chassis.speed_mps:.2f}m/s 方向盘角度: {chassis.steering_percentage}%")
进阶方向建议
- 时序融合 :研究
/apollo/modules/perception/fusion中的卡尔曼滤波实现 - 轨迹优化 :分析
/apollo/modules/planning/math/piecewise_jerk的二次规划算法 - 硬件加速 :尝试用 TensorRT 优化
/apollo/modules/perception/inference中的模型
从实际项目经验看,建议先通过 Dreamview 熟悉系统整体行为,再逐步深入单个模块。遇到编译问题时,注意检查 /apollo.sh 中设置的编译选项是否与硬件匹配。
正文完
