首先,我们还是从熟悉的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》
评论(0)
您还未登录,请登录后发表或查看评论