ICP算法理解入门之RT求解

本文仅仅分析了一下两组点云做好匹配好了之后, 如何解算RT, 并不涉及匹配过程,详细的匹配,下次再出一篇博客

ICP 求解旋转矩阵 ( R ) 的步骤

给定两个点云集合 ( P = {p_1, p_2, …, p_n} )(源点云)和 ( Q = {q_1, q_2, …, q_n} )(目标点云),ICP 的目标是通过找到旋转矩阵 ( R ) 和平移向量 ( t ),使得源点云在经过刚体变换后,最小化与目标点云之间的距离平方和:

E ( R , t ) = ∑ i = 1 n ∥ q i − ( R p i + t ) ∥ 2 E(R, t) = \sum_{i=1}^{n} \| q_i - (R p_i + t) \|^2 E(R,t)=i=1nqi(Rpi+t)2

其中:

  • ( R ∈ \in SO(3) ) 是 3D 旋转矩阵。
  • ( t ∈ \in R \mathbb{R} R ) 是 3D 平移向量。

求解旋转矩阵 ( R ) 的步骤

1. 计算质心

计算两个点云集合的质心 ( μ P \mu_P μP) 和 ( μ Q \mu_Q μQ):
μ P = 1 n ∑ i = 1 n p i , μ Q = 1 n ∑ i = 1 n q i \mu_P = \frac{1}{n} \sum_{i=1}^{n} p_i, \quad \mu_Q = \frac{1}{n} \sum_{i=1}^{n} q_i μP=n1i=1npi,μQ=n1i=1nqi

2. 去质心

对每个点都减去相应的质心,得到去质心后的点集 ( P’ ) 和 ( Q’ ):
p i ′ = p i − μ P , q i ′ = q i − μ Q p'_i = p_i - \mu_P, \quad q'_i = q_i - \mu_Q pi=piμP,qi=qiμQ

3. 计算协方差矩阵 ( H )

这里可以解释一下为什么求解协方差矩阵,原因参考的SLAM 14讲的第七章
在这里插入图片描述

使用去质心后的点集 ( P’ ) 和 ( Q’ ),构建协方差矩阵 ( H ),注意是每对点的外积的和:
H = ∑ i = 1 n p i ′ q i ′ T H = \sum_{i=1}^{n} p'_i {q'_i}^T H=i=1npiqiT

此处 ( H ) 是 3x3 的矩阵,它包含了两个点云之间的协方差信息。

4. SVD 分解

对协方差矩阵 ( H ) 进行奇异值分解:
H = U Σ V T H = U \Sigma V^T H=UΣVT

其中:

  • ( U ) 和 ( V ) 是 3x3 的正交矩阵。
  • ( Σ \Sigma Σ) 是 3x3 的对角矩阵,包含奇异值。
5. 计算旋转矩阵 ( R )

旋转矩阵 ( R ) 可以通过 SVD 的结果求得:
R = V U T R = V U^T R=VUT

但是,如果 ( det ⁡ ( R ) = − 1 \det(R) = -1 det(R)=1),则说明产生了反射矩阵,此时需要对 ( V ) 的最后一列取反:
R = V [ 1 0 0 0 1 0 0 0 − 1 ] U T R = V \begin{bmatrix} 1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & -1 \end{bmatrix} U^T R=V 100010001 UT

平移向量 ( t )

旋转矩阵 ( R ) 求解完毕后,平移向量 ( t ) 可以通过以下公式计算:
t = μ Q − R μ P t = \mu_Q - R \mu_P t=μQRμP

目标函数总结

通过最小化目标函数 ( E(R, t) ),我们可以逐步通过迭代方式求解旋转矩阵 ( R ) 和平移向量 ( t ),使得源点云经过变换后与目标点云对齐。这就是 ICP 算法求解刚体变换的核心步骤。

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

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

相关文章

uniapp-uniapp + vue3 + pinia 搭建uniapp模板

