Bootstrap

仿真实战 | Docker版Carla的安装与使用

作者 | 李慢慢  编辑 | 车路漫漫

点击下方卡片,关注“自动驾驶之心”公众号

ADAS巨卷干货,即可获取

点击进入→自动驾驶之心【仿真测试】技术交流群

本文只做学术分享,如有侵权,联系删文

7cee4d4aae50085c94d27b0e107a78ef.png

今天在研究openpilot的说明文档时,发现openpilot可以和carla进行配合运行。然后我就发现,openpilot提供的启动carla的程序,竟然是通过docker来运行的。于是好奇之下,又去carla官方文档找了找,还真发现了说明文档。于是将两者结合,记录了如下这篇文章。

参考链接1-openpilot官方-启动carla的程序:

https://github.com/commaai/openpilot/blob/master/tools/sim/start_carla.sh

参考链接2-carla官方-docker版:

https://carla.readthedocs.io/en/latest/build_docker/

0、前言

首先给大家普及下docker是什么。

百度百科:

“Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux或Windows操作系统的机器上。”

简单来说,就是有人把carla打包好成了一个镜像,我们拷贝这个镜像,就可以直接开始使用carla,而不用再去管运行carla还需要什么乱七八糟的依赖库。。。

在carla官方说明中,描述了使用docker版本的carla的适宜场景:

4fc89a4003dd680ccec62e49154807b1.png

1、docker的下载及安装

要能运行docker版本的carla,首先需要在自己的电脑上安装好docker底层,这个是基础。

curl https://get.docker.com | sh

启动docker服务:

sudo systemctl start docker

设置为开机启动docker:

sudo systemctl enable docker

查看docker版本信息:

docker version

4359c70798e78cdc15b20e20e0dce87f.png

2、安装docker版本的显卡驱动容器

我们知道,carla的运行离不开显卡,关于英伟达显卡驱动,也有docker版本的,我们需要提前给安装好。

拷贝以下程序,保存为【install_nvidia_docker.sh】到本地,运行即可(该部分命令截取自前文参考链接1)。

#!/bin/bash


# Requires nvidia docker - https://github.com/NVIDIA/nvidia-docker
if ! $(apt list --installed | grep -q nvidia-container-toolkit); then
read -p "Nvidia docker is required. Do you want to install it now? (y/n)";
  if [ "${REPLY}" == "y" ]; then
    distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
    echo $distribution
    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-docker2 # Also installs docker-ce and nvidia-container-toolkit
    sudo systemctl restart docker
else
exit 0
  fi
fi

3、使用docker拉取carla镜像

安装好docker后,就可以使用docker拉取carla镜像了。首先,我们可以看到官网上有很多版本的docker镜像。

https://hub.docker.com/r/carlasim/carla/tags

d8e70c1c7c60cf009ea1eb36ba6ccf9b.png

我们这里最新的其实就是0.9.13,使用docker将其拉取安装到本地即可,命令如下:

# Pull the latest image
docker pull carlasim/carla:latest


# Pull a specific version
docker pull carlasim/carla:0.9.13

拉取的过程很漫长,需要耐心等待。

647d6f18718f80d5419c09671b84a928.png

拉取完成后,输入如下命令,如果显示出镜像的话,则证明拉取成功了。

docker images

698d441ba86b5732802d94fb73d1bcf1.png

如果你的网速不好的话,可以使用我拉取下来的carla的docker镜像包的网盘链接。

链接:https://pan.baidu.com/s/1mWjEEkuTz56bCLwjxIZ2Aw

提取码:clmm

下载到本地后,使用如下命令进行加载即可。

docker load -i docker_image_carla_0.9.13

4、创建容器运行Carla

根据镜像(image)创建容器(container),并进入容器。指令如下:

sudo docker run --privileged --gpus all --net=host -e DISPLAY=$DISPPALY  -it carlasim/carla:0.9.13  /bin/bash

紧接着,在容器中,直接启动Carla服务端:

./CarlaUE4.sh -opengl -nosound -RenderOffScreen -benchmark -fps=20 -quality-level=Low

667bdf14e9db9f77e352fa9cc4d96063.png

此时,什么窗口都看不到,那是因为我这里通过“-RenderOffScreen”模式,取消了窗口。但其实,此时显卡已经工作起来了,如下所示。

5d03c8fa758b425e7a6b8e5dddc9e359.png

