apollo 6.0 【開發版】從安裝到啟動,保姆級全教程

来源:https://www.cnblogs.com/helong-123/archive/2022/05/10/16253663.html
-Advertisement-
Play Games

鏡像下載、功能變數名稱解析、時間同步請點擊 阿裡雲開源鏡像站 畢設要開始做Apollo相關的課題,自己在這方面完全就是一個小白,光是安裝apollo就已經花了不少功夫,也走了一些彎路,所以在這裡記錄一下,一方面做個總結,另一方面也希望可以幫到和我一樣的朋友,最近在做Apollo的朋友也可以點個關註,大家一起 ...


鏡像下載、功能變數名稱解析、時間同步請點擊 阿裡雲開源鏡像站

畢設要開始做Apollo相關的課題,自己在這方面完全就是一個小白,光是安裝apollo就已經花了不少功夫,也走了一些彎路,所以在這裡記錄一下,一方面做個總結,另一方面也希望可以幫到和我一樣的朋友,最近在做Apollo的朋友也可以點個關註,大家一起交流討論。

註意!!此方法安裝的是開發版,也就是可以看見源碼,可以自己開發的版本,如果只是想體驗一下自動駕駛,對源碼沒有學習需要,那安裝發行版就行,發行版裝起來更簡單,教程指路《apollo6.0發行版安裝全教程》

兩個版本的前期軟體安裝工作是一樣的。

1.必備軟體安裝

1.1安裝Ubuntu linux

我之前試過安裝VM虛擬機,但是虛擬機無法安裝NVIDIA GPU驅動,不裝這個驅動是無法運行感知模塊的,我也沒找到解決辦法,這裡還是建議大家直接安裝Linux系統吧。教程請參考《Windows10安裝ubuntu18.04雙系統教程》

安裝Ubuntu需要註意的點

1.安裝語言建議選擇English(US),有前輩說中文環境後面可能會導致亂碼,大家還是不要鋌而走險了。

2.硬碟劃分。由於學習自動駕駛一般要安裝幾個大的軟體,如Apollo、opencv等,所以建議對於/root劃分60G到100G,/home分40G及其以上。(硬碟容量允許,肯定是越大越好)

3.裝完系統後第一件事就是下載源更換為國內源,建議阿裡源,如果不換源,那就很有可能卡死在下載中,我之前就痛苦很久,換了源之後就是神清氣爽。更換教程請參考Ubuntu 更換國內源

4.系統進行第一次更新(命令sudo apt-get upgrade)後,在software & updates中,將更新設置為Never,需要的更新手動操作即可,否則不知道哪一天你就因為版本問題而瘋掉,如下圖

file

5.安裝搜狗輸入法,請參考《Ubuntu18.04下安裝搜狗輸入法》Ubuntu輸入中文還是搜狗最好用。

1.2.安裝NVIDIA GPU DRIVER

對於N卡用戶,需要單獨安裝對應顯卡驅動及cuda,安裝之前,需要根據Ubuntu的內核版本來確定對應版本的顯卡驅動。查看命令如下:

[email protected]:~$ uname -r
5.4.0-81-generic
[email protected]:~$ ubuntu-drivers devices
== /sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0 ==
modalias : pci:v000010DEd00001FB8sv000017AAsd0000229Fbc03sc00i00
vendor   : NVIDIA Corporation
driver   : nvidia-driver-460-server - distro non-free
driver   : nvidia-driver-470 - distro non-free recommended
driver   : nvidia-driver-418-server - distro non-free
driver   : nvidia-driver-450-server - distro non-free
driver   : nvidia-driver-460 - distro non-free
driver   : xserver-xorg-video-nouveau - distro free builtin
 
== /sys/devices/pci0000:00/0000:00:1d.6/0000:52:00.0 ==
modalias : pci:v00008086d00002723sv00008086sd00000080bc02sc80i00
vendor   : Intel Corporation
manual_install: True
driver   : backport-iwlwifi-dkms - distro free

根據推薦的版本號,安裝命令如下:

[email protected]:~$ sudo apt-add-repository multiverse
[email protected]:~$ sudo apt-get update
[email protected]:~$ sudo apt-get install nvidia-driver-470
...
update-initramfs: Generating /boot/initrd.img-5.4.0-81-generic
I: The initramfs will attempt to resume from /dev/nvme1n1p2
I: (UUID=3d8c08e6-e615-4e5d-94ef-ca7744ce78c1)
I: Set the RESUME variable to override this.

安裝完成後,可以通過命令NVIDIA_SMI測試,出現下麵提示說明安裝成功:

[email protected]:~$ nvidia-smi
Sun Aug 22 14:03:06 2021       
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 470.57.02    Driver Version: 470.57.02    CUDA Version: 11.4     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|                               |                      |               MIG M. |
|===============================+======================+======================|
|   0  Quadro T2000        Off  | 00000000:01:00.0 Off |                  N/A |
| N/A   55C    P8     3W /  N/A |    174MiB /  3911MiB |      6%      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+
                                                                               
+-----------------------------------------------------------------------------+
| Processes:                                                                  |
|  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
|        ID   ID                                                   Usage      |
|=============================================================================|
|    0   N/A  N/A      1253      G   /usr/lib/xorg/Xorg                 97MiB |
|    0   N/A  N/A      1509      G   /usr/bin/gnome-shell               74MiB |
+-----------------------------------------------------------------------------+

如果不成功,就把ubuntu系統重啟一下使安裝生效,我就是重啟後才成功的。

1.3.安裝docker engine

