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

news2024/12/29 11:43:08

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

团队介绍

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

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.coloradmin.cn/o/1241403.html

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

相关文章

状态设计模式是什么?什么是 State 状态设计模式?Python 状态设计模式示例代码

什么是 State 状态设计模式? 状态设计模式是一种行为型设计模式,它允许一个对象在其内部状态发生改变时改变其行为,使其看起来好像改变了其类。状态模式主要解决的问题是:当一个对象的行为取决于它的状态,并且在运行时…

如何写好科研论文

写好科研论文需要遵循以下步骤: 确定研究主题和目标:在开始撰写论文之前,你需要明确你的研究主题和目标。这有助于你更好地组织论文的内容,并确保你的论文能够准确地传达你的研究成果。做好文献调研:在撰写论文之前&a…

集团投融资大数据平台解决方案

一、项目背景 项目为集团型公司大数据平台项目,整个项目周期约为6个月,整体呈现了对外的数据大屏驾驶仓和对内的看板报表,减少了客户内部数据上报和报表制作的重复工作量,为集团数据决策奠定基础。 二、项目目标 战略层&#xff…

.net framework4.0框架下winform 实现寄宿式web api

首先Nuget中下载包:Microsoft.AspNet.WebApi.SelfHost,如下: 注意版本哦,最高版本只能4.0.30506能用。 1.配置路由 public static class WebApiConfig{public static void Register(this HttpSelfHostConfiguration config){// …

echarts 实时刷新图表

2023.11.23今天我学习了如何对echarts图表进行实时刷新&#xff0c;如&#xff1a;一分钟刷新一次&#xff0c;或是五分钟刷新一次。 代码如下&#xff1a; <template><div ref"bar" style"width:200px;height:200px"/> </template>&l…

电商API接口|电商数据接入|拼多多平台根据商品ID查商品详情SKU和商品价格参数

随着科技的不断进步&#xff0c;API开发领域也逐渐呈现出蓬勃发展的势头。今天我将向大家介绍API接口&#xff0c;电商API接口具备独特的特点&#xff0c;使得数据获取变得更加高效便捷。 快速获取API数据——优化数据访问速度 传统的数据获取方式可能需要经过多个中介环节&…

【开源】基于JAVA的在线课程教学系统

项目编号&#xff1a; S 014 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S014&#xff0c;文末获取源码。} 项目编号&#xff1a;S014&#xff0c;文末获取源码。 目录 一、摘要1.1 系统介绍1.2 项目录屏 二、研究内容2.1 课程类型管理模块2.2 课程管理模块2…

office 365企业版安装教程

1.下载所需工具&#xff08;防火墙和防毒软件记得关闭&#xff09; 下载链接&#xff1a;所需文件 2.安装激活office 1.安装 office tool plus 2.已安装过office 先进行office的移除&#xff0c;再进行未安装office的步骤进行 3.未安装过office 1.设置部署 按照以下来进行安…

【MATLAB源码-第85期】基于farrow结构的滤波器仿真,截止频率等参数可调。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 Farrow结构是一种用于实现可变数字滤波器的方法&#xff0c;尤其适用于数字信号处理中的采样率转换和时变滤波。它通过多项式近似来实现对滤波器系数的平滑变化&#xff0c;使得滤波器具有可变的群延时或其他参数。 Farrow结…

详解——菱形继承及菱形虚拟继承

目录 一&#xff0c;菱形继承 1.1单继承 1.2多继承 1.3菱形继承 1.4菱形继承的问题 1.5虚拟继承解决数据冗余和二义性的原理 二.继承的总结和反思 一&#xff0c;菱形继承 C三大特性——继承-CSDN博客 1.1单继承 单继承&#xff1a;一个子类只有一个直接父类时称这个继…

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

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

WPF实战项目十六(客户端):备忘录接口

1、新增IMemoService接口&#xff0c;继承IBaseService接口 public interface IMemoService : IBaseService<MemoDto>{} 2、新增MemoService类&#xff0c;继承BaseService和IMemoService接口 public class MemoService : BaseService<MemoDto>, IMemoService{pub…

毕业设计ASP.NET 1400动漫公司网站【程序源码+文档+调试运行】

摘要 本系统将实现一个动漫公司网站&#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;请确…

阿里云服务器ECS产品知识及购买和使用常见问题及答案汇总

本文总结了阿里云用户在购买和使用阿里云服务器中的一些常见的问题&#xff0c;包括什么是云服务器ECS&#xff0c;特性与优势&#xff0c;应用场景&#xff0c;基本概念&#xff0c;使用限制等众多问题&#xff0c;让您全方位了解阿里云服务器&#xff0c;并根据自己的需求选择…

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

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

Matlab通信仿真系列——滤波器及其分类

微信公众号上线&#xff0c;搜索公众号小灰灰的FPGA,关注可获取相关源码&#xff0c;定期更新有关FPGA的项目以及开源项目源码&#xff0c;包括但不限于各类检测芯片驱动、低速接口驱动、高速接口驱动、数据信号处理、图像处理以及AXI总线等 本节目录 一、滤波器定义 二、滤波…

FastAPI通过SSE进行流式输出

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

解决Android端libc++_shared.so库冲突问题

前言 随着App功能增多&#xff0c;集成的so库也会增多&#xff0c;如果系统中多个so库都使用系统自动生成的libc_shared.so库&#xff0c;如果多个SDK都有该so包&#xff0c;就会出现报错&#xff1a; 解决办法 如果出现该问题&#xff0c;说明您的项目中有多个SDK共同依赖了C标…

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

3.3 开发创建投票页面 3.3.13 使用页面路径参数 写了很多重复代码&#xff0c;现在想办法将多选和单选投票页面合二为一。 将单选页面改造作为单选多选共同页面。 修改index.js中的代码&#xff0c;将路径都跳转到第一个单选页面&#xff0c;带上单选或多选的标志&#xff…