【视觉SLAM入门】5.2. 2D-3D PNP 3D-3D ICP BA非线性优化方法 数学方法SVD DLT

news2024/11/26 9:36:57

"养气之学,戒之躁急"

  • 1. 3D-2D PNP
    • 1.1 代数法
      • 1.1.1 DLT(直接线性变换法)
      • 1.1.2. P3P
    • 1.2 优化法
      • BA (Bundle Adjustment)法
  • 2. 3D-3D ICP
    • 2.1 代数法
      • 2.1.1 SVD方法
    • 2.2 优化(BA)法
      • 2.2.2 非线性优化方法

前置事项:

1. 3D-2D PNP

该问题描述为:当我们知道n 个 3D 空间点以及它们的投影位置时,如何估计相机所在的位姿

1.1 代数法

1.1.1 DLT(直接线性变换法)

解决的问题:已知空间点 P = ( X , Y , Z , 1 ) T P = (X, Y, Z, 1)^T P=(X,Y,Z,1)T 和它投影点 x 1 = ( u 1 , v 1 , 1 ) T x_1 = (u_1, v_1, 1)^T x1=(u1,v1,1)T。求解相机位姿 R , t \boldsymbol {R, t} R,t
为求解,定义增广矩阵
[ R ∣ t ] = ( t 1 t 2 t 3 t 4    t 5 t 6 t 7 t 8    t 9 t 10 t 11 t 12 ) \boldsymbol {[R| t]} = \begin{pmatrix} t_1&t_2&t_3&t_4 \\\;\\ t_5&t_6&t_7&t_8 \\\;\\ t_9&t_{10}&t_{11}&t_{12} \end{pmatrix} [Rt]= t1t5t9t2t6t10t3t7t11t4t8t12
我们的目的就是求解这个增广矩阵,利用坐标关系得到:
s ( u 1 v 1 1 ) = ( t 1 t 2 t 3 t 4    t 5 t 6 t 7 t 8    t 9 t 10 t 11 t 12 ) ( X Y Z 1 ) s\begin{pmatrix} u_1&v_1&1 \end{pmatrix} = \begin{pmatrix} t_1&t_2&t_3&t_4 \\\;\\ t_5&t_6&t_7&t_8 \\\;\\ t_9&t_{10}&t_{11}&t_{12} \end{pmatrix}\begin{pmatrix} X&Y&Z&1 \end{pmatrix} s(u1v11)= t1t5t9t2t6t10t3t7t11t4t8t12 (XYZ1)

  • 最后一行可以求出 s \boldsymbol s s , 则方程中有12个未知数,需要至少六对点, 可以线性变换 ;
  • 匹配点大于6对时,可以用SVD等方法对超定方程做最小二乘;
  • 缺点:忽略了旋转矩阵自身约束 ----> 找一个旋转矩阵近似(QR分解),把结果重新投影到 S E ( 3 ) SE(3) SE(3) 流形。

1.1.2. P3P

三对(世界坐标系下)3D-2D(成像平面)匹配点 + 一对验证点。原理图如下:
图源SLAM14讲

