首页/文章/ 详情

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

9月前浏览12902
前言        

         

       

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

来源:孙工自动驾驶
ACTOptical汽车理论自动驾驶控制渲染模具
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2024-02-25
最近编辑:9月前
孙工自动驾驶
硕士 专注自动驾驶仿真测试
获赞 19粉丝 28文章 82课程 0
点赞
收藏
未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习 福利任务 兑换礼品
下载APP
联系我们
帮助与反馈