basalt 使用2D-dirinverse-depth对3D点进行参数化,相比VINS只优化逆深度的方式,这种参数化方式更加合理,host帧对点的方向观测确实应该优化一下


1、3D点参数化

XYZ形式的3D点参数化:
P=[XYZ1]P=\begin{bmatrix} X\\ Y\\ Z \\ 1 \end{bmatrix} P=⎣⎢⎢⎡​XYZ1​⎦⎥⎥⎤​

表示成逆深度的形式:
P=[X/dY/dZ/d1/d],d=X2+Y2+Z2P=\begin{bmatrix} X/d \\ Y/d \\ Z/d \\ 1/d \end{bmatrix}, d=\sqrt{X^2+Y^2+Z^2} P=⎣⎢⎢⎡​X/dY/dZ/d1/d​⎦⎥⎥⎤​,d=X2+Y2+Z2​

前三维是单位向量,表示3D点的方向,后一维是逆深度,如果想使用这种方式参数化3D点,显然有一个自由度是多于的,有两种处理方式:
1)采用类似VINS的方法,3D点的方向由host frame的对该3D点的观测来构造,这种方式导致无法对3D点的观测方向进行优化
2)通过stereographic projection将前三维单位向量参数化成2D-dir的形式,从而能够对2D-dir进行优化

P(x,y,z)\mathbf{P}(x,y,z)P(x,y,z) 是3D点单位化的向量(unit-length bearing vector),位于上图黑色的单位球上

p(u,v)\mathbf{p}(u,v)p(u,v) 是对 P(x,y,z)\mathbf{P}(x,y,z)P(x,y,z) 通过stereographic投影得到的2D-dir注意,(u,v)(u,v)(u,v) 不是像素坐标),位于上图中蓝色2D平面上

1.1 stereographic投影

将空间中一个3D点P\mathbf{P}P归一化到单位圆上,然后根据三角形相似,将单位球上的一点投影到平面上,即:
p=π(P)=[x/d1+z/dy/d1+z/d]=[xd+zyd+z]\begin{aligned} \mathbf{p}=\pi(\mathbf{P}) &= \begin{bmatrix} {\frac{x/d}{1 + z/d}} \\ {\frac{y/d}{1 + z/d}} \\ \end{bmatrix} = \begin{bmatrix} {\frac{x}{d + z}} \\ {\frac{y}{d + z}} \\ \end{bmatrix} \end{aligned} p=π(P)​=[1+z/dx/d​1+z/dy/d​​]=[d+zx​d+zy​​]​

其中d=x2+y2+z2d = \sqrt{x^2 + y^2 + z^2}d=x2+y2+z2​.

代码里对3D点齐次坐标PhomogeneousP_{homogeneous}Phomogeneous​(4×14 \times 14×1)做stereographic projection时,直接取了PhomogeneousP_{homogeneous}Phomogeneous​的2-norm\textrm{2-norm}2-norm,显然它不是深度(应该是手误的bug…),而是:
2-norm=(x/d)2+(y/d)2+(z/d)2+(1/d)2=1+(1/d)2\textrm{2-norm}=\sqrt{(x/d)^2 + (y/d)^2 + (z/d)^2 + (1/d)^2}=\sqrt{1+ (1/d)^2} 2-norm=(x/d)2+(y/d)2+(z/d)2+(1/d)2​=1+(1/d)2​

其中,代码里三角化得到的3D点为Pnormalize=[x/d,y/d,z/d,1/d]TP_{normalize}=[x/d,y/d,z/d,1/d]^TPnormalize​=[x/d,y/d,z/d,1/d]T,前三维是已经归一化后3D点坐标.

1.2 stereographic反投影

反投影得到
Psphere=π−1(p)=21+u2+v2[uv1]−[001]\begin{aligned} \mathbf{P_{sphere}} = \pi^{-1}(\mathbf{p}) &= \frac{2}{1 + u^2 + v^2} \begin{bmatrix} u \\ v \\ 1 \\ \end{bmatrix}-\begin{bmatrix} 0 \\ 0 \\ 1 \\ \end{bmatrix} \end{aligned} Psphere​=π−1(p)​=1+u2+v22​⎣⎡​uv1​⎦⎤​−⎣⎡​001​⎦⎤​​

反投影函数对 p\mathbf{p}p 的雅可比矩阵记为 Jup4×2J_{up}^{4 \times 2}Jup4×2​,最后一行只与逆深度有关,补零即可.


2、重投影雅可比

由于参数化后的3D点由2D-dir和一个inverse-depth构成,所以先要恢复出3D点:
Pnormlize=[Psphere,1/d]TP_{normlize}=[P_{sphere},1/d]^T Pnormlize​=[Psphere​,1/d]T

其中,前三维直接由stereographic反投影得到,最后一维为逆深度

接着,根据相机模型构造如下重投影误差:
e=πcam−model(TthPnormlize)−[uobsvobs]=πcam−model(Tth[πstereographic−1(p2D−dir)1/d])−[uobsvobs]=Kfnormalize-plane(Tth[πstereographic−1(p2D−dir)1/d])−[uobsvobs]\begin{aligned} e & = \pi_{cam-model} \left( T_{th} P_{normlize} \right) -\begin{bmatrix} u_{obs} \\ v_{obs} \end{bmatrix} \\ & = \pi_{cam-model} \left( T_{th} \begin{bmatrix} \pi^{-1}_{stereographic}(p_{2D-dir}) \\ 1/d \end{bmatrix} \right) -\begin{bmatrix} u_{obs} \\ v_{obs} \end{bmatrix} \\ & = K f_\textrm{normalize-plane}\left( T_{th} \begin{bmatrix} \pi^{-1}_{stereographic}(p_{2D-dir}) \\ 1/d \end{bmatrix} \right) -\begin{bmatrix} u_{obs} \\ v_{obs} \end{bmatrix} \end{aligned} e​=πcam−model​(Tth​Pnormlize​)−[uobs​vobs​​]=πcam−model​(Tth​[πstereographic−1​(p2D−dir​)1/d​])−[uobs​vobs​​]=Kfnormalize-plane​(Tth​[πstereographic−1​(p2D−dir​)1/d​])−[uobs​vobs​​]​

对TthT_{th}Tth​求雅可比:
∂e∂ξth=∂e∂Pt∗∂Pt∂ξth\frac{\partial e}{\partial \xi_{th}} = \frac{\partial e}{\partial P_t} * \frac{\partial P_t}{\partial \xi_{th}} ∂ξth​∂e​=∂Pt​∂e​∗∂ξth​∂Pt​​

对p2D−dirp_{2D-dir}p2D−dir​的雅可比:
∂e∂p2D−dir=∂e∂Pt∗∂Pt∂Pnormlize∗∂Pnormlize∂p2D−dir=∂e∂Pt∗Tth3×4∗Jup4×2\frac{\partial e}{\partial p_{2D-dir}} = \frac{\partial e}{\partial P_t} * \frac{\partial P_t}{\partial P_{normlize}} * \frac{\partial P_{normlize}}{\partial p_{2D-dir}} = \frac{\partial e}{\partial P_t} * T_{th}^{3 \times 4} * J_{up}^{4 \times 2} ∂p2D−dir​∂e​=∂Pt​∂e​∗∂Pnormlize​∂Pt​​∗∂p2D−dir​∂Pnormlize​​=∂Pt​∂e​∗Tth3×4​∗Jup4×2​

其中,∂Pt∂Pnormlize=Tth\frac{\partial P_t}{\partial P_{normlize}} = T_{th}∂Pnormlize​∂Pt​​=Tth​

inverse-depth的雅可比:
∂e∂id=∂e∂Pt∗∂Pt∂Pnormlize∗∂Pnormlize∂id=∂e∂Pt∗Tth∗[0001]=∂e∂Pt∗Tthcol3\frac{\partial e}{\partial id} = \frac{\partial e}{\partial P_t} * \frac{\partial P_t}{\partial P_{normlize}} * \frac{\partial P_{normlize}}{\partial id} = \frac{\partial e}{\partial P_t} * T_{th} * \begin{bmatrix} 0\\ 0\\ 0\\ 1 \end{bmatrix} = \frac{\partial e}{\partial P_t} * T_{th}^{col 3} ∂id∂e​=∂Pt​∂e​∗∂Pnormlize​∂Pt​​∗∂id∂Pnormlize​​=∂Pt​∂e​∗Tth​∗⎣⎢⎢⎡​0001​⎦⎥⎥⎤​=∂Pt​∂e​∗Tthcol3​


@leatherwang
二零二零年六月十五日