根据相似三角形的相似关系
Δ O a b − Δ O A B , Δ O b c − Δ O B C , Δ O a c − Δ O A C    ⇓ 有如下关系    O A 2 + O B 2 − 2 O A ⋅ O B ⋅ c o s < a , b > = A B 2 O B 2 + O C 2 − 2 O B ⋅ O C ⋅ c o s < b , c > = B C 2 O A 2 + O C 2 − 2 O A ⋅ O C ⋅ c o s < a , c > = A C 2 \Delta Oab - \Delta OAB, \quad \Delta Obc - \Delta OBC, \quad \Delta Oac - \Delta OAC \\\;\\\Downarrow 有如下关系 \\\;\\OA^2 + OB^2 -2OA\cdot OB \cdot cos<a,b> = AB^2\\ OB^2 + OC^2 -2OB\cdot OC \cdot cos<b,c> = BC^2 \\ OA^2 + OC^2 -2OA\cdot OC \cdot cos<a,c> = AC^2 ΔOabΔOAB,ΔObcΔOBC,ΔOacΔOAC有如下关系OA2+OB22OAOBcos<a,b>=AB2OB2+OC22OBOCcos<b,c>=BC2OA2+OC22OAOCcos<a,c>=AC2
x = O A / O C , y = O B / O C , v = A B 2 / O C 2 , u v = B C 2 / O C 2 , w v = A C 2 / O C 2 x=OA/OC\quad, y = OB/OC,\quad v=AB^2/OC^2,\quad uv=BC^2/OC^2,\quad wv=AC^2/OC^2 x=OA/OC,y=OB/OC,v=AB2/OC2,uv=BC2/OC2,wv=AC2/OC2

  • 推理可得:
    ( 1 − u ) y 2 − u x 2 − c o s < b , c > y + 2 u x y ⋅ c o s < a , b > + 1 = 0 ( 1 − w ) x 2 − w y 2 − c o s < a , c > x + 2 w x y ⋅ c o s < a , b > + 1 = 0 (1-u)y^2-ux^2-cos<b,c>y+2uxy\cdot cos<a,b>+1=0 \\(1-w)x^2-wy^2-cos<a,c>x+2wxy\cdot cos<a,b>+1=0 (1u)y2ux2cos<b,c>y+2uxycos<a,b>+1=0(1w)x2wy2cos<a,c>x+2wxycos<a,b>+1=0

  • 求解完成,其中只有 x , y x,y x,y未知,二元二次方程组,可以用吴氏消化法求解。最终最多得到4个解,用验证点对进行验证,得到正确的点即可。


  • 只利用3对点的信息,无法利用更多
  • 如果点收到噪声影响,算法失效
  • 改进的有 E P n P , U P n P EPnP, UPnP EPnP,UPnP

1.2 优化法

BA (Bundle Adjustment)法

  • 利用最小化重投影误差来做,简单来说就是已经有相机位姿,然后用该位姿预测得到预测值,再用 预测减观测(投影) 为误差构建最小二乘问题,重新优化相机位姿和空间点位置。重投影示意图如下:
    在这里插入图片描述

一种通用做法:用来对PnP或ICP的结果进行优化。

  • 假设通过PnP已经获得相机的位姿(不精确的) R , t \boldsymbol {R, t} R,t ,它的李代数为 ξ \boldsymbol \xi ξ
  • n个三维空间点 P i = [ X i , Y i , Z i ] T \boldsymbol P_i = [X_i, Y_i, Z_i]^T Pi=[Xi,Yi,Zi]T ,它的投影坐标为 u i = [ u i , v i ] T \boldsymbol u_i = [u_i, v_i]^T ui=[ui,vi]T ;

用矩阵形式写出像素位置与空间点公式(理论上成立的等式(没有误差时)):
s i [ u i v i 1 ] = K e x p ( ξ ˆ ) [ X i Y i Z i 1 ] ( 1 )    ⇓ 即    s i u i = K ⋅ e x p ( ξ ˆ ) ⋅ P i ( 2 )    ⇓ 构建最小二乘问题    ξ ∗ = a r g min ⁡ ξ 1 2 ∑ i = 1 n ∥ u i − 1 s i K exp ⁡ ( ξ ˆ ) P i ∥ 2 2 ( 3 ) s_i\begin{bmatrix}u_i\\v_i\\1\end{bmatrix} = Kexp(\xi\^{})\begin{bmatrix}X_i\\Y_i\\Z_i\\1\end{bmatrix} \qquad\qquad\qquad\qquad (1)\\\; \Downarrow即\qquad \qquad\qquad\qquad\qquad\\\; \\s_i\boldsymbol u_i = K\cdot exp(\xi\^{})\cdot P_i \qquad \qquad\qquad\qquad\qquad(2)\\\; \\\Downarrow 构建最小二乘问题\qquad \qquad\\\; \\\xi^* = arg\min\limits_\xi \frac{1}{2}\sum\limits_{i=1}^n\begin{Vmatrix}u_i- \frac{1}{s_i} K\exp(\xi\^{})P_i\end{Vmatrix}^2_2\qquad(3) si uivi1 =Kexp(ξˆ) XiYiZi1 (1)siui=Kexp(ξˆ)Pi(2)构建最小二乘问题ξ=argξmin21i=1n uisi1Kexp(ξˆ)Pi 22(3)
在上式中:

  • (3)中的 u i \boldsymbol u_i ui :投影位置(观测值---------------------------已知) (2D)
  • (2)和(1)中的 u i \boldsymbol u_i ui:重投影位置(预测值-根据(1)式计算得到) (2D)
  • P i \boldsymbol {P_i} Pi : 空间点位置(已知) (3D)

