0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于FPGA加速的bird-oid object算法实现

友晶FPGA 来源:友晶Terasic 2024-04-09 11:05 次阅读

1. 项目概述

模型说明

Bird-oid object 简称Boids模型,是美国的一个图形计算机科学家Craig Reynolds在 1986 年开发出来的。

6f39d15e-f61d-11ee-a297-92fbcf53809c.png

他的Boids模型为集群个体抽象出三个基本行为:分离(seperation)、对齐(alignment)、与聚集(cohesion)。将这三种行为按一定权重进行混合,可以让群体出现秩序化的社会性行为。这个模型自从提出到现在一直持续影响着社会学、生物学、计算机科学等学科的发展。基于这个模型的应用其实很多, 比如现在的集群无人地面车辆,集群无人机灯光秀等等。

项目说明

本项目使用DE1 SoC的ARM A9处理器FPGA逻辑的组合,不仅成功地模拟了动态boid (bird-oid object)群集模式,而且还优化了周期要求和执行时间。

6f56a61c-f61d-11ee-a297-92fbcf53809c.jpg

本项目首先创建了一个完全运行在ARM A9处理器上的“基线”设计。这个基线设计是使用C代码创建的,能够以每秒60帧的速度计算最多3,000个对象的群集模式。

我们的第二个对比设计是在FPGA上创建一个更新功能可以计算和更新每个物体在x和y坐标上的位置,以及它们在x和y方向上的速度。最后成功地在FPGA上模拟了最多显示150个对象的boids群集模式。

6f72d2ec-f61d-11ee-a297-92fbcf53809c.png

这个项目的目标是改善更新功能所需的周期数,并看到总体执行时间的改进。如果能够减少运行更新的专用硬件的循环次数,估计就最终可以在ARM处理器上进行超过3000个对象的计算。

2. 实现原理

要创建boids群集模拟,需要遵循三个主要步骤:分离、对齐和聚集。

分离 Separation:离得太近的物体会相互远离

对齐 Alignment:对齐是指每个物体试图匹配其可见范围内物体的速度,朝着周围同伴的平均方向前进

聚集 Cohesion:朝着周围同伴的平均位置移动

6f9eb8c6-f61d-11ee-a297-92fbcf53809c.png

当对象之间靠得太近时,执行两个步骤使对象之间稍微散开一点。第一步是计算当前节点到最近节点的距离:

close_dx += boid.x - otherboid.x

close_dy += boid.y - otherboid.y

一旦这被计算出来,我们就创造了一个回避因素:avoidfactor。这个avoidfactor虽然仍然相对较小,但将乘以之前计算的close_dx和close_dy值:

boid.vx += close_dx*avoidfactor

boid.vy += close_dy*avoidfactor

6fb7985a-f61d-11ee-a297-92fbcf53809c.png

下一步是对齐所需的计算。我们执行以下步骤:

在开始更新特定对象时,三个变量(xvel_avg、yvel_avg和neighboring_boids)为零。

循环遍历每一个其他的对象。如果到特定对象的距离小于可见范围,则

xvel_avg += otherboid.vx
yvel_avg += otherboid.vy

neighboring_boids += 1

循环遍历所有其他物体后,如果neighboring_boids > 0,则执行以下操作:

xvel_avg = xvel_avg/neighboring_boids
yvel_avg = yvel_avg/neighboring_boids

然后根据以下公式更新速度:

boid.vx += (xvel_avg - boid.vx)*matchingfactor
boid.vy += (yvel_avg - boid.vy)*matchingfactor

