之前有调通过Apollo自家的Dreamview仿真器的CPU版本和GPU版本,但是Baidu提供的模拟器目前功能有限,为了实现更接近现实世界的仿真和定义复杂的交通场景,我们需要利用LGSVL Simulator来配合Apollo的内核进行联合仿真。LGSVL是由LG电子美国研发中心基于Unity开发的适用于自动驾驶开发者的开源多机器人模拟器。可以直接和Autoware和Apollo进行对接,同时还提供生成高精度地图。只需要做很小的集成就可以用来测试和验证整个自动驾驶系统。本文是适用于中国大陆地区,访问境外网站巨慢、docker容器镜像拉取蜗牛速度的解决方案。欢迎各位无人驾驶开发者、爱好者转载。

我的机器配置:

处理器:Intel i7-7700        内存:16GB        显卡:Nvidia GTX1060 6GB(后面的实践证明,这个配置显然是远远不够的)

★ 实际上,仿真器需要渲染整个自动驾驶所需要的环境,为了保证足够的帧率,官方对系统的最低建议配置要求如下:

◆ 4GHz四核CPU
        ◆ Nvidia GTX 1080 (8GB memory)
        ◆ Windows 10 64 bit

零、写在前面

1、根据官方的文档,LGSVL Simulator对于操作系统采用windows更好,如果是Linux,也提供有对应的版本,但是效率可能会低一点。本文选择了Linux环境下的安装包,将LGSVL与Apollo内核直接部署在同一本地机器上以进行localhost桥接bridge;其实最佳的方案是:如果你有两台具有独显的高配置机器,可以考虑在机器1的Windows10上安装LGSVL,在机器2的Ubuntu 18.04上安装Apollo的内核与Docker镜像,两台机器通过局域网进行桥接。

2、有2种方式来运行仿真器:① 直接下载编译好的二进制文件;② 可以自己下载源码后进行编译。第②种方式在你需要做一定的定制开发时,比较有用,如果你只是想尝试下这款仿真器,可以直接下载latest release。    LGSVL源码链接:https://github.com/lgsvl/simulator,如果从源码编译,需要使用到git clone,详情可以参阅git网页的README.md;鉴于博主的境内网络不是很好,因此采用发行版的部署方式,直接进入链接https://github.com/lgsvl/simulator/releases/下载安装包安装即可。

【NOTE1】如果Apollo或者Autoware和仿真器在一台主机上运行,那么至少要求10G以上的GPU内存才能保证不像幻灯片一样卡顿。如果Apollo或者Autoware在不同的主机上运行,那么需要两台机器直接是千兆的网络进行连接,最好通过千兆的交换机进行连接。

【NOTE2】目前Apollo的github最新代码仓库master branch已经支持LGSVL模拟器,但是鉴于网络环境的不允许,我使用的是LGSVL提供的modified版本的Apollo5.0源码直接打包下载,此外注意Apollo官方git的release版本的源码5.5和5.0无法进行桥接LGSVL

一、安装Ubuntu18.04 LTS

1、这一部分,我建议移步参考https://www.cnblogs.com/masbay/p/10745170.html,博文作者对基于UEFI引导的BIOS的Windows+Ubuntu双系统的制作进行了详细的教学。这里在网上搜索教程的时候,千万不要按照传统的BIOS启动方式进行配置,UEFI引导是不认的,新式机器要避免踩坑。还有要注意的是,我使用的台式机是256GB固态+1TB机械双硬盘,具体的硬盘分区最好不要按照博文里面的介绍,linux的根目录 / 最好分配128GB以上,之前按照上述教程只给根目录 / 分配了30GB,导致Docker镜像拉取空间不足,失败,不得不重装Ubuntu系统,重新分配了足够大的空间。

2、制作好的双系统,Ubuntu的GRUB引导会接管Windows Boot Manager,这就会导致BIOS之后直接滑入GRUB引导,默认是进入Ubuntu的,倒计时10秒,这样就会给Windows重度依赖者带来不便,GRUB的默认启动项选择和倒计时也是可以修改的,具体方法是:

打开Ubuntu终端,键入命令:

$ sudo gedit /etc/default/grub

① 通过以上命令,我们可以打开文本编辑器,其中的“GRUB_DEFAULT=0”就是设置的默认启动项了。GRUB启动项是按照启动菜单依次使用数字进行索引,起始数字为0。结合前面开机时GRUB的可视化启动菜单,假设Windows Boot Manager的启动项在第3项,因此这里我们就需要将值修改为2(因为第一项是从0开始的),即“GRUB_DEFAULT=2”。

② “GRUB_TIMEOUT=10”就是GRUB的超时倒计时时间,以秒(s)为单位,修改你想设定的值就可以,比如3。

图文教程可以参考链接https://jingyan.baidu.com/article/f71d60379e16021ab641d1ab.html

二、安装Nvidia驱动

如果没有N卡独显的朋友,这一步可以skip。Ubuntu左下角:应用程序 → 全部 → 软件和更新 → 附加驱动,即可安装N卡的驱动,不要使用开源的公版驱动,选择新版的N卡专有官方驱动,如下图所示。

当然,这里也有一个坑,就是安装完显卡驱动后,系统需要重启加载驱动,重启系统时会出现一个蓝色背景的界面Perform Mok Management,这一步不要选择Continue Reboot,因为这样会导致新安装的N卡驱动没有加载,正确的步骤,建议移步参考https://blog.csdn.net/qq_40584960/article/details/84031002

安装完基本的软件后,我的系统详细界面如下图所示。

三、安装LGSVL

1、我下载的LGSVL版本是https://github.com/lgsvl/simulator/releases/tag/2020.06,使用

lgsvlsimulator-linux64-2020.06.zip压缩包,解压安装(此处小学生应该也会,略)。

2、安装依赖,因为N卡官方的驱动对LGSVL的支持是不全的,所以如果不执行本步,LGSVL模拟器的窗口可能无法启动。参考链接:https://github.com/lgsvl/simulator/issues/462

sudo apt install libvulkan1

在安装目录中,双击simulator,启动模拟器后的界面如下图所示,说明LGSVL已经被正确部署:

3、点击程序中的Open Browser,会自动打开浏览器并进入(http://localhost:8080/),Web页面会自动下载地图和车辆。

四、下载Apollo源码

1、安装git

$ sudo apt-get install git

2、正如前面第零章所说的,Baidu Apollo官方提供的Apollo5.5 release和Apollo5.0 release是无法与LGSVL Simulator进行桥接的,如果在配置好的官方发行版进行bridge

$USER@in_dev_docker:/apollo$ bash scripts/bridge.sh

系统将不会有任何的反应而且会报错。

3、我们采取离线下载源码的方式,下载LG提供的魔改Apollo5.0源码压缩包,git网站参考https://github.com/lgsvl/apollo-5.0,下载release的tar.gz压缩包→https://github.com/lgsvl/apollo-5.0/releases/tag/2020.06;下载完成后释放的位置为文件管理器的主目录下,释放后的文件夹名字最好重命名为apollo,方便操作,如下图所示。(我后面的操作,都是基于该文件夹名称为apollo进行的,当然你也可以命为其他的名字)

五、安装Docker CE环境

Docker官方的指导见:https://docs.docker.com/engine/install/ubuntu/

1、Update apt & 安装https相关包

$ sudo apt-get update$ sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
software-properties-common

2、新增Docker Key

$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

3、验证你的密钥

$ sudo apt-key fingerprint 0EBFCD88

如果密钥被正确安装,系统应该输出以下信息:

pub   rsa4096 2017-02-22 [SCEA]9DC8 5822 9FC7 DD38 854A  E2D8 8D81 803C 0EBF CD88
uid           [ unknown] Docker Release (CE deb) <docker@docker.com>
sub   rsa4096 2017-02-22 [S]

4、设置稳定存储

$ sudo add-apt-repository \"deb [arch=amd64] https://download.docker.com/linux/ubuntu \$(lsb_release -cs) \stable"

5、安装Docker CE引擎

 $ sudo apt-get update$ sudo apt-get install docker-ce docker-ce-cli containerd.io

6、将 Docker 管理为非根用户,这样使用docker时无需再输入sudo

$ sudo groupadd docker
$ sudo usermod -aG docker $USER

② 注销并重新登录Ubuntu

③ 验证是否可以在没有sudo的情况下运行命令

$ docker run hello-world

此命令下载测试映像并在容器中运行它。当容器运行时,它会打印一条信息性消息并退出。

六、安装Nvidia-Container-Toolkit

我们再打开一个新终端,开始安装Nvidia-Container-Toolkit,值得注意的是:在发布了Container-Toolkit之前,Nvidia提供的工具是Nvidia-Docker2,目前已被弃用。网上很多的教程是针对安装适配Docker2,目前是官方非常不建议安装的(因为还需要部署很多CUDA等步骤),新版的Container-Toolkit可以简化很多安装步骤。

官方指南见 https://github.com/NVIDIA/nvidia-docker

# Add the package repositories
$ 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 update && sudo apt-get install -y nvidia-container-toolkit
$ sudo systemctl restart docker

【注意】如果公钥获取失败,你需要切换至其他的网络再次尝试,目前Nvidia官方没有提供Container-Toolkit的deb安装包,因此无法离线安装。

七、使用Docker拉取Apollo镜像

1、转到apollo文件夹下

$ cd apollo

这时的命令窗口会显示前缀:$USER@你的计算机名:~/apollo$

2、拉取Image

~/apollo$ bash docker/scripts/dev_start.sh

这个步骤,在境内的小伙伴又要遇到trouble了,原因还是链路的不稳定,速度非常抓狂,而且整个ApolloAuto的Docker镜像能有10GB+,硬下肯定是不行的。【更新】Apollo境内的镜像已坏,因此以下命令无法拉取镜像,不要做无谓(畏)的尝试:

~/apollo$ bash docker/scripts/dev_start.sh -C    #本镜像已坏,弃用

① 办法总比困难多,改用中科大的Docker镜像就可以完美解决,下载速度起飞,建议移步参考http://mirrors.ustc.edu.cn/help/dockerhub.html?highlight=docker,修改配置文件:

$ sudo gedit /etc/docker/daemon.json

② 在打开的daemon.json中,加入以下代码:

{"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn/"]
}

③ 重启Docker

$ sudo systemctl restart docker

④ 重新执行镜像的拉取,飞一般的感觉

~/apollo$ bash docker/scripts/dev_start.sh

综上,可以使整个镜像pulling过程控制在两个小时以内,Docker镜像拉取成功后,系统会提示我们OK,如下图所示:

八、进入Docker环境

~/apollo$ bash docker/scripts/dev_into.sh

这时命令窗口显示前缀的方式会发生改变:$USER@in_dev_docker:/apollo$,说明我们已经成功进入Docker容器环境内。

九、build Apollo

1、在build过程中,如果你的处理器是Intel的,那么恭喜你,又将因为git clone失败而踩雷:build apollo过程,需要克隆Intel的https://github.com/intel/ad-rss-lib,又是万恶的链路问题,如果直接build,你将遇到如下图所示的错误:

2、我们还是绕过在线git clone GitHub的源码,主要的解决方案有两个:(① ②任选其一

① 使用国内码云gitee镜像进行替换:

使用文件管理器,打开/apollo/WORKSPACE.in

【注意】千万不是打开/apollo/WORKSPACE,而是结尾带.in的文件!如下图所示:

第47到第53行,替换成:

#ad-rss-lib
new_git_repository(name = "ad_rss_lib",build_file = "third_party/rss_lib.BUILD",tag = "v1.1.0",remote = "https://gitee.com/audier0879/ad-rss-lib",
)

② 当然还是万能的本地安装大法,解压释放下载好的ad-rss-lib.tar.gz(还是嫑下载.zip)到主目录下,注意文件夹名称的统一,我命为:ad-rss-lib(你当然可以修改为其他名称,但是紧接着的代码修改 → 路径path也要一致)

我们还是借鉴①的步骤,打开/apollo/WORKSPACE.in文件,将第47到第53行替换为:

#ad-rss-lib
new_local_repository(name = "ad_rss_lib",build_file = "third_party/rss_lib.BUILD",path = "/ad-rss-lib",
)

3、LG魔改版本的Apollo5.0源码在编译之前,需要对/home/$USER/.cache/bazel/进行清理,否则会编译失败,具体的issue可以参考https://talk.apolloauto.io/t/apollo/508

$USER@in_dev_docker:/apollo$ rm -rf /home/$USER/.cache/bazel/

4、至此,我们可以开启正式的编译:(注意,我们要编译gpu版本的Apollo,才能和LGSVL Simulator桥接)

$USER@in_dev_docker:/apollo$ bash apollo.sh build_gpu

★ 由于部署模拟器时,没有购买外设CAN卡,所以接下来build_gpu环节即将出现的一个warning可以忽略,如下图所示。

Apollo5.0的整个GPU版Dreamview模拟器编译过程大约耗时1500秒,CPU和GPU的风扇会狂转,别怕小场面;成功后终端会提示我们Build passed,如下图所示。

十、启动与桥接仿真环境

1、启动Apollo侧的DreamView仿真环境

$USER@in_dev_docker:/apollo$ bash scripts/bootstrap.sh

这里执行第一次会出现Failed to start Dreamview,报错原因未知,然而我们再次执行上述命令时,会提示:Module dreamview is already running - skipping.  这说明,实际上Dreamview已经启动成功了:

2、打开浏览器,这里我是用的是Ubuntu自带的Firefox浏览器(当然你也可以使用Google的Chorme),输入http://localhost:8888,这时你就可以看到如下图所示的Baidu Apollo Dreamview仿真器的窗口了:

3、将Apollo内核与LGSVL Simulator桥接起来

$USER@in_dev_docker:/apollo$ bash scripts/bridge.sh

十一、开始仿真

1、转到LGSVL Simulator的Web界面(http://localhost:8080/),选择左侧Simulations选项卡,点选BorregasAve, noninteractive (with Apollo 5.0),点击右下角的红色Play(▶)按钮,启动LGSVL Simulator的虚拟场景。

2、将浏览器切回DreamView界面(http://localhost:8888),进行必要的配置:

① 在界面的右上角选择Vehicle → Lincoln2017MKZ;选择Map → BorregasAve

② 选择左侧Module Controller选项卡,点选滑块以便开启Localization,Transform,Perception,Traffic Light,Planning,Prediction,Routing和Control模块。

③ 选择左侧Route Editing选项卡,在地图中鼠标右键可以拖拽地图,左键单击可以点选自动驾驶系统本次运行的目的地,单击发送路径后,Aapollo将接管LGSVL Simulator中的车辆,至此,我们就可以体验一次无人驾驶之旅啦。

————以下空白

LGSVL与Apollo5.0联合仿真相关推荐

  1. SVLsimulator与apollo6.0联合仿真

    放几个很重要的网址 Apollo开发者平台 ApolloAotu/apollo git官网(给安装方法所在网址,gitee的) SVL地图.车辆store and library apollo系统重装 ...

  2. hypermesh matlab,ANSYS 14.5与HyperMesh 12.0联合仿真有限元分析(第2版)

    出版说明 前言 第1章 绪论 1.1 有限元法的基本概念 1.2 有限元法的发展及应用 1.2.1 有限元法的诞生 1.2.2 有限元软件的发展及应用 1.3 ANSYS软件的发展及应用 1.4 Hy ...

  3. Apollo6.0 + lgSVL 联合仿真平台搭建

    0.前言 先上仿真效果展示,在小破站上传了我第一个视频,画质较渣,凑合看吧,hahaha. Apollo6.0 + lgsvl 联合仿真展示 如果你掌握了以下预备能力,将会更加如鱼得水: 熟悉 lin ...

  4. Quartus 13.0和Modelsim SE 10.1a 联合仿真

    Quartus 13.0和Modelsim SE 10.1a联合仿真 1.首先在Quartus建立工程,编写HDL文件,进行编译:编译通过后编写testbench文件,再进行编译,直到通过没有错误.. ...

  5. Prescan 8.5.0、MatlabR2020a、Carsim2019.1、罗技Logitech G29套装联合仿真注意事项

    这些注意事项来源于Prescan的Help文档和实践经验. Prescan-菜单栏 Experiments-Simulation scheduler,这里设置仿真频率.传感器工作频率.是否实时仿真等: ...

  6. Matlab/Admas联合仿真提示 输入位移曲线 输出速度曲线为0的解决方法

    Matlab/Admas联合仿真 输入位移时输出速度为0的解决方法 解决方法:将Adams Solver type(求解器类型)由C++改为Fortran就可以解决. 建立一个小球,添加一个与地面连接 ...

  7. ADS2020、SystemVue2020Update1.0同时破戒及联合仿真(EVM)

    使用和谐的ADS软件时,我们会发现无法使用ADS内部的VTB对电路进行EVM仿真(License会报错).同是Keysight公司的SystemVue2020Update1.0可以完成多种最新调制信号 ...

  8. MATLAB 与Modelsim之间通过Linker的联合仿真

    Link for ModelSim介绍 ** Link for ModelSim®是一个把MATLAB/Simulink和针对FPGA 和ASIC的硬件设计流程无缝连结起来的联合仿真的接口扩展模块.它 ...

  9. 通过文件读写方式实现Matlab和Modelsim的联合仿真

    虽然 Modelsim 的功能非常强大,仿真的波形可以以多种形式进行显示,但是当涉及到数字信号处理的算法的仿真验证的时候,则显得有点不足.而进行数字信号处理是 Matlab 的强项,不但有大量的关于数 ...

  10. matlab如何模拟竹蜻蜓飞行,JSBSim_Matlab 将 与 进行联合仿真 模拟飞行计算 247万源代码下载- www.pudn.com...

    文件名称: JSBSim_Matlab下载  收藏√  [ 5  4  3  2  1 ] 开发工具: Visual C++ 文件大小: 7092 KB 上传时间: 2015-07-26 下载次数: ...

最新文章

  1. show-busy-java-threads查找CPU占用高
  2. C++ 是 编程界 的 背锅侠
  3. BZOJ(8) 1053: [HAOI2007]反素数ant
  4. 有关 Nintendo GameCube
  5. ios uiview 如何刷新_ios-如何在Swift中刷新imageview而无需重新加载页面?
  6. python中exchange函数使用_python基于exchange函数发送邮件过程详解
  7. js获取验证码倒计时60s(超简单)
  8. Android TableLayout 表格布局详解
  9. 复仇者联盟3:无限战争 | 细节-台词-镜头 详细分析复3预测复4结局
  10. E php短信平台接口
  11. GNN教程:采样模型GraphSage理解(工业上图模型的雏形)
  12. “测验你左右脑分别有几岁”到底是个什么鬼?
  13. 瑞士证交所主席认为发行加密瑞士法郎有益经济发展
  14. Echarts:简单词云图实现
  15. .San(三). Xia(峡).近一个月调度过程图解简介
  16. 计算机实训机器人实验原理是什么,实验报告机器人控制技术基础实验报告.doc...
  17. 算术游戏C语言,10个有趣的算术游戏,让你立刻爱上数学!
  18. Activiti工作流引擎进阶【收藏可做笔记系列】
  19. LoadRunner关联函数的脚本实例--如何操作关联参数
  20. shell清除历史记录

热门文章

  1. 有哪些好用的电脑桌面分类管理软件?这3款软件让你的效率秒杀小伙伴!
  2. 【rmzt】美女之目露凶光win7主题
  3. Tomcat:JAVA_HOME should point to a JDK not a JRE解决
  4. 在计算机领域黑箱,探究黑箱的认知革命
  5. 元月元日是哪一天_元宵节的农历日期是哪一天 - 中国万年历
  6. 易语言调用大漠把血蓝内力体力转化为进度条
  7. 不会写原创文章,在线洗稿软件能处理吗
  8. 程序员python开发简历范文_程序员简历就该这样写
  9. 图片相似度对比在线测试,图片相似度对比 python
  10. java List转Map