使用技术 ⚡️uni-app, Vue3, Vite, pnpm &#x1f4e6; 组件自动化引入 &#x1f34d; 使用 Pinia 的状态管理 &#x1f3a8; tailwindcss - 高性能且极具灵活性的即时原子化 CSS 引擎 &#x1f603; 各种图标集为你所用 &#x1f525; 使用 新的 <script setup> …

多ip访问多网站

作业要求 配置nginx服务通过ip访问多网站 [rootlocalhost ~]# systemctl stop firewalledFailed to stop firewalled.service: Unit firewalled.service not loaded. [rootlocalhost ~]# mount /dev/sr0 /mnt mount: /mnt: /dev/sr0 已挂载于 /run/media/redhat/RHEL-9-3-0-B…

云原生技术:nacos进化到servicemash

面试的时候跟面试官吹嘘说&#xff0c;现在主流的微服务架构&#xff0c;都已经用得熟熟的了&#xff0c;自己技术很不错。进了公司却被分到了API资产管理平台&#xff0c;要做一个类似于网关的东西。经过调研才发现&#xff0c;自己用的微服务架构已经过时了&#xff0c;什么&…

Spring配置/管理bean-IOC(控制反转) 非常详细!基于XML及其注解!案例分析! 建议复习收藏!

目录 1.Spring配置/管理bean介绍 2.基于XML配置bean 2.1基于id来获取bean对象 2.2基于类型获取bean对象 2.3通过指定构造器配置bean对象 2.4通过p名称空间配置bean 2.5通过ref配置bean(实现依赖注入) 2.6注入内部Bean对象&#xff0c;依赖注入另一种方式 2.7 注入集合…

骨传导耳机哪款好?五大热门畅销骨传导耳机推荐!

在当今快节奏的生活中&#xff0c;骨传导耳机因其独特的声音传导方式和开放式的佩戴体验&#xff0c;逐渐成为运动爱好者和音乐发烧友的新宠。它们不仅提供了一种更为安全、舒适的听觉享受&#xff0c;还能在运动时让我们保持对周围环境的感知。随着技术的不断进步&#xff0c;…

理解VSCODE基于配置的设置,避免臃肿

这节课我们讲两点&#xff1a; &#xff08;一&#xff09;下载、安装、汉化及美化 VSCODE&#xff1b; &#xff08;二&#xff09;理解VSCODE中基于配置&#xff08;Profiles&#xff09;的设置&#xff08;Settings&#xff09;&#xff0c;让 VSCODE 保持清爽。 &#xff0…

Java:数据结构-二叉树oj题

