本文是自动驾驶仿真科普系列第二篇,上一篇为《自动驾驶科普文之一:场景来源、场景泛化及提取》
在跟很多仿真公司的专家及其下游用户交流的过程中,我们了解到,当下,自动驾驶的仿真,最难的环节之一是传感器的建模。
按智行众维CTO李月的说法,传感器建模可分为功能信息级建模、现象信息级/统计信息级建模及全物理级建模几个级别。这几个概念的区别如下——
功能信息级建模简单地描述摄像头输出图像、毫米波雷达在某个范围内探测目标这些具体功能,主要目的在于测试验证感知算法,但对传感器本身的性能并不关注;
现象信息和统计信息级建模是混合的、中间层级的建模,它包括一部分功能信息级建模,也包括一部分物理级建模;
全物理级建模,指对传感器工作的整个物理链路做仿真,其目标在于测试传感器本身的物理性能,比如,毫米波雷达的滤波能力如何。
狭义上的的传感器建模拟特指全物理级的建模。这种建模,很少有公司能做好,具体原因如下:
从计算机图形成像原理看,传感器模拟包括光线(输入、输出模拟)、几何形状、材质模拟、图像渲染等模拟,而渲染能力和效率的差别则会影响到仿真的真实性。
仅有单个传感器的精度高还不够,你还需要所有的传感器都能同时达到一个理想的状态,这就要求建模有很广的覆盖度,但在成本压力下,仿真团队显然不可能对激光雷达做10个、20个版本的建模吧? 另一方面,又很难用一个通用的模型去将各种不同款式的传感器表达出来。
模型的精度、效率和通用性是一个“不可能三角”的关系,你可以去提升其中的一面或者两个角两面,但你很难去持续性地把三个维度同时提升。当效率足够高的时候,模型精度一定是下降的。
“再复杂的数学模型也可能只能以99%的相似度模拟真实传感器,而这剩下的1%可能就是会带来致命问题的因素。”
传感器仿真需要外部的数据,即外部环境数据跟传感器有强耦合,然而,外部环境的建模其实也挺复杂的,并且成本也不低。
城市场景下建筑物的数量太多,这会严重消耗用来做图像渲染的计算资源。有的建筑物会遮挡路上的车流、行人及其他目标物体,而有遮挡没遮挡,计算量是完全不一样的。
此外,目标物的反射率、材质,很难通过传感器建模搞清楚。比如,可以说一个目标是个桶状的,但它究竟是铁桶还是塑料桶,这个很难通过建模来表达清楚;即使能表达清楚,要在仿真模型中把这些参数调好,又是一个超级大的工程。
而目标物的材质等物理信息不清楚的话,仿真的模拟器就难以选择。
“深度学习算法识别物体是一个从真实世界的传感器数据收集到信号去噪的过程,相比之下,传感器建模则是要在理想的物理模型的基础上合理地加入噪声,而其难点就在于噪音如何加得才能跟真实世界足够接近,以便既能让深度学习模型识别出来,又能有效提升模型识别的泛化。”
言外之意,仿真生成的传感器信号既要跟真实世界中的传感器信号“足够像”(能识别出对应物体),又不能“太像”(模拟corner case让感知模型能在更多情况下实现识别——泛化)。然而,问题在于,在真实世界中,传感器的噪音在很多情况下是随机的,这意味着,仿真系统如何去模拟这些噪音,是一个很大的挑战。
从传感器原理的角度看,相机建模的过程中还需要做相机模糊化(先生成理想的模型,然后加噪音)、畸变模拟、暗角模拟、颜色转换、鱼眼效果处理等而以激光雷达模型也可分为理想点云模型(步骤包括场景裁剪、可见判断、遮挡判断和位置计算)、功率衰减模型(包括对接受激光功率、反射激光功率、反射天线增益、目标散射截面、接口孔径、目标距离、大气传输系数、光学传输系数等子的设定)和考虑天气噪点的物理模型等。
“我们要对传感器做完全的物理级建模,比如摄像头的光学物理参数等都要清楚,还需要知道目标物(感知对象)的材质、反射率等数据,这个工程量巨大——在有足够人力的情况下,一公里场景的建设周期需要差不多1个月。即使真能建好,模型的复杂度也极高,很难在当前的物理机上跑起来(实在太耗费算力了)。”
“未来,仿真都是要上云的,看起来,云端的算力‘无穷无尽’,但具体分摊到某个单一节点的单一模型上,云端的计算能力可能还不如物理机——并且,在物理机上做仿真时,如果一台机器的计算资源不够,可以上三台,一台负责传感器模型,一台负责动力学,一台负责规控,但在云上跑仿真, 能用在单一场景单一模型上的算力并不是无穷无尽的,那么这个就限制了我们这个模型的复杂度。”
全物理级建模需要把传感器的各种表现都用数学模型构建出来。比如,将信号接收器的某个具体性能、传播路径(中间受空气的影响、反射折射的整个链路)用数学公式表达出来。然而,在软硬件尚未真正解耦的阶段,传感器内部的感知算法是个黑盒子,仿真公司无法了解算法究竟是个什么样子。
全物理建模需要获取传感器元器件(如CMOS芯片、ISP)的底层参数,对这些参数做建模,而且,还需要知道传感器的底层物理原理,并对激光雷达的激光波、毫米波雷达的电磁波做建模。
“要做好传感器建模,得深刻理解传感器的底层硬件知识,基本上相当于要知道怎么设计一款传感器。”
然而,传感器厂商一般不愿意开放底层数据。
“这些底层参数你如果拿到了,拿着它去做建模,那你基本上就能把这个传感器造出来了”
“通常主机厂在和传感器供应商打交道的时候,不要说拿到材质物理参数这些细节,能拿到接口协议就已经很不容易了。如果主机厂足够强势,传感器供应商也积极配合,他们可以拿到接口协议,但也不是全部。连主机厂都很难拿到的东西,仿真公司就更难了。”
事实上,传感器的物理级仿真是只能由传感器厂商去自己去做的。国内很多传感器厂商更多地外采芯片等零部件来做集成,因此,能对做传感器物理级仿真的,实际上是TI、恩智浦这些上游供应商。
“传感器的仿真难做,导致传感器选型的过程很复杂。我们要做传感器选型,基本上都是传感器公司先把样件寄给我,我们再把各种类型的都装上到车上去测试。 如果传感器厂商能跟仿真公司合作,他们之间就可以把接口全部拉通,提供精准的传感器建模,那我们就可以以很低的成本获知传感器的信息,做传感器选型的工作量会大幅度减少。”
“感知仿真现在还处在初期,还远远没做到需要把传感器里边的建模搞得那么精细的阶段。把传感器里边拆开建模那些东西,我觉得毫无意义。”
此外,按某无人驾驶公司仿真负责人的说法,传感器仿真做不了,并不等于感知的仿真完全做不了。
比如,硬件在环(HIL)可以接入传感器实物(传感器和域控制器,都是实物)来测试。接入传感器实物,既可以测试感知算法,也可以测试传感器本身的功能和性能。这种模式下,传感器是真实的,相比于传感器仿真,仿真精确度更高。
但由于涉及到配套硬件,集成起来复杂,而且这种方式依然需要传感器模型来控制环境信号的生成,成本也更高,因而,实践中很少使用这种方法。
【推荐阅读】
《【看苏州】苏州高铁新城有了“数字孪生”兄弟!助力智能驾驶跑得更快》
《李月:仿真赋能、数据驱动,X-In-Loop®技术体系推动智能驾驶安全落地》