[转]自动驾驶平台Apollo 2.5环境搭建

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

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

docker

为了免除环境差别形成的各类问题,apollo运行环境依赖于docker。所以若是尚未安装docker的话,须要先安装docker,能够参考:https://github.com/ApolloAuto/apollo/blob/master/docker/scripts/README.md#install-dockersql

若是以后启动container时遇到下面错误:docker

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

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:app

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目录下。ide

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.
相关文章
相关标签/搜索