X86下一文带你构建Apollo9.0运行环境(基于Ubuntu20.04避坑版)

X86下一文带你构建Apollo9.0运行环境基于Ubuntu20.04避坑版

  • 前言
  • 准备
  • 安装基础软件
    • 1.安装Docker19.03+
    • 安装Nvidia驱动
    • 安装配置Nvidia container toolkit
  • 下载Apollo源码(笔者下载的是releases下9.0.0版本,大家可以参考)
  • 编译Apollo9.0
    • 下载资源包 (非40系显卡可以忽略,笔者显卡为RTX4060)
    • 启动Apollo环境容器
    • 进入Apollo环境容器
    • 编译
  • 编译过程中可能出现的问题
    • 出现Socket closed导致编译未完成
  • 总结

前言

书接上文,笔者历经九九八十难之后终于在VM虚拟机上成功将apollo部署成功,然而在用的时候发现VM没法调用虚拟机资源,于是推倒重干,在电脑上装WIN+Linux双系统把性能吃满,现在在x86上重新部署apollo,与虚拟机上有些区别,笔者也是踩了很多坑,现分享给诸位道友们,愿诸位少走点弯路,快速的进入到apollo的世界

准备

  • 一台已经安装ubuntu系统的电脑(Ubuntu系统的版本可以参考Apollo官方文档里面的配置表适配安装,我这里装的是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

下载资源包 (非40系显卡可以忽略,笔者显卡为RTX4060)

链接: https://pan.baidu.com/s/1Z42Zsad8NMqOSScE9pO99w

提取码: r5cn

使用上述链接下载资源包

启动Apollo环境容器

  • 更换docker/scripts/dev_start.sh文件(非40系显卡可以忽略)
    更换刚才所下载的资源包里面的dev_start.sh
    替换dev_start.sh
  • 更换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环境容器

编译

  • 替换modules/perception/common/inference/tensorrt/rt_legacy.h文件(非40系显卡可以忽略)
    替换刚才所下载的资源包里面的rt_legacy.h
    替换rt_legacy.h
  • 替换third_party/centerpoint_infer_op/workspace.bzl文件(非40系显卡可以忽略)
    替换刚才所下载的资源包里面的workspace.bzl
    替换workspace.bzl
  • 替换third_party/paddleinference/workspace.bzl文件(非40系显卡可以忽略)
    替换刚才所下载的资源包里面的paddleinference/workspace.bzl
    替换paddleinference/workspace.bzl
  • 在容器内的 /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解决

总结

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/434988.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何使用GitHub Desktop管理GitLab库

不管是新手还是老手,Github Desktop都是在苹果系统和Windows系统上管理与创建项目的不错的方式,GitHub Desktop都能够让在GitHub上的工作流更为简单快捷。 注意,以下步骤只支持原版的GitHub Desktop 第一步 从这下载GitHub Desktop打开你的G…

【hot100-java】【柱状图中最大的矩形】

R9-栈篇 面积最大矩形的高度一定是 heights 中的元素 简单解释,就是说,最大高度必然是heights中的一个元素,我们假设是h,然后我们基于h,左右拓展,尽量拓展到h越来越高(符合单调栈)&a…

手机改IP地址怎么弄?全面解析与操作指南

在当今数字化时代,IP地址作为设备在网络中的唯一标识,其重要性不言而喻。有时候,出于隐私保护、网络访问需求或其他特定原因,我们可能需要更改手机的IP地址。然而,对于大多数普通用户来说,如何操作可能还是…

Redis 篇-深入了解 Redis 中的 RESP 通信协议与内存回收(过期 key 处理、内存淘汰策略)

🔥博客主页: 【小扳_-CSDN博客】 ❤感谢大家点赞👍收藏⭐评论✍ 文章目录 1.0 Redis 通信协议 - RESP 协议 2.0 Redis 内存回收 2.1 Redis 内存回收 - 过期 key 处理 2.1.1 Redis 是如何知道一个 Key 是否过期呢? 2.1.2 是不是 TT…

Linux基础(三):安装CentOS7(系统安装+桥接联网+换源)

1.分区设置 由于使用 GPT 的关系, 因此根本无须考虑主/延伸/逻辑分区的差异。CentOS 默认使用 LVM 的方式来管理你的文件系统。使用GPT进行分区: 开机管理程序( boot loader) 使用CentOS 7.x默认的grub2软件。 2.各种分区格式 …

DataLight(V1.4.5) 版本更新,新增 Ranger、Solr

DataLight(V1.4.5) 版本更新,新增 Ranger、Solr DataLight 迎来了重大的版本更新,现已发布 V1.4.5 版本。本次更新对平台进行了较多的功能拓展和优化,新增了对 Ranger 和 Solr 服务组件的支持,同时对多项已…

Oracle 配置恢复目录catalog

一.介绍 Oracle中使用RMAN备份的数据我们分为两类 RMAN知识库数据库的数据块 Oracle默认把 RMAN知识库 放在目标数据库的控制文件中,在以后进行恢复的时候 我们要先读知识库的信息然后才能恢复。 但这样就产生了一个问题,知识库放在了控制文件上&#xf…

【C++】set与map

目录 一、预备知识: 1、关联式容器: 2、键值对: 3、树形结构的关联式容器: 二、set: 1、set的介绍: 2、使用: 1、set的构造: 2、set的各种功能: 3、multiset 三…

AOP-代理实现

三种代理实现 1 JDK动态代理实现-基于接口代理 2 CGLIB动态代理实现-基于类代理 3 AspectJ 适配实现 为什么Proxy.newProxyInstance 会生成新的字节码? 创建代理类: Proxy.newProxyInstance 首先会检查缓存中是否有已存在的代理类字节码。 如果没有&…

计算机毕业设计 C语言学习辅导网站的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍:✌从事软件开发10年之余,专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ 🍅文末获取源码联系🍅 👇🏻 精…

14.安卓逆向-frida基础-编写hook脚本2

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 内容参考于:图灵Python学院 本人写的内容纯属胡编乱造,全都是合成造假,仅仅只是为了娱乐,请不要盲目相信。 工…

16. C++ TinyWebServer项目总结(16. 服务器调制、调试和测试)

主要包括: 使用 tcpdump 抓包;使用 gdb 调试器;使用压力测试工具,模拟现实世界中的高并发请求,测试服务器在高压状态下的稳定性。 最大文件描述符数 Linux 对应用进程能打开的最大文件描述符数量有两个层次的限制&a…

node的版本管理工具volta

安装方式 # mac curl https://get.volta.sh | bash # Windows Installation winget install Volta.Volta切换版本 volta install node指定版本根据项目固定node和包管理器版本和 该命令会在package.json生成volta的配置,volta会自动读取项目的该配置来决定node的…

【STM32】TCP/IP通信协议--LWIP内存管理

五、LWIP内存管理 1.什么是内存管理? (1)内存管理,是指软件运行时对计算机内存资源的分配的使用的技术,其主要目的是如何高效、快速的分配,并且在适当的时候释放和回收内存资源(就比如C语言当…

安全的价值:构建现代企业的基础

物理安全对于组织来说并不是事后才考虑的问题:它是关键的基础设施。零售商、医疗保健提供商、市政当局、学校和所有其他类型的组织都依赖安全系统来保障其人员和场所的安全。 随着安全技术能力的不断发展,许多组织正在以更广泛的视角看待他们的投资&am…

SQL学习1

24.9.28学习目录 一.数据库1.SQL语句基础2.匹配条件 一.数据库 对于嵌入式的数据库,其使用的是SQLite这种小型数据库; 在ubuntu中的下载方法 //字符界面 sudo apt-get install sqlite3//图形界面 sudo apt-get install sqlitemanSQLite特点&#xff1a…

ACL 2023--MetaAdapt: 通过元学习实现领域自适应的少量样本虚假信息检测

https://github.com/Yueeeeeeee/MetaAdapt 随着社交媒体上出现的新话题(例如COVID-19)成为虚假信息传播的来源,克服原始训练领域(即源领域)与这些目标领域之间的分布变化,仍然是虚假信息检测中的一项复杂任…

5分钟精通Excel在go中的使用

一些简单操作可以在官方文档中找到,应该足够无经验的朋友们入门 介绍 - 《Excelize v2.2 中文文档》 - 书栈网 BookStack 这里贴一个中文版的链接(以excelize库为例,相对其他库来说,体验很不错),不过要注…

PWA(Progressive web APPs,渐进式 Web 应用): manifest.json、 Service Worker

文章目录 引言I 什么是 PWA功能特性技术上分为三个部分安装应用II Web 应用清单将Web 应用清单文件链接到站点manifest.json字段说明III Service Worker( 缓存管理)IV 结合构建工具让项目支持 PWA应用使用插件vite-plugin-pwaworkbox-webpack-plugin插件扩展知识将 PWA 作为脱机…

紫光 FPGA固化RAM位置的操作流程

1. 前提条件:需要已经编译出一个功能完整的没有时序违例的版本出来; 2. 将RAM导出至txt文件: 这个过程需要几分钟,耐心等待一下。 等待提示成功就可以进行下一步操作了。 3. 将【2】中的txt文件中的内容全选复制粘贴到pcf文件的…