Skip to content

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

@zhaozhongch

Description

@zhaozhongch

因为最近在研究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矩阵来作为雅各比。
请问你觉得我的推论是否正确?或者说推导没有毛病不过用上一步的误差或者这一步的误差不会带来什么影响,毕竟貌似误差本身也是小量...感觉有些吹毛求疵了哈哈,不过这个推导在心里留下个坎所以还是来请教一下。感谢!

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions