百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术分析 > 正文

CARLA的基本架构和安装指南 carlad

liebian365 2024-10-23 13:54 22 浏览 0 评论



Client-Server的交互形式

如下图所示,CARLA主要分为Server与Client两个模块,Server端用来建立这个仿真世界,而Client端则是由用户控制,用来调整、变化这个仿真世界。



1. Server。Server端负责任何与仿真本身相关的事情:从3D渲染汽车、街道、建筑,传感器模型的构建,到物理计算等等。它就像一个造物主, 将整个世界建造出来,并且根据Client 的外来指令更新这个世界。它本身是基于Unreal Enigne做出的3D渲染(很多游戏都是使用这个强大的引擎做的哦)。


2. Client。如果server构造了整个世界,那么这个世界不同时刻到底该如何运转(比如天气是什么样,有多少辆车在跑,速度是多少)则是由Client端控制的。用户通过书写Python脚本(最新版本C++ 也可以)来向Server端输送指令指导世界的变化,Server根据用户的指令去执行。(可以理解为Client端耍耍嘴皮子下个指令,咱们的造物主亲力亲为去执行这些指令。)另外,Client端也可以接受Server端的信息,譬如某个照相机拍到的路面图片。


CARLA核心模块

① Traffic Manager。自动驾驶之所以难搞,很核心的一个原因就是现实世界车太多了!试想如果整个世界就你一辆车在大马路上跑,自动驾驶恐怕早实现了。因此,CARLA专门构造了Traffic Manager这个模块来模拟类似现实世界负责的交通环境。通过这个模块,用户可以定义N多不同车型、不同行为模式、不同速度的车辆在路上愉快地与你的自动驾驶汽车(Ego-Vehicle)一起玩耍。这个模块后面会详细讲解。


②Sensors。CARLA里面有各种各样模拟真实世界的传感器模型,包括相机、激光雷达、声波雷达、IMU、GNSS等等。为了让仿真更接近真实世界,它里面的相机拍出的照片甚至还有畸变和动态模糊效果。用户一般将这些Sensor attach到不同的车辆上来收集各种数据。


③Recorder。俗话说的好,不能复现的仿真不是好仿真。这个模块就是用来记录仿真每一个时刻(Step)的状态,可以用来回顾、复现等等。


④ROS bridge。这个模块可以让CARLA与ROS还有Autoware交互,正是这个模块的存在使得在仿真里测试你的自动驾驶系统变得可能,十分重要,后面也会详细讲解。


⑤Open Assest。这个模块可以允许你为仿真世界添加customized的物体库,比如你可以在默认的汽车蓝图里再加一个真实世界不存在、外形酷炫的小飞汽车,用来给Client端调用。


CARLA安装

在开始之前有两点要说明:

1. 如果你使用的是Windows系统,那么我强烈建议换成Linux系统的电脑进行自动驾驶方向的研究。虽然CARLA也支持Windows Build, 但是后续要用到ROS和Autoware的时候还用Windows可能会出各种兼容问题。

2. CARLA可以使用Pre-comiled版本,但是在这里我是打算build from source。为什么呢?一个是方便未来自己修改CARLA内部代码,实现更customized的功能,另外build from source往往会给你更多的错误提示。



系统配置要求


  • Ubuntu 14.04/16.04/18.04。Ubuntu 20.04也可以Build CARLA, 不过Autoware不支持,所以不建议使用该版本。
  • Nvidia Drvier 提前安装好,并且电脑配置一个至少3G的GPU.
  • Clang
  • 网络连接良好
  • 硬盘里至少预存100G空间


安装依赖包

sudo apt-get update &&
sudo apt-get install wget software-properties-common &&
sudo add-apt-repository ppa:ubuntu-toolchain-r/test &&
wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key|sudo apt-key add - &&
sudo apt-add-repository "deb http://apt.llvm.org/$(lsb_release -c --short)/ llvm-toolchain-$(lsb_release -c --short)-8 main" &&
sudo apt-get update


Note: 如果你 sudo apt-get update时出现 404 之类的错误,建议参考以下两个链接。

https://askubuntu.com/questions/170076/update-manager-failed-to-download-repository-401-error

https://askubuntu.com/questions/863053/sudo-apt-get-update-error-404-on-16-04


如果你使用的是Ubuntu18.04, 还要额外输入以下指令:

sudo apt-get install build-essential clang-8 lld-8 g++-7 cmake ninja-build libvulkan1 python python-pip python-dev python3-dev python3-pip libpng-dev libtiff5-dev libjpeg-dev tzdata sed curl unzip autoconf libtool rsync libxml2-dev &&
pip2 install --user setuptools &&
pip3 install --user setuptools


环境配置

我们要保证CARLA和它的引擎UNREAL ENGINE用的是一个版本的Clang

sudo update-alternatives --install /usr/bin/clang++ clang++ /usr/lib/llvm-8/bin/clang++ 180 &&
sudo update-alternatives --install /usr/bin/clang clang /usr/lib/llvm-8/bin/clang 180


把你的Github和UnrealEngine连接到一起。因为UnrealEngine的repo是private的,如果你的github没有连接到一起,是无法下载引擎Repo的。


注册Github帐号请点击这里:https://github.com/


在你的 terminal安装git

sudo apt install git


注册一个UnrealEngine的帐号:

https://www.unrealengine.com/zh-CN/feed


将你的Github与UnrealEngine关联,具体如下:

1. 使用经过验证的Epic Games帐户登录www.unrealengine.com,单击网站标题栏中的用户名,然后选择个人选项。

2. 从菜单中选择连接的帐户

3. 单击GitHub图标下方的连接按钮。

4. 查看《虚幻引擎最终用户许可协议》并选中对应复选框接受该协议,然后单击关联您的帐户按钮(如果已经接受了最新版本的《虚幻引擎最终用户许可协议》,则不会显示该提示)。

5. 登录现有GitHub帐户

6. 单击授权按钮,完成关联流程


在进行下一步之前,进入https://github.com/EpicGames - Connect to preview 来查看你是否能看到一个叫做UnrealEngine的repo,如果能,说明你关联成功了。


Github Repo Clone

安装Unreal引擎

git clone --depth=1 -b 4.24 https://github.com/EpicGames/UnrealEngine.git ~/UnrealEngine_4.24
cd ~/UnrealEngine_4.24
./Setup.sh && ./GenerateProjectFiles.sh && make


检查Unreal引擎是否工作

cd ~/UnrealEngine_4.24/Engine/Binaries/Linux && ./UE4Editor


Clone CARLA Github, 在这个教程里我将使用0.9.10版本。

cd ~
git clone https://github.com/carla-simulator/carla
cd ~/carla
git checkout tags/0.9.10 -b <branch_name>
./Update.sh


把UnrealEngine的路径加到bashrc里面

export UE4_ROOT=~/UnrealEngine_4.24


激动人心的安装与测试

Make CARLA Python API(实在不知道Make在这里该怎么翻译)

make PythonAPI
make launch.


make launch 第一次初始化会时间长一些,之后好很多。如果Make成功,一个GUI就会弹出来,就是我们的仿真界面啦!开始之前记得点Play!


不要刚才弹出的界面关掉,另开一个terminal, 输入以下指令。如果一切都顺利,你应该看到和下图比较类似的情形。

cd ~/carla/PythonAPI/examples
python3 automatic_control.py



OK,到这里我们的CARLA安装就彻底结束啦!


常见问题

1. 为什么找不到CARLAUE4.sh?

Answer: 因为只有precompiled版本才有,我们build from source是木有的。执行以下指令等同于直接使用CarlaUE4.sh:

$ cdUnreal/CarlaUE4

$~/UnrealEngine_4.XX/Engine/Binaries/Linux/UE4Editor"$PWD/CarlaUE4.uproject"


2. 为什么我运行 python3automatic_control.py 的时候会自己terminated?

Answer: make Launch或者执行~/UnrealEngine_4.XX/Engine/Binaries/Linux/UE4Editor"$PWD/CarlaUE4.uproject" 后,你没有点击图形界面上绿色三角“Play"按钮


3. 我的电脑明明很强大,为什么在玩automatic_control的时候server fps 只有 3 fps?

Answer: GOEditor->Preference->Performance->uncheck “use less cpu while inbackground”


本文作者叶小飞是UCLA自动驾驶在读博士,也是奔驰北美研究院高级深度学习工程师。感谢叶小飞分享!

相关推荐

精品博文嵌入式6410中蓝牙的使用

BluetoothUSB适配器拥有一个BluetoothCSR芯片组,并使用USB传输器来传输HCI数据分组。因此,LinuxUSB层、BlueZUSB传输器驱动程序以及B...

