izhengfan / izhengfan.github.io

My homepage and blog.
https://fzheng.me
MIT License
31 stars 7 forks source link

关于四元数矩阵雅各比推导的疑问 #10

Open zhaozhongch opened 5 years ago

zhaozhongch commented 5 years ago

因为最近在研究okvis所以又来打扰博主了,很是不好意思。。。 在<四元数矩阵与so3左右雅各比>中你写到基于待估计旋转量的更新方式为 以这个条件为前提,你推出了误差函数关于so3小量alpha的结果。但是我理解的,最小二乘求解的每一次更新,应该是有'步数'作为下标来区分的。即我理解的旋转更新应该是 虽然本质上和你的式子应该是一样的,但是这导致推导的结果就有些不同了,如下,只是把你 的推导过程带下标重新写了一次 我的疑问来自最后两步,可以看到,最后我所得到的是步数k(迭代上一步)的误差对应的Q矩阵,而由于你的推导最开始的假设没有区分每一步的不同导致你的推到结果是当前误差对应的Q矩阵。我看了一下okvis的代码,比如在PoseError.cpp里,它旋转的误差以及误差对so3小量的导数为

//旋转误差
const Eigen::Vector3d dtheta = 2 * dp.q().coeffs().head<3>();
...
//旋转雅各比
J0_minimal.block<3, 3>(3, 3) = -okvis::kinematics::plus(dp.q())
.topLeftCorner<3, 3>();

dp是测量的pose和估计的pose的差别,q()是取四元数,后面的表示取前四元数的前三个数作为旋转的误差dtheta。雅各比部分取了误差的Q矩阵的前3行3列也和你文章对应。 如果按照我的推导结果来的话,我写程序可能会把上一步的dp.q()储存起来用于求这一步的Q矩阵来作为雅各比。 请问你觉得我的推论是否正确?或者说推导没有毛病不过用上一步的误差或者这一步的误差不会带来什么影响,毕竟貌似误差本身也是小量...感觉有些吹毛求疵了哈哈,不过这个推导在心里留下个坎所以还是来请教一下。感谢!

izhengfan commented 5 years ago

你的推论没错,有两个概念要分清:

  1. 当我们求 Jacobian 时,小量是理想小量(Jacobian 就是多元导数嘛,导数分母按照定义就是理想小量的)。

  2. 当我们在讲具体的优化过程,increment 必然不是理想小量。由此带来的误差就是 linearization 误差,不管你使用 k 还是 k+1 时的量来求导都会有 linearization 误差。

zhaozhongch commented 5 years ago

谢谢解答!

On Sun, Jun 30, 2019 at 6:53 PM ZHENG Fan notifications@github.com wrote:

你的推论没错,有两个概念要分清:

1.

当我们求 Jacobian 时,小量是理想小量(Jacobian 就是多元导数嘛,导数分母按照定义就是理想小量的)。 2.

当我们在讲具体的优化过程,increment 必然不是理想小量。由此带来的误差就是 linearization 误差,不管你使用 k 还是 k+1 时的量来求导都会有 linearization 误差。

— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub https://github.com/izhengfan/izhengfan.github.io/issues/10?email_source=notifications&email_token=AGDJ7HQIXBPUMBADVHVYNOLP5FIQDA5CNFSM4H4K6XTKYY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGODY4XN5I#issuecomment-507082485, or mute the thread https://github.com/notifications/unsubscribe-auth/AGDJ7HUIR5BL6T4OCPAYE5LP5FIQDANCNFSM4H4K6XTA .