apollo学习笔记1

目标:

        使用apollo无人驾驶框架搭建无人驾驶车辆环境,系统为ubuntu16.04,环境为docker
安装:

        官方安装文档:apollo github

        首先,安装docker环境:

       bash docker/setup_host/install_docker.sh#docker-ce安装脚本 

       bash docker/scripts/dev_start.sh#下载镜像

       bash docker/scripts/dev_into.sh#装载进入apollo docker镜像环境,在apollo源码目录执行

      bash apollo.sh build#全编译操作

       Bash apollo.sh build_opt_cpu #编译cpu版本

启动apollo:

   bash scripts/bootstrap.sh

播放演示rosbag:

     sudo python docs/demo_guide/rosbag_helper.py demo_2.0.bag #下载数据包 

     rosbag play demo_2.0.bag --loop

docker用途:
      Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源。
     Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
      容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。

apollo版本迭代:
1.0:可在封闭道路上运行,引入云端数据平台;引入软件平台:定位,控制,人机界面,时间框架,实时操作系统(时效性和可靠性);硬件平台:计算单元,GPS定位,内部处理单元,人机界面硬件;汽车相关平台:线束控制整车
1.5:拥有更好的感知模块和更好的地图规划,增加高精度地图,增加仿真模块,增加地图引擎,增加感知模块(引入LIDIA,相机,雷达),增加决策模块,增加端对端模块
2.0:可在简单的城市道路运行,能够在道路上自主巡航,避免可能障碍物碰撞,能够在交通灯处停下和在需要时改变车道。云端上增加了安全模块,空中下载技术;软件平台上,升级了端对端驾驶模块;相关硬件平台上,增加了照相机,雷达和黑盒;
2.5:可实现在高速道路上使用一个相机在自动驾驶情况下检测障碍物,车辆可保持车道线控制,定速巡航和避免与前车发生碰撞
apollo 框架:

  • Reference Vehicle Platform参考汽车层,用于对汽车实现电子化的控制。这一层涉及到的 CAN 协议一般由主机厂制订,且严格保密。百度早期使用了 AutonomouStuff 公司改装的 Lincoln MKZ 来规避这一问题[2]。
  • Reference Hardware Platform: 参考硬件层,为 Apollo 推荐的硬件设备,如: 计算单元(工控机),GPS/IMU,LiDAR,Radar 等等。
  • Open Software Platform开放软件平台, 为 Apollo 的核心部分。
  • Cloud Service Platform云端服务层,为百度可提供的数据,高精度地图等各项云服务,应该也是百度之后盈利的主要来。

其中每个模块的作用如下:

  • apollo根目录
    ├── .github/ISSUE_TEMPLATE目录 // 问题记录的文档
    ├── .vscode // 启动的一些参数配置
    ├── docker // docker有关的文件,如启动docker脚本,进入docker容器脚本
    ├── docs // 文档模块,有完整英文文档和部分中文文档
    ├── modules// apollo中各个模块的源代码,如感知,决策,规划等核心模块
    ├── scripts// 启动脚本,如启动hmi的脚本
    ├── third_party // 第三方的库
    └── tools // 编译相关配置文件
  • Apollo项目是用Bazel来做为代码编译工具,每个源码文件夹下都有一个 BUILD文件即bazel的编译配置文件。
  • modules目录下的子目录
    ├── calibration// 标定模块,现在已经实现自动标定的功能
    ├── canbus // can总线相关的模块
    ├── common // 公共源码模块如日志,工厂模式的实现,日志系统,监控模块,数学算法等
    ├── control // 幅度和度的相互转换
    ├── data // 数据的收集,存储和处理
    ├── dreamview // 可视化模块,查看规划的轨迹及实时的转向刹车油门信息
    ├── drivers // GNSS设备驱动,包括NovAtel, Applanix, u-blox, velodyne驱动
    ├── e2e // 端到端模块
    ├── elo // 利用高精地图的自定位模块
    ├── guardian // 监护进程,主要是为了安全
    ├── localization // 定位模块,输入GPS和IMU信息输出自车定位信息
    ├── map // 高精地图模块,输出结构化地图信息,如车道线,十字路口等
    ├── monitor // 监控模块,监控硬件状态,同时把状态发给hmi
    ├── perception // 感知模块,输入激光点云,高精地图,变换坐标
    ├── planning // 决策规划模块
    ├── prediction // 预测模块,输出感知的障碍物信息及自定位信息输出障碍物未来的轨迹
    ├── routing // 全局导航模块,输入包括地图信息各起点终点地址,输出一个全局的导航信息
    ├── third_party_perception // 车辆姿态模拟线程
    └── tools // 第三方的感知模块

工作流程:

自动驾驶系统先通过起点终点规划出全局路径(routing);然后在行驶过程中感知(perception)当前环境(识别车辆行人路况标志等),并预测下一步发展;然后把已知信息都传入规划模块(planning),规划出之后的轨道;控制模块(control)将轨道数据转换成对车辆的控制信号,通过汽车交互模块(canbus)控制汽车.

 

你可能感兴趣的:(apollo学习笔记1)