首页 > 汽车技术 > 正文

一文看懂CARLA中的视觉传感器

2024-01-21 14:36:26·  来源:深信科创  
 

前言


本文从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自定义深度模具值图

分享到:
 
反对 0 举报 0 收藏 0 评论 0
沪ICP备11026620号