重投影误差:用3D和估计位姿投影得到的位置和观测得到的位置作差得到的。实际中利用很多点调整相机位姿使得这个值变小,但不会精确为0.

  • 求解这个最小二乘问题,由之前的李代数左乘模型,非线性优化的知识(推理过程略,详见视觉SLAM14讲7.7.3),记变换到相机坐标系下的空间点坐标 P ′ \boldsymbol {P'} P 这里直接给结果:
    在这里插入图片描述
    这个雅克比矩阵描述了重投影误差关于相机位姿李代数的一阶变化关系 ( s e ( 3 ) 这里是平移在前,旋转在后,则如上市,否则前后三列互换 se(3)这里是平移在前,旋转在后,则如上市,否则前后三列互换 se(3)这里是平移在前,旋转在后,则如上市,否则前后三列互换)。

此外,还有 e e e 关于空间点 P P P 的导数:

在这里插入图片描述


以上两个导数矩阵分别是观测相机方程关于相机位姿和特征点的导数矩阵。在优化中能提供迭代方向。

2. 3D-3D ICP

问题:有一组匹配好的3D点:
P = { p 1 , . . . , p n } , P ′ = { p 1 ′ , . . . , p n ′ } P=\left\{p_1, ..., p_n \right\}, \qquad P' = \left\{p'_1, ..., p'_n\right\} P={p1,...,pn},P={p1,...,pn}
欲求一个欧式变换 R , t R,t R,t,使:
∀ i , p i = R p i ′ + t {\forall i}, \qquad p_i = Rp'_i + t i,pi=Rpi+t

用ICP(Iterative Closest Point)求解,没有出现相机模型,和相机无关,故激光SLAM中也有ICP。

2.1 代数法

2.1.1 SVD方法

定义误差:
e i = p i − ( R p i ′ + t ) e_i = p_i - (Rp'_i + t) ei=pi(Rpi+t)
构建最小二乘问题:使得误差平方和最小
min ⁡ R , t J = 1 2 ∑ i = 1 n ∣ ∣ p i − ( R p i ′ + t ) ∣ ∣ 2 2 \min\limits_{R,t} J = \frac{1}{2}\sum\limits_{i=1}^n||p_i-(Rp'_i+t)||_2^2 R,tminJ=21i=1n∣∣pi(Rpi+t)22
求解问题:

  1. 定义两组点质心
    p = 1 n ∑ i = 1 n ( p i ) , p ′ = 1 n ∑ i = 1 n ( p i ′ ) p=\frac{1}{n}\sum\limits_{i=1}^n(p_i),\qquad p'=\frac{1}{n}\sum\limits_{i=1}^n(p'_i) p=n1i=1n(pi),p=n1i=1n(pi)
  2. 带入上边误差最小二乘函数整理,优化后结果:
    min ⁡ R , t J = 1 2 ∑ i = 1 n ∣ ∣ p i − p − R ( p i ′ − p ′ ) ∣ ∣ 2 + ∣ ∣ p − R p ′ − t ∣ ∣ 2 \min\limits_{R,t}J = \frac{1}{2}\sum\limits_{i=1}^n||p_i-p-R(p'_i-p')||^2+||p-Rp'-t||^2 R,tminJ=21i=1n∣∣pipR(pip)2+∣∣pRpt2
    观察,左边只和R有关,右边只和质心有关,有R时,令右边等于0,t可得。接下来着重求R
  3. 展开上式中关于 R R R 平方项,定义一个 W W W,最终用SVD分解可得R,得到后求解t即可。
    R = U V T R=UV^T R=UVT

2.2 优化(BA)法

2.2.2 非线性优化方法

和前边介绍的一样,构建G2O,然后导数用李代数扰动模型即可。
min ⁡ ξ = 1 2 ∑ i = 1 n ∣ ∣ ( p i − e x p ( ξ \qquad\qquad\qquad\qquad\qquad\qquad\min\limits_\xi = \frac{1}{2}\sum\limits_{i=1}^n||(p_i-exp(\xi ξmin=21i=1n∣∣(piexp(ξ^ )    p i ′ ) ∣ ∣ 2 2 )\;p'_i)||^2_2 )pi)22

注意:在唯一解的情况下,只要我们能找到极小值解,那么该值就是全局最优解。意味着可以任意选取初始值

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/903709.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用swoole实现实时消息推送给客户端

一. 测试服务端 //测试服务端public function testServer(){$server new Server(192.168.0.144, 9501, SWOOLE_BASE, SWOOLE_SOCK_TCP);$server->on(request, function ($request, $response) {$response->header(Content-Type, text/plain);$response->end("He…

【操作系统】虚拟内存相关分段分页页面置换算法

虚拟内存是什么&#xff1f; 【进程地址空间虚拟地址空间C/C程序地址空间就是那个4G的空间】 虚拟内存是操作系统内核为了对进程地址空间进行管理&#xff0c;而设计的一个逻辑意义上的内存空间概念。在程序运行过程中&#xff0c;虚拟内存中需要被访问的部分会被映射到物理内…

Mock平台-08开发:项目管理(四)编辑功能和Component抽离

【Mock平台】为系列测试开发教程&#xff0c;从0到1编码带你一步步使用Spring Boot 和 Antd React框架完成搭建一个测试工具平台&#xff0c;希望作为一个实战项目对各位的测试开发学习之路有帮助&#xff0c;大奇一个专注测试技术干货原创与分享的家伙。 本篇重点&#xff1a;…

HCIP生成树STP总结

STP生成树 网桥的4个选举 根网桥&#xff1a; 有且仅有一台&#xff0c;且由BPDU中的桥ID来决定 桥ID 网桥优先级&#xff08;0-65535公有&#xff09; 默认32768 MAC地址&#xff08;只有…

湘潭大学 湘大 XTU OJ 1055 整数分类 题解(非常详细)

链接 整数分类 题目 Description 按照下面方法对整数x进行分类&#xff1a;如果x是一个个位数&#xff0c;则x属于x类&#xff1b;否则将x的各位上的数码累加&#xff0c;得到一个新的x&#xff0c;依次迭代&#xff0c;可以得到x的所属类。比如说24&#xff0c;246&#…

漏洞指北-VulFocus靶场专栏-高级01

漏洞指北-VulFocus靶场专栏-高级01 高级001 &#x1f338;骑士cms任意代码执行&#xff08;CVE-2020-35339&#xff09;&#x1f338;step1&#xff1a;进入页面&#xff0c;登入后台step2 系统——网站配置——网站域名step3 中国蚁剑连接 高级002 &#x1f338;Django SQL注入…

安装ps找不到vcruntime140_1.dll怎么回事?有哪些解决方法

安装ps找不到vcruntime140_1.dll怎么回事&#xff1f;这可能是因为您的计算机Visual C Redistributable包损坏&#xff0c;其中包含vcruntime140_1.dll文件。VCRuntime140_1.dll是一个重要的动态链接库文件&#xff0c;它包含了Visual C运行时所需的一些函数和资源。当这个文件…

银行客户关系管理系统springboot财务金融进销存java jsp源代码

本项目为前几天收费帮学妹做的一个项目&#xff0c;Java EE JSP项目&#xff0c;在工作环境中基本使用不到&#xff0c;但是很多学校把这个当作编程入门的项目来做&#xff0c;故分享出本项目供初学者参考。 一、项目描述 银行客户关系管理系统springboot 系统有1权限&#x…

周易卦爻解读笔记——未济

第六十四卦未济 火水未济 离上坎下 未济卦由否卦所变&#xff0c;否卦六二与九五换位&#xff0c;象征尚未完成。 天地否 未济卦和既济卦既是错卦又是覆卦&#xff0c;这也是最后一卦&#xff0c;序卦传【物不可穷也&#xff0c;故受之以未济终焉】 未济卦象征尚未完成&…

NSSCTF之Misc篇刷题记录(14)

[SWPUCTF] 2021新生赛之Crypto篇刷题记录① [UUCTF 2022 新生赛]王八快跑[安洵杯 2020]BeCare4[HDCTF 2023]ExtremeMisc NSSCTF平台&#xff1a;https://www.nssctf.cn/ PS&#xff1a;记得所有的flag都改为NSSCTF [UUCTF 2022 新生赛]王八快跑 小游戏 小乌龟跑过线就有 fla…

BDA初级分析——SQL语句应用基础练习题

1、请检查OLYMPIC表中是否存在重复国家? SELECT Team,COUNT(*) AS 重复次数 FROM Olympic GROUP BY Team HAVING COUNT(*) > 1;SELECT COUNT(Team),COUNT(DISTINCT(Team)) FROM Olympic; 2、将OLYMPIC表中Armenia(ARM)的奖牌总数更新为14 UPDATE Olympic SET total_medals …

【C语言】使用C语言,实现九九乘法表(另附Python、Java、JavaScript实现方式)

文章目录 1. C语言实现1.1 思路1.2 代码实现 3.其他语言实现3.1 Python实现3.2 Java实现3.3 JavaScript实现 1. C语言实现 1.1 思路 九九乘法表图示&#xff1a; 思路如下&#xff1a;定义两层for循环即可实现九九乘法表 一共有9层&#xff0c;所以要定义一个变量i&#xff…

记录首次面试2023-08-18

人生第一次面试&#xff0c;大概一个小时左右。没有问我C的&#xff0c;上来一个数据库事务&#xff0c;虽然没有复习&#xff0c;但是还是能够记住一些&#xff0c;主要问的一些事务的隔离级别&#xff0c;以及都有什么作用&#xff0c;我是举例回答的&#xff0c;客户端A和客…

【激光雕刻与DIY Arduino SCARA机器人】

【激光雕刻与DIY Arduino SCARA机器人】 1. 项目概况2. 设计和3D模型3. 安装激光模块4. SCARA机器人激光雕刻机电路图5. 完成装配6. 马林固件,用于使用 SCARA 机器人进行激光雕刻7. 配置 Marlin 固件8. 控制软件 – 主机9. 使用 SCARA 机器人进行激光雕刻10. 生成用于激光雕刻…

PCAP01介绍和STM32模拟SPI驱动

一.芯片介绍 Pcap01是德国acam公司设计的一款革命性的电容测量芯片。该芯片 内部有DSP计算单元&#xff0c;可以直接将电容元件接到Pcap01芯片&#xff0c;然后芯片计算出容值大小&#xff0c;通过SPI总线将电容容值数据传送给CPU&#xff0c;电容测量完全数字化。 二,测量原…

不要着急购买iPhone 15,先看看这5点再做决定吧!

人们对下个月可能推出的iPhone 15感到兴奋,这是有充分理由的——有传言称,新机型正在做出一些重大改变,尤其是在iPhone 15 Pro机型方面。从四款新iPhone都采用USB-C,到iPhone 15 Pro Max采用潜望镜式长焦镜头以实现更好的变焦,听起来有很多功能值得兴奋。 当然,除非你没…

软件综合测试实训室建设方案

一、实训室总体目标 培养目标:培养软件测试的专业技术人才,使学生掌握软件测试的基本理论知识,熟练运用各类测试工具,具备随产品版本迭代进行回归测试的能力。 建设目标:打造一流的软件测试培训基地,建成集教学实训、技术研发、项目实习为一体的软件测试人才培养高地。 二、…

文件上传xxx

本地保存文件 将文件保存到服务器本地硬盘中 max-request-size 多个文件总大小不能大于100M PostMapping("/upload")public Result upload(String username,Integer age,MultipartFile image) throws IOException {log.info("用户名:{},牛叔&#xff1a;{},文件…

Android 多渠道打包及VasDolly使用

目录 1.添加productFlavors的配置buildConfigFieldmanifestPlaceholdersresValue 2.设置apk文件的名称&#xff0c;便于识别3.添加vasdolly、添加gradle脚本&#xff08;windows&#xff09; 作用&#xff1a;一次性可以打多个apk包&#xff0c;名字、包名、logo等可以不相同。…

掌控未知:项目中如何巧妙应对突发与紧急

引言 在项目管理的领域中&#xff0c;每一个项目都伴随着一系列的不确定性和挑战。这些不确定性可能源于外部环境的变化、团队内部的动态或技术的快速迭代。而在这些不确定性中&#xff0c;突发和紧急事件尤为考验项目经理的应变能力和决策智慧。那么&#xff0c;如何在项目中…