Apollo6.0 + lgSVL 联合仿真平台搭建
0、前言
首先展示了仿真效果;随后,在小破站发布了首个视频;该视频画质较差;姑且观看一下吧;哈哈一笑。
Apollo6.0 + lgsvl 联合仿真展示
如果你掌握了以下预备能力,将会更加如鱼得水:
- 熟悉 linux
- 熟悉安装 Ubuntu 系统
- 熟悉 docker
针对希望快速掌握 docker 技术的学习者们,我强烈推荐大家在 B 站搜索 '狂神 Docker 课程' 这个优质教学资源库。掌握 docker 技能后,能够更加高效地操作和管理 Apollo 系统。
此外
参考:
1、硬件配置
基于多种机遇与巧合的机会难得不多的机缘巧合之下
两台主机的配置分别如下:
| 参数 | 主机1 | 主机2 |
|---|---|---|
| 处理器 | i7-4790 | i7-11700F |
| 运存 | 8G | 32G |
| 显卡 | gtx960 | rtx2060s |
| 显存 | 4G | 8G |
其中主机1配置 Ubuntu18.04.5 用于执行 Apollo 应用程序的任务,在同一网络段下运行;另一台主机配置 Windows 10 系统以运行 SVL 软件;两台主机之间通过构建网络桥接结构实现数据传输与共享,并为联合仿真系统提供了技术支撑。
2、部署 Apollo
此步骤至关重要但也可能面临诸多问题 我按照官方说明书在本地主机上进行了部署 完成得很好 是得益于硬件适配能力和科学的方法论支撑 然而 在其他设备上实施部署时 遭到了相同的错误困扰 这部分内容将在后续章节中详细说明 下面先介绍常规部署流程
2.1 准备工作
2.1.1 安装 Ubuntu
采用Ubuntu 18LTS及其更高版本作为推荐部署环境
安装完成后执行一下命令进行软件更新:
sudo apt-get update
sudo apt-get upgrade
在出现错误时, 常见于 source.list字段中的配置问题, 自行排查并解决问题, 将软件的来源更换为国内的来源, 例如阿里云OSS等国内存储服务。
2.1.2 安装 NVIDIA 显卡驱动
个人认为,在硬件配置上应配备独立显卡。然而即使不配备独立显卡,在编译阶段仍可通过build_cpu参数实现通融。这并不能确保后续仿真过程中不会遇到其他潜在的问题。
首先,通过以下命令核查你是否已经安装了显卡驱动:
nvidia-smi
如果运行相应的命令并看到以下输出信息,则证明你已经安装了显卡驱动程序。然后检查当前使用的显卡驱动版本(例如:NVIDIA-SMI 460.27.04),若你的显卡支持的最高分辨率显示为1080p及以上且其对应的独立显存占用不超过8GB,则无需进行额外设置即可开始安装 Docker 引擎。若当前使用的显卡支持分辨率显示不足1080p或者其独立显存占用超过8GB,则建议按照以下步骤重新安装相应的系统组件以确保正常运行。
+-----------------------------------------------------------------------------+
|NVIDIA-SMI 460.27.04 Driver Version: 460.27.04 CUDA Version: 11.2|
|-------------------------------+----------------------+----------------------+
|GPU Name Persistence-M|Bus-Id Disp.A|Volatile Uncorr. ECC|
|Fan Temp Perf Pwr:Usage/Cap|Memory-Usage|GPU-Util Compute M.|
|MIG M.|||
|===============================+======================+======================|
|0 GeForce RTX 3090 On|00000000:65:00.0 On|N/A|
|32% 29C P8 18W / 350W|682MiB / 24234MiB|7% Default|
|N/A|||
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
|Processes:|
|GPU GI CI PID Type Process name GPU Memory|
|ID ID Usage|
|=============================================================================|
|0 N/A N/A 1286 G /usr/lib/xorg/Xorg 40MiB|
|0 N/A N/A 1517 G /usr/bin/gnome-shell 120MiB|
|0 N/A N/A 1899 G /usr/lib/xorg/Xorg 342MiB|
|0 N/A N/A 2037 G /usr/bin/gnome-shell 69MiB|
|0 N/A N/A 4148 G ...gAAAAAAAAA --shared-files 105MiB|
+-----------------------------------------------------------------------------+
如果系统未检测到类似信息输出,请检查计算机是否缺少相应显卡驱动程序,并按照以下步骤进行操作。
sudo apt-get update
sudo apt-add-repository multiverse
sudo apt-get update
sudo apt-get install nvidia-driver-455
安装完成后, 采用相同的方法使用nvidia-smi指令来检查显卡驱动是否正常运行. 若无输出信息, 请建议重启主机以排查问题; 然后再次执行nvidia-smi指令. 若成功返回相关信息, 则即可获取相关显卡运行状态的信息.
2.1.3 安装 Docker 引擎
Apollo6.0+ 需要 Docker 19.03+,有以下两种方法安装 docker:
按照官方文档的操作步骤完成安装操作;个人建议采用更为便捷的方式(方法 2),因为其操作简便且易于掌握
方法2:执行以下指令进行安装;
curl https://get.docker.com | sh
sudo systemctl start docker && sudo systemctl enable docker
安装完成之后执行以下指令,核查 docker 版本,顺便核查是否安装成功,
docker --version
成功之后继续进行如下操作,
- 开放 docker 的权限
- 创建 docker 组
sudo groupadd docker
- 将你的用户添加到 docker 组
sudo usermod -aG docker $USER
- 使用组的更新
newgrp docker
- 验证 docker 命令(无需sudo权限)
docker run hello-world
2.1.4 安装 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
安装完成之后需要执行以下指令,重启 docker
sudo systemctl restart docker
目前来说,前期工作已全面完成。下一步的工作内容包括:首先是获取Apollo代码库,并随后对启动容器进行配置和编译等操作。
2.2 下载 Apollo
请执行以下操作以从 Apollo's GitHub 获取程序包(选择其中任意一行代码执行),默认设置为 master 分支。
# Using SSH
git clone git@github.com:ApolloAuto/apollo.git
# Using HTTPS
git clone https://github.com/ApolloAuto/apollo.git
假如没有掌握科学上网的方法论,则可以通过国内仓库获取相关资源,并参考官方文档...来完成安装配置;或者直接获取压缩文件包进行使用操作;但这样就断开了对 GitHub 项目的远程访问权限。
为了更加便捷地进行后续操作, 也可以执行以下命令, 将 APOLLO_ROOT_DIR 添加到系统环境变量列表中:
cd apollo
echo "export APOLLO_ROOT_DIR=$(pwd)" >> ~/.bashrc && source ~/.bashrc
2.3 启动容器
《APOLLO》环境下启动容器的过程如下:首先进入指定目录路径(即${APOLLO_ROOT_DIR}),在完成前述步骤后即可进行下一步操作)。然后运行以下命令以启动容器架构(即执行以下指令)。这个过程将需要下载所有必要的镜像版本(即拉取各种镜像层)。由于这一操作较为耗时,请确保持续维持网络的一般状态(即保持网络通常)。如果出现连接问题或无法访问相关资源,请重新发起启动命令直至完成整个流程。
bash docker/scripts/dev_start.sh
一旦出现如下信息,则表示成功,可进行下一步操作。
[ OK ] Congratulations! You have successfully finished setting up Apollo Dev Environment.
[ OK ] To login into the newly created apollo_dev_michael container, please run the following command:
[ OK ] bash docker/scripts/dev_into.sh
[ OK ] Enjoy!
2.4 进入容器
运行以下指令进入一个新的容器:
bash docker/scripts/dev_into.sh
2.5 编译
这是最关键的一步,成也在此,不成也别慌,去常见问题及解决方法找答案。
Apollo分为两种编译模式,在没有独立显卡的设备上建议采用build_cpu模式进行编程操作;在容器内部执行以下命令后将触发编译流程,请注意这是一个较为耗时的过程;在编译初期系统会下载必要的工具包以完成构建任务,请确保网络连接畅通;如果在构建过程中遇到问题,请重启相关服务并重新执行编译指令即可完成。
./apollo.sh build
如果编译过程顺利完成,则表示你已经成功到达了项目的核心部分;此时只需稍微抬头欣赏四周美丽的景色即可完成剩下的步骤
2.6 运行
在容器内部执行以下指令,用以启动、停止、重启 Apollo
# 启动
./scripts/bootstrap.sh
# 也可以这样启动
./scripts/bootstrap.sh start
# 停止
./scripts/bootstrap.sh stop
# 重启
./scripts/bootstrap.sh restart
打开浏览器后,在地址栏输入http://localhost:8888即可看到dreamview的运行界面。遗憾的是,在此界面中你还能用它做什么呢?仅仅能实现回放一些结果文件这一基本功能,并不能施展其他任何技术手段。犹如它的标识牌上所书写的名称——仅仅是一个简单的展示工具。

