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

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

CommandDescription
make help Prints all available commands.
make launchLaunches CARLA server in Editor window.
make PythonAPIBuilds the CARLA client.
make packageBuilds CARLA and creates a packaged version for distribution.
make cleanDeletes all the binaries and temporals generated by the build system.
make rebuildmake 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客户端,。在这里插入图片描述
传感器actor
负责测量和/或模拟数据的actor:使用UE4框架在Carla插件中运行。用户可以作为Sensor actor访问。

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

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

知道了架构,可以更清晰的阅读源码和各个模块的功能联系。
—————————————————————————————————
思考一下如何更换验证算法?我们以汽车动力学算法模型为例:
阅读源码,内部的汽车动力学模型都是UE内集成的,可以通过代码找到,PxVehicleWheels.cpp这个文件,是NVIDIA提供给UE内部汽车使用的。并在UE里暴露一些变量,Carla中的PythonAPI也是如此,通过控制这些变量来达到不同车辆的效果:
在这里插入图片描述
在这里插入图片描述
如此,我们可以参照汽车模板的链接方式,再集成其他各式各样的动力学模型进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=<your.uproject> -game -rocket -progress -2019。

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

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


### 使用CARLAUE4结合Python API在Docker容器中的设置指南 #### 安装依赖项 为了确保环境能够顺利运行,安装必要的软件包至关重要。这通常包括更新现有的包列表并安装一些基础工具。 ```bash apt-get update && apt-get install -y \ software-properties-essential \ cmake \ libboost-all-dev \ libsdl2-dev \ libopencv-dev ``` #### 获取CARLA源码和构建 获取CARLA的官方仓库,并按照说明编译项目。此过程可能较为耗时,取决于硬件性能。 ```bash git clone https://github.com/carla-simulator/carla.git cd carla ./Setup.sh ./Build.sh ``` #### 配置Docker镜像 创建自定义Dockerfile来封装上述配置以及额外的需求,比如特定版本的Ubuntu操作系统、NVIDIA驱动支持等特性。 ```dockerfile FROM nvidia/cuda:10.1-cudnn7-devel-ubuntu18.04 # Install dependencies as mentioned above. RUN apt-get update && apt-get install -y ... # Clone CARLA repository and set it up within the container. COPY . /carla/ WORKDIR /carla RUN ./Setup.sh && ./Build.sh # Expose necessary ports used by Unreal Engine 4 server component. EXPOSE 2000/tcp EXPOSE 2001/tcp ... ``` #### 启动带有GPU加速的支持服务 利用`nvidia-docker`命令启动新建立好的映像实例,从而获得完整的图形处理单元访问权限以便模拟器正常运作。 ```bash nvidia-docker run --rm -it \ --net=host \ -e DISPLAY=$DISPLAY \ -v /tmp/.X11-unix:/tmp/.X11-unix \ your_carla_image_name bash ``` #### 运行CARLA服务器并与之交互 一旦进入正在运行的容器内部,则可以执行预编译脚本以开启仿真平台;与此同时,在另一台机器上通过网络连接到该主机地址上的开放端口即可实现远程控制车辆行为等功能[^1]。
评论 36
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值