0、前言

先上仿真效果展示,在小破站上传了我第一个视频,画质较渣,凑合看吧,hahaha。

Apollo6.0 + lgsvl 联合仿真展示

如果你掌握了以下预备能力,将会更加如鱼得水:

  • 熟悉 linux
  • 熟悉安装 Ubuntu 系统
  • 熟悉 docker

对于想要入门 docker 的同学,真心推荐B站搜索 “狂神 docker”,有了 docker 的技能加持,可以更好的玩转 Apollo。

另外,有精力的同学一定要认真参考以下两个链接中的文档,官方的文档很详细,且易懂。

参考:

1、硬件配置

种种机缘巧合,我获得了两台主机,所以我果断选择了通过两台主机搭建联合仿真平台的方案。

两台主机的配置分别如下:

参数主机1主机2
处理器i7-4790i7-11700F
运存8G

32G

显卡gtx960rtx2060s
显存4G8G

其中主机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 的权限
  1. 创建 docker 组
    sudo groupadd docker
  2. 将你的用户添加到 docker 组
    sudo usermod -aG docker $USER
  3. 使用组的更新
    newgrp docker
  4. 核查 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时,体会到了那种滋味儿。

这里有两种解决办法:

  1. 科学上网 + 更换硬件适配性更好的主机,如果你没有什么idea,就参照我 主机1 的硬件配置,但是这种方法有点儿麻烦;
  2. clone v6.0.0 分支的代码,你将会纵享丝滑。

你会发现以上两种解决办法貌似并没有找出问题的根源,是硬件不匹配吗?这个无从得知,而且在issue中也没有说清楚问题出在了哪里,以及如何针对性的解决。

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