编译apollo实践
2021-07-15 12:27 tangxiaosheng 阅读(1916) 评论(0) 编辑 收藏 举报前面主要参考 手把手教你运行apollo,但这个文章里的apollo版本太低。后面主要看官方文档,在官方的apollo/docs目录下,通过typora去看。
sudo snap install typora
以前在别的公司可以通过sublime的插件去看,但这次安装了sublieme件,却没有效果。
准备工作
aria2c <ubuntu link>
这样比你用浏览器的下载工具下载要快,如果中间断了,可以加选项“-c”来下载。
老板事先给了个虚拟机,他自己下载到了centos虚拟机了,说4个多G,但应该在ubuntu下编译。我没有对这个有足够的重视,直接在分给我的虚拟机(小型机上)下准备环境。实际现在来看是个很大的错误。小型机没法切割成拥有很大磁盘空间的虚拟机,apollo应该安装到单独的机器上,并且需要看apollo官方文档,看看对编译机子和跑仿真的机器的配置要求。
结合网上的一些资料,很多建议选择有4G显存和支持avx2的cpu。拥有4G显存的nvidia显卡,网上看了看报价,新显卡普遍3K以上,只有一个二手的nvidia显卡,700元。只有nvidia的显卡才对cuda有挺好的支持。
本来想尝试不在docker下编译,结果失败。docker仅仅是apt install docker是不行的。需要参考说明文档。
安装显卡驱动的时候,建议我安装470版本,实际安装后,发现分辨率变得很大没法调整,是840x640,机器没法用。进入到/etc/default/grub下制定1024x768分辨率,这里面指定更高的分辨率没有用。
安装Nvidia
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 sudo systemctl restart docker
从nvidia.github.io下载困难的话,可以考虑kx上网,还不行,
sudo apt install uget -y
用uget这个图形工具下载。
# 使用 SSH 的方式 git clone git@github.com:ApolloAuto/apollo.git # 使用 HTTPS 的方式 git clone https://github.com/ApolloAuto/apollo.git
切换到master分支
cd apollo
git checkout master
echo "export APOLLO_ROOT_DIR=$(pwd)" >> ~/.bashrc && source ~/.bashrc
启动和进入docker容器,编译
bash docker/scripts/dev_start.sh bash docker/scripts/dev_into.sh
为了在docker里能运行ping,ifconfig命令,我在$APOLLO_ROOT_DIR目录下新建目录/lib/x86_64-linux-gnu/libidn.so.11* 和 /lib/x86_64-linux-gnu/libcap.so.2* 拷贝到 host下,并且把原先/usr/local/bin的proxy.sh也拷贝过来:
#!/bin/bash
httpHost=127.0.0.1:7890
export http_proxy=http://$httpHost
export https_proxy=https://$httpHost
export ALL_PROXY=socks5://127.0.0.1:7891
在$APOLLO_ROOT_DIR下运行 host/env.sh,其内容是:
#!/bin/bash export PATH=`pwd`/host:$PATH export PATH=`pwd`/docs/demo_guide:`pwd`/autobin/bin/cyber/tools/cyber_recorder:$PATH export LD_LIBRARY_PATH=`pwd`/host:$LD_LIBRARY_PATH . proxy.sh
实际ifconfig,发现地址和宿主机的ip地址完全一样。说明实际不copy ifconfig和ping命令应该也没事。
proxy.sh是设置全局代理,我运行的是clash(linux版)。
构建apollo
./apollo.sh build
进行优化模式的构建
./apollo.sh build_opt
If no GPU is availabe, please run "./apollo.sh build_opt" instead.
./apollo.sh build_opt_gpu
build过程中碰到错误:
如果是下载超时的错误,重新尝试下,或者换速率更高的代理。
另一个错误是 _mm256_min_epi16 或者 _mm256_max_epi16 编译错误。通过https://software.intel.com/sites/landingpage/IntrinsicsGuide/#expand=3828,301,2553,另外 cat /proc/cpuinfo|grep flags,可以知道 cpu不支持 avx2指令。这两个都是avx2指令。
进入到modules/drivers/camera中修改CMakeLists.txt,
把 -mavx 修改为-mavx2。 然后注意要把./cache里和camera相关的已经编译出来的东西给删了。
我曾经这样修改过,但编译还是报错,估计就是没有删中间文件的原因。
# Startup modules monitor and dreamview, the default option is start. ./scripts/bootstrap.sh [start | stop | restart]
访问
# You need to download the demo record using the following commands cd docs/demo_guide/ python3 record_helper.py demo_3.5.record # You can now replay this demo "record" in a loop with the '-l' flag cyber_recorder play -f docs/demo_guide/demo_3.5.record -l
现在你看web界面,可以发现小车在循环地跑。