Ubuntu16.04安装apollo2.5(GPU版本)

时间:2024-05-21 21:32:39

最近几天尝试安装了一下apollo2.5框架,现在做一个简单的教程记录以便他人参考和自己以后查看。

一、安装apollo
1.从github官网上搜索进入apolloauto/apollo的主页,下方会有一个安装步骤,如下图
Ubuntu16.04安装apollo2.5(GPU版本)
为了方便起见,我把以上前两步里面的主要内容分步写在下方了
1.1 拉取github源码

git clone --branch v2.5.0 https://github.com/ApolloAuto/apollo.git

拉取之后会有一个apollo文件夹在home下,为了方便可以把这个文件夹存到硬盘,以便下次安装直接拷贝。
1.2 安装docker
安装社区版docker ce,步骤如下:

 sudo apt-get remove docker docker-engine docker.io containerd runc
 sudo apt-get update
 
 sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg-agent \
    software-properties-common

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo apt-key fingerprint 0EBFCD88

sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"
   
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io

在此之后还需要安装Git LFS,这个是一个git对大文件的扩展支持

curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | sudo bash

sudo apt-get install -y git-lfs

至此,在终端内输入docker images应该就可以看到一个没有内容的docker镜像表格,但是里面是没有内容的,因为我们还没有拉取所需要的镜像。
1.3 拉取所需要的镜像文件
因为apollo2.5是2018年版本的框架了,所以我一开始担心直接用github的指令会拉取比较新的镜像不配套,但是后来发现并不是,只要进入了2.5版本的apollo文件夹下,拉取的就是2.5的镜像。

cd apollo
bash docker/scripts/dev_start.sh

会拉取几个镜像并启动container,(这里关于镜像docker和容器container机制的可以百度了解以下),运行结束后再用docker images指令可以看到以下

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

PS:其实每一个images也可以用docker pull [apolloauto/apollo:TAG_NAME]单独拉取。稍后我们要进入的container就是dev-x86_64-20180413_2000那个image创建的container(名为apollo_dev)。

若果到此继续进行进入container中进行编译和运行就可以看到CPU版本的效果,但是我们要装GPU版本的,所以继续进行更重要的GPU驱动的安装环节。

二、安装主机host和容器container内的GPU驱动

最终目标是在主机和容器中都安装同一个版本的显卡驱动,比如主机的是384.111,容器内就必须是384.111,这样才能调用起容器内置的CUDA8.0。根据网上的教程,显卡驱动的安装方式主要分为两类,一类是用指令sudo apt-get install nvidia-xxx安装,另一种是传统的运行NVIDIA-xxx.run文件的方式安装。
为了安全起见,避免已经有的显卡导致安装失败,我安装的时候都先卸载了外部显卡(或者禁用nouveau)再进入ctrl+alt+F1界面的方式安装。如果容器里外都用指令sudo apt-get安装,一般最后安装的版本对应的384.xxx里面的xxx不一致,比如384.130和384.111,所以我先在容器里用指令安装,查看用指令安装好的具体的版本号后再从外部用运行NVIDIA.run的方式安装与之对应版本的显卡。
2.1卸载当前显卡

sudo apt-get --purge remove nvidia-*
sudo apt-get autoremove
reboot

重启之后会看到桌面分辨率变小了,就是显卡卸载成功了,连好网,接下来按进入ctrl+alt+F1进入黑色终端界面,输入用户名和密码登录,此时再按ctrl+alt+F7还可以切换回桌面。进入F1界面,再输入sudo service lightdm stop禁用桌面,此时已经不能切换回桌面了,除非sudo service lightdm start打开桌面,再F7。

2.2进入容器内部安装
然后尝试从这里F1界面进入apollo_dev容器

cd apollo
./docker/scripts/dev_start.sh
docker exec -it apollo_dev /bin/bash

进入后运行指令安装驱动

sudo apt-get install nvidia-384

结束后用whereis nvidia指令可以看到已经有一个384.111文件夹,说明docker里面装好了驱动,下一步不要着急关闭页面,一定要先把改动后的容器另存为新的容器,不然下次打开就失效了,用ctrl+alt+F2打开另一个终端,登录后,用docker ps指令或其他指令查看当前运行的container的ID,类似1d807ccec91这种一串字符,然后进行另存为新的container,我这里另存为名为new0515的镜像

