基于思岚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
基于思岚A1激光雷达+OpenGL+VS2017的Ramer-Douglas-Peucker算法的实现的更多相关文章
- 搭建基于MinGW平台的《OpenGL蓝皮书(OpenGL SuperBibe 5th)》示例代码编译环境
副标题:搭建基于MinGW平台的<OpenGL超级宝典>(OpenGL蓝皮书第5版)GLTools 编译环境.示例代码:Triangle.cpp @ SB5.zip 以下内容以及方法均参考 ...
- 史上最简单OpenGL+VS2017环境配置
这里采用 最简单的方法: (1)添加Nuget包管理器(方便我们为项目添加OpenGL的库) (2)新建一个项目 右键我们的项目名 ——> 管理NuGet程序包——>搜索nupengl,然 ...
- 基于图形学混色问题OpenGl的收获
void myDisplay(void) {glClearColor(0.0f,0.0f,0.0f,1.0f); glClear(GL_COLOR_BUFFER_BIT); glEnable(GL_B ...
- <<一种基于δ函数的图象边缘检测算法>>一文算法的实现。
原始论文下载: 一种基于δ函数的图象边缘检测算法. 这篇论文读起来感觉不像现在的很多论文,废话一大堆,而是直入主题,反倒使人觉得文章的前后跳跃有点大,不过算法的原理已经讲的清晰了. 一.原理 ...
- 基于FPGA的均值滤波算法的实现
前面实现了基于FPGA的彩色图像转灰度处理,减小了图像的体积,但是其中还是存在许多噪声,会影响图像的边缘检测,所以这一篇就要消除这些噪声,基于灰度图像进行图像的滤波处理,为图像的边缘检测做好夯实基础. ...
- 基于python的几种排序算法的实现
#!usr/bin/python3 # -*- coding: utf-8 -*- # @Time : 2019/3/28 10:26 # @Author : Yosef-夜雨声烦 # @Email ...
- 基于c++的ostu算法的实现
图像二值化算法是图像处理的基础.一般来说,二值化算法可以分为两个类别:全局二值化和局部二值化.全局二值化是指通过某种算法找到一个全局的阈值T,对图像中坐标为(x,y)的像素值做如下处理: Ostu就是 ...
- 基于 MPI 的快速排序算法的实现
完整代码: #include <iostream> #include <cstdlib> #include <ctime> #include <algorit ...
- 基于 OpenMP 的奇偶排序算法的实现
代码: #include <omp.h> #include <iostream> #include <cstdlib> #include <ctime> ...
随机推荐
- 在CAD中插入谷歌地球卫星地图
本文主要介绍如何在CAD中插入谷歌地球卫星地图,作为参照光栅图像.谷歌地球卫星地图使用“迈高图-地图数据下载器”(以下简称:迈高图)下载.迈高图会给出相关插入参数(插入点和缩放比例),保证插入卫星地图 ...
- head first c# -- 第七章 (接口与抽象类)
接口的作用: 例子:有鸡,鸭,牛,羊4个类,还有farmer类: farmer.feed(obj obj) { obj.eat() } // 没有接口: farmer.feedChicken(Chic ...
- U9期间在手量控制
1.路径 库存管理->参数控制 2.设置节点 期间在手量控制时机 :单据实时控制.日关账控制.不控制 3.实现效果
- elasticsearch插件
bigdisk安装: 1.下载地址http://bigdesk.org/,注意和elasticsearch的版本对应关系 2.将文件上传到服务器elasticsearch的plugin目录下,解压 3 ...
- java之spring之初始spring
1.Spring 在多个框架中起到润滑剂的作用,桥梁的作用,纽带的作用. 2.Spring是一个容器,也是一个对象工厂.帮助程序员创建对象,管理对象. 3.Spring的体系结构: 4.学习sprin ...
- docker下安装mysql数据库
因为用了.net core 所以想学习下使用docker: 项目中刚好要用到mysql数据库,所用用docker来安装一次,我使用的是5.6版本: 1.拉取官方镜像 docker pull mysql ...
- C# 的ToString 常用方法
货币 2.5.ToString("C") ¥2.50 D 十进制数 25.ToString("D5") 00025E 科学型 25000.ToString(&q ...
- Docker 四种网络模式
原文 https://www.cnblogs.com/gispathfinder/p/5871043.html 我们在使用docker run创建Docker容器时,可以用--net选项指定容器的网络 ...
- 遍历切片slice,结构体struct,映射map,interface{}的属性和值
1 前言 说明:interface{}必须是前三者类型 2 代码 /** * @Author: FB * @Description: * @File: testOutput.go * @Version ...
- Django之创建超级用户
本文链接来自:https://blog.csdn.net/HuaCode/article/details/79721673 首选创建一个新用户,用来登录Django管理网站,进入manage.py目录 ...