第285章 我已经给你们算好了(2/2)
请关闭浏览器的阅读/畅读/小说模式并且关闭广告屏蔽过滤功能,避免出现内容无法显示或者段落错乱。
“世界坐标系到相机坐标系的变换用的是欧拉角表示旋转矩阵,然后用对极几何约束求本质矩阵,再用SVD分解做运动恢复。”
“问题就出在这一步,在高速动态场景下,相邻帧之间的旋转不是在欧几里得空间里发生的,而是在一个弯曲的流形上。
你的SVD分解把非线性约束强制投影到了线性空间里,相当于把球面坐标硬塞进直角坐标系,畸变就是这么来的。”
沈凌的瞳孔缩了一下。
他隐隐约约感觉到问题出在几何框架上,但一直没能准确定位到,想不到肖宿一下子就看出来了。
“正确的做法应该是放弃欧拉角,改用四元数表示旋转,并且在单位四元数构成的S^3球面上直接做优化。”
肖宿再次拿起白板笔,在图纸的另一块空白区域写了起来。
“首先,设第k帧到第k+1帧的旋转四元数为q_k,那么帧间运动导致的深度估计误差肯定满足一个辛结构保持的Hailton系统。
然后构造这样一个辛矩阵M,它的作用是把高维的投影误差映射到一个低维的辛商流形上,在这个商流形上,误差传播方程就会退化成一个可积系统。”
“这个辛矩阵的定义是M=J·????H,其中J是标准辛形式,H是系统的Hailton函数,取为投影误差在深度方向上的二范数。
????H是H的Hessian矩阵,在这个特定的几何设定下,它的闭式解是????H=(I-n·n^T)/d^2,其中,n是视线方向的单位向量,d是深度值。
这两个一乘,M的特征值就会全部落在单位圆上,所以数值稳定性是自然的,不需要任何额外的正则化。”
沈凌的嘴唇微微颤抖着。
他浑身上下都激动的泛起了鸡皮疙瘩。
那个困扰了他一年半的帧间畸变问题,肖宿只是用一组辛矩阵轻轻描淡写地把它拆解了。
每一步推导都写得那么简单,组合在一起,却让他有些头皮发麻。
这种震撼不是来自结论本身有多复杂,恰恰相反。
它太简单了。
简单到让人觉得,在正确的视角下,这个问题本来就不应该有困难。
“可是我还有一个问题,”沈凌强迫自己冷静下来,“辛矩阵的方案解决了旋转部分的畸变,但平移部分的漂移呢?
我们的相机在快速大范围移动时,深度图会出现一个缓慢的累积漂移,这个漂移在用了您的辛矩阵修正旋转后还是会残留的。”
“那个漂移不是平移带来的,而是你的深度图初始值在高速运动下没有及时收敛。”
肖宿的回答几乎没有任何停顿,“可以用非线性互补滤波器来解决。
在低频段,可以信任惯性测量单元的姿态数据,而高频段则可以信任视觉里程计的相对运动估计。至于交叉频率,直接设在视差数据的噪声带宽和IMU漂移带宽的交点处就可以。
传递函数就取n阶巴特沃斯(Butterworth)形式,阶数n的取值,是由姿态误差的截止频率和深度估计的收敛速率共同决定的。
我已经给你们算好了,n取3。”
2.