单线激光雷达学习(二)

特征识别——断点、角点

  • 斜率差算法——使用相邻点之间斜率的变化关系来提取特征点,再通过特征点对点云进行分割来提取线段,本算法不需要迭代,工作量较小,而且对阈值不敏感,准确率也较高。既克服了多数序惯类算法都存在无法对相交直线进行分割的缺点,也克服了递归算法计算量过大和因阈值选取不当过分割和欠分割的缺点。

1 斜率差法原理

以激光雷达为圆心,利用相邻点的斜率差值来区分断点、角点和散点。

图1 扫描点示意图

如图1所示,从 O O O点向直线L以等角度Δθ的间隔画直线,交点依次为 Q 1 Q_1 Q1​, Q 2 Q_2 Q2​, Q 3 Q_3 Q3​, Q 4 Q_4 Q4​…, O O O点到交点的长度依次为 d 1 , d 2 , d 3 , d 4 d_1,d_2,d_3,d_4 d1​,d2​,d3​,d4​…。然后,由 Q 1 Q_1 Q1​点向 O Q 2 OQ_2 OQ2​做垂线相交于 Q 1 ’ Q_{1}^{’} Q1’​点,则 ω 1 \omega _1 ω1​为直线L与 Q 1 Q 1 ’ Q_1Q_{1}^{’} Q1​Q1’​的夹角,同理可得 ω 2 \omega _2 ω2​和 ω 3 \omega _3 ω3​。当$\varDelta \theta 很小时, 很小时, 很小时,\sin \theta \approx \theta $,故有
tan ⁡ ω 1 = Q i + 1 Q ’ i Q i Q ’ i ≈ d i + 1 − d i d i Δ θ i = 1 , 2 , 3 \tan \omega _1=\frac{Q_{i+1}Q’_i}{Q_iQ’_i}\approx \frac{d_{i+1}-d_i}{d_i\varDelta \theta}\ i=1,2,3 tanω1​=Qi​Q’i​Qi+1​Q’i​​≈di​Δθdi+1​−di​​ i=1,2,3
令第i点的斜率 k i k_i ki​为
k i = d i + 1 − d i d i Δ θ k_i=\frac{d_{i+1}-di}{di\varDelta \theta} ki​=diΔθdi+1​−di​
因为由几何关系得: $\omega _3=\omega _2+\varDelta \theta =\omega _1+2\varDelta \theta $
tan ⁡ ω 2 − tan ⁡ ω 1 = tan ⁡ θ ( 1 + tan ⁡ ω 2 + tan ⁡ ω 1 ) \tan \omega _2-\tan \omega _1=\tan \theta \left( 1+\tan \omega _2+\tan \omega _1 \right) tanω2​−tanω1​=tanθ(1+tanω2​+tanω1​)
且因为 tan ⁡ θ ≈ 0 \tan \theta \approx 0 tanθ≈0,故

k 3 − k 2 ≈ k 2 − k 1 = tan ⁡ ω 2 − tan ⁡ ω 1 ≈ 0 k_3-k_2\approx k_2-k_1=\tan \omega _2-\tan \omega _1\approx 0 k3​−k2​≈k2​−k1​=tanω2​−tanω1​≈0

如图2、图3所示,当相邻点的斜率 k i k_i ki​值差距很小时,就认为它们位于同一条直线上,否则斜率突变点为断点、角点或散点。

  • 图2 断点处 Δ k \varDelta k Δk分布示意图

断点, Δ k ( i − 1 ) \varDelta k_{\left( i-1 \right)} Δk(i−1)​和 Δ k ( i ) \varDelta k_{\left( i \right)} Δk(i)​处峰值非常明显,且这两处峰值的符号相反,由此可以判断该点为断点。

  • 图3 角点处 Δ k \varDelta k Δk分布示意图

角点, Δ k ( i ) \varDelta k_{\left( i \right)} Δk(i)​处有较明显的峰值,且呈现为独点单峰,由此可以判断出该点为角点。

2 代码实现

2.1 角度化弧度

在上一节,我们已经实现了将雷达雷达扫描的数据提取出来,并存储在Buffer_ang[]数组和Buffer_dis[]数组中,因为C语言三角函数(sin、cos、tan)等使用的都是弧度制,而不是角度制,所以,第一步我们需要将角度Buffer_ang[]化成弧度制。

