打印
[应用相关]

STM32开发一款3D激光雷达

[复制链接]
楼主: goodluck09876
手机看帖
扫描二维码
随时随地手机跟帖
21
goodluck09876|  楼主 | 2019-7-14 11:27 | 只看该作者 |只看大图 回帖奖励 |倒序浏览

使用特权

评论回复
22
goodluck09876|  楼主 | 2019-7-14 11:27 | 只看该作者

使用特权

评论回复
23
goodluck09876|  楼主 | 2019-7-14 11:28 | 只看该作者

使用特权

评论回复
24
goodluck09876|  楼主 | 2019-7-14 11:28 | 只看该作者

使用特权

评论回复
25
goodluck09876|  楼主 | 2019-7-14 11:28 | 只看该作者
    本文的3D激光雷达系统需要用到24V, SV, 3.3V的电源,24V电源需要向
步进电机驱动器提供,使用直流稳压电源。需要SV电源的器件为摄像头、STM32
电路板、继电器,其中摄像头和STM32电路板直接通过USB2.0线路与PC机连
接,再传输数据的同时提供电力,3.3 V则是线激光器的工作电压,本文设计中
SV和3.3V电压通过使用降压模块将24V电压先降至SV供给给继电器,再降压
至3.3 V供给线激光器。
    SV降压模块使用MP1594制作,MP 1594是一个高性能的降压稳压芯片,它
最大的特点是能提供最大3A的输出,宽泛的4.5V至28V输入范围适用于各种
降压应用。同时,100必工作静态电流允许该芯片使用于以电池供电的应用中。
在轻负载条件下可以缩小开关频率以降低开关和栅极驱动损耗,另外,通过
1.SMHz的开关频率,MP1584能够防止EMI(电磁干扰)噪声问题。

使用特权

评论回复
26
goodluck09876|  楼主 | 2019-7-14 11:29 | 只看该作者

使用特权

评论回复
27
goodluck09876|  楼主 | 2019-7-14 11:29 | 只看该作者
    对于常见的单点三角激光测距,只需要激光器、摄像头以及连接这两个器件
的物理结构即可,而三维扫描时,需要以激光器一摄像头构成的基线中心为轴,进
行旋转,由于激光器和摄像头的选型全部遵从小型化和轻量化的思路,那么从整
个激光雷达系统小型化轻量化的思路考虑,电机使用了常见的小型42两相步进
电机,它的体积较小,长度仅为34mm,轴径为Smm。使用0.95A电流进行驱
动,工作电压为3.8V,该款电机步进角度为1.80,静力矩为0.186N } m,满足设
计需求。
    步进电机由电机驱动器进行驱动,步进电机驱动器是驱动步进电机转动并精
确控制电机每次转动的角度的一种器件。绝大多数步进驱动器通过4线接口连接
到某个控制器:控制器通过脉冲PUL引脚接收脉冲信号,控制电机移动一步;
控制器将DIR引脚设置为选择步进是顺时针还是步进逆时针步进,ENA引角控
制电机在锁定状态和为锁定状态切换,在锁定状态驱动电机时可以有效防止电机
的振动和抖动现象,以及一个共同的GND引脚。当PUL引角接收到一个PWM
脉冲方波信号时,根据电机驱动器的细分设置,可以使电机仅转动自身步进角度
的一小部分,并且细分后的这个角度是固定的。而电机的转动频率可以通过控制
单位时间内脉冲的个数来控制量,从而达到调速的目的。驱动器使用的是DM542
两相混合式步进电机驱动器。它的特点是响应频率高,最大支持200khz,多细分,
最大支持256细分,同时具备脱机控制(ENA)信号,同时具备超低噪声、高精度
等优点。控制信号使用P WM波。

使用特权

评论回复
28
goodluck09876|  楼主 | 2019-7-14 11:30 | 只看该作者
    对于电机驱动器的控制,本文选择了ST公司的STM32F401 RE单片机,使
用Nucleo核心板进行控制。芯片内部资源十分丰富,完全可以达到工程控制的
要求,控制程序使用Keil IDE与C语言进行编写。为了保持电机转动和激光扫
描的同步,使用串口监控摄像头捕获和处理光信号的状态,当摄像头完成当前帧
的捕获后,通过串口向STM犯控制板发送标志位,控制板收到后将一个P~脉
冲方波信号发给电机驱动器,使电机转动一个细分后的步距角的角度,在从
STM32开发板收到标志位到电机完成转动的这一段时间里,PC端进行捕获到的
帧图像数据的后续处理工作,并在完成后开始捕获下一帧图像。这样一可以保证
摄像头每捕获完毕当前帧图像之后,电机再进行转动,避免扫描不同步的问题,
二可以使一部分软硬件处理流程同时进行,提高效率。电机控制部分接线图如图
3-6所示。

使用特权

评论回复
29
goodluck09876|  楼主 | 2019-7-14 11:34 | 只看该作者

使用特权

评论回复
30
goodluck09876|  楼主 | 2019-7-14 11:34 | 只看该作者
    如图3-7所示,上方图片是3D激光雷达的整体示意图。雷达大部分原件被
放置在工程塑料盒中,盒子上方露出电机轴、激光器和摄像头。用于连接激光器
和摄像头的物理结构使用3D打印技术制作。使用3D打印的最大好处是在设计
时可以精确控制激光器的发射角度以及激光器与摄像头成像器中心点的距离,以
及激光器一摄像头所构成的线段与电机轴垂直,并且电机轴中心点正好位于线段
的中点,避免的大量的安装误差。另外3D打印材料的硬度和耐久度也满足本系
统的设计需求。3D激光雷达通过三根线与外部PC机连通。分别是24V电源线、
摄像头USB2.0数据线,STM32开发板USB-UART数据线。
    图3-7下方两张图是工程塑料盒的分解图,可清晰看到电子电气的安装布局。
