基于平面 marker 的 Bundle Adjustmet

Posted 白巧克力亦唯心

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于平面 marker 的 Bundle Adjustmet相关的知识,希望对你有一定的参考价值。

前言

一个二维的 marker 通常有四个角点,如果把四个角点当做独立的三维特征点去参与BA优化,那么需要十二个参数,并且四个角点之间的约束(边长以及正交)还不好加入优化。这篇博客是将一个marker用6自由度的坐标系进行建模,推导了整个Marker的重投影误差函数和雅克比矩阵,并在g2o中进行了实现和集成。代码会开放在我的github,博客的pdf版本也会在代码对应的note文件夹里(貌似csdn对部分latex支持不友好)。这个工作是17年初的时候做的,笔记在草稿箱中存了差不多两年了,现在开放出来希望能帮到有需要的小伙伴。
另外,基于 marker 的 structure from motion 或者 slam 的工作都有对应论文,google一下很容易找到,在这里推荐比较经典的 Mapping and Localization from Planar Markers.

marker BA 公式推导

李代数求导基础

有四种方式进行李代数的求导: gtsam作者笔记里的推导方式,strasdat博士论文里的推导方式,TUM kerl硕士论文里的推导方式,最后就是barfoot的state esitamtion for robotics一书中的推导了。最直观简介的是gtsam和kerl的推导,最完备最可扩展的推导是barfoot的方式,也就是高翔书上的推导。

目的:空间中一点 P w P_w Pw,通过 T c w T_cw Tcw转换到相机坐标系下 P c P_c Pc,高斯牛顿的时候需要不断调整优化 T c w T_cw Tcw.

这时就有了两个思路:

  1. 假设 T c ′ c = e x p ( δ ξ ^ ) T_c'c=exp(\\hat\\delta\\xi) Tccexp(δξ^)是微小增量, T c ′ w = e x p ( δ ξ ^ ) T c w = e x p ( δ ξ ^ ) e x p ( ξ ^ ) T_c'w=exp(\\hat\\delta\\xi)T_cw=exp(\\hat\\delta\\xi)exp(\\hat\\xi) Tcw=exp(δξ^)Tcw=exp(δξ^)exp(ξ^)。注意小增量是直接放在李代数的。在推导前,先熟悉一个性质,下面公式中粗体 P \\mathbfP P P P P的齐次坐标形式。
    ξ ^ P = [ ω ^ v 0 0 ] [ P 1 ] = [ ω × P + v 0 ] = [ − P ^ I 3 0 0 ] [ ω v ] \\hat\\xi \\mathbfP=\\beginbmatrix \\hat\\mathbf\\omega& \\mathbfv\\\\ \\mathbf0 & \\mathbf0\\endbmatrix\\beginbmatrixP \\\\ 1 \\endbmatrix=\\beginbmatrix \\mathbf\\omega\\times P+\\mathbfv\\\\ \\mathbf0\\endbmatrix=\\beginbmatrix -\\hat P&&\\mathbfI_3 \\\\ \\mathbf0 && \\mathbf0\\endbmatrix\\beginbmatrix\\mathbf\\omega\\\\\\mathbfv\\endbmatrix ξ^P=[ω^0v0][P1][ω×P+v0]=[P^0I30][ωv]
    有了这个性质,可以开始推导了,推导过程省略齐次坐标最后一行
    ∂ ( P c ′ ) ∂ ( δ ξ ) = ∂ ( e x p ( δ ξ ^ ) T c w P w ) ∂ ( δ ξ ) ≈ ∂ ( ( I + δ ξ ^ ) P c ) ∂ ( δ ξ ) = ∂ ( δ ξ ^ P c ) ∂ ( δ ξ ) = [ [ − P c ] × , I 3 ] 3 × 6 = ( 0 z − y 1 0 0 − z 0 x 0 1 0 y − x 0 0 0 1 ) 3 × 6 \\beginaligned \\frac\\partial(P_c')\\partial(\\delta\\xi) = & \\frac\\partial(exp(\\hat\\delta\\xi)T_cwP_w)\\partial(\\delta\\xi) \\\\\\approx & \\frac\\partial((I+\\hat\\delta\\xi)P_c)\\partial(\\delta\\xi) = \\frac\\partial(\\hat\\delta\\xiP_c)\\partial(\\delta\\xi)=[[-P_c]_\\times,\\mathbfI_3]_3\\times6 \\\\=& \\beginpmatrix 0 & z & -y & 1 & 0 &0 \\\\ -z & 0 & x & 0 & 1 & 0 \\\\ y & -x & 0 & 0 & 0 & 1 \\endpmatrix_3\\times 6 \\endaligned (δξ)(Pc)==(δξ)(exp(δξ^)TcwPw)(δξ)((I+δξ^)Pc)=(δξ)(δξ^Pc)=[[Pc]×,I3]3×60zyz0xyx01000100013×6
    这里 [ ⋅ ] × [\\cdot]_\\times []× ( c d o t ) ^ \\hat(cdot) (cdotROS实验笔记之——基于EKF融合Visual-marker localization与IMU

    Unity Container 中基于 Marker 接口注册接口到不同的 Lifetime

    一个仿3D的平面游戏页面

    week63 PnP位姿估计 基于ArUco Marker来估算camera的位姿

    翻译OpenCV文档:ArUco Marker的检测 (Detection of ArUco Markers)

    在Opencv中校准后查找点世界坐标