基于SD卡的三维激光扫描仪数据存储系统

2017-01-21 14:56李世鹏林强李欣郭唐永
软件导刊 2016年12期
关键词:扫描仪命令嵌入式

李世鹏+林强+李欣+郭唐永

摘 要:为了满足三维激光扫描仪数据存储量大、传输速度快等需求,设计了基于SD卡的数据存储方案。方案采用4bit的SD模式传输数据,在三星公司S3C2410芯片上实现对SD卡数据块读写,并在此基础上集成FAT文件系统,实现对SD卡文件的读写操作。该方案已成功应用于三维激光扫描仪,实现了探测原始数据存储。

关键词:SD卡;三维激光扫描仪;4bit的SD模式;S3C2410;FAT文件系统

DOIDOI:10.11907/rjdk.162009

中图分类号:TP319

文献标识码:A文章编号:1672-7800(2016)012-0039-03

0 引言

三维激光扫描仪是一种快速、高效、高精度的三维空间结构信息获取工具,近年来发展迅速,在地形地貌测量[1]、复杂工业设备测量与建模、历史文物保护[2]、数字城市建模、农林资源调查[3]以及地质地震灾害监测[4-5]等领域得到了广泛应用。

三维激光扫描仪探测的原始数据是由大量目标表面激光反射点的三维坐标组成的点云数据。探测点越密集,得到的目标三维空间结构就越精细,需要存储和处理的点云数据量也就越大。为了实现大量三维激光探测数据的快速存储,本文提出了一种基于SD卡的三维激光扫描仪数据存储方案,并应用于工程实践。

1 系统原理

三维激光扫描仪通过半导体激光器发射激光脉冲,照射到被测目标表面产生回波,然后被回波接收系统接收。仪器的高精度时间测量系统通过比较发射与接收脉冲之间的时延差来估计仪器与被测目标之间的距离R。结合扫描仪水平方向和垂直方向上的伺服电机编码器角度值,计算被测目标点在三维空间中的实际坐标值。实际坐标重构如图1所示。

图1中,被测目标点是D,仪器与被测目标之间的实际距离是R,垂直方向上电机编码器对应的扫描角度是θV,水平方向上电机编码器对应的扫描角度是θH。

本文将探测数据存储于SD卡中。每次探测完成后,用户可通过计算器读取SD卡中的原始数据,并进行点云重构等后续操作。SD卡是基于Flash的存储器,具有体积小、重量轻、访问速度快、安全性高等特点,已经广泛应用于各种便携式电子产品。

SD卡通信协议包含SPI和SD两种模式。SD传输模式下,又包含1bit传输方式和4bit传输方式。4bit传输方式速度最快,最高可达25MBit/s。

本文设计的嵌入式系统需要将R、 θV和θH这3个32位原始数据实时存储到SD卡中,而实时存储的数据量与仪器探测的脉冲重复频率成正比。三维激光扫描仪设计最高的探测脉冲重复频率是36kHz,当单脉冲只接收到一个回波信号时,实时数据存储量就达到3.456Mbit/s。为保证探测数据能实时完整存储,不出现数据遗漏现象,三维激光扫描仪必须采用4bit的SD存储模式。

2 SD卡访问

嵌入式控制系统是整个三维激光扫描仪的核心部件,它协调控制仪器各功能模块,主要任务包括:探测数据的SD卡存储、TDC-GPX的控制与时延信息获取、伺服电机的扫描角度信息获取等[6]。三维激光扫描仪采用三星公司的S3C2410芯片作为嵌入式系统的ARM处理器。ARM处理器与SD卡的硬件连接如图2所示。

S3C2410芯片内部集成了SD控制器,SD卡访问所需的底层协议和硬件接口可通过芯片的内部硬件模块实现。ARM处理器通过CMD命令线对SD卡发布命令,SD收到命令后产生R1、R1b、R2、R3、R6和R7六种响应,响应也是通过CMD线返回ARM处理器。数据读写通过DAT0~DAT3四根数据传输线完成。

ARM要访问SD,首先需要对SD进行初始化,SD卡的初始化流程如图3所示。

上电复位后,ARM芯片首先向SD卡发送CMD0命令,使其进入空闲状态;然后ARM再发送ACMD41命令查询SD卡的工作环境寄存器,如果系统符合SD卡的工作电压要求,SD卡就进入准备状态。接着ARM再发送CMD2命令来获取SD卡的CID标识号,SD卡进入识别状态。最后,ARM发送CMD3命令获取SD卡分配新的相对地址RCA,SD卡进入待机状态。

