最近几天尝试安装了一下apollo2.5框架,现在做一个简单的教程记录以便他人参考和自己以后查看。
一、安装apollo
1.从github官网上搜索进入apolloauto/apollo的主页,下方会有一个安装步骤,如下图
为了方便起见,我把以上前两步里面的主要内容分步写在下方了
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
sudo chmod 777 /var/run/docker.sock
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.run
sudo ./NVIDIA-Linux-x86_64-384.111.run
安装好,reboot重启,发现分辨率变好了,说明主机的驱动也装好了,这个时候可以用nvidia-smi
查看主机安装的版本号,并且
可以用whereis nvidia
看到有两个目录都是384.111的,说明两个驱动都安装成功了。此时可以进入装有驱动的new0515镜像里测试一下了。
注2019.7.9更新 如果没安装成功,再尝试一下先禁用nouveau之后再装主机的GPU显卡,无非就是这两种,目的就是卸载或禁用掉当前显卡。
`
安装成功后,在终端里运行
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是其中的数据记录和回放工具。用该命令可以开始回放:
source /apollo/bazel-apollo/external/ros/setup.bash
rosbag play -l ./docs/demo_guide/demo_2.0.bag
从刚才启动的Dreamview中即可看到回放的数据的图像化输出了
再同时运行scripts/diagnostics.sh
命令可以看到rosbag监控到的数据更新。
参考文献:
1.自动驾驶平台Apollo 2.5环境搭建
https://blog.csdn.net/jinzhuojun/article/details/80210180
2.Ubuntu14.04搭建GPU版本的百度Apollo3.5自动驾驶平台 https://blog.csdn.net/weixin_43426627/article/details/85010481#GPUApollo_103
3.自动驾驶平台Apollo 2.5环境搭建 https://blog.csdn.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
6.Ubuntu禁用nouveau驱动 https://blog.csdn.net/qq805934132/article/details/82909759