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
    +关注

    关注

    1655

    文章

    22287

    浏览量

    630326
  • ARM处理器
    +关注

    关注

    6

    文章

    361

    浏览量

    43127
  • SoC芯片
    +关注

    关注

    2

    文章

    662

    浏览量

    36837

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

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

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    基于FPGA的压缩算法加速实现

    本设计中,计划实现对文件的压缩及解压,同时优化压缩中所涉及的信号处理和计算密集型功能,实现对其的加速处理。本设计的最终目标是证明在充分并行化的硬件体系结构 FPGA
    的头像 发表于 07-10 11:09 2085次阅读
    基于<b class='flag-5'>FPGA</b>的压缩<b class='flag-5'>算法</b><b class='flag-5'>加速</b><b class='flag-5'>实现</b>

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

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

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

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

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

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

    DCT域数字水印算法FPGA实现

    提出一种基于DCT域的数字水印算法,并用FPGA硬件实现其中关键部分DCT变换。采用VHDL语言有效设计和实现DCT变换,分析与仿真结果表明:与软件
    发表于 12-28 10:22 20次下载

    ECT图像重建算法FPGA实现

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

    如何使用FPGA加速机器学习算法

    当前,AI因为其CNN(卷积神经网络)算法出色的表现在图像识别领域占有举足轻重的地位。基本的CNN算法需要大量的计算和数据重用,非常适合使用FPGA实现
    发表于 05-26 10:16 1613次阅读

    FPGA实现CRC算法的程序

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

    基于FPGA的JPEG解码算法的研究与实现

    基于FPGA的JPEG解码算法的研究与实现
    发表于 08-29 16:05 11次下载

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

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

    基于FPGA的Cordic算法实现的设计与验证

    本文是基于FPGA实现Cordic算法的设计与验证,使用Verilog HDL设计,初步可实现正弦、余弦、反正切函数的实现。将复杂的运算转化
    发表于 07-03 10:18 3376次阅读
    基于<b class='flag-5'>FPGA</b>的Cordic<b class='flag-5'>算法</b><b class='flag-5'>实现</b>的设计与验证

    基于FPGA的定点LMS算法实现讲解

    基于FPGA的定点LMS算法实现讲解。
    发表于 04-28 11:17 15次下载

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

    FPGA算法是指在FPGA(现场可编程门阵列)上实现算法FPGA是一种可重构的硬件设备,可以
    的头像 发表于 08-16 14:31 3765次阅读
    怎么用<b class='flag-5'>FPGA</b>做<b class='flag-5'>算法</b> 如何在<b class='flag-5'>FPGA</b>上<b class='flag-5'>实现</b>最大公约数<b class='flag-5'>算法</b>

    fpga布局布线算法加速

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

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

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