0、前言
先上仿真效果展示,在小破站上传了我第一个视频,画质较渣,凑合看吧,hahaha。
Apollo6.0 + lgsvl 联合仿真展示
如果你掌握了以下预备能力,将会更加如鱼得水:
- 熟悉 linux
- 熟悉安装 Ubuntu 系统
- 熟悉 docker
对于想要入门 docker 的同学,真心推荐B站搜索 “狂神 docker”,有了 docker 的技能加持,可以更好的玩转 Apollo。
另外,有精力的同学一定要认真参考以下两个链接中的文档,官方的文档很详细,且易懂。
参考:
- https://github.com/ApolloAuto/apollo
- https://www.svlsimulator.com/docs/
1、硬件配置
种种机缘巧合,我获得了两台主机,所以我果断选择了通过两台主机搭建联合仿真平台的方案。
两台主机的配置分别如下:
参数 | 主机1 | 主机2 |
处理器 | i7-4790 | i7-11700F |
运存 | 8G | 32G |
显卡 | gtx960 | rtx2060s |
显存 | 4G | 8G |
其中主机1安装 Ubuntu18.04.5 用来运行 Apollo,主机2安装 win10 用来运行 SVL,两台主机在同一网段下工作,通过桥接,实现数据传输,达到联合仿真的效果。
2、部署 Apollo
此步骤至关重要,也容易问题频出,我按照官方的说明文档在自己的主机上部署时,很顺利,这得益于硬件的适配性和科学的冲浪姿势,但是当我尝试在其他的硬件上进行部署时,在编译过程中惨遭同一个 error 折磨,这将在后文示出。下面先说常规的部署流程。
2.1 准备工作
2.1.1 安装 Ubuntu
Apollo6.0 推荐的部署环境为 Ubuntu18.04.5 LTS 或者更高版本。最近版本的 Apollo 采用了 docker 的技术,部署起来更加便捷,规定了系统版本,个人以为这主要是限制 Linux 内核版本,毕竟 docker 技术是不会对内核以外的其他东西产生太大依赖的。我安装的是 Ubuntu18.04.5 LTS,安装过程不再详述。
安装完成后执行一下命令进行软件更新:
sudo apt-get update
sudo apt-get upgrade
如果报错,通常是 source.list 的问题,自行找解决方案,将软件源更换为国内源,如阿里源等等。
2.1.2 安装 NVIDIA 显卡驱动
个人建议硬件上配置独立显卡,虽然如果没有独立显卡,在编译时通过 build_cpu 也有可能通过,但是不能保证在后续的仿真过程中是否会出现其他问题。
首先,通过以下命令核查你是否已经安装了显卡驱动:
nvidia-smi
如果有输出如下信息,则证明你已经安装了显卡驱动,然后查看驱动版本,如下所示第一行中的 NVIDIA-SMI 460.27.04,如果你的显卡驱动版本高于 455,则可以直接跳至下一步安装 Docker 引擎,如果你的显卡驱动版本低于 455,则建议执行下述操作重新安装。
+-----------------------------------------------------------------------------+
| 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:
方法 1:参照官方文档进行安装,个人更推荐第二种方法,简单方便;
方法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)
如果成功,会输出很多行信息,其中有一行为 “ Hello from Docker!”,表示成功。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_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_gpu,其二为 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 的运行界面,那么此时你能用它做什么呢?抱歉,除了回放一些结果文件,你确实什么都干不了,就好比它的名字,它只是一个 viewer。
当目前为止,我们只是创造了大脑,接下来将创造它的四肢,完成进行补全计划。
3、部署 lgSVL
3.1 安装
在主机 2 中部署 lgSVL,现在切换至主机 2。
以 win10 为例,安装 nvidia 驱动,然后去 lgsvl 官网下载压缩包,解压,运行 simulator.exe 即可,没错,就这么简单,它是免安装的。Linux 下部署也不麻烦,给你个参考文档看看。
3.2 链接到云端
点击 Open Browser 打开仿真器 Web 端的交互界面
第一次使用,如果 Link to Cloud 按钮不可用,则检查右上角状态是 Online 或 Offline,如果是 Offline,则点击 Offline 按钮重新连接,然后点击 Link to Cloud。
此时应该进入了登录界面
如果已经注册了账户,直接登录,如果没有则点击 Sign Up 进行注册
注册过程就很常规,只要邮箱对了就行,需要去邮箱确认激活,然后登陆。
创建仿真之前,还需要将本地仿真器链接至云端
在 Web 界面,点击左侧 Cluster,就会看到集群界面,在 New Cluster 下的输入框中填写集群名字,比如“local-sim”,然后点击 Create cluster 。
如果在集群界面没有看到 New Cluster,很可能是你的 SVL Simulator 离线了,重新连接即可。
创建成功之后,就会看到如下显示
接下来就可以运行仿真了。
4、仿真测试
在 Web 端界面下点击左边 Simulators,然后点击 Add New,创建仿真场景,然后进入配置流程。
1、General 中主要是 Select Cluster 下选择刚才设置的集群
2、Test case 中,Map 选择 BorregasAve;Vehicle 选择 Lincoln2017MKZ,下一层选择 Apollo 6.0;最下方 Traffic 随意配置
3、Autopilot 中,Autopilot 选择 Apollo 6.0;Bridge Connection 下填写 主机1的IP:9090
主机 1 为运行 Apollo 6.0 的主机,其 IP 查询方法为,新打开一个终端,输入 ifconfig,运行即可,具体过程自行查询。
经过以上步骤即可发布,然后发布。
注意,每次启动主机1时,其 IP 可能会改变,所以每次启动之后,查询 IP,并在你需要运行的simulation 中修改上述的 Bridge Connection 信息。
Run Simulation
点击 Run Simulation,在主机2中新打开一个 Web 窗口,地址栏中输入 主机1的IP:8888,即可看到 dreamview ,然后点击 setup,然后在仿真器软件中点击开始,就可以大功告成了。
具体的操作细节可以慢慢体会,个人建议看官方文档。
5、常见问题及解决方法
其实常见的问题都可以在 Apollo Github 的 Issues 中找到答案,这里关于其中的某一个issues谈一下自己的观点。
build error in apollo/modules/drivers/camera (master)
这时候最新版本的代码为6.0,通常我们会直接 clone 其 master 分支,某中机缘巧合下就会被这个 error 所折磨,包括我自己,曾经尝试在其他主机上部署Apollo时,体会到了那种滋味儿。
这里有两种解决办法:
- 科学上网 + 更换硬件适配性更好的主机,如果你没有什么idea,就参照我 主机1 的硬件配置,但是这种方法有点儿麻烦;
- clone v6.0.0 分支的代码,你将会纵享丝滑。
你会发现以上两种解决办法貌似并没有找出问题的根源,是硬件不匹配吗?这个无从得知,而且在issue中也没有说清楚问题出在了哪里,以及如何针对性的解决。