[email protected]:~$ sudo apt install docker.io
...
Created symlink /etc/systemd/system/multi-user.target.wants/containerd.service → /lib/systemd/system/containerd.service.
Setting up bridge-utils (1.5-15ubuntu1) ...
Setting up ubuntu-fan (0.12.10) ...
Created symlink /etc/systemd/system/multi-user.target.wants/ubuntu-fan.service → /lib/systemd/system/ubuntu-fan.service.
Setting up pigz (2.4-1) ...
Setting up docker.io (20.10.7-0ubuntu1~18.04.1) ...
Adding group `docker' (GID 127) ...
Done.
Created symlink /etc/systemd/system/multi-user.target.wants/docker.service → /lib/systemd/system/docker.service.
Created symlink /etc/systemd/system/sockets.target.wants/docker.socket → /lib/systemd/system/docker.socket.
Processing triggers for systemd (237-3ubuntu10.51) ...
Processing triggers for man-db (2.8.3-2ubuntu0.1) ...
Processing triggers for ureadahead (0.100.0-21) ...
ureadahead will be reprofiled on next reboot
[email protected]:~$ docker [tab]
docker        dockerd       docker-init   docker-proxy  
[email protected]:~$ docker --version
Docker version 20.10.7, build 20.10.7-0ubuntu1~18.04.1

安裝完成後,創建組docker,並將當前用戶加入組中,後續就可以以用戶身份操作docker而不是root,這一步至關重要,命令如下:

[email protected]:~$ sudo groupadd docker
[email protected]:~$ sudo usermod -aG docker $USE

此時重新登錄系統(重啟,這一步一定要做,否則會警告找不到用戶而uid和gid又不匹配,造成錯誤)。完成添加用戶到docker組的操作,以後就可以以用戶身份操作Docker。
最後使用hello-world測試docker:

[email protected]:~$ systemctl start docker && systemctl enable docker
[email protected]:~$ docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
b8dfde127a29: Pull complete 
Digest: sha256:0fe98d7debd9049c50b597ef1f85b7c1e8cc81f59c8d623fcb2250e8bec85b38
Status: Downloaded newer image for hello-world:latest
 
Hello from Docker!
This message shows that your installation appears to be working correctly.

註意:Docker的更新也比較頻繁,經常會出現新版本安裝不成功又禁用舊版本服務的情況,此時別慌,僅需以下幾個命令即可解決:

[email protected]:~$ service docker start 
Failed to start docker.service: Unit docker.service is masked.
[email protected]:~$ systemctl unmask docker.service
[email protected]:~$ systemctl unmask docker.socket
[email protected]:~$ systemctl start docker.service
[email protected]:~$ service docker start 
docker run hello-world

1.4安裝NVIDIA Container Toolkit

運行以下命令安裝 NVIDIA Container Toolkit:

distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
sudo apt-get -y update
sudo apt-get install -y nvidia-docker2

安裝完成後,重啟docker使改動生效

sudo systemctl restart docker

2.安裝apollo

2.1下載Apollo 6.0

從github上下載:

git clone https://github.com/ApolloAuto/apollo.git

從gitee上下載

git clone https://gitee.com/ApolloAuto/apollo.git

如果你在這一步成功了,那你就可以直接到下一步,如果像我一樣失敗了,報錯信息如下:

Cloning into 'apollo'...
remote: Enumerating objects: 329426, done.
remote: Counting objects: 100% (337/337), done.
remote: Compressing objects: 100% (336/336), done.
fatal: The remote end hung up unexpectedly.22 GiB | 6.13 MiB/s      
fatal: early EOF
fatal: index-pack failed

那就只克隆master分支最近一次的commit,減小文件大小:

git clone --depth 1 --branch master https://gitee.com/ApolloAuto/apollo.git

成功信息如下:

Cloning into 'apollo'...
Warning: Permanently added the RSA host key for IP address '13.250.177.223' to the list of known hosts.
remote: Enumerating objects: 313436, done.
remote: Counting objects: 100% (127/127), done.
remote: Compressing objects: 100% (77/77), done.
remote: Total 313436 (delta 63), reused 95 (delta 50), pack-reused 313309
Receiving objects: 100% (313436/313436), 2.42 GiB | 246.00 KiB/s, done.
Resolving deltas: 100% (234642/234642), done.
Checking out files: 100% (9715/9715), done.

2.2設置origin分支

如果我們只是下載運行,上述操作就夠了。如果我們作為開發者想提交代碼修改請求,還需要修改orgin分支為個人項目,upstream分支指向原作者項目地址,使用git修改操作如下:

git checkout master
git remote -v
git remote set-url origin [email protected]:YOUR_GITHUB_USERNAME/apollo.git
git remote add upstream [email protected]:ApolloAuto/apollo.git
git remote add upstream https://github.com/ApolloAuto/apollo.git
git remote -v

2.3 拉取鏡像

bash docker/scripts/dev_start.sh

這個過程會比較慢,而且如果網速不好,會中斷,如果你多次中斷,我建議你可以切換手機熱點,我剛開始用WiFi一直失敗,後來連了手機熱點(我的手機熱點網速感覺並不如wifi快,但是熱點的確可以成功,WiFi卻不行,具體原因我也不清楚,大家可以試試看)

Adding user `xu' ...
Adding new user `xu' (1000) with group `docker' ...
Creating home directory `/home/xu' ...
Copying files from `/etc/skel' ...
[ OK ] Congratulations! You have successfully finished setting up Apollo Dev Environment.
[ OK ] To login into the newly created apollo_dev_xu container, please run the following command:
[ OK ]   bash docker/scripts/dev_into.sh
[ OK ] Enjoy!

顯示這樣,就說明成功了。

然後進入docker

bash docker/scripts/dev_into.sh

成功輸出如下:

To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.

[[email protected]:/apollo]$ 

2.4編譯apollo

當然這裡,首先要檢查確保您在開發Docker容器中

有GPU的話

./apollo.sh build_opt_gpu

沒有GPU,就用CPU

./apollo.sh build_opt

編譯很考驗電腦性能,這個過程需要很大的耐心,不用管,就讓它自己跑就行了。如果有GPU,但是用GPU跑失敗了,那就用CPU的指令試試,如果編譯成功了,屏幕上會輸出ok。

2.5下載數據包

電腦不是實車,自然沒有數據,所以我們想運行,需要下載一個錄好的數據包

cd docs/demo_guide/
python3 record_helper.py demo_3.5.record