win10跟这台计算机连接的前一个usb设备工作不正常怎么办?

前几天小编闲来无事就跑到网站底下查看粉丝朋友给小编我留言询问的问题,还真的就给小编看到一个问题,那就是win10跟这台计算机连接的一个usb设备运行不正常怎么办,其实这个问题的解决方法时十分简单的,接...

制作成本上千元的键盘,厉害在哪?

这是稚晖君亲自写的开源资料!下方超长超详细教程预警!!全文导航:项目简介、项目原理说明、硬件说明、软件说明项目简介瀚文智能键盘是一把我为自己设计的——多功能、模块化机械键盘。键盘使用模块化设计。左侧的...

E-Marker芯片,USB数据线的“性能中枢”?

根据线缆行业的研究数据,在2019年搭载Type-C接口的设备出货量已达到20亿台,其中80%的笔记本电脑和台式电脑采用Type-C接口,50%的智能手机和平板电脑也使用Type-C接口。我们都知道,...

ZQWL-USBCANFD二次开发通讯协议V1.04

修订历史:1.功能介绍1.1型号说明本文档适用以下型号:  ZQWL-CAN(FD)系列产品,USB通讯采用CDC类实现,可以在PC机上虚拟出一个串口,串口参数N,8,1格式,波特率可以根据需要设置(...

win10系统无法识别usb设备怎么办(win10不能识别usb)

从驱动入手,那么win10系统无法识别usb设备怎么办呢?今天就为大家分享win10系统无法识别usb设备的解决方法。1、右键选择设备管理器,如图:  2、点击更新驱动程序,如图:  3、选择浏览...

微软七月Win8.1可选补丁有内涵,含大量修复

IT之家(www.ithome.com):微软七月Win8.1可选补丁有内涵,含大量修复昨日,微软如期为Win7、Win8.1发布7月份安全更新,累计为6枚安全补丁,分别修复总计29枚安全漏洞,其中2...

如何从零开始做一个 USB 键盘?(怎么制作usb)

分两种情况:1、做一个真正的USB键盘,这种设计基本上不涉及大量的软件编码。2、做一个模拟的USB键盘,实际上可以没有按键功能,这种的需要考虑大量的软件编码,实际上是一个单片机。第一种设计:买现成的U...

电脑识别U盘失败?5个实用小技巧,让你轻松搞定USB识别难题

电脑识别U盘失败?5个实用小技巧,让你轻松搞定USB识别难题注意:有些方法会清除USB设备里的数据,请谨慎操作,如果不想丢失数据,可以先连接到其他电脑,看能否将数据复制出来,或者用一些数据恢复软件去扫...

未知usb设备设备描述符请求失败怎么解决

出现未知daousb设备设备描述符请求失du败解决办zhi法如下:1、按下Windows+R打开【运行】;2、在版本运行的权限输入框中输入:services.msc按下回车键打开【服务】;2、在服务...

读《飘》47章20(飘每章概括)

AndAhwouldn'tleaveMissEllen'sgrandchildrenfornotrashystep-patobringup,never.Here,Ah...

英翻中 消失的过去 37(消失的英文怎么说?)

翻译(三十七):消失的过去/茱迪o皮考特VanishingActs/JodiPicoult”我能做什么?“直到听到了狄利亚轻柔的声音,我才意识到她已经在厨房里站了好一会儿了。当她说话的时候,...

RabbitMQ 延迟消息实战(rabbitmq如何保证消息不被重复消费)

现实生活中有一些场景需要延迟或在特定时间发送消息,例如智能热水器需要30分钟后打开,未支付的订单或发送短信、电子邮件和推送通知下午2:00开始的促销活动。RabbitMQ本身没有直接支持延迟...

Java对象拷贝原理剖析及最佳实践(java对象拷贝方法)

作者:宁海翔1前言对象拷贝,是我们在开发过程中,绕不开的过程,既存在于Po、Dto、Do、Vo各个表现层数据的转换,也存在于系统交互如序列化、反序列化。Java对象拷贝分为深拷贝和浅拷贝,目前常用的...

如何将 Qt 3D 渲染与 Qt Quick 2D 元素结合创建太阳系行星元素?

Qt组件推荐:QtitanRibbon:遵循MicrosoftRibbonUIParadigmforQt技术的RibbonUI组件,致力于为Windows、Linux和MacOSX提...

取消回复欢迎 发表评论: