| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 人工智能 -> 基于ICP算法计算点集之间的变换矩阵(旋转、平移) -> 正文阅读 |
|
[人工智能]基于ICP算法计算点集之间的变换矩阵(旋转、平移) |
前言本文主要是计算两个激光雷达之间的变换矩阵,即计算两组点云之间的变换矩阵。其中处理的点云数据主要是由x,y,z,intensity组成的,代表空间位置x,ry,z 和每个点云对应的反射强度intensity; 这里计算点集之间的变换矩阵,用到每个点云的x,y,z信息,可表示为n*3的数组;两组激光雷达点云,可以表示为2和n*3的数组。 首先使用ICP点云匹配算法,计算两组点云之n*3的数组间对应的点;然后基于SVD算法求出两个对应点集合的旋转矩阵R和转移矩阵t。 目录 一、基于ICP匹配对应点基于点的匹配算法中常用最多的是 ICP(Iterative Closest Point)算法;其实质是基于两个集合中最近点对的搜索,并且估计将它们对齐的“刚性变换”。然后,将刚性变换应用于一个集合的点,并迭代该过程直到收敛。 优点:原理简单、易于理解和实现,同时配准精度较高。 弊端:ICP 算法在迭代初期就必须确定初始位置,如果初始位置估计不准确,与实际位置相差较大,则可能会产生局部最优解。并且,ICP 算法在每次迭代时都要对点集内所有点进行对应点搜索。 应用:ICP 算法不需要事先对目标进行特征提取和分割,可以直接对点云进行处理。 使用ICP进行点云配准,基本思路是:对于两片待配准的点云,首先寻找两个点云中的对应点间的对应关系,计算出两片点云间的坐标变换参数,然后通过三维刚体变换,将两片待配准点云的坐标系调整到一致,从而完成 两片点云在三维空间中的配准。 ICP 配准算法流程图,如下所示: ?在迭代初期,数据点可能和其对应点距离很远,但随着迭代次数的增加它们距 离越来越近。ICP 算法可以单调收敛到局部最小值,可能导致陷入局部极值,所以初值的选取尤为重要。 二、计算变换矩阵假设激光雷达1的点云数据,表示为A数组,结构是n*3;激光雷达2的点云数据,表示为B数组,结构也是n*3;A和B数组已经通过ICP算法,进行一一匹配了。 注意:这里的点最少需要3个,即n>=3;点多一些,计算得更精准一些。 2.1 思路对于无噪声数据,两个点集之间的 旋转矩阵R 和 平移向量t,可以表示为: ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? (R 是一个 3×3 旋转矩阵,t 是 1×3平移向量。) 对于有噪声数据,它将最小化最小二乘误差,两个点集之间的 旋转矩阵R 和平移向量t,可以表示为: ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 无噪声数据、或有噪声数据,计算R和t,通常都需要三步:
2.2?计算中心点这里是点的平均值,计算如下: 2.3?将点集合移动到原点需要将点集重新中心化,生成新点集合,公式如下: ?2.4?计算协方差矩阵H计算点集之间的协方差矩阵H,公式如下: 2.5 计算旋转矩阵R通过SVD方法获得矩阵的U、S和V,可以计算点集之间的旋转矩阵R,公式如下: ?2.6 计算平移向量t通过R可以获得转移矩阵t,公式如下: ?关于SVD补充一下: ?奇异值分解(SVD)维基百科:https://en.wikipedia.org/wiki/Singular_value_decomposition ?SVD的数学推导文档:https://igl.ethz.ch/projects/ARAP/svd_rot.pdf 三、实现代码案例大佬们有相关的代码开源了,Python实现的:GitHub - ClayFlannigan/icp: iterative closest point 这里考虑了有噪声的数据;?
效果: 参考文献[1]?钟海兴.特定场景下智能车的融合定位及导航策略研究[D].华南理工大学,2019. [2]?李雨欣. 基于激光雷达的点云数据处理算法研究[D]. 长春理工大学, 2020. [3]?Finding optimal rotation and translation between corresponding 3D points | Nghia Ho [4]?https://igl.ethz.ch/projects/ARAP/svd_rot.pdf [5]?计算两个对应点集之间的旋转矩阵R和转移矩阵T_u012836279的专栏-CSDN博客 变换矩阵 开源代码:https://en.wikipedia.org/wiki/Kabsch_algorithm ICP开源代码:GitHub - ClayFlannigan/icp: iterative closest point GitHub - agnivsen/icp: A tutorial on iterative closest point using Python 本文直供大家参考和学习,谢谢。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/27 4:38:06- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |