Apollo自动驾驶源码解析:新手入门指南与关键模块解读

1次阅读
没有评论

共计 1680 个字符,预计需要花费 5 分钟才能阅读完成。

image.webp

系统架构概览

Apollo 采用经典的三层架构:感知 (Sensing)- 决策(Decision)- 控制(Control)。通过/apollo/modules/common/msgs 下的 proto 文件可以看到模块间通信的数据结构定义。核心流程如下:

  1. 感知层 :激光雷达 / 摄像头数据通过/apollo/modules/perception 处理,输出障碍物列表
  2. 决策层 /apollo/modules/planning 生成轨迹路径
  3. 控制层 /apollo/modules/control 将路径转化为油门 / 刹车指令

Apollo 自动驾驶源码解析:新手入门指南与关键模块解读

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}%")

进阶方向建议

  1. 时序融合 :研究/apollo/modules/perception/fusion 中的卡尔曼滤波实现
  2. 轨迹优化 :分析/apollo/modules/planning/math/piecewise_jerk 的二次规划算法
  3. 硬件加速 :尝试用 TensorRT 优化/apollo/modules/perception/inference 中的模型

从实际项目经验看,建议先通过 Dreamview 熟悉系统整体行为,再逐步深入单个模块。遇到编译问题时,注意检查 /apollo.sh 中设置的编译选项是否与硬件匹配。

正文完
 0
评论(没有评论)