参考与前言

  1. carla官方对于docker 运行的描述:

    CARLA in Docker

  2. Docker的使用:[暂时没贴]

  3. 相关已知issue,欢迎补充

    https://github.com/carla-simulator/carla/issues/4834

使用的初衷是:因为收集数据的时候,想开多个carla,但是一个carla 3-4G显存,奈何我的电脑就仅仅6G显存 1660Ti,所以就萌生了这个想法。但是呢 途中发现:

  1. Carla 0.9.10.1 的版本 docker可以运行 但是必须有DISPLAY的设备 不然如果DISPLAY给空的话 就会没有 → 但是呢 你在本地运行的时候 可以DISPLAY为空 也可以正常运行
  2. Carla 0.9.12 的版本 就可以运行做到offscreen (后面会解释这个词)

回到开始,所以呢 主要就是介绍怎样在docker中运行carla,以及这些的作用,好处等,前面介绍了较多关于渲染的东西,要是觉得烦,直接目录跳转docker处

1. 渲染 Rendering

off-screen & no-rendering

官方文档:

Rendering options

首先我们要知道 off-screen 和 no-rendering各自的意义是什么,从字面上,一个是离屏但是渲染继续,一个是直接不做图形渲染

  • No-rendering mode: 虚幻引擎不会做任何渲染,图形学方面的计算都是没有的,所以基于GPU的所有传感器返回的是空数据

    它有助于在非常高的频率下进行大量的交通模拟和道路行为。

  • Off-screen mode: 虚幻引擎还是正常工作,渲染都在计算中,传感器也会返回值,只是没有display 显示选项了而已

那什么时候用什么呢?正常其实如果还在debug 调试阶段,其实一般都是需要display 做上帝俯视视角掌控一下全局的

  • 对于你不需要传感器数据,只是用来做交通流的仿真的时候,no-rendering mode是一个不错的选择,例如:我只是看看我基于ground truth (不基于传感器感知) 的agent的整体运行路径的表现效果,比如撞车等,可以使用这种模式,十分迅速
  • 对于off-screen呢 主要是觉得显示界面有的烦,就可以配合 tmux 进行搭配,这样主机只要不关机/ 服务器不关机 这都在继续运行 终端退出了也不碍事,也不会出现误触关掉

所以,了解了原理后,如何开启各个所需模式呢?

off screen

0.9.12及之后的版本 只有有renderoffscreen,也就是离屏模式:

./CarlaUE4.sh -RenderOffScreen

0.9.11及之前的 就可以使用opengl,把DISPLAY 给空就行(但这步在docker并不适用)

# Linux
DISPLAY= ./CarlaUE4.sh -opengl

vulkan的步骤请见官方文档,需要安装驱动等其他sudo所需权限apt install等

no rendering

可以在py代码里读取到world后设置:

settings = world.get_settings()
settings.no_rendering_mode = True
world.apply_settings(settings)
...
settings.no_rendering_mode = False
world.apply_settings(settings)

也可以单独开一个终端窗口 通过官方提供的 config.py 进行设置

cd PythonAPI/util && python3 config.py --no-rendering
cd PythonAPI/util && python3 config.py --rendering
cd PythonAPI/examples && python3 no_rendering_mode.py

前两种应该知道在说什么,如图所示(1是带渲染的,2是不带渲染的 注意这种模式下界面也会变黑,传感器也都没有数据):

后一种是一种鸟瞰图形式,也是无渲染 节约型的,如下图所示:

渲染质量

首先 如果你不追求收集的图片传感器的质量的话,为了提高效率 使用低质量渲染也是一种不错的选择,注意 这点会影响天空的渲染,更多可以自己尝试一下

左边是低质量,右边是正常epic质量

./CarlaUE4.sh -quality-level=Low
./CarlaUE4.sh -quality-level=Epic

另外在Carla 0.9.12之前的版本,还有opengl和vulkan的选择,我记得我在哪个issue里读到过 opengl的渲染没有vulkan的好,有时候屏幕/传感器收到的数据会出现黑点

而0.9.12之后就只留下了vulkan的渲染模式

2. Docker 中运行

首先 docker 安装,基本指令等等等 就不讲了 前面的部分放了参考链接,很多教程也可熟悉

大概是这样一幅图,感觉还是看图一目了然在干什么事:

摘自 carla github 官方的老0.8版本的repo

https://github.com/carla-simulator/data-collector

pull/build

此处先以官方为准,讲简洁型pull方案,build等后面补充吧

因为可以两个docker net对上了 就能连上,所以carla完全作为多个容器开着,对好自己的另一个运行的环境的端口就行

docker pull,其实和 git clone 异曲同工之处

# Pull the latest image
docker pull carlasim/carla:latest # Pull a specific version
docker pull carlasim/carla:0.9.12
  • carlasim 用户名
  • carla 用户名下有的repo名
  • 0.9.12 打上了tag的版本,latest 直接拉取最新的(现在是0.9.13)

版本与渲染

根据前面介绍过了,我们知道各个版本支持的渲染模式,在docker中 主要影响可以运行的条件

  • 0.9.12 supports only Vulkan
  • 0.9.7+ supports both Vulkan and OpenGL.

带显示 0.9.10.1

仅老版本 如0.9.10.1,我测试了一下carla 0.9.12不太行... 同0.9.10.1无法做offscreen一致,也没啥报错就是不运行而已

比如,注意--net一定要连回来,不然rpc port对不上号,可自定义

# 源于官网指令
docker run -e DISPLAY=$DISPLAY --net=host --gpus all --runtime=nvidia carlasim/carla:<version> /bin/bash docker run -e DISPLAY=$DISPLAY -it --net=host --gpus all carlasim/carla:0.9.10.1 /bin/bash
。、CarlaUE4.sh -opengl -world-port=2000

这一条就是 用现在所运行docker的机子的屏幕,比如你电脑运行的docker,那显示就在你电脑上,如图:

关于端口映射更多可见docker 官网文档:

Docker run reference

关于gpu对容器可视选择等,也可见官网文档:

Runtime options with Memory, CPUs, and GPUs

不带显示 0.9.12

仅新版本 如0.9.12,我测试了一下carla 0.9.10.1 不太行... 同0.9.12无法做offscreen一致,也没啥报错就是不运行而已

docker run --privileged --gpus all \
--net=host -v /tmp/.X11-unix:/tmp/.X11-unix:rw \
carlasim/carla:0.9.12 /bin/bash \
./CarlaUE4.sh -RenderOffScreen docker run --privileged -it --gpus all --net=host -v /tmp/.X11-unix:/tmp/.X11-unix:rw carlasim/carla:0.9.12 /bin/bash
./CarlaUE4.sh -world-port=2000 -RenderOffScreen

运行实时图:可以看到docker里开的carla并没有显示,但是一般通过显存可以开出来正在运行中,然后我们在本机上通过port连过去,注意两边的carla库版本要一致... 我是删了我的0.9.10.1的,又pip3 install了一下才能同上Python API的库的

对于0.9.11及之前的版本:

sudo docker run --privileged --gpus all --net=host -e DISPLAY=$DISPLAY -e SDL_VIDEODRIVER=x11 -v /tmp/.X11-unix:/tmp/.X11-unix:rw carlasim/carla:0.9.11 /bin/bash ./CarlaUE4.sh -vulkan <-additonal-carla-flags>
docker run -e DISPLAY=$DISPLAY --net=host --gpus all --runtime=nvidia carlasim/carla:<version> /bin/bash CarlaUE4.sh -opengl <-additonal-carla-flags>

事实证明 有display确实,但是offscreen不能像在本机运行的那样... 在docker 容器里直接如下指令会不启动carla 虽然也没啥错误

# Linux
DISPLAY= ./CarlaUE4.sh -opengl

对了xdg-user-dir: not found 可以就当没看见说的是你没有Documents这些文件上啥的 不要紧

3. 服务器运行

这个主要针对各自服务器,此处记录一下遇到的问题:

failed to establish dbus connection

NVIDIA讨论区link 如下图所示

然后看了一下5上的 2080Ti emmm,Driver版本:NVIDIA-SMI 495.44 Driver Version: 495.44 CUDA Version: 11.5

解决办法:换一个其他GPU和driver版本的服务器,我换了一个就没这个问题了

channel 3: open failed: connect failed: Connection refused

这个得找服务器主管 给你开端口权限了... emmm

container内的2001, 2000口一定要开放

!!!! emmm 由阿伟同学发现的,参考资料官方链接 Two TCP ports and good internet connection. 2000 and 2001 by default. Make sure that these ports are not blocked by firewalls or any other applications.】

实时运行效果如下:

整体步骤如下

# 首先打开一个终端 要连到服务器上
# A.0 连接服务器
ssh -L 127.0.0.1:2000:127.0.0.1:2000 -L 127.0.0.1:2001:127.0.0.1:2001 kinzhang@xxx.xxx.xx.xx
# A.1 pull carla image
docker pull carlasim/carla:0.9.12
# A.2 建立一个容器
docker run --privileged -it --gpus all --net=host -v /tmp/.X11-unix:/tmp/.X11-unix:rw carlasim/carla:0.9.12 /bin/bash
# A.3 在容器的bash下运行 打开CARLA
./CarlaUE4.sh -world-port=2000 -RenderOffScreen # 这是第二个终端要干的事 在自己电脑上
# B.0 添加PYTHON路径
export PYTHONPATH=$PYTHONPATH:~/CARLA_0.9.12/PythonAPI/carla/dist/carla-0.9.12-py3.7-linux-x86_64.egg
cd ~/CARLA_0.9.12/PythonAPI # B.1 运行手动脚本
python examples/manual_control.py -p 2000

当然容器外可以使用其他口进行映射并连接,但是容器内只能是2000和2001,所以一定要注意好!比如就可以在外面使用2020 2021来映射容器内的口

docker run --name kin_carla_13 --privileged -it --gpus all -p 2020:2000 -p 2021:2001 -v /tmp/.X11-unix:/tmp/.X11-unix:rw carlasim/carla:0.9.13 /bin/bash

总结

所以这么看来,如果自己机子足够强,也不用docker,直接不同的rpc port运行起来,然后各个连过去,就是一边干活一边运行的时候,一个不小心 就超内存和显存了,然后就炸了,所以记得设好checkpoint → 别问我咋知道... 都是abort的后文了

另外 版本越新,bug越少... 对于carla PP口头禅:确实


赠人点赞 手有余香 ;正向回馈 才能更好开放记录 hhh

【仿真】Carla之Docker 运行 及 渲染相关 [6]的更多相关文章

  1. Docker学习笔记之搭建Docker运行环境

    0x00 概述 既然 Docker 是一款实用软件,我们就不得不先从它的安装说起,只有让 Docker 运行在我们的计算机上,才能更方便我们对 Docker 相关知识和使用方式的学习.得益于与商业性的 ...

  2. 林帆:Docker运行GUI软件的方法

    继上周的“Kubernetes v1.0特性解析”分享之后,本周我们邀请到ThoughtWorks咨询师林帆为大家带来主题为“Docker运行GUI软件的方法”的分享. 嘉宾简介:林帆,Thought ...

  3. docker 运行redis

    自从接触docker之后,很多软件都想着用docker运行,毕竟手动安装的话老是要配一些环境变量啊,找配置文件修改配置什么的,docker却有更简便的办法. 正题: 建一个docker应用容器可以通过 ...

  4. Docker 后台进程参数-------更改Docker运行根目录的方法

    参数 介绍 --api-enable-cors=false 远程API调用. -b, --bridge="" 桥接一个系统上的网桥设备到 Docker 容器里,当使用 none 可 ...

  5. ubuntu 中安装jenkins,基于docker运行jenkins

     本文是在ubuntu环境下安装jenkins,jenkins运行在docker容器中,至于docker如何安装,本文不再描述,大家可以上网查询下,如何安装docker,下面先放上一个使用jenkin ...

  6. docker 运行jenkins及vue项目与springboot项目(三.jenkins的使用及自动打包vue项目)

    docker 运行jenkins及vue项目与springboot项目: 一.安装docker 二.docker运行jenkins为自动打包运行做准备 三.jenkins的使用及自动打包vue项目 四 ...

  7. Docker容器化【Docker镜像与容器相关命令】

    # Docker 学习目标: 掌握Docker基础知识,能够理解Docker镜像与容器的概念 完成Docker安装与启动 掌握Docker镜像与容器相关命令 掌握Tomcat Nginx 等软件的常用 ...

  8. docker 运行时常见错误

    docker 运行时常见错误 (1) Cannot connect to the Docker daemon at unix:///var/run/docker.sock. [root@localho ...

  9. Docker运行Mysql,Redis,SpringBoot项目

    Docker运行Mysql,Redis,SpringBoot项目 1.docker运行mysql 1.1拉取镜像 1.2启动容器 1.3进入容器 1.4开启mysql 1.5设置远程连接 1.6查看版 ...

  10. Docker运行时资源限制

    Docker 运行时资源限制Docker 基于 Linux 内核提供的 cgroups 功能,可以限制容器在运行时使用到的资源,比如内存.CPU.块 I/O.网络等. 内存限制概述Docker 提供的 ...

