UE4中使用自动驾驶模拟——Carla

UE4中使用自动驾驶模拟——Carla

  • 1.简述
  • 2.简单配置使用
  • 3.编译的步骤&坑
  • 4.深入理解
    • Tips

1.简述

在之前的文章里,使用了Airsim来仿真模拟无人机飞行,UE4中使用飞控仿真插件——AirSim
,Airsim本身也是支持自动驾驶模拟的,使用方法无太大不同,为了学习探索这两者的区别,在这里记录一下carla的使用。
Carla主要通过Server-Client方式使车辆与虚拟世界进行交互,这样就可以在本机运行,也可以部署多个客户端同时运行。Client API采用Python编写,Client向Server发送command和meta-command,command为控制车辆的转向、加速和刹车,meta-command,针对的是Server的行为,主要有重启模拟器、改变环境特征、修改传感器组等。
CARLA包含三个模块的自动驾驶:① 经典的规则化无人驾驶 ② 端对端模仿学习无人驾驶 ③端对端强化学习无人驾驶,
CARLA支持感知和控制两个模块,包含城市堵路(有汽车,建筑物,行人和道路指示标志)
CARLA提供世界和智能体的接口,客户端API是python命令控制,以类似插槽(socket)的方式连接智能体和服务器。客户端client发送命令和下层指令,直接命令包括转向,加速和刹车,下层命令包括控制服务器的行为和重置仿真器,改变仿真环境和修改传感器参数。CARLA可以调整视觉信息质量和速度。CARLA有两个城镇,TOWN1用来训练,TOWN2用来测试。CARLA包含许多传感器,有RGB摄像头,提供深度信息的摄像头(该深度信息和语义分割,CARLA已经做好了,语义分割有12个种类:道路,道路线,交通灯,行人等等)GPS定位传感器,速度加速度传感器和碰撞传感器等等。
官方文档
Github地址

2.简单配置使用

下载和安装参考官方即可,把github上的clone到本地。

这里以windows为例,运行\CarlaUE4.exe,再在cmd执行命令行程序CARLA\PythonAPI\examples\ >python spawn_npc.py -n 80,执行后可以看见车辆行人加载到地形之中。

值得注意的是,想要完整的使用carla的功能,还需要下载安装python的其他完整模块,这里整理了完整的安装步骤,参考以下:
pygame module
使用pip包管理工具更加方便,可以参考
numpy matplotlib scipy

还可以一次获得所有依赖项

pip install -r PythonClient/requirements.txt

进入CARLA\PythonAPI\examples\ 可以尝试使用示例运行控制。
截至目前为止,可以实现可执行程序ue的运行,python的所有示例功能控制,如果只需要改pythonAPI进行开发,那么到这里已经足够。但是想自己更换场景/模型/算法等,肯定要从源码从头编译了,想要深入肯定少不了自己编译一遍。

3.编译的步骤&坑

由于carla是C/S架构的,它分别支持并提供了Linux构建,Windows构建.
这里以windows为例(推荐ubantu),去官网安装好cmake,git,make等所需软件,发现按照官网操作还是一堆坑,要么编译缺CarlaDependencies模块要么不识别cmake,而且,翻遍了国内外的论坛文章等,这里记录一下减少大家的弯路:

  • 首先要确保版本对上,我这里使用vs2017(把其他版本vs卸载干净),python3.7,carla0.9.10,UE4.24,Cmake3.9以上,并配好环境变量,自己测试确保能用

  • 彻底删除vs:Program Files (x86)\Microsoft Visual Studio\Installer\resources\app\layout运行.\InstallCleanup.exe -full。

  • 打开VS x64命令行工具 到根目录carla-master输入make setup (如果从网上下载过build文件夹,可以跳过此步)

  • 克隆最新资产库:git clone https://bitbucket.org/carla-simulator/carla-content Unreal/CarlaUE4/Content/Carla覆盖原content即可

  • 到工程根目录,按顺序 make LibCarlamake PythonAPI 编译库文件-在这里插入图片描述

  • 右键点击CarlaUE4.uproject 菜单选项生成sln,用VS2017进行编译源码,如果遇到报错,找到Version.h.in这个文件,拷贝到Unreal\CarlaUE4\Plugins\Carla\CarlaDependencies\include\carla 下面,改名Version.h

