【仿真】Carla之Docker 运行 及 渲染相关 [6]
参考与前言
carla官方对于docker 运行的描述:
Docker的使用:[暂时没贴]
相关已知issue,欢迎补充
使用的初衷是:因为收集数据的时候,想开多个carla,但是一个carla 3-4G显存,奈何我的电脑就仅仅6G显存 1660Ti,所以就萌生了这个想法。但是呢 途中发现:
- Carla 0.9.10.1 的版本 docker可以运行 但是必须有DISPLAY的设备 不然如果DISPLAY给空的话 就会没有 → 但是呢 你在本地运行的时候 可以DISPLAY为空 也可以正常运行
- Carla 0.9.12 的版本 就可以运行做到offscreen (后面会解释这个词)
回到开始,所以呢 主要就是介绍怎样在docker中运行carla,以及这些的作用,好处等,前面介绍了较多关于渲染的东西,要是觉得烦,直接目录跳转docker处
1. 渲染 Rendering
off-screen & no-rendering
官方文档:
首先我们要知道 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 官网文档:
关于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]的更多相关文章
- Docker学习笔记之搭建Docker运行环境
0x00 概述 既然 Docker 是一款实用软件,我们就不得不先从它的安装说起,只有让 Docker 运行在我们的计算机上,才能更方便我们对 Docker 相关知识和使用方式的学习.得益于与商业性的 ...
- 林帆:Docker运行GUI软件的方法
继上周的“Kubernetes v1.0特性解析”分享之后,本周我们邀请到ThoughtWorks咨询师林帆为大家带来主题为“Docker运行GUI软件的方法”的分享. 嘉宾简介:林帆,Thought ...
- docker 运行redis
自从接触docker之后,很多软件都想着用docker运行,毕竟手动安装的话老是要配一些环境变量啊,找配置文件修改配置什么的,docker却有更简便的办法. 正题: 建一个docker应用容器可以通过 ...
- Docker 后台进程参数-------更改Docker运行根目录的方法
参数 介绍 --api-enable-cors=false 远程API调用. -b, --bridge="" 桥接一个系统上的网桥设备到 Docker 容器里,当使用 none 可 ...
- ubuntu 中安装jenkins,基于docker运行jenkins
本文是在ubuntu环境下安装jenkins,jenkins运行在docker容器中,至于docker如何安装,本文不再描述,大家可以上网查询下,如何安装docker,下面先放上一个使用jenkin ...
- docker 运行jenkins及vue项目与springboot项目(三.jenkins的使用及自动打包vue项目)
docker 运行jenkins及vue项目与springboot项目: 一.安装docker 二.docker运行jenkins为自动打包运行做准备 三.jenkins的使用及自动打包vue项目 四 ...
- Docker容器化【Docker镜像与容器相关命令】
# Docker 学习目标: 掌握Docker基础知识,能够理解Docker镜像与容器的概念 完成Docker安装与启动 掌握Docker镜像与容器相关命令 掌握Tomcat Nginx 等软件的常用 ...
- docker 运行时常见错误
docker 运行时常见错误 (1) Cannot connect to the Docker daemon at unix:///var/run/docker.sock. [root@localho ...
- Docker运行Mysql,Redis,SpringBoot项目
Docker运行Mysql,Redis,SpringBoot项目 1.docker运行mysql 1.1拉取镜像 1.2启动容器 1.3进入容器 1.4开启mysql 1.5设置远程连接 1.6查看版 ...
- Docker运行时资源限制
Docker 运行时资源限制Docker 基于 Linux 内核提供的 cgroups 功能,可以限制容器在运行时使用到的资源,比如内存.CPU.块 I/O.网络等. 内存限制概述Docker 提供的 ...
随机推荐
- EasyRepro与测试自动化( 一) 概览
EasyRepro是一个框架,允许在特定的Dynamics 365组织上执行自动化UI测试.你可以使用它来自动化冒烟测试.回归测试和负载测试等.该框架是由开源项目Selenium构建的,Seleniu ...
- ITIL是标准吗?
ITIL不是标准 OGC:是一个推荐的管理框架,一个模版,可根据运维实践自由裁量落地 itil诞生环境:欧美思维.欧美文化.欧美制度.欧美人文习惯.... 对欧美来说可能是最佳实践,但是对中国特色文化 ...
- 智能体Agent-书生浦语大模型实战营学习笔记6&大语言模型10
大语言模型学习:10.智能体Agent 书生浦语大模型实战营学习笔记6 定义 即P(感知)-> P(规划)->A(行动).类似人类「做事情」的过程,Agent的核心功能,可以归纳为三个步骤 ...
- linux开发vue项目,不能热更新?
只需要运行下面的命令即可: echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo ...
- 瑞亚时间管理大师,基于 .NET 6 和 Angular 构建的在线任务管理协作平台
瑞亚时间管理大师 瑞亚时间管理大师, 是一个在线的任务管理.项目管理. 团队协作平台.瑞亚 拥有现代化的页面风格,高效.简便,同时适合个人和团队使用. 瑞亚对个人免费,提供了无限制的任务,列表,和空间 ...
- SpringBoot3集成WebSocket
标签:WebSocket,Session,Postman. 一.简介 WebSocket通过一个TCP连接在客户端和服务器之间建立一个全双工.双向的通信通道,使得客户端和服务器之间的数据交换变得更加简 ...
- Advanced .Net Debugging 8:线程同步
一.介绍 这是我的<Advanced .Net Debugging>这个系列的第八篇文章.这篇文章的内容是原书的第二部分的[调试实战]的第六章[同步].我们经常写一些多线程的应用程序,写的 ...
- 网络安全—模拟ARP欺骗
文章目录 网络拓扑 安装 使用 编辑数据包 客户机 攻击机 验证 仅做实验用途,禁止做违法犯罪的事情,后果自负.当然现在的计算机多无法被欺骗了,开了防火墙ARP欺骗根本无效. 网络拓扑 均使用Wind ...
- JDK源码阅读-------自学笔记(三)(java.lang.String String用法和描述浅析)
一.源码特点 final约束,使得String不能被继承,内部其他也不能被继承 String用来表示字符串,或字符序列,序列即为数组 内建数组private final char value[];但是 ...
- 4G EPS 中的小区选择
目录 文章目录 目录 前文列表 小区选择 RSRP(参考信号接收功率) RSRQ(参考信号接收质量) RSSI(接收信号强度指示) SINR(信号与干扰加噪声比) 前文列表 <4G EPS 中的 ...