基于思岚A1激光雷达+OpenGL+VS2017的Ramer-Douglas-Peucker算法的实现

时隔两年 又借到了之前的那个激光雷达,最老版本的思岚A1,甚至不支持新的固件,并且转接板也不见了,看了下淘宝店卖¥80,但是官方提供了一个基于STM32的实现方式,于是我估摸着这个转接板只是一个普通的USB-TTL转接板,那我就用340搭一个试试吧

根据官方的datasheet,电机可以5V供电,核心也是5V,电机使能是VMOTO电压,即5V,因此将三个接口焊到一起,两个地焊到一起,然后剩下一组TXRX,因此七个接口变成四个接口了,正好能接上340,于是插上电试了试,当然。。。没有那么顺利,报错,连接不上设备

于是开始检查连接问题,突然发现转接板的TX和雷达的TX没有导通,原来之前的那个转接口接触不良,于是重新焊了一个洞洞板来转接,这次能连接上了,但是没法开始扫描,不过想起了两年前调试的时候写过调试日志,当时好像也遇到了类似的问题

看来这就是写日志的好处啊,于是测量了电压,发现只有4.5V,USB的压降太严重,而datasheet里面核心电压最低需要4.9V,我增加了一个USB供电也只能提到4.7V,虽然不记得之前那个外部供电是什么提供的了,但是反正这个转接板还有点空间,那就加个AMS来降压,外接一个之前在达普买的可充电9V电池,焊好之后通电,看着AMS上飘起的缕缕青烟,我知道白干了,换了个AMS之后改了下正负极,然后加了一个TVS,这下搞定了,正常运行!开启方式为先用USB-TTL接上电脑,然后再外接电源提高电压,然后就能正常启动了,只是不知道这样对设备有没有损伤,有空可以打片PCB回来做个小点的转接板,也比官方的板便宜(逃

然后就是Ramer-Douglas-Peucker算法的实现,其实原理非常简单,就是先根据较大的阈值将点集分隔开成几个小的集合,然后以每个集合的最边上两侧的点为端点并连线,计算中间每个点到这个线段的距离(d1...dn),然后取最远的点(d3),如果最远的距离大于阈值,则细分为两个集合,然后重复之前的步骤

可以得到蓝色和绿色两个子集,然后分别有d1、d2和d3距离,如果每个子集的最大值(d2和d3)超过阈值,对每个子集重复之前的步骤,

然后就是程序的实现了,这是两年前写的程序,当时用的是OpenGL库,这个库相对于OpenCV更加轻量,并且不需要配置系统环境,只用在VS里面添加include和lib目录即可,雷达的sdk需要添加include、lib目录和附加依赖项,sdk可以从官网下载,并且只能用32位!!!64位会报错,可能可以修改部分代码实现,但是暂时没有这个打算

代码依旧托管于Github,不过因为是老程序了,没有补充很多注释,并且算法表达也不够简明,新版分割算法可以参考Github里面LSD下的myRDP程序

https://github.com/Pyrokine/RamerDouglasPeucker17

原文地址:https://www.cnblogs.com/Pyrokine/p/10661995.html

时间: 2024-10-03 14:45:22

基于思岚A1激光雷达+OpenGL+VS2017的Ramer-Douglas-Peucker算法的实现的相关文章

激光雷达寿命短,思岚通过什么技术来解决?

激光雷达已成为机器人自主定位导航不可或缺的关键设备,为了大幅度降低激光雷达的成本,减少活动部件提高可靠性,激光雷达也顺利成章的从机械式激光雷达转向固态式激光雷达,固态激光雷达具有体积小,方便集成等优势.       那么何为固态激光雷达? 就是指它在工作时不是固定不动的,其内置的测距装置会不断旋转,进行360°全方位扫描.在运行时,旋转的测距装置需要电能和传输数据信息,但如果采用导线直接连接就会导致导线缠绕,无法正常工作.因此,目前市面上几乎所有的非固态激光雷达厂家都会选择一个电旋转连接器,俗称

上海副市长彭沉雷亲临“思岚科技”调研考察

2018年11月14日,上海市副市长彭沉雷.上海市人力资源和社会保障局局长赵祝平.浦东新区副区长陈希等多位领导人亲临上海思岚科技有限公司进行调研考察. 副市长彭沉雷亲临思岚科技考察 副市长彭沉雷了解思岚科技核心技术及所获荣誉 副市长彭沉雷一行人在思岚科技联合创始人李宇翔和林凌的陪同下,了解了思岚科技的核心技术与所获荣誉.先后参观了思岚科技的办公区域和产品展示区,对思岚科技的激光雷达产品.机器人定位导航技术表现出浓厚兴趣. 彭沉雷副市长听李宇翔讲解思岚科技产品 在思岚科技李宇翔的详细介绍下,彭沉雷

搭建基于MinGW平台的《OpenGL蓝皮书(OpenGL SuperBibe 5th)》示例代码编译环境

副标题:搭建基于MinGW平台的<OpenGL超级宝典>(OpenGL蓝皮书第5版)GLTools 编译环境.示例代码:Triangle.cpp @ SB5.zip 以下内容以及方法均参考自老外在stackoverflow上的回答,强烈建议看看原文,因为他告诉你解决问题的思路而不只是给你结果opengl-superbible-5th-edition-set-up-problems 1. 还未安装MinGW的,去官网下一个,我这里用的是第三方的安装包 TDM-GCC  32位下载地址 2. 到

基于数组二分查找算法的实现

基于数组二分查找算法的实现 二分查找 查找 算法 赵振江 二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好:其缺点是要求待查表为有序表,且插入删除困难.因此,折半查找方法适用于不经常变动而查找频繁的有序列表.首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功:否则利用中间位置记录将表分成前.后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表.重复以上过程,直到找到满足条件的记录,使查找成功

史上最简单OpenGL+VS2017环境配置

这里采用 最简单的方法: (1)添加Nuget包管理器(方便我们为项目添加OpenGL的库) (2)新建一个项目 右键我们的项目名 ——> 管理NuGet程序包——>搜索nupengl,然后下载安装 (3)输入以下代码: #include <GL/glut.h> void Show() { glClear(GL_COLOR_BUFFER_BIT); glRectf(-0.1f, -0.1f, 0.5f, 0.5f); glFlush(); } int main(int argc,

基于FPGA的均值滤波算法的实现

前面实现了基于FPGA的彩色图像转灰度处理,减小了图像的体积,但是其中还是存在许多噪声,会影响图像的边缘检测,所以这一篇就要消除这些噪声,基于灰度图像进行图像的滤波处理,为图像的边缘检测做好夯实基础. 椒盐噪声(salt & pepper noise)是数字图像的一个常见噪声,所谓椒盐,椒就是黑,盐就是白,椒盐噪声就是在图像上随机出现黑色白色的像素.椒盐噪声是一种因为信号脉冲强度引起的噪声,产生该噪声的算法也比较简单. 均值滤波的方法将数据存储成3x3的矩阵,然后求这个矩阵.在图像上对目标像素给

基于MapReduce的朴素贝叶斯算法的实现与分析

一.朴素贝叶斯(Na?ve Bayes)分类器 1.1 公式 朴素贝叶斯是一个概率分类器 文档 d 属于类别 c 的概率计算如下(多项式模型): nd是文档的长度(词条的个数) P(tk |c) 是词项tk 出现在类别c中文档的概率,即类别c文档的一元语言模型 P(tk |c) 度量的是当c是正确类别时tk 的贡献 P(c) 是类别c的先验概率 如果文档的词项无法提供属于哪个类别的信息,那么我们直接选择P(c)最高的那个类别 1.2 具有最大后验概率的类别 §朴素贝叶斯分类的目标是寻找"最佳&q

基于暗通道去雾算法的实现与优化(二)opencv在pc上的实现

上一篇中,学习了何的论文中的去雾方法,这一篇中,我按照何的论文思路借助opencv 2.4.10 进行了实现,效果的确很好,就是耗时太多了,效果见下图:蓝色圆圈代表大气光值的取值点. 突然发现上一篇中忘了介绍大气光值A的求解了,论文中是这样做的: 1.首先取暗通道图中最亮的千分之一的像素点. 2.根据这些像素点的位置在原图中搜索一个最亮的点,这个点的强度(intensity)就是我们要求的A啦. 论文作者何认为这样做的好处就是避免了原图中比较亮的物体作为A的值,比如图片中的白色的汽车,如果从原图

基于《Combining Sketch and Tone for Pencil Drawing Production》的图像铅笔画算法的实现

一,借鉴: 本文借鉴了CSDN博主风吹夏天对此论文算法的理解:风吹夏天的图像铅笔画算法,以及香港中文大学Cewu Lu等人写的该论文的主页.原文作者和博主风吹夏天都给过代码,但是代码不全.我仔细看了原论文和该博主的文章后,基本上,大致算法思想就理通了.本文对于具体算法细节就不细述了,个人建议还是先进行原论文的研读,对该论文所进行的步骤先有个大致的了解. 二,算法思路 1,首先需要产生笔画结构 大致思路:对原图像进行梯度运算,得出大致轮廓 -----> 设计8个方向的卷积核,并依据论文中的公式对像