时隔两年 又借到了之前的那个激光雷达,最老版本的思岚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. C++ 工程师养成 每日一题fourth (reverse的使用)

    题目: 将一句话的单词进行倒置,标点不倒置. 这道题最简单的解法是使用algorithm提供的reverse()函数 具体步骤我写在代码注释里面: #include <string> #i ...

  2. 23 Collection集合常用方法讲解

    本文讲讲几个Collection的常用方法,这些方法在它的子类中也是很常用的,因此这里先拿出来单独讲解,以后它的子类中的这些方法就不再重复讲解. 几个常用方法: add() 添加一个元素 size() ...

  3. python_并行与并发、多线程

    问题一: 计算机是如何执行程序指令的? 问题二: 计算机如何实现并发的? 轮询调度实现并发执行 程序1-8轮询完成,才再CPU上运行 问题三: 真正的并行需要依赖什么? 并行需要的核心条件 多进程实现 ...

  4. Openshift概念

    Openshift是一个开源容器云平台,是一个基于主流的容器技术Docker和K8s构建的云平台.Openshift底层以Docker作为容器引擎驱动,以K8s作为容器编排引擎组件,并提供了开发语言, ...

  5. Vert.x 异步访问数据库 MySQL

    Vert.x提供异步访问数据库的API,数据库操作是一个耗时操作,使用传统的同步模型,容易阻塞线程,导致整体性能下降,因此我们对于数据库操作,需要使用Vert.x提供的异步API. Vert.x提供的 ...

  6. 安装VMware14可能出现的问题

    未能提取文件 安装程序未能提取安装vmware workstation所必须的文件 在没有关闭这个弹框的前提下,Win+R输入%temp%,找到以~setup结尾的文件夹,双击下面的临时文件VMwar ...

  7. js中console.info的使用

    语法:console.info(obj1 [, obj2, ..., objN]);console.info(msg [, subst1, ..., substN]); 参数obj1 ... objN ...

  8. Django:RestFramework之-------渲染器

    12.渲染器 from rest_framework.renderers import JSONRenderer,BrowsableAPIRenderer,AdminRenderer class Te ...

  9. FlaskCBV视图类

    路由视图类 from flask import Flask app = Flask(name) 视图类 Views文件 看views源码 继承最后一个类 导入CBV的视图基类 from flask i ...

  10. go调度: 第一部分-OS调度(操作系统调度)

    开场白 这个是三篇博客中的第一篇, 用来提供go调度背后的机制和语法. 这篇博客主要关注操作系统调度. 三篇博客的顺序是: 1) go调度: 第一部分 - 操作系统调度 2) go调度: 第二部分 - ...