到目前为止,我们只是制造了大脑;随后计划制造它的四肢,并致力于实现补全计划。
3、部署 lgSVL
3.1 安装
在主机 2 中部署 lgSVL,现在切换至主机 2。
例如 Windows 10 上安装 NVIDIA 驱动程序后,默认会下载相应的模拟器软件包到本地存储中进行解压操作并运行simulator.exe程序即可实现虚拟机环境搭建这一过程确实很简单无需额外安装即可使用它在 Linux 操作系统下的部署也同样便捷你可以参考[Lgsvl 官网]上的详细文档查看完整的安装指南
3.2 链接到云端
点击 Open Browser 打开仿真器 Web 端的交互界面
初次操作时,
如果Cloud链接按钮失效,则:
查看右上方状态指示为Online或Offline;
若当前状态为离线(Offline),需先点击离线(Offline)按钮重新连接网络;
随后点击Cloud链接按钮。

此时应该进入了登录界面
如果已经注册了账户,直接登录,如果没有则点击 Sign Up 进行注册

注册过程就很常规,只要邮箱对了就行,需要去邮箱确认激活,然后登陆。
创建仿真之前,还需要将本地仿真器链接至云端
在 Web 界面访问时,请单击左侧的 Cluster 按钮以进入该区域。您将被导向到一个专门用于管理此区域节点的新界面。请前往右侧侧边栏中的 New Cluster 选项卡,并在其右侧的输入字段中输入集群名称(例如 "local-sim"),然后单击创建按钮以保存更改。