SD卡完成初始化后,ARM就可对SD进行读写操作了。SD卡读写的基本单元是512byte大小的块。三维激光扫描仪存储数据前要将数据按照512byte为单元打包成块,写操作流程如图4所示。

当SD卡处于待机状态时,ARM发送CMD7命令,使其进入传输状态。三维激光扫描仪采用4bit的SD模式进行数据传输,ARM先要发送ACMD6命令将SD卡的总线宽度设置为4。然后ARM进入三维激光扫描仪的探测主程序,将探测结果打包成512byte大小的数据块。完成打包后,ARM将发送CMD24命令,然后向FIFO中写数据块。数据发送完成后,ARM发送CMD7命令,让SD重新回到待机状态,等待下一个数据块到来。SD卡读操作也是以512byte数据块为单位,利用CMD17命令实现数据块读取,方式与写操作类似。

3 文件系统

利用ARM芯片中集成的SD卡控制器,可以实现SD卡的读写访问。要使计算机能识别并读取ARM所写数据,必须使用文件系统来组织管理ARM处理器对SD卡文件的访问[7]。

ARM嵌入式程序采用FAT文件系统,文件系统架构从上到下分别是:Main函数、FAT文件系统、SD卡协议、硬件接口。系统架构如图5所示。

其中Main函数就是三维激光扫描仪ARM芯片运行的嵌入式主程序,主程序主要完成对各模块的控制,还有对各探测相关数据的采集。采集后的数据存储于SD卡中。而SD卡协议和硬件接口都是通过ARM芯片中集成的SD卡控制器完成相应操作的。

在ARM程序中建立文件系统,只需将FAT文件系统的相关文件拷贝到开发工程中,并对其中的FatInternal.c文件进行相应编辑,完成SD卡的初始化,以及对pVol→ReadBlock512()和pVol→WriteBlock512()两个函数进行修改,利用FAT文件系统实现对SD卡的文件操作。其中,SD卡初始化使用的是SDLIB_Init()函数,读数据块和写数据块分别使用的是SD_ReadBlock512()和SD_WriteBlock512()函数。

FAT文件系统提供了丰富的函数,使ARM实现对SD卡的文件读写操作。Fat_Mount()为逻辑驱动器注册工作区,F_FileOpen()用于打开SD卡上的源文件,Fat_FileRead()用于读取文件中的数据,Fat_FileWrite()用于写入数据,Fat_FileExist()用于关闭源文件。利用这些文件相关函数,就能在SD卡上完成文件操作。

4 结语

基于SD卡的数据采集系统已经成功集成到三维激光扫描仪上,并进行了数据采集实验。三维激光扫描仪探测的脉冲重复频率达到36kHz,单次探测数据量达到65M字节。存储于SD卡的数据经过计算机处理后成功恢复了探测目标的三维点云图。探测结果如图6所示。

实验表明该设计方案完全适用于36kHz以下的三维激光扫描仪的探测数据存储要求。而且随着SD卡存储技术的发展,该方案将会满足更多高重复率的三维激光扫描仪数据存储需求。

参考文献:

[1] 徐进军,张民伟.地面3维激光扫描仪:现状与发展[J].测绘通报,2007(1):47-50.

[2] 魏薇,潜伟.三维激光扫描在文物考古中应用述评[J].文物保护与考古科学,2013,25(1):96-107.

[3] 范海英,李畅,赵军.三维激光扫描系统在精准林业测量中的应用[J].测绘通报,2010(2):29-31.

[4] 陆益红,赵长胜,李明哲,等.三维激光扫描仪在地震中的应用[J].矿山测量,2011 (6):37-38.

[5] 郭祥,刘卉.三维激光扫描技术及其在地质中的应用展望[J].软件导刊,2009(3):183-185.

[6] 李世鹏,郭唐永,杨厚丽.三维激光扫描仪嵌入式控制系统设计[J].大地测量与地球动力学,2016(36):124-127.

[7] 周跃,沈捷,花魁.基于SD卡的数据存储系统设计[J].化工自动化及仪表,2012,39(1):95-98.

(责任编辑:杜能钢)

猜你喜欢
扫描仪命令嵌入式
只听主人的命令
移防命令下达后
搭建基于Qt的嵌入式开发平台
嵌入式软PLC在电镀生产流程控制系统中的应用
这是人民的命令
三维激光扫描仪在变形监测中的应用
便携高速文件扫描仪
Altera加入嵌入式视觉联盟
倍福 CX8091嵌入式控制器
便携高速文件扫描仪