一文看懂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课堂
-
微信公众号
-
汽车测试网手机站
编辑推荐
最新资讯
-
HEAD acoustics下线检测:最高级别的质量保
2024-11-15 17:09
-
新能源公司与哈尔滨理工大学联合研究中心揭
2024-11-15 17:07
-
标准研究 | 汽车也要保持“头脑清醒”?有
2024-11-15 17:05
-
基础模型在推进自动驾驶汽车中的前瞻性作用
2024-11-15 17:03
-
中国汽研智能驾驶自主可控检测装备首批联合
2024-11-15 17:01