【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.mzph.cn/news/162351.shtml

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

相关文章

21款奔驰GLC260L升级HUD抬头显示 平视仪表信息

随着科技飞速地发展,从汽车领域就可以看出,尤其是汽车的抬头显示器,一经推出就吸引了很多的车主。 升级HUD抬头显示,HUD与汽车系统进行完整的数据信息连接,整合成大数据,然后将一些重要信息映射到车窗玻璃…

中低压MOSFET 2N7002W 60V 300mA 双N通道 SOT-323封装

2N7002W小电流双N通道MOSFET,电压60V电流300mA,采用SOT-323封装形式。超高密度电池设计,适用于极低的ros (on),具有导通电阻和最大直流电流能力,ESD保护。可应用于笔记本中的电源管理,电池供电系统等产品应…

通过Everything 建立HTTP服务器时指定文件夹共享

在局域网传输文件,高效传输,不限文件大小 1、安装Everything 2、在Everything开启HTTP服务 【工具】—>>【选项】—>>【HTTP服务】启用HTTP服务器,设置HTTP服务器用户名和密码 3、查看网络信息 打开服务端电脑的【命令提示…

SpringCache使用详解

SpringCache 1.新建测试项目SpringCache2.SpringCache整合redis2.1.Cacheable2.2.CacheEvict2.3.Cacheput2.4.Caching2.5.CacheConfig 3.SpringCache问题4.SpringCache实现多级缓存 1.新建测试项目SpringCache 引入依赖 <dependencies><dependency><groupId&g…

内裤洗衣机有用吗?口碑最好的小型洗衣机

想必各位小伙伴都知道我们的贴身衣物&#xff0c;不可以与其他衣服一起在洗衣机中清洗&#xff0c;每次都需要把内衣裤挑选出来手洗&#xff0c;但是我们每天都要上厕所&#xff0c;难免会沾上污渍和细菌&#xff0c;我们在用手搓洗的过程中很难把细菌给清除掉&#xff0c;所以…

ios打包,证书获取

HBuilderX 打包ios界面&#xff1a; Bundle ID(AppID)&#xff1a; 又称应用ID&#xff0c;是每一个ios应用的唯一标识&#xff0c;就像一个人的身份证号码&#xff1b; 每开发一个新应用&#xff0c;首先都需要先去创建一个Bundle ID Bundle ID 格式&#xff1a; 一般为&…

用Python写了一个贪吃蛇大冒险小游戏

一、游戏简介 1.1 游戏操作及游戏规则 &#xff08;1&#xff09;游戏开始后&#xff0c;通过键盘上下左右键控制贪吃蛇移动寻找食物&#xff1b; &#xff08;2&#xff09;贪吃蛇每吃一个食物&#xff0c;身长会增加一个单位&#xff1b; &#xff08;3&#xff09;在正常模…

【HarmonyOS】 低代码平台组件拖拽使用技巧之登录组件

【关键字】 HarmonyOS、低代码平台、组件拖拽、登录组件、代码编辑器 1、写在前面 前面我们介绍了低代码中堆叠容器、滚动容器、网格布局、页签容器以及一些常用容器和组件的拖拽使用方法&#xff0c;本篇我们来介绍一个新的组件&#xff0c;这个组件是属于业务组件——登录组…

Modbus转Profinet网关:PLC与天信流量计通讯的经典案例

无论您是PLC或工业设备的制造商&#xff0c;还是工业自动化系统的维护人员&#xff0c;可能会遇到需要将不同协议的设备连接组合并通讯的情况&#xff0c;Modbus和Profinet是现代工业自动化中常见的两种通信协议&#xff0c;在工业控制领域中被广泛应用。 在这种情况绝大多数会…

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

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

《微信小程序开发从入门到实战》学习二十六

3.4 开发参与投票页面 参与投票页面同样需要收集用户提交的信息&#xff0c;哪个用户在哪个投票选择了什么选项&#xff0c;因此它也是一个表单页面 3.4.1 如何获取投票信息 假设用户A在投票创建页面后填了表单&#xff08;1.创建投票&#xff09;&#xff0c;用户A 点了提交…

山西电力市场日前价格预测【2023-11-24】

日前价格预测 预测说明&#xff1a; 如上图所示&#xff0c;预测明日&#xff08;2023-11-24&#xff09;山西电力市场全天平均日前电价为415.13元/MWh。其中&#xff0c;最高日前电价为685.26元/MWh&#xff0c;预计出现在18:00。最低日前电价为296.84元/MWh&#xff0c;预计…

Web实战:基于Django与Bootstrap的在线计算器

文章目录 写在前面实验目标实验内容1. 创建项目2. 导入框架3. 配置项目前端代码后端代码 4. 运行项目 注意事项写在后面 写在前面 本期内容&#xff1a;基于Django与Bootstrap的在线计算器 实验环境&#xff1a; vscodepython(3.11.4)django(4.2.7)bootstrap(3.4.1)jquery(3…

美国DDoS服务器:如何保护你的网站免遭攻击?

​  在当今数字化时代&#xff0c;互联网已经成为人们生活中不可或缺的一部分。随着互联网的普及和发展&#xff0c;网络安全问题也日益严重。其中&#xff0c;DDoS攻击是目前最常见和具有破坏性的网络攻击之一。那么&#xff0c;如何保护你的网站免遭DDoS攻击呢?下面将介绍…

C#开发的OpenRA游戏之属性Selectable(9)

C#开发的OpenRA游戏之属性Selectable(9) 在游戏里,一个物品是否具有选中的能力,是通过添加属性Selectable来实现的。当一个物品不能被用户选取,那么就不要添加这个属性。 这个属性定义在下面这段描述里: ^Selectable: Selectable: SelectionDecorations: WithSpriteCon…

CSS画一条线

<p style"border: 1px solid rgba(0, 0, 0, 0.1);"></p> 效果&#xff1a;

MATLAB中imbothat函数用法

目录 语法 说明 示例 使用底帽和顶帽滤波增强对比度 imbothat函数的功能是对图像进行底帽滤波。 语法 J imbothat(I,SE) J imbothat(I,nhood) 说明 J imbothat(I,SE) 使用结构元素 SE 对灰度或二值图像 I 执行形态学底帽滤波。底帽滤波计算图像的形态学闭运算&#…

苹果手机内存满了怎么清理?这里有你想要的答案!

手机内存不足是一个比较普遍的现象。由于现在手机应用程序的功能越来越强大&#xff0c;所以占用的内存也越来越大。同时用户会在手机中存储大量的数据&#xff0c;如照片、视频、文档等&#xff0c;这些都会占用大量的手机空间。那么&#xff0c;苹果手机内存满了怎么清理&…

C++数组中重复的数字

3. 数组中重复的数字 题目链接 牛客网 题目描述 在一个长度为 n 的数组里的所有数字都在 0 到 n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字是重复的,也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 Input: {2, 3, 1, 0, 2, 5}Output: 2解题…

Altium Designer学习笔记10

再次根据图纸进行布局走线&#xff1a; 这个MT2492 建议的布局走线。 那我这边应该是尽量按照该图进行布局&#xff1a; 其中我看到C1的电容的封装使用的是电感的封装&#xff0c;需要进行更换处理&#xff1a; 执行Validate Changes和Execute Changes操作&#xff0c;更新&a…