共计 2170 个字符,预计需要花费 6 分钟才能阅读完成。
1. Apollo 平台架构与比赛意义
Apollo 是百度开源的自动驾驶平台,采用模块化设计。对于比赛来说,核心要掌握三个层级:

- 感知层:激光雷达 / 摄像头数据处理(如障碍物检测)
- 决策层:路径规划与行为决策(比赛关键得分点)
- 控制层:车辆转向 / 油门控制(PID 调参基础)
参加比赛的最大价值在于:通过真实场景任务(如避障、红绿灯识别)快速理解自动驾驶系统闭环逻辑。官方提供的仿真环境可以安全测试代码,这对没有实车条件的学习者特别友好。
2. 开发环境搭建实战
2.1 基础环境准备
- 安装 Ubuntu 18.04/20.04(必须 64 位系统)
- 分配至少 4 核 CPU+16GB 内存 +50GB 磁盘空间
- 关闭 Secure Boot(否则 Docker 驱动会报错)
2.2 Docker 部署关键步骤
# 安装官方脚本(注意网络通畅)curl https://raw.githubusercontent.com/ApolloAuto/apollo/master/docker/setup_host/setup_host.sh | bash
# 拉取镜像(国内推荐使用阿里云镜像)./docker/scripts/dev_start.sh -C -g cn
常见报错 1 :E: Unable to locate package nvidia-docker2
解决方法:先执行 distribution=$(. /etc/os-release;echo $ID$VERSION_ID) 更新软件源
常见报错 2 :Docker build failed
检查点:确保 /tmp 目录有 10GB 以上空间
3. 核心模块代码解析
3.1 感知模块示例(Python)
目标检测接口典型实现:
def detect_objects(lidar_points):
# 点云聚类处理(比赛常用 DBSCAN 算法)clusters = sklearn.cluster.DBSCAN(eps=0.5).fit(lidar_points)
# 生成 3D 边界框
bboxes = []
for label in set(clusters.labels_):
if label == -1: continue # 忽略噪声点
cluster_points = lidar_points[clusters.labels_ == label]
bboxes.append(calc_bounding_box(cluster_points))
return bboxes
3.2 规划模块(C++)
路径规划核心逻辑:
void PlanningComponent::Plan() {
// 从 HDMap 读取道路信息
auto road_graph = hdmap_->GetRoadGraph();
// 生成候选路径(比赛常用 A * 算法)std::vector<Path> candidates =
AStarPlanner::Plan(road_graph, start_pose, end_pose);
// 选择最优路径(考虑曲率 / 距离等权重)current_path_ = EvaluatePaths(candidates);
}
4. 仿真测试技巧
4.1 Dreamview 操作流程
- 启动命令:
./scripts/bootstrap.sh - 浏览器访问
localhost:8888 - 关键功能按钮:
- Module Controller:启停感知 / 规划模块
- Layer Menu:切换地图图层
- Data Recorder:保存测试数据
4.2 日志分析要点
查看规划决策日志:
grep "PLANNING" /apollo/data/log/planning.INFO
典型错误日志模式:
– WARNING: Stuck at obstacle → 感知漏检
– ERROR: Failed to sample path → 规划参数不合理
5. 新手避坑指南
5.1 地图加载失败
现象:Dreamview 显示空白地图
解决 :检查/apollo/modules/map/data/ 下是否有正确的base_map.xml
5.2 控制指令延迟
现象:车辆响应明显滞后
解决 :调整/apollo/modules/control/conf/control_conf.pb.txt 中的 control_period 参数
5.3 坐标系混乱
现象:感知结果与车辆位置偏差大
解决 :统一使用world 坐标系(Apollo 默认),所有模块需做坐标转换
6. 性能优化建议
6.1 基础调参方向
- 感知:调整聚类算法参数(如 DBSCAN 的
eps) - 规划:增加路径采样密度
sample_step - 控制:PID 参数建议从
Kp=1.0, Ki=0.1, Kd=0.01开始调试
6.2 ROS 优化技巧
# 查看通信延迟(单位:ms)rostopic delay /apollo/perception/obstacles
# 提升性能(在 cyber_launch 文件中添加)--scheduler_policy=fifo
--process_level=realtime
下一步精进路线
完成首次提交后,建议按以下顺序深入:
1. ROS2 迁移 :学习cyberRT 替代传统 ROS(Apollo 7.0+ 已切换)
2. PnC 算法:深入研究 Frenet 坐标系下的轨迹规划
3. 多传感器融合:实践相机 + 激光雷达的卡尔曼滤波实现
4. 实车部署:了解 CAN 总线协议与车辆接口规范
小提示:比赛代码不要直接复制往届方案,组委会会检测代码相似度。理解架构思想后自己实现更能提升能力。
