非线性优化:李代数的扰动求导
2021-07-21 本文已影响0人
循梦渡
前置知识:
我们经常会构建与位姿有关的函数,然后讨论该函数对位姿的导数,然而,位姿是SO3(R)或者SE3(T)的,如果我们把T当成普通矩阵来优化,必须对他加约束,就成为了带约束的非线性优化,这是我们不想要的。所以我们通常把SO3或SE3转成so3或者se3的李代数,然后再求导,有两个思路:
一、用李代数的加法来对李代数来求导,这会有形式比较复杂的JL,我们不太希望计算它,所以基本不用,这个叫微分模型
二、用扰动模型,我们来讲这个:
以损失函数求导为例
我们经常需要求,损失函数e对状态变量的导数,而状态变量里一般会有位姿,为了不做带约束的非线性优化,我们的位姿用李代数来表示的
直接求解e对李代数的导数非常复杂,但我们可以使用扰动模型,求e对扰动的导数,然后引入中间变量,比如:
我们引入的中间变量是空间点的位置(注意,我们本来是要求损失函数对位姿的导数,但通过中间变量也就是地图点的引入,我们可以简化这个过程)从而,e对扰动的导数等于e对空间点P1的导数乘P1对扰动的导数
而e对空间点P1的导数是很简单的,我们用计算e的时候的公式就能得到,而空间点P1对扰动的导数我们早就推过了,这也是我们为什么要选择P1为中间变量的原因,因为P1是空间点P乘以变换T得到的点,所以P1对扰动的导数等于TP对扰动的导数,而TP对扰动的导数,我们早就在SE3的扰动模型中推导过了如下:
其中 Rp+t其实就等于P1 而P1^ 是用P1生成的反对称矩阵所以你会发现,通过扰动模型,我们只需要求解损失函数对P1的导数,就能求得损失函数对扰动的导数,而损失函数对P1的导数是显而易见的