近年来,随着计算机图形和计算机视觉学的发展,三维扫描重建技术在多个领域(如工业测量、地形地貌的测绘、自动导航、无人机航拍、采空区调查等)逐渐展现其优势[1-2]。
传统的三维场景重建方式包括主动建模和被动建模。
主动建模是通过设备一次采集场景信息,进行点云成像。
被动建模是根据单张或多张图像,直接利用图像进行三维建模[3]。
后者相对于前者不需要进行全局坐标的标定,避免了真实场景下的几何复杂性,但计算复杂度高,同时在还原几何准确性及获得三维信息的完整性方面存在着较大的缺陷[4]。
因此,为弥补被动建模的缺陷,在激光雷达扫描技术的迅速发展下,主动建模的应用越来越多。
激光雷达具有测量速度快、精度高、非接触测量的特点,且应用成本大幅度降低,通过激光雷达进行主动建模的使用越来越广泛[5]。
激光雷达是通过舵机的转动配合红外激光器的单点测距,实现单个平面的测量,其通信接口返回的数据同时包含测量距离和测量方位,运行状态下受外界环境影响程度较小。
但是单个二维激光雷达仅能获得一个截面的信息,为了获取三维的数据进行建模,采用同等精度和测量范围的三维激光雷达时,成本将高出二维激光雷达十几倍,因此限制了在一般场景下的应用。
为节约经济成本,大量研究人员着手研究改造二维激光雷达或采用在二维激光雷达的基础上增加机械结构,以进行3D扫描。
但多数的机械结构复杂,导致全局坐标的标定变得困难,或测量范围有限,同时缺少针对三维激光扫描系统的整体设计方案。
这些问题的存在,也为后来设计利用二维激光雷达实现三维重建的研究指明了方向。
本文依据二维激光雷达,搭配一维的旋转云台,设计三维激光扫描仪作为采集装置。
同时设计上位机的机械控制和数据处理系统,最终实现扫描场景的三维重建。
1坐标采集系统设计1.1扫描方案由于2D激光雷达采用点状激光进行扫描,因此在扫描一周的情况下,仅能采集获得单个截面内的极坐标下的距离信息。
如果需要扩展为三维扫描仪,一般有两种方式:(1)“变点为线”,将点状激光改为线性激光,一次性获得一个角度下截面的距离信息[6];(2)增加额外的机械结构(如旋转装置)作为扩展轴来获得第三个维度的信息。
应用第一种方式,不影响扫描的速率,但激光的亮度随着距离的增加,衰减速度加快,测量距离有限,并且对原本的激光雷达的结构改造较大,对摄像头的使用要求较高,工作量增多且复杂。
应用第二种方式,需要控制额外自由度的转轴,扫描速度降低,但测量距离远,额外机械机构造成的误差可通过数学补偿,对原本的雷达的改造减少,只需要设计旋转装置即可。
因此实验中选用增加转轴的方式设计3D扫描仪。
通过使用HLS-LFCD2型号2D激光雷达和RDS3115数码舵机,搭建3D激光扫描仪。
设计机械结构如图1所示。
舵机带动机械关节的转动,其中2D雷达固定在关节处,雷达的几何中心与转轴的中心的连线垂直于雷达底部所在平面。
扫描时,激光雷达不间断扫描激光器所在平面。
以上述舵机转轴几何中心的O点为原点,建立空间直角坐标系,如图2所示。
图2中,O′为雷达几何中心,平面O′QP为雷达扫描平面,XOY平面与参考水准面平行。
根据2D激光雷达的当前测量角度α、机械关节的偏转角θ和被测量点P到雷达中心的距离ρ可知,测量点P的全局坐标(x,y,z)可通过下式计算得出:其中,方位角α和距离ρ通过激光雷达串口输出的数据进行解码获得,偏转角θ根据控制器输出的PWM和舵机物理偏转量之间关系得到。
1.2机械控制如图1所示,机械控制部分主要是对舵机的操作,舵机的精度决定了偏转角θ的精度。
通过ARM公司的STM32ZET6作为控制器,输出PWM波进行控制RDS3115数码舵机,舵机主要控制特性如表1所示。
利用控制器产生一个20ms的时基脉冲,该脉冲的高电平部分为0.5~2.5ms范围,最大间隔为2ms。
根据表1和舵机的数据手册,在该范围内,输出的角度值与高电平的宽度成线性关系,舵机输出角度值θ值计算方式如下:其中,θ的单位为度;Nset通过控制器进行设置,范围在500~2500之间,从而实现舵机角度在0~180°范围内偏转。
由于舵机控制时存在死区,死区时间在3μs,控制最小精度可达1μs,小于死区时间,因此,在控制过程中,相邻两次偏转角θ的最小间隔Δθ为:因此,在控制过程中,设定的步进间距均为0.27°的整数倍,舵机的死区一定程度决定了扫描的精度。
2控制系统及数据采集上位机控制系统是基于PC的Windows10开发平台下,以VisualStudio2015中的MFC为开发环境,通过编写主界面控件的消息响应函数,来实现扫描仪控制和采集数据存储。
MFC中包含大量Windows句柄封装类,以及多种Windows的内建控件和组件的封装类[6],丰富的内建控件为设计可视化界面提供便利。
系统设计框图如图3所示。
上位机PC的任务包括同2D激光雷达的通信以及通过下位机控制器STM32对舵机的操作。
激光雷达的数据传输接口为UART格式,在上位机和雷达处采用蓝牙模块进行通信,以避免传输线对扫描进程中的干扰。
通信内容包括雷达的启动和关闭,以及获取雷达扫描平面内的ρ和θ。
针对雷达发送的每一帧数据进行解码,保留每帧数据中的角度和距离信息[7]。
在上位机界面,通过对相对坐标系下的起始扫描位置、扫描间隔和终止扫描位置进行选择,进行扫描路程设定。
在控制关节旋转的同时,采用询问-应答的形式,以便保证在舵机完成转动任务后再进行扫描。
在上位机界面通过进度条的形式显示整体扫描进度,方便用户进行监测。
上位机控制系统流程如图4所示。
根据项目要求,在MFC设计中采用多线程的方式,其中主线程用于响应用户的操作,将用户需求指令(如打开串口、打开文件、保存文件等)转换为程序指令进行执行、判断,并反馈执行结果。
MFC界面如图5所示。
界面中接收框和发送框均是对舵机进行操作,发送框显示已设置命令或进行手动编辑命令,接收框显示下位机的回复情况。
扫描同时,上位机通过串口线与STM32通信,控制舵机实现关节的转动。
STM32控制器功能主要是与上位机进行通信,接收命令数据以便设置舵机的起始角度、步进间隔和终止角度,根据上位机的驱动命令步进舵机并回复执行结果。
系统将从雷达处将接收到的数据经解码后得到方位角α、距离ρ和舵机的偏转角θ,按照(θ,α,ρ)的格式存储到用户设置的txt文件中,作为后续数据处理系统的原始文件。
3数据处理为了提高数据处理的速度,简化点云处理的计算过程,以及进行离散的点云数据的可视化,基于MATLAB的GUI平台,建立专用的集坐标转换、点云数据处理以及数据成像的数据处理系统。
点云处理系统组成如图6所示。
数据处理过程,导入上一阶段以(α,θ,ρ)形式存储的txt文本文件,按照式(1)进行运算,转换为三维数据坐标(x,y,z)的形式,并以pcd的形式输出保存。
此时pcd存储的即为原始的标准点云数据。
3.1点云数据滤波通过扫描仪得到的点云数量极其庞大,测量数据将达到数万个甚至数十万个点,庞大的数据量中包含有无法预料到噪声点。
噪声点的