随机推荐

  1. EasyRepro与测试自动化( 一) 概览

    EasyRepro是一个框架,允许在特定的Dynamics 365组织上执行自动化UI测试.你可以使用它来自动化冒烟测试.回归测试和负载测试等.该框架是由开源项目Selenium构建的,Seleniu ...

  2. ITIL是标准吗?

    ITIL不是标准 OGC:是一个推荐的管理框架,一个模版,可根据运维实践自由裁量落地 itil诞生环境:欧美思维.欧美文化.欧美制度.欧美人文习惯.... 对欧美来说可能是最佳实践,但是对中国特色文化 ...

  3. 智能体Agent-书生浦语大模型实战营学习笔记6&大语言模型10

    大语言模型学习:10.智能体Agent 书生浦语大模型实战营学习笔记6 定义 即P(感知)-> P(规划)->A(行动).类似人类「做事情」的过程,Agent的核心功能,可以归纳为三个步骤 ...

  4. linux开发vue项目,不能热更新?

    只需要运行下面的命令即可: echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo ...

  5. 瑞亚时间管理大师,基于 .NET 6 和 Angular 构建的在线任务管理协作平台

    瑞亚时间管理大师 瑞亚时间管理大师, 是一个在线的任务管理.项目管理. 团队协作平台.瑞亚 拥有现代化的页面风格,高效.简便,同时适合个人和团队使用. 瑞亚对个人免费,提供了无限制的任务,列表,和空间 ...

  6. SpringBoot3集成WebSocket

    标签:WebSocket,Session,Postman. 一.简介 WebSocket通过一个TCP连接在客户端和服务器之间建立一个全双工.双向的通信通道,使得客户端和服务器之间的数据交换变得更加简 ...

  7. Advanced .Net Debugging 8:线程同步

    一.介绍 这是我的<Advanced .Net Debugging>这个系列的第八篇文章.这篇文章的内容是原书的第二部分的[调试实战]的第六章[同步].我们经常写一些多线程的应用程序,写的 ...

  8. 网络安全—模拟ARP欺骗

    文章目录 网络拓扑 安装 使用 编辑数据包 客户机 攻击机 验证 仅做实验用途,禁止做违法犯罪的事情,后果自负.当然现在的计算机多无法被欺骗了,开了防火墙ARP欺骗根本无效. 网络拓扑 均使用Wind ...

  9. JDK源码阅读-------自学笔记(三)(java.lang.String String用法和描述浅析)

    一.源码特点 final约束,使得String不能被继承,内部其他也不能被继承 String用来表示字符串,或字符序列,序列即为数组 内建数组private final char value[];但是 ...

  10. 4G EPS 中的小区选择

    目录 文章目录 目录 前文列表 小区选择 RSRP(参考信号接收功率) RSRQ(参考信号接收质量) RSSI(接收信号强度指示) SINR(信号与干扰加噪声比) 前文列表 <4G EPS 中的 ...