void Ang_change(void) //角度化弧度
{int i;printf("Data_change\r\n");for (i = 0; i < DATASIZE; i++){Buffer_ang[i] = Buffer_ang[i] + CAR_ANGLE;if (Buffer_ang[i] > 360){Buffer_ang[i] = Buffer_ang[i] - 360;}Buffer_ang[i] = Buffer_ang[i] * 0.0174533; //角度化弧度公式}
}

同理,可以提前将所有极坐标系化为笛卡尔坐标系,如此,计算斜率与斜率差时就可以直接用坐标计算

#define MAXLine 1008
float x[MAXLine], y[MAXLine];void Data_change(void)
{int i;for (i = 0; i < MAXLine; i++){x[i] = Buffer_dis[i] * cos(Buffer_ang[i]);y[i] = Buffer_dis[i] * sin(Buffer_ang[i]);}
}

2.2 斜率差滤波

根据斜率差算法的原理,编写其代码实现,将不符合斜率差的点删除,仅保留同一条直线特征上的点。

 for (i = 0; i < MAXLine; i++){k[i] = (y[i] - y[i + 1]) / (x[i] - x[i + 1]);}for (i = 0; i < MAXLine; i++){dk[i] = k[i] - k[i + 1];}for (i = 0; i < MAXLine; i++){jd1[i] = fabsf(dk[i + 1] - dk[i]);jd2[i] = fabsf(dk[i + 2] - dk[i + 1]);}for (i = 0; i < MAXLine; i++){if (fabsf(dk[i]) > 0.5 && fabsf(dk[i + 1]) > 0.5 && fabsf(dk[i + 2]) > 0.5 && jd1[i] > 1 && jd2[i] > 1){det_flag[i] = 1;}}for (i = 0; i < MAXLine; i++){printf("%6.2f  %6.2f  %6.2f  %6.2f   %d\r\n", x[i], y[i], k[i], dk[i], det_flag[i]);}

3 效果


如果觉得还不错,记得点个赞

单线激光雷达SLAM(二)特征识别——断点、角点相关推荐

  1. 单线激光雷达SLAM(一)数据提取

    雷达介绍与数据提取 1 雷达介绍 1.1 结构 本文使用的是镭神公司的单线 TOF 近距离机械式激光雷达M10. M10 系列激光雷达采用 TOF(time of flight)方案,能够对周围 36 ...

  2. LMS151-10100单线激光雷达与RealSense双目相机的联合标定

    一丶标定板的准备 棋盘格规格使用A4纸大小,角点(图7中红色.绿色圆圈标记)数分别为8个及6个,单个棋盘格为0.024mm*0.024mm的正方形. 将打印出的高清A4大小棋盘格粘贴在平整.坚硬的平面 ...

  3. 经典激光雷达SLAM系统:LeGO-LOAM

    作者 | 密斯特李  编辑 | 汽车人 原文链接:https://zhuanlan.zhihu.com/p/511968459 点击下方卡片,关注"自动驾驶之心"公众号 ADAS巨 ...

  4. 单线激光雷达与多线激光雷达

    单线激光雷达:实际上就是一个激光发射器(发出的线束是单线),再加一个旋转扫描仪.扫描出来的就是一个二维平面的图(2D激光) . 单线激光雷达特点: 便:一路发射一路接收,结构简单,使用方便:高:扫描速 ...

  5. 十五. 单线激光雷达和视觉信息融合

    单线激光雷达和视觉信息融合案例 很多智能应用场景涉及到激光雷达和相机视觉信息融合,一般都是指多线激光雷达,至少也得16线激光吧;但多线激光雷达动不动数万的价格,让很多技术人员无法尝试.我尝试使用微型机 ...

  6. 语义信息增强的激光雷达SLAM

    作者简介 本次深蓝学院公开课由陈谢沅澧博士主讲.陈谢沅澧来自德国波恩大学图像测量与机器人实验室,导师是Cyrill Stachniss教授,主要方向是激光雷达SLAM,定位以及建图. 德国波恩大学图像 ...

  7. 单线激光雷达(Lidar)学习三:使用雷达数据/scan转/PointCloud后生成鸟瞰图

    单线激光雷达(Lidar)学习三:使用雷达数据/scan转/PointCloud后生成鸟瞰图 前言: 雷达广泛应用于自动驾驶中,作用非常重要,是自动驾驶无人车中的作为"眼睛"的一环 ...

  8. 单线激光雷达为什么这么火?

    自激光雷达在机器人等领域的应用加速人们的认知以来,有关激光雷达的话题就一直不断.那么,激光雷达为什么这么火呢? 激光雷达的一二三 单线激光雷达实际上就是一个激光发射器,再加一个旋转扫描仪.扫描出来的就 ...

  9. 基于fpga的单线激光雷达数据处理

    激光雷达: 首先来给大家稍微介绍以下激光雷达,激光雷达,即Light Detation and ranging,它相比于其他雷达,优点非常明确,包括 1).具有极高的分辨率: 2).抗干扰能力强: 3 ...

最新文章

  1. 汉恩互联「绘动画室」,触摸背景墙
  2. go语言中map的使用
  3. JAVA中的方法和构造方法有什么区别
  4. 【laravel5.4】迁移文件的生成、修改、删除
  5. 这么香的技术还不快点学起来,不吃透都对不起自己
  6. 前端学习(2054)vue.js课程介绍
  7. JavaScript(一)—— 初识JavaScript/注释/输入输出语句/变量/数据类型
  8. s:property=a value=/取的s:debug/s:debug中的value stack中的属性值
  9. 网友建站经验——(转载)
  10. 如果你产品的卖点跟竞争对手一样,那你怎么脱颖而出?
  11. CS224N笔记(十):问答系统
  12. Arcgis培训内容
  13. 余弦 matlab 幅度谱,数字图像处理_旋转与幅度谱(含MATLAB代码)
  14. 如何把html网页共享文件夹,如何将文件夹共享 设置共享文件夹教程【详细介绍】...
  15. 计算机版音乐教学,计算机音乐技术在高职音乐教学的应用
  16. 7-17 直角坐标->极坐标
  17. python实现FFT,IFFT
  18. win10 右键新建卡顿
  19. pages改变文档背景和改变文字背景
  20. python网络爬虫进入(一)——简单的博客爬行动物

热门文章

  1. lua脚本加密,lua代码加密使用说明
  2. java list 子集_Java——List方法,获取子集
  3. 学习ARM开发(11)
  4. leetcode:2448. 使数组相等的最小开销【猜结论落在给定点 + 考虑初始值和变化量 + 三分法模板学习】
  5. 基于quartz实现定时任务管理系统
  6. 【FPGA基础篇】底层结构组成
  7. 【正则表达式】从字符串中提取数字
  8. JQ数据库查询时间转换
  9. 关于数字化转型方法论的一些思考
  10. 知识图谱最新论文清单(附论文解读)