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

news2024/11/16 7:28:37

导语

今天继续康奈尔大学FPGA 课程ECE 5760的典型案例分享——基于FPGA加速的bird-oid object算法实现。

(更多其他案例请参考网站:

Final Projects ECE 5760)

1. 项目概述

项目网址

ECE 5760 Final Project

模型说明

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

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

项目说明

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

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

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

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

2. 实现原理

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

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

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

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

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

 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

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

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

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

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是一个可调参数)

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


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是一个可调参数)

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

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

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

3. 视频演示

视频参考:基于FPGA加速的bird-oid object算法实现

4. 源码下载

  1. ECE 5760 Final Project

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1499873.html

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

相关文章

关于esp8266的一些经验汇总,新手必看

说实话&#xff0c;esp8266的nodemcu 已经使用了2年多了&#xff0c;各种问题遇到过&#xff0c;就尝试各种解决&#xff0c;而现在回头来看真的是稀里糊涂的在用&#xff0c;当然这个问题也同样涉及到esp32. 因为最近打算自己打一块esp8266的板&#xff0c;之前打的比较多的是…

数据结构之单链表详解(C语言手撕)

​ &#x1f389;个人名片&#xff1a;&#x1f43c;作者简介&#xff1a;一名乐于分享在学习道路上收获的大二在校生 &#x1f648;个人主页&#x1f389;&#xff1a;GOTXX &#x1f43c;个人WeChat&#xff1a;ILXOXVJE &#x1f43c;本文由GOTXX原创&#xff0c;首发CSDN…

(五)关系数据库标准语言SQL

注&#xff1a;课堂讲义使用的数据库 5.1利用SQL语言建立数据库 5.1.1 create Database 5.1.2 create schema...authorization... 创建数据库和创建模式的区别&#xff1a; 数据库是架构的集合&#xff0c;架构是表的集合。但在MySQL中&#xff0c;他们使用的方式是相同的。 …

如何修改SAP标准代码

文章目录 1 Introduction2 Method2.1 Click Change2.2 Switch off Assistent 3 Summary 1 Introduction In the sap sometimes we need change the standard code . I.E. How to comment code ? 2 Method 2.1 Click Change 2.2 Switch off Assistent This is the result wh…

GAMMA电源维修高压直流电源ES30P-5W ES系列

美国Gamma高压电源维修型号&#xff1a;D-ES30R-10N-5W/M&#xff0c;LXR30-1N&#xff0c;XRM5N-100W&#xff0c;ES50P-10W/DDPM&#xff0c;ES60P-10W/DDPM&#xff0c;RR20-20P/DDPM&#xff0c;ES30P-10W&#xff0c;ES60P-10W DDPM&#xff0c;RR60-18P/220V&#xff0c;…

iStoreOS系统内安装HomeAssistant服务

iStoreOS系统内安装HomeAssistant服务 1. HomeAssistant服务 HomeAssistant是一款基于Python的开源智能家居系统&#xff0c;简称HA。 HomeAssistant可以方便地连接各种外部设备&#xff0c;如智能设备、摄像头、邮件、短消息和云服务等&#xff0c;其成熟的可连接组件有近千…

rocketmq学习笔记(一)安装部署

初次使用rocketmq&#xff0c;记录一下全流程步骤。 1、下载安装包 首先在官网&#xff0c;下载安装包&#xff0c;可也根据官方文档进行部署&#xff0c;但有一些细节没说明&#xff0c;可能会有坑&#xff0c;本文会尽量详细的描述每个步骤&#xff0c;把我踩过的坑填补上。…

Python自动化测试:API接口自动化——requests、webSocket

接口自动化测试1 一、requests二、简单示例1.导入/引入库2.请求与响应示例1>简单访问百度主页-GET请求2>简单的登录请求-POST请求3>保存cookies至头信息headers4>其他接口请求时携带headers 三、webSocketwebSocket连接与数据收发示例 本文介绍了借助Python的reque…

Manacher 算法——Leetcode 5.最长回文子串

在了解之前&#xff0c;我们先要了解什么是回文串&#xff0c;什么是回文子串。 回文串和回文子串&#xff1a; 回文串是指一个字符串正序遍历和反向遍历结果相同的字符串。如 ABBA&#xff0c;正着读反着读结果是一样的。 有了回文串的概念&#xff0c;回文子串的概念也就显…

顺势交易中,用什么方法识别趋势的开始与结束?

在交易过程中&#xff0c;大家都知道顺势交易的重要性&#xff0c;但如何对趋势的开始和结束进行量化判断呢&#xff1f; 趋势交易需要一个正确的出发点和思想方向。也就是说&#xff0c;趋势交易需要关注什么呢&#xff1f;有哪些相关的技术手段可以利用呢&#xff1f; 首先&a…

springboot使用异步多线程

shigen坚持更新文章的博客写手&#xff0c;擅长Java、python、vue、shell等编程语言和各种应用程序、脚本的开发。记录成长&#xff0c;分享认知&#xff0c;留住感动。 个人IP&#xff1a;shigen 在shigen之前的很多文章中&#xff0c;提到了线程池&#xff1a; 高性能API设计…

一 windso10 笔记本刷linux cent os7.9系统

1:准备材料 16G以上U盘, 笔记本一台 镜像选了阿里云镜像:centos-7-isos-x86_64安装包下载_开源镜像站-阿里云 软件:链接&#xff1a;https://pan.baidu.com/s/13WDp2bBU1Pdx4gRDfmBetg 提取码&#xff1a;09s3 2:把镜像写入U盘,本人已经写入好了,选择镜像,点开始就是,确定等…

javascript正则深入

文章目录 一、前言二、高级`API`2.1、模式匹配的用法`(x)`2.2、非捕获括号的模式匹配`(?:x)`2.3、先行断言`x(?=y)`2.4、后行断言`(?<=y)x`2.5、正向否定查找`x(?!y)`2.6、反向否定查找`(?<!y)x`2.7、字符集合和反向字符集合的用法 `[xyz] / [^xyz]`2.8、词边界和非…

开关电源安规测试标准与测试要求

安规测试是对开关电源进行电气性能、安全性能等检测&#xff0c;确保开关电源符合规定并且安全可靠&#xff0c;为开关电源的质量把关。那么开关电源安规测试有哪些测试要求和标准呢&#xff1f; 开关电源安规测试要求 一、测试前 1. 首先&#xff0c;要检查测试环境&#xff0…

电子商务平台中商品数据采集|API数据接口采集商品的高效性体现

电子商务平台由一个个产品所构成,通过对产品的分析可以有效发掘用户需求,优化店铺产品结构,提升客户粘性、客单价、销售利润等。 一、产品行业数据采集API接口 采集产品行业数据的核心目的是了解该产品的市场需求变化情况,常用到的数据采集指标包括产品搜索指数和产品交易指数两…

项目建设计划书-word

【项目建设计划书-word】 项目描述&#xff08;项目目标&#xff0c;客户需求情况&#xff0c;项目交付清单&#xff0c;验收标准和交付期限&#xff0c;服务及约束&#xff09;项目组织&#xff08;项目组人员架构&#xff0c;职责分工&#xff0c;人员投入安排及时间点安排&…

Python爬虫——Scrapy-1

目录 简介 安装 基本使用 1. 创建爬虫的项目 2. 创建爬虫文件 3. 运行爬虫代码 scrapy项目组成 scrapy工作原理 ​编辑 58同城 scrapy架构组成 汽车之家 总结 简介 Scrapy 是一个基于 Python 的开源网络爬虫框架&#xff0c;它可以帮助开发者快速、高效地构…

MySQL和语言的连接

1.下载开发包 有了之前的基础&#xff0c;就可以使用语言来使用数据库了&#xff0c;实际上原生命令行操作数据库的场景比较少&#xff0c;语言级别的库和包才更加常用&#xff0c;接下我来带您学习如何使用 C/C 访问 MySQL 客户端。 然后创建一个可以远程登录的用户&#xf…

Transformer中的FlashAttention

FlashAttention是一种用于Transformer模型的近似注意力机制&#xff0c;旨在减少注意力计算和内存需求。引入FlashAttention是因为传统Transformer模型中的自注意力机制在处理长序列时存在时间和存储复杂度上的挑战&#xff0c;需要大量的计算资源和内存来处理更长的上下文背景…

【数据结构】二、线性表:6.顺序表和链表的对比不同(从数据结构三要素讨论:逻辑结构、物理结构(存储结构)、数据运算(基本操作))

文章目录 6.对比&#xff1a;顺序表&链表6.1逻辑结构6.2物理结构&#xff08;存储结构&#xff09;6.2.1顺序表6.2.2链表 6.3数据运算&#xff08;基本操作&#xff09;6.3.1初始化6.3.2销毁表6.3.3插入、删除6.3.4查找 6.对比&#xff1a;顺序表&链表 6.1逻辑结构 顺…