通過這個指令,可以下載一個數據包,但是如果又是像我一樣,網路不好又沒有vpn,然後下載失敗,那就換個解決辦法。(下載失敗,它會輸出一個bad luck,如果成功就不用管後面的)

如果下載失敗看這裡,下載失敗可能是沒下載成功,也有可能是下載一個殘缺的文件,所以大家進入apollo-docs-demo-guide,看一下有沒有一個叫demo_3.5.record的文件,如果存在這個文件,那就說明是下載了一個殘缺文件,所以一定要先把這個文件刪除,否則沒辦法下載新的。

rm demo_3.5.record

然後用這個新指令來下載

wget https://apollo-system.cdn.bcebos.com/dataset/6.0_edu/demo_3.5.record

下載成功後,運行dreamview程式

bash scripts/bootstrap.sh

然後播放演示包

cyber_recorder play -f demo_3.5.record --loop

在瀏覽器中輸入http://localhost:8888,訪問 Apollo Dreamview:

file

屏幕上的車輛可以正常行駛,到這裡,apollo6.0開發版就安裝完啦!可以用ctrl+C終止程式運行。

本文轉自:https://blog.csdn.net/DLL200122/article/details/123681231


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 【軟體構造】Mutable類型與Immutable類型 1.前言 在軟體構造這門課中,對mutable類型和immutable類型的深入理解,有助於後續ADT、可維護性、可復用性的學習,因此我們有必要對其進行詳細的分析說明。 我們首先明確的是,mutable類型和immutable類型均屬於ADT的 ...
  • 眾所周知,收藏就等會學會。我也算是個內容知識收藏愛好者,從PC時代的瀏覽器收藏夾,到移動時代的個APP內置的收藏功能,我一度認為我收藏了就等於我學會了,我Chrome收藏夾現在還有3382個網址,我網盤裡還有560個PDF文件,我雲筆記收藏的1420多個鏈接,我移動硬碟里N多torrent的文件,每 ...
  • 一、描述 最近在批量上傳文件時網關出現了異常,後面發現上傳大文件也會出現文件超過256發生異常,異常信息如下: org.springframework.core.io.buffer.DataBufferLimitException: Exceeded limit on max bytes to bu ...
  • 背景 昨天,咱們的《知識星球:Java技術棧》裡面有粉絲向我提問: 問題大概就是: Spring Boot 定時任務開啟後,怎麼符合條件自動停止? 當時我有空,雖然已經給出了參考答案,但可能還有一些細節地方要註意的,另外,我也覺得這個問題特別有意思,現在特別拿出來整理下,分享下給大家。 1、自定義任 ...
  • 一個工作了 5年的程式員,在私信裡面不斷向我訴苦。 他說,他用了Mybatis這麼久,怎麼滴也算是精通Mybatis了吧。 結果竟然在Mybatis這個面試題上翻車了! 真的好煩! 好吧,我們今天來看看“Mybatis裡面的緩存機制”,普通人和高手的回答。 普通人: 嗯。。。。。。。。。 高手: 這 ...
  • 前言 用過VueRouter路由組件的應該都知道,VueRouter有hash和history兩種模式。hash模式會在url中插入#,history模式下url則看上去更加簡潔美觀。如果想要支持history模式則必須要後端服務進行配合。 常用後端伺服器配置方式請參考 後端配置例子 後端配置例子 ...
  • 1、WebFirst框架描述 WebFirst 是果糖大數據團隊開發的新一代 高性能 代碼生成器&資料庫設計工具,由.net core + sqlsugar 開發 導入1000個表只要1-2秒,用法簡單,功能強大,支持多種資料庫 ,具體功能如下: 一、 建庫、CodeFirst方式線上建表,沒用到C ...
  • 一、docker安裝 centos安裝docker sudo yum update sudo yum install -y yum-utils device-mapper-persistent-data 1vm2 sudo yum-config-manager --add-repo http://m ...
一周排行
    -Advertisement-
    Play Games
  • 前言 本文將以 C# 語言來實現一個簡單的布隆過濾器,為簡化說明,設計得很簡單,僅供學習使用。 感謝@時總百忙之中的指導。 布隆過濾器簡介 布隆過濾器(Bloom filter)是一種特殊的 Hash Table,能夠以較小的存儲空間較快地判斷出數據是否存在。常用於允許一定誤判率的數據過濾及防止緩存 ...
  • 目錄 一.簡介 二.效果演示 三.源碼下載 四.猜你喜歡 零基礎 OpenGL (ES) 學習路線推薦 : OpenGL (ES) 學習目錄 >> OpenGL ES 基礎 零基礎 OpenGL (ES) 學習路線推薦 : OpenGL (ES) 學習目錄 >> OpenGL ES 轉場 零基礎 O ...
  • 「簡單有價值的事情長期堅持做」 這是成功最簡單,但也最難學的秘訣。不經過訓練,人很難意識到時間複利的威力。 仙劍奇俠傳的「十里坡劍神」和金庸群俠傳的「十級野球拳」,就是簡單的事情持之以恆反覆做,最後就有巨大的威力 唐家三少成為網文收入第一,最重要的一步是十四年從未斷日更 這樣的案例很多,一開始可能成 ...
  • 迎面走來了你的面試官,身穿格子衫,挺著啤酒肚,髮際線嚴重後移的中年男子。 手拿泡著枸杞的保溫杯,胳膊夾著MacBook,MacBook上還貼著公司標語:“我愛加班”。 面試開始,直入正題。 面試官: 看你簡歷上面寫著精通MySQL,我先問你事務的特性是什麼? 老生常談,這個還有誰不會背的嗎? 我: ...
  • 基礎知識 python是一門腳本語言,它是解釋執行的。 python使用縮進做為語法,而且python2環境下同一個py文件中不能同時存在tab和空格縮進,否則會出錯,建議在IDE中顯示縮進符。 python在聲明變數時不寫數據類型,可以type(xx)來獲取欄位的類型,然後可以int(),list ...
  • 為什麼要多線程下載 俗話說要以終為始,那麼我們首先要明確多線程下載的目標是什麼,不外乎是為了更快的下載文件。那麼問題來了,多線程下載文件相比於單線程是不是更快? 對於這個問題可以看下圖。 橫坐標是線程數,縱坐標是使用對應線程數下載對應文件時花費的時間,藍橙綠代表下載文件的大小,每個線程下載對應文件2 ...
  • 詳細講解python爬蟲代碼,爬微博搜索結果的博文數據。 爬取欄位: 頁碼、微博id、微博bid、微博作者、發佈時間、微博內容、轉發數、評論數、點贊數。 爬蟲技術: 1、requests 發送請求 2、datetime 時間格式轉換 3、jsonpath 快速解析json數據 4、re 正則表達式提... ...
  • 背景: 一般我們可以用HashMap做本地緩存,但是HashMap功能比較弱,不支持Key過期,不支持數據範圍查找等。故在此實現了一個簡易的本地緩存,取名叫fastmap。 功能: 1.支持數據過期 2.支持等值查找 3.支持範圍查找 4.支持key排序 實現思路: 1.等值查找採用HashMap2 ...
  • 目錄 一.簡介 二.效果演示 三.源碼下載 四.猜你喜歡 零基礎 OpenGL (ES) 學習路線推薦 : OpenGL (ES) 學習目錄 >> OpenGL ES 基礎 零基礎 OpenGL (ES) 學習路線推薦 : OpenGL (ES) 學習目錄 >> OpenGL ES 轉場 零基礎 O ...
  • 本章是系列文章的第八章,用著色演算法進行寄存器的分配過程。 本文中的所有內容來自學習DCC888的學習筆記或者自己理解的整理,如需轉載請註明出處。周榮華@燧原科技 寄存器分配 寄存器分配是為程式處理的值找到存儲位置的問題 這些值可以存放到寄存器,也可以存放在記憶體中 寄存器更快,但數量有限 記憶體很多,但 ...