编译apollo实践

前面主要参考 手把手教你运行apollo,但这个文章里的apollo版本太低。后面主要看官方文档,在官方的apollo/docs目录下,通过typora去看。

sudo snap install typora

以前在别的公司可以通过sublime的插件去看,但这次安装了sublieme件,却没有效果。

准备工作

安装 Ubuntu 18.04.5 LTS (Bionic Beaver).

下载iso,可以先下载aria2工具,然后命令行用

aria2c  <ubuntu link>

这样比你用浏览器的下载工具下载要快,如果中间断了,可以加选项“-c”来下载。

google如何制作U盘启动盘,我选择rufus制作启动盘。

老板事先给了个虚拟机,他自己下载到了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这个图形工具下载。

下载Apollo源文件

# 使用 SSH 的方式
git clone git@github.com:ApolloAuto/apollo.git

# 使用 HTTPS 的方式
git clone https://github.com/ApolloAuto/apollo.git

切换到master分支

cd apollo
git checkout master

(可选)为方便起见,可以在Apollo的根目录运行以下命令来设置指向该目录的环境变量APOLLO_ROOT_DIR

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相关的已经编译出来的东西给删了。

我曾经这样修改过,但编译还是报错,估计就是没有删中间文件的原因。

启动并运行Apollo

# Startup modules monitor and dreamview, the default option is start.
./scripts/bootstrap.sh [start | stop | restart]

访问Dreamview Web UI

浏览器中访问http://localhost:8888,From the dropdown box of Mode Setup, select "Mkz Standard Debug" mode. From the dropdown box of Map, select "Sunnyvale with Two Offices".

重放 Demo Record

为了能够利用已经编译出来的.cache/bazel/540135163923dd7d5820f3ee4b306b32/execroot/apollo/bazel-out/k8-fastbuild/bin,我把这个目录拷贝到$APOLLO_ROOT_DIR,重命名为autobin。但是发现这个目录有5.7个G,感觉可能也用不着拷贝,只需要拷贝cache/bazel/540135163923dd7d5820f3ee4b306b32/execroot/apollo/bazel-out/k8-fastbuild/bin/cyber/tools/cyber_recorder,只有44M。build完后,想找个install命令,没找到。前面运行host/env.sh时已经把路径设好了。

To see if the system works, use the demo record to "feed" the system.

# 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界面,可以发现小车在循环地跑。

原文地址:https://www.cnblogs.com/tangxiaosheng/p/15014947.html