附:这里我遇到了一个比较诡异的问题,就是如果不指定“-RenderOffScreen”模式的话,会报一个错:XDG_RUNTIME_DIR not set in the enviroment。理论来讲如果不报错的话,可以在docker里直接启动服务器端的画面。不过此处我没有解决掉,就忽略了,没有画面就没有画面吧。

5、运行Carla客户端

此时,在本地随意运行一个示例python程序,运行就能打开一个Carla客户端:

cd ./PythonAPI/examples/
python3 automatic_control.py

728bb1e2982bf9b1c29df4cd222d46e8.png

本文完。

一点感受:

我感觉Carla的docker版本并不好用,说它安装方便吧,我觉得官方预编译版的安装也挺简单的;说它可以脱离窗口运行吧,我发现使用“-RenderOffScreen”模式,在非docker版里一样可以实现;docker版的优势可能体现在其他地方,只是我现在实在是爱它不起来。若说本次探索有什么收获,那就是docker的使用了。这次真的是一边学一边用了。另外,本文臭又长,真正的过程,其实都是在跟着以下脚本在做。这个脚本只消运行一下,就是以上全文,哈哈。

#!/bin/bash


# Requires nvidia docker - https://github.com/NVIDIA/nvidia-docker
if ! $(apt list --installed | grep -q nvidia-container-toolkit); then
  read -p "Nvidia docker is required. Do you want to install it now? (y/n)";
  if [ "${REPLY}" == "y" ]; then
    distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
    echo $distribution
    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-docker2 # Also installs docker-ce and nvidia-container-toolkit
    sudo systemctl restart docker
  else
    exit 0
  fi
fi


docker pull carlasim/carla:0.9.13


EXTRA_ARGS="-it"
if [[ "$DETACH" ]]; then
  EXTRA_ARGS="-d"
fi


docker kill carla_sim || true
docker run \
  --name carla_sim \
  --rm \
  --gpus all \
  --net=host \
  -v /tmp/.X11-unix:/tmp/.X11-unix:rw \
  $EXTRA_ARGS \
  carlasim/carla:0.9.13 \
  /bin/bash ./CarlaUE4.sh -opengl -nosound -RenderOffScreen -benchmark -fps=20 -quality-level=Low

本文完。

① 全网独家视频课程

BEV感知、毫米波雷达视觉融合多传感器标定多传感器融合多模态3D目标检测点云3D目标检测目标跟踪Occupancy、cuda与TensorRT模型部署协同感知语义分割、自动驾驶仿真、传感器部署、决策规划、轨迹预测等多个方向学习视频(扫码即可学习

af724e13ad28b63e403fc772a69c7d76.png 视频官网:www.zdjszx.com

② 国内首个自动驾驶学习社区

近2000人的交流社区,涉及30+自动驾驶技术栈学习路线,想要了解更多自动驾驶感知(2D检测、分割、2D/3D车道线、BEV感知、3D目标检测、Occupancy、多传感器融合、多传感器标定、目标跟踪、光流估计)、自动驾驶定位建图(SLAM、高精地图、局部在线地图)、自动驾驶规划控制/轨迹预测等领域技术方案、AI模型部署落地实战、行业动态、岗位发布,欢迎扫描下方二维码,加入自动驾驶之心知识星球,这是一个真正有干货的地方,与领域大佬交流入门、学习、工作、跳槽上的各类难题,日常分享论文+代码+视频,期待交流!

312c49bc05f8979a7794b10407e83659.png

③【自动驾驶之心】技术交流群

自动驾驶之心是首个自动驾驶开发者社区,聚焦目标检测、语义分割、全景分割、实例分割、关键点检测、车道线、目标跟踪、3D目标检测、BEV感知、多模态感知、Occupancy、多传感器融合、transformer、大模型、点云处理、端到端自动驾驶、SLAM、光流估计、深度估计、轨迹预测、高精地图、NeRF、规划控制、模型部署落地、自动驾驶仿真测试、产品经理、硬件配置、AI求职交流等方向。扫码添加汽车人助理微信邀请入群,备注:学校/公司+方向+昵称(快速入群方式)

fc8b4fef1b8267a4aa8b3e07ab660217.jpeg

④【自动驾驶之心】平台矩阵,欢迎联系我们!

bfca73e436d3d1738e55010fc97763fc.jpeg

;