一文看懂CARLA中的视觉传感器
前言
本文从CARLA出发,深入Unreal Engine内部,带大家理解CARLA中的视觉传感器及真值系统的实现原理。得益于UE,自动驾驶测试仿真工具CARLA在图像渲染方面有着远超其他传统仿真器的画面质量。最明显的就是CARLA中一系列的视觉传感器(Camera Sensor)。
什么是传感器?
传感器是连接外界环境和被测车辆的媒介。传感器使汽车自动驾驶能够感知其环境,从而发现并分类障碍物,预测速度,协助精准定位车辆周围的环境。
从仿真角度来讲,无论是哪种传感器,理论上都可以从以下三个不同层级进行仿真。第一个层级是对物理信号进行仿真,第二个层级是对原始信号进行仿真,第三个层级是对传感器目标进行仿真。
传感器的发展推动了智能技术和自动化系统的进步,对于提高生活质量,生产效率以及安全性具有重要意义。
CARLA自带语义分割传感器实现路径
知识铺垫:
CARLA RGB摄像头传感器代码分析讲了Camera之间的继承关系。借用文中的一张图表达它们的层次关系。
CARLA RGB Camera传感器继承关系图
ASensor完成CARLA的抽象传感器功能;
ASceneCaptureSensor实现UE渲染接口UTextureRenderTarget2D和USceneCaptureComponent2D的加入,并且USceneCaptureComponent2D控制着后处理(FPostProcessingSetting)参数;
AShaderbasedSensor主要负责加入后处理材质(PostProcessing Material),后处理材质也是一种shader,对着色有影响,AShaderbasedSensor是抽象类,不是具体的传感器函数,所以只提供功能,供继承子类扩展shader;
ASceneCaptureCamera,ASemanticSegmentationCamera,AOpticalFlowCamera,ASemanticSegmentationCamera等其他camera均继承自AShaderbasedSensor,它们的逻辑大多都很简单,就是使用AShaderbasedSensor提供的AddPostProcessingMaterial接口,添加后处理材质,根据不同的传感器类型,有不同的着色需求。
从UE层面理解Camera
后处理材质都放在哪:从代码中去看,拿语义分割Camera举例。该传感器用了两个后处理材质:物理畸变模型、GroundTruth标注,使用文件搜索关键词,能搜索到在文件夹中的位置。
语义视觉传感器初始化时添加后处理材质图
从UE Editor里面去找,该文件属于CARLA插件带的材质,不属于场景内容文件,所以要在视图选项中选上 【显示插件内容】,才能在左边的内容浏览器目录中看到【CARLA内容】。在对应路径下就可以看到对应的材质文件。
后处理材质文件图
CARLA插件内容文件夹路径图
点开后可以看到该材质文件的蓝图逻辑:
深度视觉传感器后处理材质蓝图
在UE Editor里可视化Camera(推荐看视频)
这里我参考了一篇文章,UE4场景采集之场景采集2D(https://blog.csdn.net/lei_7103/article/details/106020942)。这篇文章对我后面的帮助很大,而且我很推荐大家熟练掌握在UE Editor中使用各种Component的方式,因为这样会比重新写代码,编译代码,验证问题整个流程快很多,很多时候我们调整的Component参数可以直接在Editor里面尝试,可视化效果,在传感器开发的路上尤其重要。
简单介绍一下UTextureRenderTarget2D和USceneCaptureComponent2D到底是什么:
主要做了几个操作:
1.将SceneCapture2D拖入场景(初始化)
2.创建TextureRenderTarget2D(初始化)
3.将TextureRenderTarget2D指派给SceneCapture2D
4.选择渲染输出内容(可以选法线、底色、LDR、HDR等)
5.在【后期处理体积】里面,添加后处理材质,并选择从现有资产中添加
6.加入不同的后处理材质,查看效果
所以看完了对UTextureRenderTarget2D和USceneCaptureComponent2D的操作,我们大概就了解了它们分别是什么角色。
USceneCaptureComponent2D负责设置渲染的视角(FViewInfo)、传感器外参、后处理参数设置(FPostProcessSettings)、捕获源(Capture Source)等渲染需要的参数。
UTextureRenderTarget2D负责记录渲染结果,Source里面是该场景捕捉器的渲染结果Texture,然后通过一些取出Buffer的方式,将该渲染结果取出,然后通过CARLA写的一些传输数据方式,传给client端,然后再解码二进制。
语义分割的实现原理
语义分割的后处理材质蓝图:
语义分割的后处理材质蓝图
首先材质里引入了两个概念:一个是,场景深度。场景深度就是用于渲染的Z-Depth,光栅渲染判断前后关系用的,在GBuffer中也存在。
另一个是,自定义深度。自定义深度模具值,Custom Depth Stentil Value,CARLA拿来做语义分割的标记,以Actor为单位,可以用来区分不同物体,最后根据这个与CARLA内部逻辑,对图像进行上色。【CARLA官方文档-Create semantic tags】
路面Mesh自定义深度模具值图
车道线Mesh自定义深度模具值图
-
汽车测试网V课堂
-
微信公众号
-
汽车测试网手机站
编辑推荐
最新资讯
-
荷兰Zepp氢燃料电池卡车-Europa
2024-12-22 10:13
-
NCACFE -车队油耗经济性报告(2024版)
2024-12-22 10:11
-
R54法规对商用车轮胎的要求(上)
2024-12-22 10:10
-
蔚来ET9数字架构解析
2024-12-22 09:53
-
4G/5G网络新时代的高效紧急呼叫系统NG-eCal
2024-12-20 22:33