plicp 点云迭代最近邻点配准法
输入参数
- 点云A的极坐标集合
- 点云A对应Lidar所在pose
- 点云B的极坐标集合
- 点云B对应Lidar所在pose
Features
- 根据两个点云的弧度关系确定找点的起始位置
- 根据两个点云的弧度关系设置找点的停止条件
- 算出被投影点云的大跳小跳表,根据大跳小跳表来遍历点云
大跳小跳表(假设点云A中间点为a点)
建立大跳小跳表的前提点云的弧度是递增的
理论上来说当点云A的所有点的弧度都一样,那么点云A中长度和b点长度相同的点,距离最近
a点一共有两个大跳表和两个小跳表:
| 序号比a点小的点 | 序号比a点小的点 | 序号比a点大的点 | 序号比a点大的点 | |
|---|---|---|---|---|
| 小跳表1(有序) | 大跳表1(有序) | 小跳表2(有序) | 大跳表2(有序) | |
| 长度比a短 | 长度比a长 | 长度比a短 | 长度比a长 |
前提
- 输入参数点云的极坐标的弧度是有序的(这里的有序不是说弧度是递增或者递减,而是说点是Lidar顺时针或者逆时针扫了一圈出来
- 不同弧度上的任意两点长度越接近,距离越近
- A和C之间区取余角,Lsin(余角)是A点距离CC'这条线最近距离
步骤
- 过滤原始数据的无效点
a. 原始数据中长度为0(或者近似)的点标记为无效
b. 原始数据中长度过长(超出Lidar扫描能里的点)标记为无效
c. 使用滑窗(2cm),每次滑窗内的点合并成一个点(x和y取平均值) - 找出点云A和点云B各自的最小弧度和最大弧度
- 排序点云(原始数据的有序请看前提1),排序结果为弧度递增
- 转换两个点云各自的迪达尔坐标
- 计算两个点云对应Lidar pose的差
- 根据Lidar pose的差,将点云B投影到点云A为C,算出C的笛卡尔坐标
- 建立点云A的大跳小跳表
- 算出点云A每弧度的点数量NumA
- 遍历点云C的每个点X
a. 算出X的极坐标
b. 算出X点弧度和点云A最小弧度的差值,然后乘以NumA,得到的结果cur_idx是遍历点云A的起始点序号
c. 如果保存了X的前一点在点云A最近点的序号last_beat_idx,那么X点就从last_beat_idx+1开始在点云A上找最近点,cur_idx=last_beat_idx+1
d. 从X点的分别向前向后查找最近点,每次遍历都保存目前找到的最近距离dist(根据大跳小跳表遍历)
e. 算出点云A任意一点a和X的弧度差raX,然后用X的长度做斜边,算出和X点弧度相差raX的点的距离best_dist(最近距离),一旦之前存在dist <= best_dist,那么就认为找到了最近点D - 找到最近点D之后,算出点D前一个点D1和后一个点D2分别距离点X的距离,距离更短的点就认为是距离点X第二最近的点

未完
一对多
plicp 点云迭代最近邻点配准法的更多相关文章
- 【第1期】腾讯云的1001种玩法征集,Ipad mini和Kindle 等你拿!(文章评审中)
版权声明:本文由阁主的小跟班原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/695994001482226944 来源:腾云 ...
- 【腾讯云的1001种玩法】几种在腾讯云建立WordPress的方法(Linux)(二)
版权声明:本文由张宁原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/126547001488207964 来源:腾云阁 ht ...
- MATLAB用二分法、不动点迭代法及Newton迭代(切线)法求非线性方程的根
MATLAB用二分法.不动点迭代法及Newton迭代(切线)法求非线性方程的根 作者:凯鲁嘎吉 - 博客园http://www.cnblogs.com/kailugaji/ 一.实验原理 二.实验步骤 ...
- 【腾讯云的1001种玩法】在腾讯云上创建您的SQL Cluster(5)
版权声明:本文由李斯达 原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/97264001482830465 来源:腾云阁 h ...
- 【腾讯云的1001种玩法】腾讯云搭建DiscuzX论坛
版权声明:本文由艾可德原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/506828001481866457 来源:腾云阁 h ...
- for循环语句以及迭代法和穷举法
循环语句: 四要素:初始条件,循环条件,状态改变,循环体 for(初始条件;循环条件;状态改变){ //循环体} 案例1:打印等腰直角三角形和菱形 左上三角 static void Main(stri ...
- 【腾讯云的1001种玩法】 Laravel 整合万向优图图片管理能力,打造高效图片处理服务
版权声明:本文由白宦成原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/574549001488234358 来源:腾云阁 h ...
- 【腾讯云的1001种玩法】 Laravel 整合微视频上传管理能力,轻松打造视频App后台
版权声明:本文由白宦成原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/108597001488193402 来源:腾云阁 h ...
- 作业:for循环,迭代法和穷举法
for()循环 四要素:初始条件,循环条件,状态改变,循环体. 执行过程:初始条件--循环条件--循环体 ...
随机推荐
- InnoDB什么时候会锁表?
我们常常说InnoDB是行锁,但是这里介绍一下它锁表的情况. InnoDB行锁是通过索引上的索引项来实现的,这一点MySQL与Oracle不同,后者是通过在数据中对相应数据行加锁来实现的.InnoDB ...
- 说说三元运算和if...else的相同之处
三元运算符和if-else语句:不同之处. a) 三元运算符是必须要有返回值,而if-else语句并不一定有返回值,其执行结果可能是赋值语句或者打印输出语句. b) java三元表达式有字符强转(双目 ...
- NULL 是什么意思 ?
NULL 这个值表示 UNKNOWN(未知):它不表示""(空字符串).对 NULL 这 个值的任何比较都会生产一个 NULL 值.您不能把任何值与一个 NULL 值进行比 较,并 ...
- [护网杯 2018]easy_tornado 1
复现一道关于tornado的题目 首先可以得知此题用的是tornado,基于python的后端框架,多半是ssti注入 有三个文件,首先可得知flag在何处 然后观察hint和url就知道要根据coo ...
- 设计模式之:抽象工厂模式AbstractFactoryPattern的实现
相比于工厂模式,抽象工厂模式的每个工厂可以创建产品系列,而不是一个产品: 抽象工厂用到的技术:接口.多态.配置文件.反射: 抽象工厂模式的设计原则: 实现客户端创建产品和使用产品的分离,客户端无须了解 ...
- Centos搭建 LAMP 服务器教程
搭建 LAMP 服务 搭建 MySQL 数据库 安装 MySQL 使用 yum 安装 MySQL: yum install mysql-server -y 安装完成后,启动 MySQL 服务: ser ...
- localStorage存储返回过来的对象 显示object object的问题
localStorage.setItem() 不会自动将Json对象转成字符串形式 用localStorage.setItem()正确存储JSON对象方法是: 存储前先用JSON.stringify( ...
- tracert命令简述
1. 路由跟踪在线Tracert工具说明 Tracert(跟踪路由)是路由跟踪实用程序,用于确定 IP 数据报访问目标所采取的路径.Tracert 命令用 IP 生存时间 (TTL) 字段和 ICMP ...
- python数据类型与基础运算
注释:了解其他数据类型补充 基础数据类型补充 可以回一下之前的数据类型: 整型,浮点型,字串符和列表. 一.字典(dict) #字典:可以精准的储存数据 是用大括号表示'{}' '字典和数据数据列表差 ...
- 更改docker默认的data,metadata存储大小(实操)
为什么要更改 data,metadata呢?我们运行环境中涉及大量数据操作,数据增长有时候很快,由于之前规划不足,所以磁盘很快达到瓶颈需要进行重新部署.这就需要调整原来的一些docker配置.操作系统 ...