Apollo星火自动驾驶赛题新手入门指南:从环境搭建到第一个Demo

1次阅读
没有评论

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

image.webp

背景痛点

初次接触 Apollo 平台的开发者往往会遇到几个典型问题:

Apollo 星火自动驾驶赛题新手入门指南:从环境搭建到第一个 Demo

  1. 环境配置复杂:依赖项多,Docker 镜像体积大(约 10GB),网络问题导致拉取失败
  2. 概念门槛高:需要同时理解 ROS/ROS2、CyberRT、Protobuf 等多种中间件
  3. 硬件依赖:官方推荐使用带 GPU 的工控机,笔记本开发需要特殊配置
  4. 调试困难:传感器数据模拟与真实设备存在差异,问题定位链条长

技术选型:为什么选择 Apollo?

相比其他自动驾驶平台:

  • Autoware
  • 优势:ROS 原生支持,社区插件丰富
  • 劣势:模块耦合度高,实时性较差
  • Apollo
  • 优势:百度商业化验证的架构,CyberRT 实时框架延迟 <5ms
  • 特色:提供完整的仿真工具链(Dreamview+LG Simulator)

核心实现

Docker 环境搭建(Ubuntu 20.04 示例)

  1. 安装依赖:

    sudo apt-get update
    sudo apt-get install -y curl git docker.io nvidia-docker2

  2. 配置 Docker 加速(国内用户必需):

    sudo mkdir -p /etc/docker
    echo '{"registry-mirrors": ["https://registry.docker-cn.com"]}' | sudo tee /etc/docker/daemon.json

  3. 拉取 Apollo 镜像:

    docker pull apolloauto/apollo:dev-x86_64-18.04-20210914_1330

Apollo 架构解析(关键模块)

[感知层] → [预测层] → [规划层] → [控制层]
   ↑               ↑           ↑
[定位模块]    [高精地图]   [V2X 通信]
  • 感知层:激光雷达 + 摄像头融合检测(采用 PointPillars+YOLOv5)
  • 预测层:基于 LSTM 的轨迹预测
  • 规划层:EM Planner 混合规划算法

传感器数据模拟示例

import numpy as np
import matplotlib.pyplot as plt

# 生成模拟激光雷达点云
def generate_lidar_data(num_points=1000):
    # 前方车辆模型(长方体点云)car_points = np.random.uniform(low=[-1.5, -0.8, 0],
        high=[1.5, 0.8, 2],
        size=(num_points//2, 3)
    )

    # 地面点云
    ground = np.column_stack([np.random.uniform(-10, 10, num_points//4),
        np.random.uniform(-5, 5, num_points//4),
        np.zeros(num_points//4)
    ])

    return np.vstack([car_points, ground])

# 可视化
points = generate_lidar_data()
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.scatter(points[:,0], points[:,1], points[:,2], s=1)
plt.show()

避坑指南

  1. Docker 启动失败
  2. 现象:nvidia-docker: command not found
  3. 解决:执行distribution=$(. /etc/os-release;echo $ID$VERSION_ID) && curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -

  4. CUDA 版本冲突

  5. 现象:Failed to initialize NVML: Driver/library version mismatch
  6. 解决:sudo apt-get install --reinstall nvidia-driver-470

  7. CyberRT 启动超时

  8. 现象:component init timeout
  9. 解决:修改 cyber_launch 中的 --timeout=60 参数

实践:车道线检测 Demo

  1. 启动 Dreamview 可视化:

    ./scripts/bootstrap.sh

  2. 加载预置地图:

    python3 modules/tools/mapshow/show.py -m modules/map/data/sunnyvale_loop

  3. 运行检测模块:

    mainboard -d modules/perception/production/launch/lane_detection.launch

性能优化策略

  • 轻量化模型:将 YOLOv5 替换为 YOLOv5s(体积缩小 60%)
  • 量化加速:使用 TensorRT 进行 FP16 量化
  • 模块裁剪:关闭不用的传感器驱动(如未连接雷达时)

进阶思考

  1. 如何实现多车协同感知?Apollo 的 V2X 模块如何与单车智能结合?
  2. 当激光雷达与摄像头检测结果冲突时,融合算法应该如何决策?
  3. 在资源受限的树莓派上,哪些模块可以优先考虑边缘计算方案?
正文完
 0
评论(没有评论)