1.判断两个数是否相同 题目链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; public boolean isSameTree(TreeNode p, TreeNode q) {if(pnull && q!null || qnull && p!null){return false;}if(pnull && qnull){return true;}if(q.val!p.v…

跨越数字鸿沟,FileLink文件摆渡系统——您的数据安全高效传输新选择

在这个信息爆炸的时代&#xff0c;数据的流通与共享已成为推动各行各业发展的关键力量。然而&#xff0c;随着数据量的激增&#xff0c;如何在保证数据安全的前提下&#xff0c;实现高效、便捷的文件传输&#xff0c;成为了众多企业和个人用户面临的重大挑战。正是在这样的背景…

zabbix 迁移数据目录

由于安装zabbix的时候数据目录给小了&#xff0c;现在决定迁移数据目录 一&#xff1a;查找数据目录 这个数据目录我们只需要看数据库的配置文件就行&#xff0c;my,cnf datadir指向的就是数据目录 ls /var/lib/mysql/ 二&#xff1a;创建新的数据目录 mkdir /monitor/ …

大数据实验3: HDFS基础编程 (shell命令、JAVA API使用)

实验3&#xff1a; HDFS基础编程 一、实验目的 HDFS的shell命令使用HDFS的JAVA API使用&#xff1b; 二、实验平台 操作系统&#xff1a;Linux&#xff08;Ubuntu16.04&#xff09;&#xff1b;Hadoop版本&#xff1a;3.3.1&#xff1b;JDK版本&#xff1a;1.8&#xff1b;…

C++20中头文件source_location的使用

<source_location>是C20中新增加的头文件&#xff0c;此头文件是utility库的一部分。 主要内容为类std::source_location&#xff1a;表示有关源代码的某些信息&#xff0c;例如文件名(__FILE__)、行号(__LINE__)和函数名(__func__)。 以下为测试代码&#xff1a; names…

交易之路:如何找到适合自己的交易品种

大部分新手交易者最容易陷入的误区就是盲目跟风&#xff0c;他们倾向于选择那些被众人追捧且看似成功的交易品种&#xff0c;认为既然大家都在做&#xff0c;那么一定有利可图。然而&#xff0c;他们忽略了交易品种选择的核心原则&#xff1a;基于个人的深入测试与理解&#xf…

传统企业营销新起点:百科词条构建基础策略!

合作咨询联系竑图 hongtu201988 搜索你的企业名称&#xff0c;出现的结果是什么&#xff1f;是否大部分都是信用网站的基础注册信息&#xff1f;没有正面的企业形象展示&#xff1f; 如果企业做了百度词条呢&#xff1f;会是一个什么结果呢&#xff1f; 以上两种结果带给大家的…

百度智能云千帆 ModelBuilder 大模型服务及开发解读

本文整理自百度云智峰会 2024 —— 大模型平台技术实践论坛的同名演讲。 更多大会演讲内容&#xff0c;请访问&#xff1a; https://cloud.baidu.com/summit/AIcloudsummit_2024/index.html 最近大模型产业应用圈子里有一句非常流行的话&#xff0c;叫做度日如年。不是说这件…

自动化检查网页的TDK,python+selenium自动化测试web的网页源代码中的title,Description,Keywords

首先&#xff0c;TDK是什么&#xff1f;对于新手小白来说&#xff0c;可能是懵逼的&#xff0c;所以这里给出一个官方的解说‌网页的TDK是指标题&#xff08;Title&#xff09;、描述&#xff08;Description&#xff09;和关键词&#xff08;Keywords&#xff09;的集合‌。这…

【服务器】服务器 BMC(基板管理控制器,Baseboard Management Controller)

基板管理控制器&#xff08;BMC&#xff0c;Baseboard Management Controller&#xff09;是用于监控和管理服务器的专用控制器&#xff0c;用通俗的话讲&#xff0c;BMC 是主机服务器系统下的一个独立系统。这个独立系统有自己的处理器和内存&#xff0c;即使主机硬件或操作系…

开源限流组件分析(一):juju/ratelimit

文章目录 本系列前言数据结构对外提供接口初始化令牌桶获取令牌 核心方法adjustavailableTokenscurrentTicktakeTakeAvailableWait系列 本系列 开源限流组件分析&#xff08;一&#xff09;&#xff1a;juju/ratelimit&#xff08;本文&#xff09;开源限流组件分析&#xff0…

Race Track Generator Ultimate:Race Track Generator(赛车场赛道看台场景创建工具)

下载&#xff1a;​​Unity资源商店链接资源下载链接 效果图&#xff1a;

【论文阅读】Bi-Mamba+: Bidirectional Mamba for Time Series Forecasting

文章目录 概要阅读背景知识引言创新之处 研究方法概述方法部分的核心模块多尺度打补丁&#xff08;Multi-Scale Patching&#xff09;Mamba&#xff1a;全局模式专家Local Window Transformer&#xff08;LWT&#xff09;&#xff1a;局部变化专家长短期路由器&#xff08;Long…

Bootstrap Blazor实现多个Select选择器联合选择

Bootstrap Blazor官方目前只提供单个Select选择器&#xff0c;如果要想实现下图所示的多个Select选择器联合选择&#xff0c;则需要通过编写自定义组件来实现。 主要通过Bootstrap的data-bs-toggle属性来实现展开和折叠效果。 .razor文件内容如下&#xff1a; typeparam TValu…