(其中matchingfactor是一个可调参数

6fc67492-f61d-11ee-a297-92fbcf53809c.png

最后一次物体对物体的更新是基于聚集性,因为每个物体对象都在其可见范围内缓慢地转向其他对象的质心。它是这样做的:


1. 在开始更新特定对象时,三个变量(xpos_avg、ypos_avg和neighboring_boids)为零


2. 循环遍历每一个其他的对象。如果到特定对象的距离小于可见范围,则

xpos_avg += otherboid.x
ypos_avg += otherboid.y
neighboring_boids += 1

循环遍历所有其他对象后,如果neighboring_boids > 0,则执行以下操作:

xpos_avg = xpos_avg/neighboring_boids
ypos_avg = ypos_avg/neighboring_boids

然后根据以下公式更新速度:

boid.vx += (xpos_avg - boid.x)*centeringfactor
boid.vy += (ypos_avg - boid.y)*centeringfactor

(其中centeringfactor是一个可调参数)

6fdf8bc6-f61d-11ee-a297-92fbcf53809c.png

对象更新的最后一步是确定对象何时需要转动,以便所有对象都保持在正在使用的VGA屏幕的范围内。这可以通过下面的条件语句来实现:

ifboid.x< leftmargin:
boid.vx=boid.vx+turnfactor
ifboid.x>rightmargin:
boid.vx=boid.vx-turnfactor
ifboid.y>bottommargin:
boid.vy=boid.vy-turnfactor
ifboid.y< topmargin:
boid.vy=boid.vy+turnfactor

707f2320-f61d-11ee-a297-92fbcf53809c.png

当使用不同的微控制器和显示器时,边界条件和背后的逻辑保持不变。



审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FPGA
    +关注

    关注

    1603

    文章

    21328

    浏览量

    593275
  • ARM处理器
    +关注

    关注

    6

    文章

    346

    浏览量

    41327
  • SoC芯片
    +关注

    关注

    1

    文章

    535

    浏览量

    34478

原文标题:基于FPGA加速的bird-oid object算法实现

文章出处:【微信号:友晶FPGA,微信公众号:友晶FPGA】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    FFT算法FPGA实现

    在信号处理中,FFT占有很重要的位置,其运算时间影响整个系统的性能。传统的实现方法速度很慢,难以满足信号处理的实时性要求。针对这个问题,本文研究了基于FPGA芯片的FFT算法,把FFT算法
    发表于 05-28 13:38

    FPGA干货分享六】基于FPGA协处理器的算法加速实现

    实现了一种I/O流水线接口,该接口具有I/O连接加速器的典型性能。FPGA/PowerPC/APU接口FPGA允许硬件设计工程师利用单芯片上的处理器、解码逻辑、外设和协处理器
    发表于 02-02 14:18

    如何在LabVIEW 平台下完成视觉算法加速

    在LabVIEW平台下实现算法加速,传统的边缘提取和粒子分析以及预处理算法都比较耗时间,采用FPGA
    发表于 12-28 10:15

    基于FPGA的边缘检测和Sobel算法

    转帖摘要: 针对嵌入式软件无法满足数字图像实时处理速度问题,提出用硬件加速器的思想,通过FPGA实现Sobel边缘检测算法。通过乒乓操作、并行处理数据和流水线设计,大大提高
    发表于 11-29 08:57

    基于FPGA的多路回声消除算法实现

    基于FPGA的多路回声消除算法实现中文期刊文章作  者:尹邦政 朱静 毛茅作者机构:[1]广州广哈通信股份有限公司,广东广州510663;[2]广州大学实验中心,广东广州510006出 版 物
    发表于 05-08 10:23

    如何用FPGA实现FFT算法

    请问一下如何用FPGA实现FFT算法
    发表于 04-08 06:06

    为什么FPGA协处理器可以实现算法加速

    代码加速和代码转换到硬件协处理器的方法如何采用FPGA协处理器实现算法加速
    发表于 04-13 06:39

    小波盲源分离算法的仿真及FPGA实现

    小波盲源分离算法的仿真及FPGA实现:提出了一种基于小波变换的盲源分离方法,在理论分析和仿真结果的基础上,给出了FPGA实现方案。针对传
    发表于 06-21 22:44 21次下载

    ECT图像重建算法FPGA实现

    ECT图像重建算法FPGA实现 ECT图像重建算法FPGA实现
    发表于 11-19 14:59 1次下载

    FPGA实现CRC算法的程序

    Xilinx FPGA工程例子源码:在FPGA实现CRC算法的程序
    发表于 06-07 15:07 28次下载

    Xilinx与IBM通过SuperVesselOpenPOWER开发云平台实现FPGA加速

    SuperVessel将包括赛灵思SDAccel开发环境,支持用C、C++和OpenCL实现FPGA加速 All Programmable 技术和器件的全球领先企业赛灵思公司与IBM公司今天联合宣布
    发表于 02-08 16:06 238次阅读

    以SM3算法为例,构建一个软硬协作算法加速器:算法

    本文是本系列第一篇,笔者最近在研究基于FPGA算法加速,本系列将以 PPT 结合文字的方式,以实现相对简单的 SM3 杂凑算法为例,介绍一
    发表于 02-07 11:43 1次下载
    以SM3<b class='flag-5'>算法</b>为例,构建一个软硬协作<b class='flag-5'>算法</b><b class='flag-5'>加速</b>器:<b class='flag-5'>算法</b>篇

    hash算法FPGA中的实现(1)

    FPGA的设计中,尤其是在通信领域,经常会遇到hash算法实现。hash算法FPGA的设计中,它主要包括2个部分,第一个就是如何选择一
    的头像 发表于 09-07 17:01 607次阅读
    hash<b class='flag-5'>算法</b>在<b class='flag-5'>FPGA</b>中的<b class='flag-5'>实现</b>(1)

    fpga布局布线算法加速

    任务是将逻辑元件与连接线路进行合理的布局和布线,以实现性能优化和电路连接的可靠性。然而,FPGA布局布线的过程通常是一项繁琐且耗时的任务,因此加速布局布线算法的研究具有重要意义。本文将
    的头像 发表于 12-20 09:55 281次阅读

    怎么用FPGA算法 如何在FPGA实现最大公约数算法

    FPGA算法的优点在于它们可以提供高度的定制化和灵活性,使得算法可以根据实际需求进行优化和调整。此外,FPGA还可以实现硬件
    的头像 发表于 01-15 16:03 630次阅读