orin下一文带你构建Apollo9.0运行环境(基于天准orin避坑版)

前言

书接上文,笔者历经重重磨难之后终于在x86上成功将apollo部署成功后,又需要在orin上部署apollo,本以为直接移植过来就行,然而非也,又是一段痛苦且难忘的时光,现在终于可以在orin上成功部署apollo,现在分享给诸位道友们,愿诸位少走点弯路,快速的进入到apollo的世界

准备

  • 一台已经安装ubuntu系统的orin设备(Ubuntu系统的版本可以参考Apollo官方文档里面的配置表适配安装,orin原装的是Ubuntu20.04)

安装基础软件

1.安装Docker19.03+

  • 查看本机当前的docker版本
docker version

查询docker版本

  • 安装docker(如果已有docker且版本 > 19.03请忽略,否则需重新安装(如果docker版本小于19.03,则需先卸载当前版本再重新安装))
sudo apt-get update
sudo apt-get install docker.io
  • 安装完成之后可以通过下述命令查看是否安装成功
docker version

docker安装成功

  • docker配置
sudo systemctl start docker
sudo systemctl enable docker

通过上述命令对docker进行配置

安装Nvidia驱动

  • 打开Ubuntu自带的软件更新界面
  • 选择合适的显卡驱动安装显卡驱动(第一个即可)
    安装驱动

安装配置Nvidia container toolkit

  • 安装Nvidia container toolkit
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
  • 确认Nvidia container toolkit是否安装成功:检测出版本号即为安装成功
    检测nvidia container toolkit 是否安装成功
  • 重启docker
sudo systemctl restart docker

下载Apollo源码(笔者下载的是releases下9.0.0版本,大家可以参考)

  • 执行以下命令克隆 Apollo 源码
# SSH 方式
git clone git@github.com:ApolloAuto/apollo.git
 
# HTTPS 方式
git clone https://github.com/ApolloAuto/apollo.git
  • 切换到最新分支:
cd apollo
git checkout master
git branch -a
  • 切换到最新分支:
cd apollo
git checkout master
git branch -a

切换分支
如上图所示*号在master前面即表示当前已切换到master分支

编译Apollo9.0

下载资源包 (基于天准orin)

链接: https://pan.baidu.com/s/1kfgsXVGjOsMGlDeN-RleHQ

提取码: hicu

使用上述链接下载资源包

启动Apollo环境容器(基于天准orin)

  • 更换docker/scripts/dev_start.sh文件(非40系显卡可以忽略)
    更换刚才所下载的资源包里面的dev_start.sh
    替换dev_start.sh
  • 更换scripts/apollo_base.sh文件
    更换刚才所下载的资源包里面的apollo_base.sh
    替换apollo_base.sh
  • 更换scripts/apollo.bashrc文件
    更换刚才所下载的资源包里面的apollo.bashrc
    替换apollo.bashrc
  • 更换docker源
    修改/etc/docker/daemon.json文件:添加以下源
"registry-mirrors": ["https://dockerproxy.cn"]

更换docker源
然后再执行下面命令

sudo systemctl daemon-reload
sudo systemctl restart docker
sudo systemctl enable docker
  • 在 apollo 目录下输入以下命令来启动环境容器
bash docker/scripts/dev_start.sh

操作成功后将会有如下提示输出
启动环境容器成功

进入Apollo环境容器

  • 执行如下的命令进入到apollo容器
bash docker/scripts/dev_into.sh

在这里插入图片描述
如上图所示即为成功进入Apollo环境容器

编译

  • 在容器内的 /apollo 目录下输出以下命令编译整个工程
./apollo.sh build

编译成功
出现如上图所示即为编译成功

编译过程中可能出现的问题

出现Socket closed导致编译未完成

14, error message: 'Socket closed', log file: '/apollo/.cache/bazel/540135163923dd7d5820f3ee4b306b32/server/jvm.out')
  • 解决方案
    这是硬件资源耗尽导致OOM,可以自行修改脚本来控制编译使用的硬件资源:
    在scripts/apollo_base.sh中第755和757行做如下修改,然后重新编译
--jobs=${count} --local_ram_resources=HOST_RAM*0.7"

改为

--jobs=2 --local_ram_resources=HOST_RAM*0.5"

如下图所示
bug解决

出现c++: error: unrecognized command line option ‘-mavx2’ c++: error: unrecognized command line option ‘-mfma’导致编译失败

  • 问题原因:
    天准GEACX1-Orin设备是基于aarch64架构的,aarch64上不支持-mavx2以及-mavx2的配置选项

  • 解决方案:

    • 1.打开apollo/scripts/apollo_base.sh
    • 2.找到job_args=“–copt=-mavx2 --host_copt=-mavx2 --jobs=${count} --local_ram_resources=HOST_RAM*0.7”
    • 3.将2修改成如下
  if [[ $(uname -m) == "x86_64" ]]; then
    job_args="--copt=-mavx2 --host_copt=-mavx2 --jobs=${count} --local_ram_resources=HOST_RAM*0.7"
  else
    job_args="--copt=-march=native --host_copt=-march=native --jobs=${count} --local_ram_resources=HOST_RAM*0.7  --copt=-fPIC --host_copt=-fPIC"
  fi
    • 4.进入docker
    • 5.重新编译

出现WARNING: The requested image’s platform (linux/amd64) does not match the detected host platform (linux/arm64/v8) and no specific platform was requested88c842dcbb5249485ddeb48ececb1c502aa0a4484ba4d4f401be48b0038a4

  • 问题原因:
    主机平台(linux/arm64/v8)与请求的镜像平台不一致,执行‘docker build -t kubia .’命令默认(linux/amd64)cpu;
  • 解决方案:
    • 1.打开docker/scripts/dev_start.sh
    • 2.找到docker run --rm --privileged multiarch/qemu-user-static --reset -p yes -c yes > /dev/null 和 docker run -v “ v o l u m e " : " {volume}":" volume":"{path}” --rm “${image}” true > /dev/null
    • 3.将2修改成如下
docker run --platform linux/arm64/v8 --rm --privileged multiarch/qemu-user-static --reset -p yes -c yes > /dev/null
docker run --platform linux/arm64/v8 -v "${volume}":"${path}" --rm "${image}" true > /dev/null
    • 4.进入docker
    • 5.重新编译

总结

以上就是笔者在天准orin上的踩坑避坑经验之享,愿能帮到诸位道友!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值