温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,汇文网负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
网站客服:3074922707
基于
STM32
VI
SLAM
数据
存储系统
设计
邓斌
电子设计工程Electronic Design Engineering第31卷Vol.31第15期No.152023年8月Aug.2023收稿日期:2022-04-03稿件编号:202204020基金项目:国家自然科学基金项目(52061042)作者简介:邓 斌(1996),男,河南林州人,硕士研究生。研究方向:SLAM导航。随着对海洋资源开发程度的逐渐深入,水下探测技术也随之不断更新。当前,在水下作业方面,尤其是在水下环境探测场景中,水下航行器的 SLAM技术有着广阔的应用前景。水下航行器 SLAM技术的前提是它所搭载的各种传感器能正常传回相关数据,借助这些传感器所采集的数据,航行器便可以了解自身周围环境的情况,并确定自身的位置信息,进而构建出水下环境的地图,最终实现航行器的自主导航。传统的视觉 SLAM在航行器进行快速运动时位姿解算误差较大,且会出现构建的地图与实际地图尺度不匹配的问题。在视觉 SLAM中加入惯导数据可较好地解决上述两个问题。视觉惯导 SLAM(VI-SLAM)技术融合了图像信息与惯导信息这两种基于STM32的VI-SLAM数据存储系统设计邓 斌,刘 明(云南民族大学 电气信息工程学院,云南 昆明 650500)摘要:为了满足小型水下航行器在定位导航过程中使用VI-SLAM技术进行图像与惯导数据存储的要求,该文设计了一种基于 STM32 与 SD 卡的低成本数据采集存储系统。IMU 通过 I2C 总线与STM32连接并传输惯导数据;相机借助高速缓存模块来保存图像并传输给 STM32;借助 STM32单片机与SD卡存储器的接口,通过移植后的FatFS文件管理系统来实现数据存储。存储在SD卡中的数据可通过 PC 机上的 SD 卡接口,方便快捷地被 PC 机直接读取,并进行后续的 VI-SLAM 算法实验。该设计满足了数据所需存储容量大的要求,且易于后续的存储扩展。经实验验证表明,该数据采集存储系统能够稳定可靠地保存传感器所产生的数据。关键词:数据存储;VI-SLAM;STM32;SD卡;FatFS文件系统中图分类号:TN703文献标识码:A文章编号:1674-6236(2023)15-0060-06DOI:10.14022/j.issn1674-6236.2023.15.013Design of VI-SLAM data storage system based on STM32DENG Bin,LIU Ming(School of Electrical Information Engineering,Yunnan Minzu University,Kunming 650500,China)Abstract:In order to meet the image and inertial navigation data storage requirements in the process ofpositioning and navigation of small underwater vehicles using VI-SLAM technology,this paper designs adata acquisition and storage system based on STM32 and SD card.The IMU is connected to the STM32through the I2C bus and transmits the inertial navigation data;The camera uses the cache module to savethe image and transmits it to the STM32;With the interface of the STM32 microcontroller and the SDcard memory,the transplanted FatFS file management system is used to achieve data storage.The datastored in the SD card can be directly read by the PC through the SD card interface on the PC,and thesubsequent VI-SLAM algorithm experiments can be carried out.This design satisfies the requirement oflarge storage capacity for data,and is easy for subsequent storage expansion.The experimental verificationshows that the data acquisition and storage system can store the data generated by the sensor stably andreliably.Keywords:data storage;VI-SLAM;STM32;SD card;FatFS file system-60互补的数据,惯导为快速运动提供了较好的解决方案,而相机又能解决慢速运动下惯导的漂移问题1,2,是SLAM未来发展的趋势之一。而在研究VI-SLAM算法之前,需要实现图像与惯导数据的采集与存储。在水下航行器行驶过程中,会产生大量需要存储的传感器数据,又因为后续数据解算处理以及多传感器数据融合的 SLAM算法实验均需要在机能强大的PC上位机上进行,这就需要数据可以方便地导入PC机中。考虑到小型航行器体积有限,采集系统体积不宜过大,且受单片机硬件的制约,想要存储大量的数据,还需要便捷地将存储的数据传送给 PC机,综合考虑最终选用 SD卡来存储数据3。SD卡自身容量可根据航行时间进行灵活选择,且SD卡相关电路的可移植性强,安装与编程较为简单,支持 SPI与 SDIO 两种传输方式。搭配移植到 STM32 上的FatFS 文件系统,能较好地满足频繁传输数据到 PC机的需求,且基于FatFS文件系统保存的数据可以直接在PC机上打开4-6,具有一定的实用价值。1系统组成与硬件介绍数据采集存储系统主要搭载在小型水下航行器上,航行器在水中运动的同时,系统采集并存储传感器 数 据。该 设 计 包 含 STM32 核 心 板、惯 导 模 块(IMU)、相机模块与SD卡,系统框架如图1所示。图1系统框架1.1STM32设计采用了 STM32F103系列单片机,该系列芯片是意法半导体(ST)公司旗下一款常用的增强型系列微控制器。其内核是 32 位的 Cortex-M3;内部集成了定时器 Timer、SPI、I2C、USB 等多种外设接口。STM32电路如图2所示。图2STM32电路1.2相机模块OV7725 是一款集成了 1/4 英寸单芯片 VGA 相机和图像处理器的高性能传感器。具有标准的SCCB 配置接口;支持 VGA、QVGA,以及 4030 到CIF(352288)分辨率的图像尺寸;可搭配AL422B高速缓存器一起使用。相机电路如图3所示。1.3JY-901惯导模块JY-901模块是一款集成了高精度陀螺仪、加速度计和地磁场传感器的小型惯导模块。它可由STM32核心板上的供电引脚直接供电;可用串口和I2C两种接口分别连接 PC 与单片机进行数据传输;惯导数据回传频率为 0.2200 Hz;角度静态误差为邓 斌,等基于STM32的VI-SLAM数据存储系统设计-61电子设计工程 2023年第15期0.05;动态误差为0.1。IMU电路如4所示。图4IMU电路1.4SD卡SD 卡选用了闪迪 32 GB 大容量高速内存卡。SD卡槽与STM32板连接电路如图5所示。图5SD卡槽与STM32板连接电路1.5系统性能指标相机模块的图像数据以 RGB565的格式进行输出,采用QVGA(320240)像素进行图像拍摄,每张图像的大小为150 kB。高速缓存模块写入时钟最小周期为20 ns,换算可得读写操作速率最高为12.5 MB/s,能够以较高的速度对图像数据进行缓存。IMU模块每个寄存器中的数据为16 bit,实际每次采集的数据一般只涉及到 6个寄存器,也就是每次采集 12 B 数据。进行惯导解算时一般所用的IMU数据为100 Hz,每秒采集的数据大小为 1.2 kB。所采用的 STM32F103芯片板理论串口速率可达到 4.5 MB/s,既可满足从FIFO中读取缓存一帧图像数据的速度要求,也可以满足 IMU 数据读取的速度要求。采用的闪迪 A1高速 SD 卡经实测写入速度最高可达到 50 MB/s7。移植到 STM32 中的 FatFS 系统,在写入 SD 卡时的速度会随写入块大小的改变而改变,在向空白的SD卡中写入 512 kB 或是 1 MB 的数据块时,其速度可达4.6 MB/s,基本可以满足 IMU 与相机的数据写入需求8。要注意的是当 SD 卡的存储空间不足两成时,写入速度会明显降低。2数据采集实现流程2.1图像数据采集流程以QVGA像素(240320)模式为例,分析图像数据的传输过程,其数据传输时序图如图6所示。图 6中 VSYNC 为帧同步信号,相邻两个信号之间传输的数据便是一帧图像。当STM32检测到该信图3相机电路-62号时,便控制 AL422B开始缓存一帧的图像数据,可以选择使用下降沿或上升沿来触发中断9。HREF和HSYNC均为行同步信号,相邻两个信号之间为一行的图像数据。两者均为一个引脚产生的信号,在不同的场合下,可使用不同的信号来控制。在使用HREF信号时,只有在HREF高电平期间的数据才为有效数据。STM32通过检测帧同步信号与行同步信号即可获得完整的图像数据10。在 VGA 模式下,每行输出 320 个周期,每一个周期中根据图像格式的不同会有一个或两个字节,共输出 240 行数据完成一帧图像。一帧原始数据的大小约为150 kB11-12。当完成一帧数据的缓存之后,STM32 控制缓存模块停止图像数据的读取,并开始读取其中的数据;待一帧图像读取完毕后,将数据指针复位,控制模块继续读取图像数据;等待下一个帧同步信号到来时,缓存模块再缓存下一帧的图像13-14。循环该过程,完成图像数据的采集。2.2惯导数据采集流程将JY-901惯导模块通过I2C总线与STM32板相连接。STM32采用选择寄存器地址的方式对寄存器中的数据进行访问15。每个地址内的数据均为16位数据,占两个字节。通过对其内部特性寄存器数据的修改,来设置波特率、选择输出数据的类型、从站的地址等信息。实际所需要采集的数据以及数据所对应的寄存器地址如表1所示。读取 IMU模块数据需要 STM32先通过 I2C总线向惯导元件从机发送一个开始符;再写入模块的I2C 从站地址;之后查看手册找到所需数据对应的寄存器地址,将地址输入进去;IMU 模块收到该信息后返回一个收到符;然后 IMU 会按照寄存器的字节前后顺序依次将选中的数据输出;STM32需在收到每一个字节后,向 IMU 回复一个收到符;当接收到的数据总量到达 16 bit 时,STM32 便不再回复,IMU 也不再输出,并回复一个结束符表明传输过程已经结束16。表1寄存器数据表地址RegAddr0 x340 x350 x360 x370 x380 x39符号AXAYAZGXGYGZ含义X轴加速度Y轴加速度Z轴加速度X轴角速度Y轴角速度Z轴角速度3数据SD卡存储流程数据存储设计思路:首先为 STM32板接通电源进行复位操作,紧接着配置时钟、GPIO、SD 卡接口、使能 SPI时钟;然后对 IMU、相机、SD 卡进行硬件配置,并将设置文件保存在程序中。配置的内容主要是 IMU 输出数据寄存器的选择、相机分辨率与图像格式的选择、SD卡传输模式的选择;接着配置 FaTFS底层存储介质的接口函