时隔两年 又借到了之前的那个激光雷达,最老版本的思岚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算法的实现的更多相关文章

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

    副标题:搭建基于MinGW平台的<OpenGL超级宝典>(OpenGL蓝皮书第5版)GLTools 编译环境.示例代码:Triangle.cpp @ SB5.zip 以下内容以及方法均参考 ...

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

    这里采用 最简单的方法: (1)添加Nuget包管理器(方便我们为项目添加OpenGL的库) (2)新建一个项目 右键我们的项目名 ——> 管理NuGet程序包——>搜索nupengl,然 ...

  3. 基于图形学混色问题OpenGl的收获

    void myDisplay(void) {glClearColor(0.0f,0.0f,0.0f,1.0f); glClear(GL_COLOR_BUFFER_BIT); glEnable(GL_B ...

  4. <<一种基于δ函数的图象边缘检测算法>>一文算法的实现。

    原始论文下载: 一种基于δ函数的图象边缘检测算法. 这篇论文读起来感觉不像现在的很多论文,废话一大堆,而是直入主题,反倒使人觉得文章的前后跳跃有点大,不过算法的原理已经讲的清晰了.     一.原理 ...

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

    前面实现了基于FPGA的彩色图像转灰度处理,减小了图像的体积,但是其中还是存在许多噪声,会影响图像的边缘检测,所以这一篇就要消除这些噪声,基于灰度图像进行图像的滤波处理,为图像的边缘检测做好夯实基础. ...

  6. 基于python的几种排序算法的实现

    #!usr/bin/python3 # -*- coding: utf-8 -*- # @Time : 2019/3/28 10:26 # @Author : Yosef-夜雨声烦 # @Email ...

  7. 基于c++的ostu算法的实现

    图像二值化算法是图像处理的基础.一般来说,二值化算法可以分为两个类别:全局二值化和局部二值化.全局二值化是指通过某种算法找到一个全局的阈值T,对图像中坐标为(x,y)的像素值做如下处理: Ostu就是 ...

  8. 基于 MPI 的快速排序算法的实现

    完整代码: #include <iostream> #include <cstdlib> #include <ctime> #include <algorit ...

  9. 基于 OpenMP 的奇偶排序算法的实现

    代码: #include <omp.h> #include <iostream> #include <cstdlib> #include <ctime> ...

随机推荐

  1. Word 图片表格自动编号、交叉引用、批量更改图片标题格式、生成图录和表录

    1. 前言 论文往往里往往需要插入很多图片,下放需要标上 图a-b,其中 a 是章节号码,b是该章节中第几张图.比如第一章第二副图就是 图1-2.但是有个问题,每次我们插入了一张图或删掉了一张,前后的 ...

  2. Django框架深入了解_05 (Django中的缓存、Django解决跨域流程(非简单请求,简单请求)、自动生成接口文档)

    一.Django中的缓存: 前戏: 在动态网站中,用户所有的请求,服务器都会去数据库中进行相应的增,删,查,改,渲染模板,执行业务逻辑,最后生成用户看到的页面. 当一个网站的用户访问量很大的时候,每一 ...

  3. day10——动态参数、函数注释、名称空间、函数的嵌套、global及nonlocal

    day10 三元运算符: 变量 = 条件成立的结果 条件判断 条件不成立的结果 补充: # lst = [12,23,3,4,5,6] # def func(*args): # print(*args ...

  4. 深度学习-DCGAN论文的理解笔记

    训练方法DCGAN 的训练方法跟GAN 是一样的,分为以下三步: (1)for k steps:训练D 让式子[logD(x) + log(1 - D(G(z)) (G keeps still)]的值 ...

  5. 【LEETCODE】70、字符匹配1023 Camelcase Matching

    最近做leetcode总感觉自己是个智障,基本很少有题能自己独立做出来,都是百度... 不过终于还是做出了一题...而且速度效率还可以 哎,加油吧,尽量锤炼自己 package y2019.Algor ...

  6. golang ---cron

    package main import ( l4g "github.com/alecthomas/log4go" "github.com/robfig/cron" ...

  7. MVC HtmlHelper 使用大全 [转]

    原:http://www.cnblogs.com/jyan/archive/2012/07/23/2604474.html#2979358 HtmlHelper用来在视图中呈现 HTML 控件. 以下 ...

  8. 利用HashMap计算一个字符串中每个字符出现的次数

    问题描述:计算一个字符串中每个字符出现的次数 问题分析:每个字符串对应着它的次数,且字符串唯一不重复,这让我们想到了HashMap中的键值对. 1.使用Scanner获取字符串 2.遍历字符串,获取每 ...

  9. 2019 华云数据java面试笔试题 (含面试题解析)

    本人3年开发经验.18年年底开始跑路找工作,在互联网寒冬下成功拿到阿里巴巴.今日头条.华云数据等公司offer,岗位是Java后端开发,最终选择去了华云数据. 面试了很多家公司,感觉大部分公司考察的点 ...

  10. [JLOI2014]松鼠的新家 (树剖)

    题目 P3258 [JLOI2014]松鼠的新家 解析 非常裸的一道树剖题 链上修改+单点查询的板子 记录一下所经过的点\(now[i]\),每次更新\(now[i-1]到now[i]\) 我们链上更 ...