LGSVL与Apollo5.0联合仿真

tech2024-10-02  19

    之前有调通过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中的车辆,至此,我们就可以体验一次无人驾驶之旅啦。

————以下空白

最新回复(0)