首先,我们还是从熟悉的BCH近似公式开始。

1. BCH近似公式

前面已经介绍过BCH公式了,BCH公式表达的是两个矩阵的指数相乘

[公式]

其中,[] 为李括号。

对应的有李乘积公式

[公式]

1.1 旋转

考虑在优化中,更新量都为小量,可以用BCH公式近似

[公式]

其中,Jr和Jl分别为SO3的右雅可比和左雅可比。

[公式]

对于左右雅可比有

[公式]

1.2 姿态

与SO3类似,有

对应的雅可比矩阵及其逆矩阵为

如你所见,姿态的雅可比矩阵真的不好求解,不好求解到我都懒得打了...

利用公式

和伴随 [公式] 的直接级数表示方法,也可以得到左雅可比的直接级数表示法

和SO3相对应,SE3的左右雅可比有如下性质

[公式]

最终,姿态T及其伴随 [公式] 可以表示为

2. 微积分和优化

首先定义两个操作符来操作4 * 1的向量:

上两式的结果分别对应4 * 6和6 * 4的矩阵。

这样,就可以有如下恒等式

[公式]

这些操作符和等式会在后面对姿态的操作中见到。

2.1 微积分和优化

我们先讨论下被旋转后的点关于该旋转量该旋转量(李代数的向量空间)的雅可比(求导)

[公式]

先对 [公式] 中的某一个量进行微分(方向导数)

[公式]

利用近似BCH公式和一阶泰勒展开,有

[公式]

由此,我们自然可以得到

[公式]

将三个方向的微分结果堆叠在一起,就有

[公式]

如果 [公式] 出现在某个标量函数的内部,如u(Cv),通过链式法则就有

[公式]

如果要实现梯度下降,直接选择负梯度方向即可:

[公式]

其中, [公式] 定义了步长大小。

而该式也可以保证函数u的值是减小的:

[公式]

但这种方式有点复杂。一个比较简洁的办法是找到一个关于C的优化步长,该步长再表达为(左乘)微小旋转的形式,直接应用在李群上(而不是在李代数上进行操作)。

[公式]

考虑前面介绍的基于李代数求导的方法和公式,可以有

[公式]

对比一下就可以发现,可以让 [公式] 来完成和刚刚相同的事情。

可是该过程仍然要计算雅可比Jl,我们也可以完全丢掉关于雅可比的项,只使用

[公式]

该过程仍然会使目标函数减小,但方向将变为

[公式]

我们可以进一步考虑一个更加简洁的模型:只计算扰动量施加在左边的时候,关于扰动 [公式] 的雅可比矩阵。

仍然是只考虑某个方向的雅可比,有:

[公式]

同样把3个方向的微分堆叠到一起就有

[公式]

可以发现,这里完全就没有雅可比矩阵了。

所以,对于优化问题,最简单的方式就是跳过所有推导,直接用扰动的方式来思考

[公式]

当我们将旋转和任意点相乘时,可以表达为如下近似形式:

[公式]

该式的最后一步使用了泰勒展开。

可以看到,对于旋转而言,优化中对于向量的表示 [公式] ,就表达为上面这样的形式。

把该扰动带入到某个优化函数中,(中间一步使用了泰勒展开)

然后,挑选一个使函数值减小的扰动:

[公式]

其中,D > 0为任意的正定矩阵(如 [公式] )。

再用这个扰动来更新旋转,不断迭代直至收敛。

[公式]

2.2 利用扰动进行优化

我们展示一个完整的例子来看看整个优化过程。

假设有一个关于旋转的二次非线性代价函数

[公式]

其中 [公式] 为标量非线性函数。假设已有一个关于旋转的初始值 [公式] ,对这个初始值加上一个左扰动:

[公式]

然后对每一个 [公式] 中应用这个扰动(其实就是泰勒展开一下):

回代到代价函数中就有

[公式]

将J对扰动 [公式] 求微分

[公式]

令导数为0,则最优扰动量 [公式] 

[公式]

求解等式得到 [公式] 后,就可以把这个最优扰动应用到泰勒点上:

[公式]

不断迭代直至收敛,得到最终的 [公式] 作为最优旋转。

2.3 姿态

对于SE(3),如果使用李代数求导,则关于姿态的雅可比为

[公式]

同样地,在变换矩阵的左侧施加扰动

[公式]

关于这个扰动的左雅可比就可以写成

[公式]

这个 [公式] ,就是我们之前介绍的操作符。

此时,也无需再计算雅可比矩阵。

至此,如何利用李群的性质,在构建的误差函数中来对机器人的位姿进行优化求解,我们就讲清楚了。大家可以结合之前的非线性优化的内容,和刚刚给的在SO(3)上进行优化的例子进行对比,相信很容易就可以理解了。

参考文献:《state estimation for robotics》