zoukankan      html  css  js  c++  java
  • [转]自动驾驶平台Apollo 2.5环境搭建

    原文地址:https://blog.csdn.net/jinzhuojun/article/details/80210180,转载主要方便随时查阅,如有版权要求,请及时联系。

    我们知道,自动驾驶在学界其实已经是个很老的topic了。而这几年,伴随着以深度学习为主力的第三次AI浪潮,大家似乎看到了自动驾驶商业化的重大机会,于是无论是学界还是工业界都开始将注意力转向该领域。放眼望去,满大街似乎都在搞自动驾驶。前段时间,百度又发布了自动驾驶平台Apollo的2.5版本。要想搭个环境玩一下的话,其实官方文档里挺详细了。这里主要是备忘一下主要流程和一些小坑的解决方法。大体可分为以下几步:

    docker

    为了免除环境差异造成的各种问题,apollo运行环境依赖于docker。因此如果还没有安装docker的话,需要先安装docker,可以参考:https://github.com/ApolloAuto/apollo/blob/master/docker/scripts/README.md#install-docker

    如果之后启动container时遇到下面错误:

    docker: Error response from daemon: cgroups: cannot find cgroup mount destination: unknown.
    • 1

    参考https://github.com/boot2docker/boot2docker/issues/1301,解决方法是执行:

    sudo mkdir /sys/fs/cgroup/systemd
    sudo mount -t cgroup -o none,name=systemd cgroup /sys/fs/cgroup/systemd
    • 1
    • 2

    Apollo

    首先下载apollo源代码。可以选择直接从github上拉,也可以下载release包。这里选择后者,从https://github.com/ApolloAuto/apollo/releases/tag/v2.5.0 下载代码,然后解压。假设解压后目录为APOLLO_HOME。进入该目录后,运行以下脚本初始化apollo的开发和运行环境。

    bash docker/scripts/dev_start.sh
    • 1

    其中会去从网上拉几个所需的docker image并基于这些image启动container。拉完后用docker images命令可以看到以下的几个新增image:

    REPOSITORY                                 TAG                                    IMAGE ID            CREATED             SIZE
    apolloauto/apollo                          dev-x86_64-20180413_2000               2d338b6e1942        3 weeks ago         7.17GB
    apolloauto/apollo                          localization_volume-x86_64-latest      75cf8c77134c        4 weeks ago         6.94MB
    apolloauto/apollo                          map_volume-sunnyvale_big_loop-latest   9d9581178ffe        6 weeks ago         995MB
    apolloauto/apollo                          yolo3d_volume-x86_64-latest            562d2b2b5a71        7 weeks ago         70.6MB
    apolloauto/apollo                          map_volume-sunnyvale_loop-latest       36dc0d1c2551        3 months ago        906MB
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    用docker ps可以看到启动了以下container:

    0f2a5bccc9f3        apolloauto/apollo                                        "/bin/bash"         3 hours ago         Up 3 hours                              apollo_dev
    0c1f64813be2        apolloauto/apollo:yolo3d_volume-x86_64-latest            "/bin/sh"           3 hours ago         Up 3 hours                              apollo_yolo3d_volume
    b42bfef51984        apolloauto/apollo:localization_volume-x86_64-latest      "/bin/sh"           3 hours ago         Up 3 hours                              apollo_localization_volume
    5d6ea903455c        apolloauto/apollo:map_volume-sunnyvale_loop-latest       "/bin/bash"         3 hours ago         Up 3 hours                              apollo_map_volume-sunnyvale_loop
    dc4f8219a2b9        apolloauto/apollo:map_volume-sunnyvale_big_loop-latest   "/bin/sh"           3 hours ago         Up 3 hours                              apollo_map_volume-sunnyvale_big_loop
    • 1
    • 2
    • 3
    • 4
    • 5

    接下来就可以通过以下命令进入开发环境了,其实就是进入前面pull下来的dev-x86_64-20180413_2000那个image创建的container(名为apollo_dev)。前面的apollo代码根目录APOLLO_HOME会被映射到container中的/apollo目录下。

    bash docker/scripts/dev_into.sh
    • 1

    然后就可以编译整个系统了。不过由于感知(perception)模块很多依赖于CUDA,所以我们等enable CUDA后再编译。这里,我们可以按官方文档先跑下demo。先下载回放数据包:

    sudo bash docs/demo_guide/rosbag_helper.sh download
    • 1

    下载完成后,回放数据位于docs/demo_guide/demo_2.5.bag。然后用下面命令开始回放:

    rosbag play -l ./docs/demo_guide/demo_2.5.bag
    • 1

    Apollo基于ROS,而rosbag是其中一个数据记录和回放工具。用浏览器打开http://localhost:8888,即可看到图形化输出:
    这里写图片描述

    CUDA

    通过前面命令进入apollo_dev这个container中,可以看到官方image中自带CUDA 8.0了。但由于没有driver,所以还无法使用GPU进行加速。参考官方文档How to Run Perception Module on Your Local Computer,下载驱动(最好和host装的版本一致,driver版本可以通过nvidia-smi命令查看)和cudnn进行安装。如果直接运行下载的驱动安装文件碰到问题,比如:

    An NVIDIA kernel module 'nvidia-drm' appears to already be loaded in  your kernel.
    • 1

    不妨尝试用apt-get来安装,更方便:

    sudo add-apt-repository ppa:graphics-drivers/ppa
    sudo apt-get update
    sudo apt-get install nvidia-384
    • 1
    • 2
    • 3

    因为安装了驱动,即对原image有了修改,如果不commit的话退出后这些改动都没有了,下次进来还要重新做一遍。因此需要通过以下命令commit改动(假设commit后的image tag为v1.0):

    docker commit CONTAINER_ID apolloauto/apollo:v1.0
    • 1

    其中CONTAINER_ID可以通过docker ps | grep apollo_dev查看。命令执行后再用docker images命令应该可以看到新增的image:

    apolloauto/apollo                          v1.0                                   3812b26eb3c8        41 hours ago        8.11GB
    • 1

    之后就可以用以下命令就可以基于改动后的image创建container:

    ./docker/scripts/dev_start.sh -l -t v1.0
    • 1

    然后可以试下CUDA是不是正常工作。在container中进入/usr/local/cuda/samples/1_Utilities/deviceQuery目录,执行:

    sudo make
    sudo ./deviceQuery
    • 1
    • 2

    如果看到GPU信息就说明OK了。还不放心的再在samples目录里随便挑几个编译运行试试。接下来可以编译apollo系统了:

    ./apollo.sh build_opt_gpu
    • 1

    apollo系统使用的编译系统是bazel(就是TensorFlow用的那个)。编译完后的binary都放在/apollo/bazel-bin目录下。让我们随意找个test试一下,比如用yolo神经网络模型进行物体检测的测试:

    ./bazel-bin/modules/perception/obstacle/camera/detector/yolo_camera_detector/yolo_camera_detector_test
    • 1

    输出结果:

    ...
    I0506 18:23:41.356957   218 util.cc:54] Supported types: 
    I0506 18:23:41.356976   218 util.cc:62]         VEHICLE
    I0506 18:23:41.356989   218 util.cc:62]         BICYCLE
    I0506 18:23:41.356993   218 util.cc:62]         PEDESTRIAN
    I0506 18:23:41.357002   218 util.cc:62]         UNKNOWN_UNMOVABLE
    I0506 18:23:41.357015   218 util.cc:64]         4 in total.
    E0506 18:23:41.369910   218 yolo_camera_detector.cc:256] 'objects' is a null pointer.
    I0506 18:23:41.372014   218 yolo_camera_detector.cc:303] Pre-processing: 2.01507 ms
    I0506 18:23:41.408946   218 yolo_camera_detector.cc:309] Running detection: 36.8999 ms
    I0506 18:23:41.409906   218 yolo_camera_detector.cc:356] Post-processing: 0.927424 ms
    I0506 18:23:41.409914   218 yolo_camera_detector.cc:357] Number of detected obstacles: 1
    [       OK ] YoloCameraDetectorTest.multi_task_test (315 ms)
    [----------] 3 tests from YoloCameraDetectorTest (1398 ms total)
    
    [----------] Global test environment tear-down
    [==========] 3 tests from 1 test case ran. (1399 ms total)
    [  PASSED  ] 3 tests.
  • 相关阅读:
    [DB] 数据库的连接
    JS leetcode 翻转字符串里的单词 题解分析
    JS leetcode 拥有最多糖果的孩子 题解分析,六一快乐。
    JS leetcode 搜索插入位置 题解分析
    JS leetcode 杨辉三角Ⅱ 题解分析
    JS leetcode 寻找数组的中心索引 题解分析
    JS leetcode 移除元素 题解分析
    JS leetcode 最大连续1的个数 题解分析
    JS leetcode 两数之和 II
    JS leetcode 反转字符串 题解分析
  • 原文地址:https://www.cnblogs.com/qiuheng/p/9134876.html
Copyright © 2011-2022 走看看