docker commit 1d807ccec91 apolloauto/apollo:new0515

保存后再运行docker images或者docker ps应该会看到有新的镜像,重启计算机reboot

2.3在主机上安装GPU驱动
容器内的驱动装好了,但是主机还需要再装一个,原则上说用指令也可以装一个384的驱动,但是装好的不一定是和容器内同样的版本384.111,因此在主机上我使用NVIDIA.run文件安装。
原则上在主机上只安装GPU驱动就可以,不用装CUDA,但是我参考了一个百度步道师贺博士的博客,把主机的GPU驱动和CUDA都安装了,再卸载教程里的驱动,重新安装我要的384.111驱动。
这里把我单独安装384.111驱动的步骤讲一下:
首先进入NVIDIA驱动官网,下载我要的驱动.run文件,放在home目录下。
跟2.1步骤一样,进入F1界面登录,并禁用桌面sudo service lightdm stop,然后运行

sudo chmod +x NVIDIA-Linux-x86_64-384.111
sudo ./NVIDIA-Linux-x86_64-384.111

安装好,reboot重启,发现分辨率变好了,说明主机的驱动也装好了,这个时候可以用nvidia-smi查看主机安装的版本号,并且
可以用whereis nvidia看到有两个目录都是384.111的,说明两个驱动都安装成功了。此时可以进入装有驱动的new0515镜像里测试一下了。
在终端里运行

cd apollo
/docker/scripts/dev_start.sh -l -t new0515
./docker/scripts/dev_into.sh

上面的new0515换成你存的新镜像的ID

三、测试容器中安装好的GPU
这个测试方法参考的是这个博客
在container中进入/usr/local/cuda/samples/1_Utilities/deviceQuery目录,执行:

sudo make
sudo ./deviceQuery

如果看到GPU和CUDA信息了,说明OK了,还不放心的话在samples里可以再试试其他demo。

四、编译运行apollo
1.在新镜像中编译apollo

cd apollo
./apollo.sh build_gpu

第一次编译可能会比较久,编译好之后可以进入aplllo,并打开DREAMVIEW可视化工具

bash scripts/bootstrap.sh

正常情况下可以看到“Dreamview is running at http://localhost:8888”的输出,然后用浏览器打开http://localhost:8888 应该就能看到界面了。可以多刷新几次浏览器。
2.运行一个rosbag测试
因为apollo2.5是基于ros操作系统的,测试rosbag之前还需要安装ros,安装方法不详解了。
我们按官方文档先跑下demo。先下载回放数据包:

sudo bash docs/demo_guide/rosbag_helper.sh download

下载完成后,回放数据位于docs/demo_guide目录下。Apollo基于ROS,而rosbag是其中的数据记录和回放工具。用该命令可以开始回放:

rosbag play -l ./docs/demo_guide/demo_2.0.bag

从刚才启动的Dreamview中即可看到回放的数据的图像化输出了

Ubuntu16.04安装apollo2.5(GPU版本)再同时运行scripts/diagnostics.sh命令可以看到rosbag监控到的数据更新。

Ubuntu16.04安装apollo2.5(GPU版本)

参考文献:
1.自动驾驶平台Apollo 2.5环境搭建
https://blog.****.net/jinzhuojun/article/details/80210180
2.Ubuntu14.04搭建GPU版本的百度Apollo3.5自动驾驶平台 https://blog.****.net/weixin_43426627/article/details/85010481#GPUApollo_103
3.自动驾驶平台Apollo 2.5环境搭建 https://blog.****.net/jinzhuojun/article/details/80210180
4.开发者说 | 为Apollo项目安装NVIDI
A显卡驱动的有效方法 https://mp.weixin.qq.com/s?__biz=MzI1NjkxOTMyNQ==&mid=2247486296&idx=1&sn=50072f4564c8922224def8019f762bca&scene=19#wechat_redirect
5.apollo github开源资料
https://github.com/ApolloAuto/apollo