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

2023-11-23 10:52

本文主要是介绍【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日截止~

这篇关于【2021集创赛】基于ARM-M3的双目立体视觉避障系统 SOC设计的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/417429

相关文章

Windows系统宽带限制如何解除?

《Windows系统宽带限制如何解除?》有不少用户反映电脑网速慢得情况,可能是宽带速度被限制的原因,只需解除限制即可,具体该如何操作呢?本文就跟大家一起来看看Windows系统解除网络限制的操作方法吧... 有不少用户反映电脑网速慢得情况,可能是宽带速度被限制的原因,只需解除限制即可,具体该如何操作呢?本文

CentOS和Ubuntu系统使用shell脚本创建用户和设置密码

《CentOS和Ubuntu系统使用shell脚本创建用户和设置密码》在Linux系统中,你可以使用useradd命令来创建新用户,使用echo和chpasswd命令来设置密码,本文写了一个shell... 在linux系统中,你可以使用useradd命令来创建新用户,使用echo和chpasswd命令来设

电脑找不到mfc90u.dll文件怎么办? 系统报错mfc90u.dll丢失修复的5种方案

《电脑找不到mfc90u.dll文件怎么办?系统报错mfc90u.dll丢失修复的5种方案》在我们日常使用电脑的过程中,可能会遇到一些软件或系统错误,其中之一就是mfc90u.dll丢失,那么,mf... 在大部分情况下出现我们运行或安装软件,游戏出现提示丢失某些DLL文件或OCX文件的原因可能是原始安装包

电脑显示mfc100u.dll丢失怎么办?系统报错mfc90u.dll丢失5种修复方案

《电脑显示mfc100u.dll丢失怎么办?系统报错mfc90u.dll丢失5种修复方案》最近有不少兄弟反映,电脑突然弹出“mfc100u.dll已加载,但找不到入口点”的错误提示,导致一些程序无法正... 在计算机使用过程中,我们经常会遇到一些错误提示,其中最常见的就是“找不到指定的模块”或“缺少某个DL

利用Python快速搭建Markdown笔记发布系统

《利用Python快速搭建Markdown笔记发布系统》这篇文章主要为大家详细介绍了使用Python生态的成熟工具,在30分钟内搭建一个支持Markdown渲染、分类标签、全文搜索的私有化知识发布系统... 目录引言:为什么要自建知识博客一、技术选型:极简主义开发栈二、系统架构设计三、核心代码实现(分步解析

Python FastAPI+Celery+RabbitMQ实现分布式图片水印处理系统

《PythonFastAPI+Celery+RabbitMQ实现分布式图片水印处理系统》这篇文章主要为大家详细介绍了PythonFastAPI如何结合Celery以及RabbitMQ实现简单的分布式... 实现思路FastAPI 服务器Celery 任务队列RabbitMQ 作为消息代理定时任务处理完整

Linux系统中卸载与安装JDK的详细教程

《Linux系统中卸载与安装JDK的详细教程》本文详细介绍了如何在Linux系统中通过Xshell和Xftp工具连接与传输文件,然后进行JDK的安装与卸载,安装步骤包括连接Linux、传输JDK安装包... 目录1、卸载1.1 linux删除自带的JDK1.2 Linux上卸载自己安装的JDK2、安装2.1

Linux系统之主机网络配置方式

《Linux系统之主机网络配置方式》:本文主要介绍Linux系统之主机网络配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、查看主机的网络参数1、查看主机名2、查看IP地址3、查看网关4、查看DNS二、配置网卡1、修改网卡配置文件2、nmcli工具【通用

Linux系统之dns域名解析全过程

《Linux系统之dns域名解析全过程》:本文主要介绍Linux系统之dns域名解析全过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、dns域名解析介绍1、DNS核心概念1.1 区域 zone1.2 记录 record二、DNS服务的配置1、正向解析的配置

Linux系统中配置静态IP地址的详细步骤

《Linux系统中配置静态IP地址的详细步骤》本文详细介绍了在Linux系统中配置静态IP地址的五个步骤,包括打开终端、编辑网络配置文件、配置IP地址、保存并重启网络服务,这对于系统管理员和新手都极具... 目录步骤一:打开终端步骤二:编辑网络配置文件步骤三:配置静态IP地址步骤四:保存并关闭文件步骤五:重