[轉]自動駕駛平台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.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM