编译apollo实践

摘要:
在上一节中,我主要参考手册来教您如何运行apollo,但本文中的apollo版本太低。稍后,我们将主要查看官方文档,这些文档可以通过Typhora在官方apollo/docs目录中找到。小型计算机不能切割成具有大磁盘空间的虚拟机。Apollo应该安装在单独的机器上,您需要查看Apollo的官方文档,以了解编译器和运行模拟的机器的配置要求。Docker只是一个aptinstall Docker/bin/bashexportPATH=`pwd`/host:$PATHexportPATH=` pwd`/docs/demo_guide:`pwd`/autobin/bin/cyber/tools/cyber_recorder:$PATHexportLD_LIBRARY_PATH=`pwd'/host:=$LD_LLIBRARY_PAH.proxy。sh实际的ifconfig显示该地址与主机的IP地址完全相同。

前面主要参考 手把手教你运行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 thedropdown 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界面,可以发现小车在循环地跑。

免责声明:文章转载自《编译apollo实践》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Linux下查看日志用到的常用命令(一)视频监控存储空间大小与传输带宽计算方法下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

生产环境项目问题记录系列(二):Docker打包镜像Nuget包因权限问题还原失败

docker打包镜像遇到一个因为nuget权限验证问题导致镜像打包失败的问题,公司Nuget包用的是tfs管理的,tfs有权限验证,结果导致nuget还原失败,原有的NuGet.config文件如下: <?xml version="1.0" encoding="utf-8"?> <configuration> <sol...

HTTP接口抓包工具之Fiddler

Fiddler的基本功能介绍: Fiddler是最强大最好用的Web调试工具之一,它能记录所有客户端和服务器的http和https请求,允许你监视,设置断点,甚至修改输入输出数据,Fiddler包含了一个强大的基于时间脚本的子系统,并且能使用.NET语言进行扩展。对HTTP协议越了解,就能越掌握Fiddler的使用方法。越使用Fiddler,就越能帮助了解...

php windows环境 安装 Apache-apollo + phpMQTT 实现发送 MQTT

首先安装Apache-apollo 原文链接:http://blog.csdn.net/marrn/article/details/71141122?utm_source=itdadao&utm_medium=referral 1.首先从http://activemq.apache.org/apollo/download.html官网上下载wind...

Linux 安装SonarQube

            1、在安装SonarQube 之前需要先了解一下它是做什么的   SonarQube助力于让所有开发人员编写更干净、更安全的代码   SonarQube是一个用于管理代码质量的开放平台,可以快速的定位代码中潜在的或者明显的错误。目前支持Java,C#,C/C++,Python,PL/SQL,Cobol,JavaScrip,Groov...

jimdb压测踩坑记

本文记录在jimdb压测过程中遇到的各种小坑,望能够抛砖引玉。 1.压测流量起来后,过了5分钟左右,发现ops突降,大概降了三分之一,然后稳定了下来 大概原因:此种情况,jimdb极有可能某个分片的连接数打满,从而导致分片的cpu达到100%。 调优方案:首先,默认分片连接数为1w,此时可以根据自己的需求,如果自己的docker数量很少,可以调整成2...

apache转发规则 + nginx location 正则匹配经典案例

0.apache的proxypass浏览器url不会变 我们想要的效果是请求http://qwyimg.haha.com.cn/......直接返回结果,而不是请求http://qwyimg.haha.com.cn/......返回一个地址,在通过这个返回的地址在去请求拿到结果 ProxyPass "/qiqiao/storage/oss/files/"...