当集群界面未显示New Cluster时, 很可能是你的SVL Simulator处于离线状态, 请尝试重新连接以解决问题.
创建成功之后,就会看到如下显示

接下来就可以运行仿真了。
4、仿真测试
在 Web 界面中单击左侧 Simulators 选项框后,请依次执行以下步骤:首先选择 Add New 模块;接着设置仿真场景参数;最后开始配置流程。
在General部分中主要是在Select Cluster下选择了之前设置好的集群。
在Test case中进行配置时,在Map位置选择了BorregasAve,在Vehicle位置选择了Lincoln2017MKZ,并在下一层选择了Apollo6.0;而最底层的Traffic参数则根据需求进行任意设置。
在Autopilot配置中,在Autopilot选项卡中选择了Apollo6.0,并在Bridge Connection选项下填入主机1的IP地址:9090。
主机 1 是用于运行 Apollo 6.0 的专用设备,在启动过程中需要获取其 IP 地址的方法如下:首先启动一个新的终端,在其中执行命令ifconfig以获取设备连接的网络接口信息;完成该操作后即可继续后续步骤;具体操作流程建议参考相关网络配置指南以确保正确配置
经过以上步骤即可发布,然后发布。
建议您在需要运行simulation的情况下,在Ip地址查询后进行相应的Ip连接设置。
Run Simulation
启动运行时模拟器后,在主机2上新建一个Web窗口。将地址栏中的输入字段设置为主机1的IP地址:8888。即可查看到 dreamview 应用程序。然后单击配置选项设置。接着,在仿真器软件界面中单击运行按钮。至此模拟运行顺利完成。
具体的操作细节可以慢慢体会,个人建议看官方文档。
5、常见问题及解决方法
其实常见的问题都可以在Apollo/Github平台上的Issues页面找到解决方案;这里关于其中一个 bugs 提出自己的见解。
build error in apollo/modules/drivers/camera (master)
当前版本的代码已升至6.0版本,在克隆 master 分支时通常会遇到此类问题。在尝试将Apollo部署至其他主机的过程中我也深有体会地感受到过这种挑战与困扰。
这里有两种解决办法:
有效进行网络连接的同时,建议选择兼容性更强的主机配置,如果缺乏具体方向,不妨参考同一款主流主机的配置方案,但这种方式也有一些不便之处;
为了更好地完成任务,建议您克隆v6.0.0分支的代码库,实现无缝集成体验。
你可能会觉得这两种解决方法似乎未能触及问题的本质原因。是否存在硬件配置不符的情况?然而,在issue记录中也无法明确了解问题的具体情况以及如何有针对性地进行解决。
