基于思岚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> ...
随机推荐
- springboot异步线程
前言 最近项目中出现了一个问题,发现自己的定时器任务在线上没有执行,但是在线下测试时却能执行,最后谷歌到了这篇文章SpringBoot踩坑日记-定时任务不定时了?; 本篇文章主要以自己在项目中遇到的问 ...
- 长乐国庆集训Day4
T1 一道数论神题 题目 [题目描述] LYK有一张无向图G={V,E},这张无向图有n个点m条边组成.并且这是一张带权图,只有点权. LYK想把这个图删干净,它的方法是这样的.每次选择一个点,将它删 ...
- PostgreSQL学习笔记(一)—— macOS下安装
安装命令:brew install postgresql 我的终端是zsh,所以添加环境变量到~/.zshrc vim ~/.zshrc export PATH=$PATH:/usr/local/Ce ...
- Matlab 信号与系统课设 - BiRadio仿真电台
BiRadio Matlab 信号与系统课设 - BiRadio仿真电台 Author : Benjamin142857 Date : 2018-12 Video : BiliBili Github ...
- Drool7s 什么叫KIE和生命周期-系列03课
KIE是缩写,knowledge is everything.可以理解成一个上层接口,本质是由很多个实现类去实现功能的. 另外关于drool7s的生命周期,请看下图 本文只是让你了解drools7的一 ...
- Asp.net MVC 之ActionResult
ActionResult 派生出以下子类: ViewResult 返回一个网页视图 PartialViewResult 返回一个网页视图,但不适用布局页. ContentResult 返回一段字符串文 ...
- margin 外边距合并问题
一.兄弟元素的外边距合并 效果图如下:(二者之间的间距为100px,不是150px) 二.嵌套元素的外边距合并 对于两个嵌套关系的元素,如果父元素中没有内容或者内容在子元素的后面并且没有上内边距及边框 ...
- [LeetCode] 198. 打家劫舍 ☆(动态规划)
描述 你是一个专业的小偷,计划偷窃沿街的房屋.每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警. 给定一个 ...
- php无限分类方法类
创建数据库以及表 CREATE DATABASE `sortclass`DEFAULT CHARSET utf8; CREATE TABLE IF NOT EXISTS `class` ( `cid` ...
- SpringBoot2.x服务器端主动推送技术
一.服务端推送常用技术介绍 服务端主流推送技术:websocket.SSE等 1.客户端轮询:ajax定时拉取后台数据 js setInterval定时函数 + ajax异步加载 定时向服务 ...