那曲檬骨新材料有限公司

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 boid.vx=boid.vx+turnfactor
ifboid.x>rightmargin:
boid.vx=boid.vx-turnfactor
ifboid.y>bottommargin:
boid.vy=boid.vy-turnfactor
ifboid.y boid.vy=boid.vy+turnfactor

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

當使用不同的微控制器和顯示器時,邊界條件和背后的邏輯保持不變。



審核編輯:劉清

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • FPGA
    +關注

    關注

    1630

    文章

    21796

    瀏覽量

    606002
  • ARM處理器
    +關注

    關注

    6

    文章

    361

    瀏覽量

    41937
  • SoC芯片
    +關注

    關注

    1

    文章

    617

    瀏覽量

    35040

原文標題:基于FPGA加速的bird-oid object算法實現

文章出處:【微信號:友晶FPGA,微信公眾號:友晶FPGA】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    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次下載

    MIDI合成算法及其FPGA實現

    MIDI合成算法及其FPGA實現.
    發表于 04-16 13:57 ?44次下載
    MIDI合成<b class='flag-5'>算法</b>及其<b class='flag-5'>FPGA</b><b class='flag-5'>實現</b>

    ECT圖像重建算法FPGA實現

    ECT圖像重建算法FPGA實現 ECT圖像重建算法FPGA實現
    發表于 11-19 14:59 ?2次下載

    如何使用FPGA加速機器學習算法

    當前,AI因為其CNN(卷積神經網絡)算法出色的表現在圖像識別領域占有舉足輕重的地位。基本的CNN算法需要大量的計算和數據重用,非常適合使用FPGA實現
    發表于 05-26 10:16 ?1512次閱讀

    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 ?351次閱讀

    基于FPGA的Cordic算法實現的設計與驗證

    本文是基于FPGA實現Cordic算法的設計與驗證,使用Verilog HDL設計,初步可實現正弦、余弦、反正切函數的實現。將復雜的運算轉化
    發表于 07-03 10:18 ?2825次閱讀
    基于<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 ?14次下載

    怎么用FPGA算法 如何在FPGA實現最大公約數算法

    FPGA算法是指在FPGA(現場可編程門陣列)上實現算法FPGA是一種可重構的硬件設備,可以
    的頭像 發表于 08-16 14:31 ?2985次閱讀
    怎么用<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 ?945次閱讀

    怎么用FPGA算法 如何在FPGA實現最大公約數算法

    FPGA算法的優點在于它們可以提供高度的定制化和靈活性,使得算法可以根據實際需求進行優化和調整。此外,FPGA還可以實現硬件
    的頭像 發表于 01-15 16:03 ?2566次閱讀
    水果机遥控| 澳门百家乐庄闲和| 法库县| 竞咪百家乐的玩法技巧和规则| 百家乐官网投注秘笈| 百家乐手论坛48491| 金域百家乐官网的玩法技巧和规则| 七胜百家乐娱乐城总统网上娱乐城大都会娱乐城赌场 | 大发888娱乐场 zb8| 女性做生意的风水| 游戏厅百家乐官网技巧| 大发888娱乐城下载lm0| 百家乐博彩博彩网| 百家乐官网视频下栽| 太阳城地址| 百家乐澳门路规则| 赌博百家乐官网趋势把握| 千亿娱乐城注册| 百家乐庄闲庄庄闲| 博彩网百家乐官网的玩法技巧和规则 | 娱乐网百家乐的玩法技巧和规则 | 波音百家乐官网现金网投注平台排名导航| 现金网游戏| 视频百家乐试玩| 任我赢百家乐官网软件| 网络博彩群| 东方太阳城嘉宾国际酒店| 真人百家乐是啥游戏| 百家乐官网路珠多少钱| 惠水县| 大发888游戏注册送98| 百家乐视频百家乐| 百家乐官网电投软件| 登封市| 大发888官网充值| 赌片百家乐的玩法技巧和规则| 新濠百家乐官网娱乐场| 澳门百家乐官网下路写法| 六合彩历史开奖记录| 正品百家乐的玩法技巧和规则| 百家乐算号软件|