位姿误差雅可比的N种写法

对位姿误差的推导做个整理,不同的资料上求导的对象以及是左扰动还是右扰动会略有差别,注意区分。

推导中常用的公式:
1.李群的伴随性质
adjoin
——From《视觉SLAM十四讲》式(4.48)
2.李群雅可比的近似公式
有时候在推导过程中会把雅可比近似为单位矩阵了。
jacob——From State Estimation for Robotics Eq.7.91

各种推导:
1.十四讲/g2o
这是最常见的一种吧,具体推导可见十四讲以及g2o中 EdgeSE3Expmap类型Jacobian的计算——
error2.State Estimation for Robotics
这里误差的定义中相乘的顺序跟十四讲不一样,取个逆的区别吧。 G k l G_{kl} Gkl就是误差雅可比,具体推导见书。
jacob3.MATLAB
代码如下。推导方式我觉得应该是跟State Estimation for Robotics 类似的,李群雅可比矩阵的近似项取多了一些,但是没想明白Mi和Mj的正负号?2021b这里的展开项跟想象的也有些不同,系数?为啥没有三次项呢?BTW,2021b中图优化默认的求导是用数值方法,并不是这个公式,难道不够好用吗?

        function [e, Jaci, Jacj] = poseErrorSE3(Toi, Toj, Tij) %
        %poseErrorSE3

            Tio = robotics.core.internal.SEHelpers.tforminvSE3(Toi);
            Tji = robotics.core.internal.SEHelpers.tforminvSE3(Tij);

            e = robotics.core.internal.SEHelpers.veelogmSE3(Tji*Tio*Toj);

            tau = e(1:3);
            phi = e(4:6);
            A = robotics.core.internal.SEHelpers.skew(phi);
            B = robotics.core.internal.SEHelpers.skew(tau);

            Mi = [-A, -B; zeros(3), -A];
            Mj = [ A, B; zeros(3), A];
			
			%2020a
            Jaci = (eye(6) + 0.5* Mi)*robotics.core.internal.SEHelpers.adjointSE3(Tji);
            Jacj = -(eye(6) + 0.5* Mj);
            %2021b
            %Jaci = (eye(6) + 0.5*Mi + (1/12)*MSq  - (1/720)*MSqSq )*robotics.core.internal.SEHelpers.adjointSE3(Tji);
            %Jacj = -(eye(6) + 0.5*Mj + (1/12)*MSq - (1/720)*MSqSq );
        end
    end

4.A Tutorial on Graph-Based SLAM
这样链式推导看起来是没毛病。文末的附录中给出了2D情况下的具体公式,但是没有3D的,似乎也没有看到哪个代码中用的是这个?
jacob

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值