【2021集创赛】基于ARM-M3的双目立体视觉避障系统 SOC设计

本作品参与极术社区组织的有奖征集|秀出你的集创赛作品风采,免费电子产品等你拿~活动。

团队介绍

参赛单位:上海电力大学
队伍名称:骇行队
总决赛奖项:二等奖

1.摘要

    随着信息技术的发展,AGV(Automated Guided Vehicle,AGV)无人自动导航小车已被广泛应用于智能制造、智慧物流等场景。AGV搬运车的导航系统主要利用视觉、激光雷达等传感器,其主控系统大多使用多个芯片及其复杂嵌入式系统实现,成本高、功耗大、实时性差。为了解决这一问题,本设计在Xilinx FPGA平台上构建了ARM-M3软核,设计了加速双目视差图像计算的SOC及相关控制外设,验证了单个芯片引导AGV小车的基本功能。本设计主要工作体现在如下几个方面:
    1) 在Xilinx Artix XC7A200T平台上构建了ARM-M3微处理器及相关外设。通过OV5640双目相机进行图像采集,经协处理器加速,ARM-M3微处理器分析周围的环境进行路径规划最终产生PWM信号驱动小车进行运动。
    2)在硬件方面,本设计自制了OV5640双目相机及SiC780碳化硅电机驱动板。通过对双目视觉的原理进行分析,自制的双目相机选用了平行式双目立体视觉模式作为设计方案。得益于小车使用的麦克纳姆轮全向移动平台及自制的大电流碳化硅驱动板,小车可以自由灵活地进行各种运动。
    3)在算法方面,本设计对传统的立体匹配算法进行了并行优化,使得算法的运行速度得到了极大地提升,最终实现了资源消耗、功耗、运行速度三者较好的平衡。为了消除图像的径向畸变、倾斜畸变及切向畸变,本设计采用了张正友标定法对双目相机进行标定和校正。利用Matlab的自动标定工具Stereo Camera Calibrator App得到了相机的内外参数并代入校正算法最终实现了图像的校正。
    4)在测试方面,本文分析了传统立体匹配算法中存在的特征匹配耗时过长、匹配错误较多的问题,并在树莓派3B以及PC机进行了相关的对比实验。
    5)在应用场景方面,采集视频数据自行构建二维码数据集,使用TensorFlow训练定点卷积神经网络,利用HLS构建CNN IP核,使之具备二维码检测能力。

2.系统功能介绍

2.1 总体介绍

    本作品的目标是在ARM公司提供的ARM CortexM3 DesignStart RTL Eval处理器IP的基础上,设计AGV小车自主视觉避障专用SOC,开发出能够感知障碍物的双目深度视觉协处理器。
在这里插入图片描述

设计内容包括:

  • 开发了基于BM(Block Maching)算法的双目立体匹配智能协处理器;
  • 设计并制作了OV5640双目立体相机电路板 ,及双目相机视频采集Verilog驱动IP;
  • 设计了用于显示参数和图像的LCD 驱动;
  • 设计制作了运动控制模块驱动板,及相关PWM驱动;
  • 控制具备全位移动能力的麦克纳姆车进行避障演示。
  • 构建CNN IP核,使之具备二维码检测能力。

在这里插入图片描述

2.2 系统流程

本系统在Xilinx FPGA Artix XC7A200T上构建ARM Cortex-M3处理器,搭配自行设计的OV5640双目相机采集视频并利用VDMA存入DDR中。深度加速模块根据相机标定参数进行畸变矫正和立体匹配,并将所得的视差图进行缓存。M3软核从DDR中读取视差图,计算与前方障碍的相对距离并进行路径规划。最后读取帧率数据,将相机图像,视差结果,运动方向和图像帧率在LCD上显示,并根据规划结果控制小车。
在这里插入图片描述

3.系统架构

3.1 架构简介

系统主要由视频采集、图像处理、实时显示和运动控制四个模块组成。
在这里插入图片描述

  A、视频采集模块由相机采集、寄存器配置、视频流转换三个子模块构成,实现对自行设计的双目相机分辨率和成像参数配置,并将采集数据传输到图像处理模块。
  B、图像处理模块由配置为高性能模式的AXI连接器将VDMA、帧率计数器、深度加速核以及OSD结果呈现四个子模块互相连接,实现视差图计算和帧率计数功能,最后由结果呈现模块进行汇总传递给显示模块进行显示。
  C、显示模块由视频流转换、视频时序控制器、动态时钟、和VGA显示四个子模块构成。根据高性能视频系统参考设计搭建视频显示模块的结构和参数配置。视频时序控制器产生1080p对应的行场同步信号交由视频流转换子模块输出到VGA显示模块,动态时钟可由用户自行配置来驱动VGA显示模块以适配不同的屏幕分辨率。在上述几个模块的协作下实现分辨率为1080p刷新率为60Hz的图像和运行参数显示。
  D、运动控制模块主要由ARM-M3核、UART、GPIO、PWM子模块等模块构成。M3核读取DDR中深度加速模块的结果进行简单计算,实现对前方障碍物距离的估计,从而进行路径规划。最后读取视频采集模块和深度输出模块的帧率数据同小车运行方向一起输出到结果呈现模块和UART串口 ,实现实时运行参数的呈现。

3.2 软硬功能划分

    相较于传统单片机串行采集相机数据,传输单个像素进行显示,根据定时器中断产生PWM,以及在PC机上都难以实现的稳定视差图计算输出在本系统中都由硬件实现,极大减轻了CPU负担。
    软件部分主要在Keil中由C语言实现,主要用于初始化各个外设,配置相机寄存器。初始化完成后读取帧率计数模块数据和深度加速模块的结果,根据公式进行简单的四则运算完成对距离的估计。根据估计结果配置PWM模块和显示模块的寄存器实现运动控制和实时显示。

3.3 外设挂载

    本系统的中央处理单元是由ARM公司提供的ARM CortexM3 DesignStart RTL Eval,整个系统及外设部署在Xilinx xc7a200tfbg484 FPGA平台上。本系统的主要由Cortex-M3软核,OV5640双目摄像头模块,深度加速模块,DDR3内存控制器,VGA显示器,AHB总线矩阵、AXI总线及APB低速外设等相关模块组成,详细框图如下图所示。
在这里插入图片描述

4.模块及系统功能仿真与测试

4.1 相机测试仿真

    OV5640摄像头的寄存器配置由M3软核控制GPIO模拟SCCB实现,使用DSLogic逻辑分析仪捕获引脚电平,其配套软件DSView可以解析与SCCB兼容的IIC协议,显示不同电平组合对应的命令和数据。
在这里插入图片描述

4.2 加速模块仿真

在这里插入图片描述

4.3 CNN二维码检测

    二维码的图案相较于自然场景具有更简单的结构和纹理,本设计针对二维码图像的这一特点,构建了一个简单的CNN网络,该CNN网络包括三个卷积层、三个池化层和两个全连接层。
在这里插入图片描述

    输入的图像通过不同的卷积核产生不同的特征图像用于提取目标不同的特征值。经过卷积操作,可以完成对输入图像的降维和特征提取。为了进一步降低特征图的维度并减少FPGA资源消耗,每一个卷积层后还需要加上一个池化层来减少数据的空间大小并控制过拟合。
    全连接层是一个矩阵乘法,相当于一个特征空间变换,可以把有用的信息提取并整合。全连接的主要目标是维度变换,将高维的数据变成低维的数据。
    经过上述运算之后,可以得到输入图像中含有二维码的概率。

4.4 模块和系统的整体测试结果

    在室外放置两个纸箱作为路径障碍来进行系统的整体测试。下图节选自视频中小车对第二个障碍物进行避障操作参考图中两个障碍物的位置可知,在前进过程中前方物体距离太近时进行避障操作。当障碍物不再位于小车正前方时继续前进,达到避障的效果。
在这里插入图片描述

5.参赛体会

    通过本次比赛我们对基于ARM核的SOC设计有了一个初步的认识。通过ARM核+协处理器的方式使得整个系统在计算深度图像时的图像采集性能、功耗、成本优于常见的嵌入式系统及一般性能的PC机。相较于传统单片机串行采集相机数据,传输单个像素进行显示,根据定时器中断产生PWM,以及在PC机上都难以实现的稳定视差图计算输出在本系统中都由硬件实现,极大减轻了CPU负担。
    本设计使用的FPGA芯片是Xilinx FPGA Artix XC7A200T。在参赛的过程中我们发现,当LUT的消耗大于10W,用量大于70%时,布线所用时长将成倍的增加,时序也将很难收敛。

作品内容来源于骇行队,非开源,转载请标明出处。欢迎大家参加极术社区组织的有奖征集|秀出你的集创赛作品风采,免费电子产品等你拿~活动,10月1日截止~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/209396.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

快慢指针判断环形链表

我们在前面文章中写过用快慢指针判断链表是否带环: leetcode:环形链表-CSDN博客 我们用的是slow指针一次走一步,fast指针一次走两步,当slow入环后开始了追击,每走一次距离缩短1,最终就会相遇 思考问题 …

FastAPI通过SSE进行流式输出

服务端推送 在服务器推送技术中,服务器在消息可用后立即主动向客户端发送消息。其中,有两种类型的服务器推送:SSE和 WebSocket。 SSE(Server-Send Events) SSE 是一种在基于浏览器的 Web 应用程序中仅从服务器向客户…

Arcgis中通过函数实现字符串截取

效果 从字符串中提取最右侧的符号,如“/”后面的字符串 步骤 1、VB dim bbindexinstrrev( [WGCJ] ,"/")bbright( [WGCJ] ,len( [WGCJ] )- index )2、python def bb(aa):index(aa.rfind("/"))bbaa[index1:]return bb

Linux 磁盘/分区/修复 命令

目录 1. lsblk(list block devices) 2. fdisk(fragment disk) 3. gdisk 4. mkfs(make filesystem) 5. df(display file-system disk space usage) 6. du 7. fsck(file-sy…

手把手教你通过CODESYS V3进行PLC编程(二)

教程背景 在上一期教程中,我们已经完成了控制器设备的连接和配置。接下来的教程将继续以宏集MC-Prime为例,假设控制器已经配置并连接到开发者的PC上,为您演示如何为控制器安装合适的CODESYS V3版本并创建第一个程序。 一、安装CODESYS &…

HarmonyOS ArkTS 保存应用数据(十)

1 概述 在移动互联网蓬勃发展的今天,移动应用给我们生活带来了极大的便利,这些便利的本质在于数据的互联互通。因此在应用的开发中数据存储占据了非常重要的位置,HarmonyOS应用开发也不例外。 2 什么是首选项 首选项为应用提供Key-Value键…

快速上手Banana Pi BPI-M4 Zero 全志科技H618开源硬件开发开发板

Linux[编辑] 准备[编辑] 1. Linux镜像支持SD卡或EMMC启动,并且会优先从SD卡启动。 2. 建议使用A1级卡,至少8GB。 3. 如果您想从 SD 卡启动,请确保可启动 EMMC 已格式化。 4. 如果您想从 EMMC 启动并使用 Sdcard 作为存储,请确…

220V转12V固定输出12V非隔离芯片WT5106WT5105

220V转12V固定输出12V非隔离芯片WT5106WT5105 今天给大家介绍一款实用芯片,WT5106。它是一款高效率高精度的非隔离降压开关电源恒压控制驱动芯片。 WT5106适用于85VAC~265VAC全范围输入电压的非隔离Buck、Buckboost拓扑结构,小家电、电机驱动、继电器驱…

app小程序开发的重点在哪里?|企业软件定制网站建设

app小程序开发的重点在哪里?|企业软件定制网站建设 App小程序定制开发是近年来快速发展的一项技术服务,随着移动互联网的普及和用户需求的不断升级,越来越多的企业和个人开始关注和需求定制化的小程序开发。那么,对于app小程序定制…

非遗之光:十八数藏柏松数字保护的璀璨之路

随着数字技术的崛起,非物质文化遗产的保护进入了一个新的纪元。在这个时代的先锋中,十八数藏以其对传统工艺的数字保护而独领风骚。这是一条璀璨之路,通过数字技术的应用,为传统工艺注入了新的活力。 十八数藏柏松将数字创新融入传…

Android自定义View-画直线、折线拖动点可移动

Android自定义View-画直线、折线 需求: 1.在视频界面上,画出1米警戒线、2米警戒线、3米警戒线。 2.绘制车身轮廓线。 3.要求绘制的线段可调整位置。效果如图: 解决方案: 1.自定义一个SurfaceView。 2.SurfaceView实现onDraw()&a…

python查看目录属性

os.chown(path, uid, gid)