【basalt】(一)3D点参数化相关推荐

  1. PointFusion: Deep Sensor Fusion for 3D Bounding Box Estimation

    摘要 我们提出了PointFusion,一种利用图像和3D点云信息的通用3D对象检测方法.与使用多级管道或保持传感器和数据集特定假设的现有方法不同,PointFusion在概念上简单且与应用程序无关. ...

  2. catia三维轴承_浅谈基于CATIA二次开发的单排四点接触球轴承三维设计论文

    浅谈基于CATIA二次开发的单排四点接触球轴承三维设计论文 一.概述 单排四点接触球转盘轴承是一种能够同时承受较大轴向负荷.径向负荷和倾覆力矩等综合载荷,集支承.旋转.传动.固定等多种功能于一身的特殊 ...

  3. 最详细的SLAM综述

    论文:Past, Present, and Future of Simultaneous Localization And Mapping: Towards the Robust-Perception ...

  4. Romax Nexus—机电一体传动系统设计与仿真平台

    经纬恒润作为Romax Nexus工具国内业务的代理商,致力于为电驱动系统.齿轮.轴承行业提供解决方案.英国Romax公司是一家集软件开发与项目咨询为一体的技术服务公司,是汽车.工业.风电及轴承应用领 ...

  5. CATIA达索三维建模软件的功能和核心技术是什么?

    CATIA是法国达索公司的产品开发旗舰解决方案.作为PLM协同解决方案的一个重要组成部分,CATIA可以通过三维建模帮助制造厂商设计他们未来的产品,并支持从项目前阶段.具体的设计.分析.模拟.组装到维 ...

  6. SLAM学习笔记《Past, Present, and Future of Simultaneous Localization and Mapping: Toward the Robust-Per》

    <Past, Present, and Future of Simultaneous Localization and Mapping: Toward the Robust-Perception ...

  7. 盘点|世界流行的十大机械工程设计软件,你会用几种?

    来源:自机械前线 机械设计是机械生产的第一步,是决定机械性能的最主要的因素.为了满足机械产品性能的高要求,在机械设计中大量采用计算机技术进行辅助设计和系统分析,以下是目前世界上流行的十款式机械工程设计 ...

  8. 64位百度云 catia v6_CATIA V6R2015百度云

    CATIA V6R2015是一款专业的模具编程软件,使用此款软件用户可以在3D环境中轻松组合装配,可以为任何产品建模,小到螺丝刀.大到飞机,在航空航天.厂房设计.电力电子行业使用广泛.软件功能强大,精 ...

  9. catia如何将曲面加厚变为实体_catia中如何将封闭曲面做成实体?

    2016-07-07 00:36粱俊芳 客户经理 模块化的CATIA系列产品提供产品的风格和外型设计.机械设计.设备与系统工程.管理数字样机.机械加工.分析和模拟.CATIA产品基于开放式可扩展的V5 ...

最新文章

  1. 为什么要低温保存_新酒为什么要贮存一段时间才能喝?瓶装白酒这样保存最好!...
  2. nagios出现乱码
  3. 如何禁止用户名,密码自动填充
  4. centos 设置双网卡,双网关
  5. was升级jdk版本_WebSphere 8.5 升级jdk版本
  6. 解决win7下无法安装突击者NO.69驱动,“WINDOWS已找到设备的驱动程序,但在试图安装它时错误”...
  7. java性能优化方案_Java性能优化要点
  8. 比较默认对象和默认约束的异同_UE4对象类类型引用和类默认对象(Class Default Object,简称CDO)...
  9. HDU3790 最短路径问题【Dijkstra算法】
  10. 读书|《赤裸裸的统计学》:统计数字很容易说谎
  11. 黑马Java笔记第一讲—java基础
  12. JAVA毕设项目汽车租赁管理系统(java+VUE+Mybatis+Maven+Mysql)
  13. Quartus II中关于IP核的破解
  14. android如何实现环形缓冲区
  15. python中print输出变量_python中如何使用print函数?
  16. 使用Python制作专属微信小客服
  17. Arduino学习笔记(14)-- Arduino使用增量编码器测速
  18. Polybuild Tool:Blender自带的重拓扑工具
  19. Unity创建Animation动画无法播放问题
  20. 服务器看门狗芯片电路图,看门狗芯片MAX708的工作原理及数 - 电源设计应用 - 电子发烧友网...

热门文章

  1. 趣味算法 四个点在同一个半圆的概率
  2. 并发编程之深入理解十三:CompletionService CompletableFuture
  3. Windows认证原理
  4. TabLayout——浅谈
  5. MySQL系列之Natural Join用法
  6. 怎么用win7系统的电脑录屏
  7. vue相关UI组件库
  8. 深入理解PID的微分、积分电路
  9. 智能微模块一体化机柜
  10. 记录谷粒学院的一些问题--------------chapter1