Apollo自动驾驶代码入门指南:从环境搭建到第一个感知模块

1次阅读
没有评论

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

image.webp

Apollo 平台概览

Apollo 是百度开源的自动驾驶平台,采用模块化架构设计,覆盖感知、预测、规划、控制全流程。其核心优势在于开源社区支持和完善的仿真工具链,适合快速验证算法。平台基于 ROS/CYBER RT 实现高实时性通信,并提供 Docker 化开发环境降低配置复杂度。

Apollo 自动驾驶代码入门指南:从环境搭建到第一个感知模块

环境准备(避坑指南)

  1. 硬件要求
  2. 推荐 Ubuntu 18.04/20.04 系统
  3. 至少 4 核 CPU/16GB 内存 /50GB 空闲磁盘
  4. NVIDIA 显卡(CUDA 11.1+)

  5. Docker 安装关键步骤

    # 卸载旧版本(重要!)sudo apt-get remove docker docker-engine docker.io containerd runc
    
    # 安装工具包
    sudo apt-get update
    sudo apt-get install apt-transport-https ca-certificates curl gnupg lsb-release
    
    # 添加 GPG 密钥
    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
    
    # 设置稳定版仓库
    echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

  6. 常见问题解决

  7. GPU 支持问题:需先安装 nvidia-container-toolkit
  8. 时区设置:Docker 镜像默认 UTC 时间,建议挂载 /etc/localtime
  9. 共享内存不足:启动时添加 –shm-size=2g 参数

代码结构解析

  • 核心目录

    modules/
      ├── perception      # 激光雷达 / 摄像头数据处理
      ├── prediction      # 障碍物运动轨迹预测
      ├── planning        # 路径规划算法
      └── control         # 车辆控制指令生成 

  • 数据流示意图 (PlantUML):

    @startuml
    component "传感器" as sensor
    component "感知模块" as perception
    component "预测模块" as prediction
    component "规划模块" as planning
    component "控制模块" as control
    
    sensor -> perception : 原始数据
    perception -> prediction : 障碍物信息
    prediction -> planning : 运动预测
    planning -> control : 轨迹指令
    @enduml

第一个感知模块实战

  1. 创建 Python 检测器 (继承基类):

    from modules.perception.proto.perception_obstacle_pb2 import PerceptionObstacles
    from modules.perception.base_obstacle_detector import BaseObstacleDetector
    
    class SimpleDetector(BaseObstacleDetector):
        def __init__(self, name='simple_detector'):
            super().__init__(name=name)
    
        def Process(self, sensor_data):
            obstacles = PerceptionObstacles()
            # 示例:添加虚拟障碍物
            obs = obstacles.perception_obstacle.add()
            obs.id = 1
            obs.position.x = 10.0
            obs.position.y = 2.0
            obs.type = PerceptionObstacles.VEHICLE
            return obstacles

  2. 消息发布配置 (DAG 文件):

    module_config {
      name: "simple_detector"
      type: "SimpleDetector"
      mode: "Async"
      readers: [{ channel: "/apollo/sensor/camera/front_6mm"}
      ]
      writers: [{ channel: "/apollo/perception/obstacles"}
      ]
    }

性能优化建议

  1. IPC 优化
  2. 使用共享内存(ShmQueue)替代 Socket 通信
  3. 对高频消息(如激光雷达)启用 ZeroCopy
  4. 设置合理的消息队列长度(建议 5 -10)

  5. CYBER RT 定时器

    auto cb = [this]() {// 处理逻辑};
    timer_ = cyber::CreateTimer(100, cb, false);  // 100ms 周期 

安全规范

  1. 数据校验

    def validate_sensor_data(data):
        if not data.HasField('header'):
            raise ValueError("Missing message header")
        if abs(data.yaw_rate) > 1.0:  # 异常值过滤
            return False
        return True

  2. 失效处理

  3. 心跳检测机制(Watchdog)
  4. 默认安全指令发布(如紧急制动)
  5. 模块状态监控(/apollo/monitor)

进阶方向

  1. 集成新传感器(如 4D 毫米波雷达)
  2. 开发自定义规划算法
  3. 使用 Dreamview 进行可视化调试

资源推荐

  • 官方文档:https://github.com/ApolloAuto/apollo
  • 开发者社区:https://community.apollo.auto
  • 仿真工具链:LGSVL Simulator
正文完
 0
评论(没有评论)