近年来,随着计算机图形和计算机视觉学的发展,三维扫描重建技术在多个领域(如工业测量、地形地貌的测绘、自动导航、无人机航拍、采空区调查等)逐渐展现其优势[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所示。
利用控制器产生一个20 ms的时基脉冲,该脉冲的高电平部分为0.5~2.5 ms范围,最大间隔为2 ms。根据表1和舵机的数据手册,在该范围内,输出的角度值与高电平的宽度成线性关系,舵机输出角度值θ值计算方式如下:
其中,θ的单位为度;Nset通过控制器进行设置,范围在500~2 500之间,从而实现舵机角度在0~180°范围内偏转。
由于舵机控制时存在死区,死区时间在3 μs,控制最小精度可达1 μs,小于死区时间,因此,在控制过程中,相邻两次偏转角θ的最小间隔Δθ为:
因此,在控制过程中,设定的步进间距均为0.27°的整数倍,舵机的死区一定程度决定了扫描的精度。
2 控制系统及数据采集
上位机控制系统是基于PC的Windows 10开发平台下,以Visual Studio 2015中的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 点云数据滤波
通过扫描仪得到的点云数量极其庞大,测量数据将达到数万个甚至数十万个点,庞大的数据量中包含有无法预料到噪声点。噪声点的来源主要是激光扫描硬件本身造成的误差,此外还与采集实际情况有关,如扫描区域中存在烟雾、颗粒、棱角等,这些对于点云匹配等后期的工作显然是不利的,因此,需要对数据点进行一系列的数据去噪,筛除噪声点[8]。
为了去除数据中存在的噪声点,针对每个点的邻域进行了统计分析。针对点云中的每一个点,认为该点与其附近k个邻近点之间的距离分布符合高斯分布规律,根据极限误差和置信概率来决定该点是否为离群点[9]。
3.2 点云平滑及重建
在消除原始数据中的不规则点时,为了建立光滑完整的模型必须对物体表面进行平滑处理和漏洞修复。因此,针对滤波后的点云,建立KD-tree加快逐个点云数据的邻近数据搜寻,进而通过MLS(移动最小二乘法)进行重采样,进行光滑处理。
利用贪婪算法,动态设置三角网格的最大半径,进行三角网格重建点云轮廓。为了使用户能够进一步全面地观察最终成像,在该界面加入了3个滑块。当移动滑块时,获得当前滑块的位置,并转换成角度值,根据旋转轴和角度值创建4×4的转移矩阵,同时获取当前的点云位置,调用MATLAB函数pctransform得到旋转后的新的点云数据,从而实现点云数据在X、Y、Z方向旋转并刷新显示。
系统主界面如图7所示,“文件处理”按钮的回调函数实现转换数据格式并按pcd格式文件存储,“数据处理”中包含了主要的处理算法,“滤波”针对标准格式的点云进行滤波,并保存滤波结果。下拉栏可以对左侧图像区域进行操作,包含“清除”、“显示原始三维点图”等,对右侧图像区域进行“显示点云包络图”。包络图是最终渲染成像的结果,因此单独在右侧栏进行显示,与其他成像图进行直观对比。
4 实验结果
在一个固定的50 cm×45 cm×28 cm的长方体中进行测试,先是对固定偏转角α为90°进行2D激光雷达测试,扫描截面为50 cm×45 cm。获得三维点数据成像结果如图8所示。
计算求得的长度为Ly=495.88 mm,Lx=457.19 mm。根据实验结果可知,2D激光雷达的测量准确度较高,雷达的采样率高达5 000次/s,测量速度快,有效测量半径为0.15~8 m。雷达的良好性能确保了后续的三维建模。
设计3D激光扫描仪实物图如图9所示,云台顶端搭载2D激光雷达,云台后半部分为基于STM32的控制器,包括无线传输设备、舵机控制部分;上位机在PC端上实现对扫描仪的控制,并进行数据处理。
针对一中空的长方体作为扫描实例进行验证。设置扫描范围为x>0部分,扫描示意图如图10所示。
原始扫描点云数据如图10所示,扫描物体外围存在一圈噪声点。经统计滤波器滤波之后,距离较远的离散数据点被滤除,实际扫描物体被较为完整地保存,如图11所示。滤波结果显示,点云数据从34 113个减少到33 900个。图12为滤波数据通过移动最小二乘法进行光滑之后,采用贪婪三角网格算法进行重建的示意图。比较图12的重建结果和图9的实物图,可知扫描物体重建效果良好。
上述实验结果表明,本文设计的三维扫描仪能够对一般的三维场景选定范围进行重建分析;数据处理系统可以针对采集到的数据进行一系列的离散滤波、平滑处理,最终实现对扫描场景的重建。
5 结论
本文基于2D激光雷达和云台装置,设计了一种三维扫描仪。结合基于MFC设计的控制系统,实现对指定区域内的数据采集,通过推导的坐标变换关系,将坐标转换到全局坐标系下,实现对三维数据的采集和存储。同时,基于MATLAB软件中的GUI工具设计的数据处理系统对采集到的原始数据进行了预处理,利用滤波器剔除点云中的离群点来实现降噪,针对扫描中的漏洞采用最小二乘法进行拟合平滑处理,利用贪婪网格法进行三角网格重建,绘制点云轮廓,根据预处理后的数据进行了三维重建,最终显示在数据处较低的环境,能够较好地进行三维重建。
参考文献
[1] 王曾兰.基于二维激光雷达数据的三维重建研究[D].沈阳:东北大学,2013.
[2] 何锐斌,李子扬,贺文静,等.激光点云解算的软硬件协同设计与实现[J].电子技术应用,2019,45(3):100-103.
[3] 项志宇,李斌.基于2D激光雷达的快速3D测距系统的设计与实现[J].传感技术学报,2006(6):2638-2642.
[4] 谢理想,万刚,曹雪峰,等.无人机序列图像快速三维重建系统设计与实现[J].电子技术应用,2017,43(6):134-137,142.
[5] 肖琪.基于激光扫描数据点集的三维重建算法研究[D].北京:华北电力大学,2011.
[6] 詹坤烽,陈文建,李武森,等.线激光三维场景重建系统及误差分析[J].中国激光,2018,45(12):173-182.
[7] 牛京玉,胡坚,孟凡荣,等.基于多核DSP的激光点云解算算法并行设计[J].电子技术应用,2017,43(2):54-57.
[8] 史皓良.三维点云数据的去噪和特征提取算法研究[D].南昌:南昌大学,2017.
[9] 张育锋.三维数据点云的去噪及其检测[D].南京:南京信息工程大学,2014.
作者信息:
段清明,王 凡,徐琳琳,全文俊
(吉林大学 仪器科学与电气工程学院,吉林 长春130012)