查看原文
其他

开发者说 | Ubuntu14.04搭建GPU版本的Apollo3.5平台

Apollo社区开发者 Apollo开发者社区 2022-07-29


Ubuntu基于Linux的免费开源桌面PC操作系统,支持x86、64位和ppc架构。


由于Apollo项目是在Docker中运行,因此不能直接在Ubuntu 14.04系统中直接生成核心转储文件并使用GDB对其进行调试,所有的工作必须在Docker中完成


开发者还需要GLFW(图形库框架)3.2及更高版本,它支持EGL和运行时上下文创建API选择。


本文由社区开发者「朗拓科技-杨鸿城」撰写。为大家详细讲述了如何用Ubuntu14.04搭建GPU版本的Apollo3.5平台。


Apollo 3.5 历史版本的跨越式升级,使自动驾驶不光整体提升了驾驶能力和安全性,从而可以“媲美”人类老司机,更为自动驾驶全行业在向全面落地的进发过程中提供了更优质、更全方位的技术支持。Apollo 3.5将继续为开发者们节省造轮子的时间。


希望本文能为开发者们带来更多帮助。


以下,ENJOY



  1. 安装Ubuntu14.04

  2. 安装Git-LFS

  3. 添加SSH密钥(可选)

  4. 下载Apollo镜像

  5. 设置Docker环境

  6. 安装ROS-Indigo(可选)

  7. 安装Apollo预编译的内核

  8. 编译CPU版本的Apollo

  9. 运行Apollo Demo 演示

  10. 编译GPU版本的Apollo(可选)




可参考:

*《安装Windows10,Ubuntu双系统14.04LTS记录》

https://www.cnblogs.com/arcsinw/p/5303615.html 




1.安装Curl


1sudo apt-get update
2sudo apt-get upgrade
3sudo apt-get install curl


2.添加地址


1# Required for Ubuntu 14.04 / 16.04.
2curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | sudo bash


3.安装Git-LFS


1# Ubuntu 14.04 / 16.04 / 18.04.
2sudo apt-get install -y git-lfs


PS:若未安装Git,需先执行 sudo apt-get install git .




写在前面:用SSH方式下载Apollo镜像需要秘钥,用HTTP方式 下载则可以跳过此步骤。


1.首先注册一个GitHub账号


2.参考:

https://blog.csdn.net/qq_34446663/article/details/81106018

或者

https://www.cnblogs.com/qcwblog/p/5709720.html  

添加秘钥


最后实现效果如图:





1.从GitHub源代码下载Apollo源代码并查看正确的分支:


1git lfs clone https://github.com/ApolloAuto/apollo
2cd apollo
3git checkout master
4echo "export APOLLO_HOME=$(pwd)" >> ~/.bashrc && source ~/.bashrc


#文件下载大概1.8G,这里的APOLLO_HOME应该替换为Apollo文件夹所在根目录。



如果你过去安装过其他版本的Docker,先删掉:


1sudo apt-get remove docker docker-engine docker.io


首先安装依赖:


1sudo apt-get install apt-transport-https ca-certificates curl gnupg2 software-properties-common


信任Docker的GPG公钥:


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


对于Amd64架构的计算机,添加软件仓库:


1sudo add-apt-repository \
2 "deb [arch=amd64] https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/ubuntu \
3$(lsb_release -cs) \
4stable"


如果你是树莓派或其它ARM架构计算机,请运行:


1echo "deb [arch=armhf] https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/ubuntu \
2$(lsb_release -cs) stable" | \
3sudo tee /etc/apt/sources.list.d/docker.list


最后安装


1sudo apt-get update
2sudo apt-get install docker-ce


把当前用户加到Docker用户组中:


添加Docker用户组


1sudo groupadd docker


把自己加到Docker用户组中


1sudo gpasswd -a myusername docker


Myusername是指你的用户名


重启Docker后台服务


1sudo service docker restart