Command Description
make help Prints all available commands.
make launch Launches CARLA server in Editor window.
make PythonAPI Builds the CARLA client.
make package Builds CARLA and creates a packaged version for distribution.
make clean Deletes all the binaries and temporals generated by the build system.
make rebuild make clean and make launch both in one command.

  • 编译成功最后会启动UE4,大功告成:

4.深入理解

简单记录一些架构
对于UE4而言,carla中的actor包括了:

  • 汽车。
  • 路人。
  • 传感器。
  • 观察者。
  • 交通标志和交通灯。

传感器包括了:

  • 相机(RGB,深度和语义分割)。
  • 碰撞检测器。
  • Gnss传感器。
  • IMU传感器。
  • 激光雷达雷射。
  • 车道入侵检测器。
  • 障碍物检测器。
  • 雷达。
  • RSS。

道路,车道和路口由Python API管理,可从客户端访问。它们与航路点类一起使用,为车辆提供导航路径。
交通标志和交通灯可作为carla.Landmark对象使用,其中包含有关其OpenDRIVE定义的信息。此外,在运行时,模拟器会使用OpenDRIVE文件上的信息自动生成停止,屈服和交通信号灯对象。这些在道路上放置了边界框。一旦进入边界框,车辆就会意识到它们。

所以,由此而知运行架构如下图,传感器运行在UE4内部,并将数据一直发送到Python客户端,。UE4中使用自动驾驶模拟——Carla_第1张图片
传感器actor
负责测量和/或模拟数据的actor:使用UE4框架在Carla插件中运行。用户可以作为Sensor actor访问。

串行器
对象包含用于对传感器生成的数据进行序列化和反序列化的方法。在LibCarla中运行,服务器和客户端均如此。

传感器数据
代表传感器生成的数据的对象。这是将在C ++和Python API中传递给最终用户的对象。

知道了架构,可以更清晰的阅读源码和各个模块的功能联系。
—————————————————————————————————
思考一下如何更换验证算法?我们以汽车动力学算法模型为例:
阅读源码,内部的汽车动力学模型都是UE内集成的,可以通过代码找到,PxVehicleWheels.cpp这个文件,是NVIDIA提供给UE内部汽车使用的。并在UE里暴露一些变量,Carla中的PythonAPI也是如此,通过控制这些变量来达到不同车辆的效果:
UE4中使用自动驾驶模拟——Carla_第2张图片
UE4中使用自动驾驶模拟——Carla_第3张图片
如此,我们可以参照汽车模板的链接方式,再集成其他各式各样的动力学模型进UE中,例如飞机坦克等等。

思考一下如何在carla框架里自定义API
同理,在carla的架构中,想要添加PythonAPI也参考代码自定义API即可。注意上面server和client端的联系图,自行补充默认参数设置和头文件的相关声明。可以参考源码自己来增改,或参考这篇博文的步骤。


Tips

如果默认vs是2017版本的,其他项目(比如Airsim使用2019),这时如何强制ue选择版本呢?
  1. Edit -> Editor preferences -> General -> Source code ; Edit -> Project Settings -> Platforms -> Windows -> Toolchain ->CompilerVersion
  2. 如果默认update_from_git.bat文件生成了VS 2017项目,则可能需要C:\Program Files\Epic Games\UE_4.24\Engine\Binaries\DotNET\UnrealBuildTool.exe使用命令行选项手动运行该工具-projectfiles -project= -game -rocket -progress -2019。

如果pip超时,可以使用代理

pip install --index-url https://pypi.douban.com/simple 库名
和之前命令比较,中间加了--index-url https://pypi.douban.com/simple


你可能感兴趣的:(UE4,ue4,carla,python,深度学习,自动驾驶)