步进电机通过螺丝固定在塑料盒的上层,下层则依次设置步进电机驱动器、
STM32开发板以及降压模块。

使用特权

评论回复
31
goodluck09876|  楼主 | 2019-7-14 11:35 | 只看该作者
    单片机控制程序主要负责对串口的实时监控,根据接收到的指令进行相应的
动作,主函数图如图3-8所示。为了使激光雷达的扫描速率最大化,单片机控制
部分程序尽可能的进行了简化,在系统通电并完成系统初始化之后,开始循环检
测串口是否接收到了数据。

使用特权

评论回复
32
goodluck09876|  楼主 | 2019-7-14 11:36 | 只看该作者
    串口检测子程序主要负责接收经上位机发送的指令,并根据不同的指令进行
不同的操作。本激光雷达系统设计了两种指令。当接收到字母e时,将继电器信
号端引脚电平拉高,由低电平变为高电平并保持高电平状态,使继电器开关触发,
线激光器开始工作。当接收到字母g时,将点击驱动器PUL信号端电平拉高,
由低电平变为高电平状态,经过一个1 Oms延时后将电平拉低,恢复低电平状态,
完成一个脉冲的发送,使电机转动一次,转动角度为经过细分后的实际步距角
0.05625度。串口检测子程序流程图如图3-9所示。

使用特权

评论回复
33
goodluck09876|  楼主 | 2019-7-14 11:37 | 只看该作者
    上位机图像处理程序使用VS2013编写,分为三个模块:用户指令处理,雷
达扫描,场景重构。上位机启动后首先进行相机和模拟串口的初始化,然后显示
用户界面,提示操作者系统准备工作完毕,可以输入指令了。本文的上位机以命
令行窗口的形式展现,使用键盘输入命令。上位机示意图如图3-10所示。

使用特权

评论回复
34
goodluck09876|  楼主 | 2019-7-14 11:38 | 只看该作者

使用特权

评论回复
35
goodluck09876|  楼主 | 2019-7-14 11:38 | 只看该作者
    用户发送g指令后,雷达开始扫描。首先根据扫描计数器的值判断是否达到
预先设定的扫描次数,如果达到扫描次数,函数返回,电机停止旋转。如果未达
到扫描次数,进入扫描步骤,摄像头捕获当前画面并保存,捕获完毕后计数器++1
同时向单片机发送g指令使电机继续旋转,在单片机处理指令的同时,PC端进
行图像处理工作。首先将图片应用标定参数,然后借助OPENCV函数库对图片
进行灰度处理和降噪处理。之后逐行计算激光光斑中心点,并使用本文的加权平
均算法获得修正后的像素值。根据像素值计算实际距离,并通过三维解算,输出
三维坐标点,将数据存入点云文件中。至此一次扫描结束,程序将再次判断扫描
计数器的值是否达到最大扫描次数。扫描全部结束后,将点云文件使用
Cloudcompare软件读取,确定坐标系后进行三维点云的显示,实现场景重构。雷
达扫描子程序和场景重构子程序如图3-12所示。

使用特权

评论回复
36
goodluck09876|  楼主 | 2019-7-14 11:42 | 只看该作者
    每颗摄像头在正式使用前都需要进行标定工作,获取这个摄像头的校正参数,
使用这些参数来解决摄像头的镜头失真问题,例如桶形畸变等。本文使用
MATLAB标定工具箱来进行标定工作。获取参数后将矫正参数文件存为xml格
式文件,嵌入图像处理程序中,在摄像头捕获每一帧图像之后,应用校正参数,
获得矫正后的图像。
    以下两图是对摄像头标定、不标定进行扫描测距时的效果图。对两米外的墙
面进行扫描,图4-1是墙面的断面图,充分展示了图像标定的重要性。根据理论
计算,在2m处,一个像素点的误差会造成30~的测量距离误差。如果摄像头
桶型畸变造成3个像素的误差,反映在距离上就会造成大约1 OOmm的误差。

使用特权

评论回复
37
goodluck09876|  楼主 | 2019-7-14 11:42 | 只看该作者
    为了使用激光三角测距法进行三维扫描,本文使用了线激光器。相比传统的
点激光器,线激光器带来一个新的问题,即线激光器在制作时由于工艺的原因,
以及激光雷达制作时的安装工差,导致激光照射标准平面时,反射光在摄像头上
的成像并不是一条竖直的直线。本文使用一种加权平均法来解决这个问题。
    如图4-2和图4-3所示,从安装好的雷达实际测量标准平面的点集合中可以
明显看出,在640 x 480的画幅内,被测平面的“中心部分”(即纵向480像素中
在第240像素附近的像素点)测量结果较好,但是其“上下两端”翘起,误差明
显高于中心处数据。被测标准平面的点集合构成了一条曲线,这是由于低成本摄
像头在较低分辨率下标定效果未达到次像素级所造成的。图中蓝色点集为线激光
器测量获得的像素点,中间的竖直垂线是当前距离的标准平面下摄像头纵向的中
心点(真实点)的像素位置.

使用特权

评论回复
38
goodluck09876|  楼主 | 2019-7-14 11:43 | 只看该作者

使用特权

评论回复
39
goodluck09876|  楼主 | 2019-7-14 11:43 | 只看该作者

使用特权

评论回复
40
goodluck09876|  楼主 | 2019-7-14 11:43 | 只看该作者

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则