切换当前用户到新Group


1newgrp - docker


确认Docker可以非sudo运行


1docker ps




写在前面:Apollo3.5可不用安装Ros,但Apollo很多驱动都是从Ros移植过来的,安装Ros仍有研究价值。


1、执行


1sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu trusty main" > /etc/apt/sources.list.d/ros-latest.list'


2、执行


1wget http://packages.ros.org/ros.key -O - | sudo apt-key add -  


3、更新源


1sudo apt-get update 


4、安装ros-indigo-desktop-full


1sudo apt-get install ros-indigo-desktop-full 


大概需要半个小时左右


5、执行代码初始化ROS


1sudo rosdep init 


若提示Rosdep update 则执行Rosdep update


6、设置环境变量


1echo "source /opt/ros/indigo/setup.bash" >> ~/.bashrc  
2source ~/.bashrc  


以上的这个设置是永久性的,不需要每次打开一个终端都需要进行一次设置。到此ROS安装完成,终端执行Roscore进行测试即可。


7、下载Apollo-Platform并解压:

https://github.com/ApolloAuto/apollo-platform/releases


将文件夹中的Ros拷贝到Apollo工程中:



1rsync -av ros/ ~/apollo/third_party/ros_x86_64
2cd apollo
3source ./third_party/ros_x86_64/setup.bash



*注:如果只是用于「学习研究」用途可以不安装「内核」,用于「真实驾驶」则必须安装「内核」。



写在前面:在安装Apollo内核之前先卸载 NVIDIA显卡驱动(参考编译GPU版本的Apollo(可选)第1步),因为Apollo内核是实时系统,而默认安装的NVIDIA驱动内核不支持实时系统(会造成循环登录),如果只是用于学习研究用途可以不安装内核,用于真实驾驶则必须安装内核。


安装Apollo内核后,再安装NVIDIA 驱动时必须加上 --no-kernel-module 参数(参考编译GPU版本的Apollo(可选)第6步)。


1.从GitHub上的发布部分下载发行包:

https://github.com/ApolloAuto/apollo-kernel/releases 


2.下载发布包后安装内核:


1tar zxvf linux-4.4.32-apollo-1.5.0.tar.gz
2cd install
3sudo bash install_kernel.sh
4sudo reboot




1.设置Docker环境


1cd apollo
2bash docker/scripts/dev_start.sh -C #-C表示从中国镜像服务器下载,速度较快
3bash docker/scripts/dev_into.sh


2.编译Apollo


1bash apollo.sh build  #若提示权限不足,则sudo su


3.启动人机交互界面(HMI)


1bash scripts/bootstrap.sh


打开Chrome浏览器,输入地址“localhost:8888”即可访问Dreamview。




参考:

https://github.com/ApolloAuto/apollo/blob/master/docs/demo_guide/README.md 


或者


在Docker中执行


1bash scripts/bootstrap.sh
2python docs/demo_guide/rosbag_helper.py demo_3.5.bag
cyber_recorder play -f docs/demo_guide/demo_3.5.record --loop

顺利执行后,打开网页localhost:8888,便可以看到小车运动起来。效果如图:





这一步官方教程写得较为简略,故安装容易出错。


1.由于官方推荐安装NVIDIA-375版本的驱动,故先卸载原有驱动。


1sudo apt-get --purge remove nvidia-*
2sudo apt-get autoremove


若之前禁用了Nouveau,需要重新启用Nouveau,在Blacklist中将Nouveau注释掉。


1sudo gedit /etc/modprobe.d/blacklist.conf
2sudo update-initramfs -u
3sudo reboot


开机后要确保NVIDIA驱动已经被删掉了,进入了低分辨率显示。


可用lsmod | grep nouveau检查Nouveau 是否正在运行。


2.在apollo/docker/scripts 目录中,有一个dev_start.sh 文件,大概在它的305行加入两条语句:


1        -v /usr/src:/usr/src \
2        -v /lib/modules:/lib/modules \


效果如图:



3.安装NVIDIA驱动有Ppa、Run和Deb三种方式,本文推荐Ppa安装,简单且不容易出错。


写在前面,首先在NVIDIA官网上确定自己显卡可以安装的驱动版本,如RTX2080显卡只能安装410以上驱动。


a. 在主机里安装NVIDIA驱动


1sudo add-apt-repository ppa:graphics-drivers/ppa
2sudo apt search nvidia-384
3sudo apt-get install nvidia-384


b. 在Docker中安装NVIDIA驱动


1sudo add-apt-repository ppa:graphics-drivers/ppa
2sudo apt search nvidia-384
3sudo apt-get install nvidia-384


注意:Docker中NVIDIA驱动和主机中NVIDIA驱动的细分版本号(如384.130)必须保持完全一致,否则安装失败。


成功安装NVIDIA驱动后,需要重新禁用nouveau


注意:通过ppa成功安装NVIDIA驱动后,不用再执行第4-8点步骤。


4.这是官方推荐用run文件安装驱动的方式:若按第3点已经成功安装驱动,则不用执行4-8点步骤。


下载官方Nvidia驱动程序安装文件,Apollo官方推荐375.39的版本


1wget http://us.download.nvidia.com/XFree86/Linux-x86_64/375.39/NVIDIA-Linux-x86_64-375.39.run


下载后默认放在/apollo 目录下。


5.在终端命令行中打开启动Docker:


按住CTRL+ALT+F1进入终端命令行 ,输入用户名和密码登录。


这一步会进入不带图形界面的命令行,在关闭图形界面前,可以按CTRL+ALT+F7 在图形界面间来回切换。


在F1的命令行中执行:


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


若第三步报错,则执行docker exec -it apollo_dev_username /bin/bash ,这里的Username指你的用户名。


PS:在命令行中启动Docker是为了后面关闭 图形界面。


6.在F1的命令行Docker中安装NVIDIA驱动程序,这一步是重中之重,很容易出错,必须按照以下顺序一步一步进行。


1source /apollo/scripts/install_gcc.sh
2ln -s /usr/bin/cc /usr/bin/cc1
3chmod +x ./NVIDIA-Linux-x86_64-375.39.run
4sudo ./NVIDIA-Linux-x86_64-375.39.run --no-opengl-files -a -s --no-kernel-module
5source /apollo/scripts/recover_gcc.sh
6rm /usr/bin/cc1


a. Apollo自带gcc为4.8.4版本,而安装NVIDIA驱动需要gcc4.9版本,故先执行 install_gcc.sh 安装gcc4.9


安装完驱动后需切换回4.8.4版本,故执行recover_gcc.sh 删掉 gcc 4.9


b. --no-opengl-files 这个参数非常非常重要,安装时必须加上。


c. 在执行NVIDIA安装程序时应该会出现

‘’ X.Org X server is running ‘’ 之类的错误提示,出现之后说明我们需要关闭 图形界面。


1sudo service lightdm stop


执行之后再按CTRL+ALT+F7 应该看不到图形界面了。若在F1 的docker中关不掉图形界面,可按CTRL+ALT+F2 后再关闭图形界面。


d. 如果在执行NVIDIA安装程序时出现‘‘An NVIDIA kernel module ‘nvidia-drm’ appears to already be loaded in your kernel.’’ 之类的提示,说明之前NVIDIA驱动未卸载干净。


e. 关闭掉图形界面之后,再执行


1sudo ./NVIDIA-Linux-x86_64-375.39.run --no-opengl-files -a -s --no-kernel-module


可以在Docker中成功安装驱动。


安装完成可用


1whereis nvidia


检查是否安装成功。


1nvidia: /usr/src/nvidia-375.39/nvidia     /usr/share/nvidia


若显示有这两个目录则安装成功,否则失败。


7.确保成功完成以上每个步骤之后,再在主机中安装NVIDIA 驱动。打开一个新终端:


1cd apollo
2sudo ./NVIDIA-Linux-x86_64-375.39.run --no-opengl-files -a -s --no-kernel-module


8.安装好NVIDIA驱动后,执行


1sudo service lightdm start


可重新启动图形界面。


9.在Docker中安装好NVIDIA驱动后,千万不能关闭正在运行的Docker,否则刚做的改动全部没有保存。


此时在主机中新打开一个终端,执行:


1docker ps    #查看正在运行的docker
2docker images   #查看主机上的镜像文件



此时我们需要将刚刚改动过的Docker,保存为新的镜像文件


1docker commit CONTAINER_ID apolloauto/apollo:NEW_DOCKER_IMAGE_TAG


其中,CONTAINER_IDdocker ps查看到的第二行第一列信息,NEW_DOCKER_IMAGE_TAG 为我们自定义保存新镜像的名称 ,对应于Docker Images 的第二行第二列信息。


我们按照它的命名规则对新TAG进行命名,以笔者为例,正在运行Docker的TAG 为 dev-x86_64-20181216_1500 ,命名为dev-x86_64-20181217_1500,执行


1docker commit e5dfeb8a0b2f apolloauto/apollo:dev-x86_64-20181217_1500


则将刚刚的改动保存为新的镜像文件,可通过Docker Images 查看新的镜像文件。


在主机与Docker中均成功安装NVIDIA驱动后,重启Ubuntu。


10.新打开一个终端,进入刚刚保存的新镜像:


1cd apollo
2/docker/scripts/dev_start.sh -l -t NEW_DOCKER_IMAGE_TAG
3./docker/scripts/dev_into.sh


其中,NEW_DOCKER_IMAGE_TAG为 刚刚为新镜像取的名称。



若启动Docker过程中 若出现NVIDIA Not Found 等提示,则说明主机NVIDIA驱动未成功安装。


11.在新镜像中使用GPU选项构建Apollo


在正式Build之前,可用几条指令检查环境是否齐备:


1whereis nvidia
2cat /usr/local/cuda/version.txt
3dpkg -l | grep libcudnn7
4cat /usr/include/cudnn.h | grep CUDNN_MAJOR -A 2


在主机的终端中执行nvidia-smi 确认驱动是否正确安装。


若所有条件均已达成,则开始编译:


1./apollo.sh build_gpu


若第一次使用GPU编译,需要等待较久的时间。



13.编译完成后,可执行一个Demo检查是否成功编译GPU版本的APOLLO。


1./bazel-bin/modules/perception/camera/test/camera_lib_obstacle_detector_yolo_region_output_test


若出现

error while loading shared libraries: libcuda.so.1: cannot open shared object file: No such file or directory ,之类的错误提示,则说明Docker 或者主机的NVIDIA驱动未正确安装。


或者直接运行所有测试


1./apollo.sh test



如果出现PASSED,恭喜你已经成功编译GPU版本的APOLLO!



* 以上内容为开发者原创,不代表百度官方言论。

   已获开发者授权,原文地址请戳阅读原文。


主要参考文档:

*《百度Apollo平台搭建步骤详解 》

https://blog.csdn.net/qq_34906391/article/details/81478968 


*《官方Apollo软件安装教程》

https://github.com/ApolloAuto/apollo/blob/94c9fa5043f80e36ea28ee4c66a657ab0e3aa291/docs/quickstart/apollo_software_installation_guide.md#download-apollo-source 


*《如何在Ubuntu 16中运行Apollo》

https://github.com/ApolloAuto/apollo/blob/master/docs/howto/how_to_run_apollo_2.5_with_ubuntu16.md 


*《阿波罗安装NVIDIA驱动和Cudnn》(CUDA默认已安装)

https://github.com/ApolloAuto/apollo/blob/master/docs/howto/how_to_run_perception_module_on_your_local_computer.md 








您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存