加入星計劃,您可以享受以下權(quán)益:

  • 創(chuàng)作內(nèi)容快速變現(xiàn)
  • 行業(yè)影響力擴散
  • 作品版權(quán)保護
  • 300W+ 專業(yè)用戶
  • 1.5W+ 優(yōu)質(zhì)創(chuàng)作者
  • 5000+ 長期合作伙伴
立即加入
  • 正文
    • KR260,到底是什么?
    • 不寫RTL的FPGA開發(fā)
    • 機械臂控制器的開發(fā)過程
    • 踩坑總結(jié)
    • 小結(jié)
  • 相關(guān)推薦
申請入駐 產(chǎn)業(yè)圖譜

用軟件開發(fā)FPGA:機械臂設(shè)計保姆級教程

2022/12/15
2616
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

去年這個時候發(fā)過一篇文章《我在隔離酒店,做了一個AI視覺加速器》,介紹了如何在半個小時之內(nèi)用FPGA開發(fā)一個AI視覺加速器,而且完全用軟件庫搭建,不用寫一行RTL代碼。之所以能這么方便,就是因為當(dāng)時用的是名叫KRIA SOM的開發(fā)套件,支持用Python進行純軟件的FPGA開發(fā)。

如今一年過去了,KRIA系列今年又推出了一個新的入門套件,名叫KR260。細心的朋友可能發(fā)現(xiàn)了,和之前的KV260只有一字之差。之前的V代表的是Vision、視覺,而這里R指的就是機器人 Robotics。

很高興這次也第一時間收到了AMD 賽靈思寄來的KR260,據(jù)說我們也是全國最早拿到這個板卡的。在今天的文章里,我會帶大家來一起近距離感受一下這個板卡的細節(jié)、特點和優(yōu)勢。

但和之前有那么億點點不同的是,我們并沒有簡單運行一下賽靈思的實例程序就完事兒了,而是花了幾個星期的時間,真正用這個板卡開發(fā)了一個機械臂控制器。

完成功能還是其次,真正的目的是更好的感受一下這種新型開發(fā)方式到底有多便捷。順便帶大家一起來看下,一個完整的項目開發(fā)周期都需要經(jīng)歷哪些階段,我們踩了哪些坑,如何解決的問題,都會給大家一一呈現(xiàn)。這個項目的源代碼和文檔,也都會進行開源,鏈接在文末,希望能幫到更多感興趣的朋友。

在開發(fā)過程中我們一直在嘗試回答的一個問題,就是這種基于軟件開發(fā)的新型FPGA開發(fā)方法,是否會成為未來的主流?折騰完我們的答案是:

很有可能,但前面的路可能還很長。

KR260,到底是什么?

KR260的全稱,是Kria KR260開發(fā)套件。其中Kria是整個產(chǎn)品系列的名字。前面說過,KR260的R,指的就是機器人。也就是說,這個板卡就是為了機器人的相關(guān)應(yīng)用而特別設(shè)計的,比如這篇文章介紹的機械臂的控制開發(fā)。事實上,除了機器人應(yīng)用之外,KR260還能用于工業(yè)控制、通信,在板卡上還有攝像頭接口,所以也可以用來做工業(yè)視覺的應(yīng)用。

接下來我們就看下KR260這個開發(fā)板它最大的特點,就是采用了SoM - System on Module的形式。也就是說它其實是有兩塊板卡,上面帶風(fēng)扇的部分就是FPGA卡本身,里面裝著一個定制版的SoC芯片,而下面的這個部分就是母板,叫做base board或者carrier board。母板上包含了各種接口,最明顯的就是這4個RJ45以太網(wǎng)端口,以及一個SFP+10G光口,這些都是為了做工業(yè)通信的;此外還有4個USB3.0,主要設(shè)計用來做為多個攝像頭的接口。

這種使用兩種板卡的SoM模式,本質(zhì)就是一種模塊化的設(shè)計方法。我們可以分別設(shè)計這些核心板和母板,來滿足不同應(yīng)用場景的需要。

比如在一個設(shè)計的開發(fā)階段,我們肯定需要一個有著很多接口和調(diào)試功能的開發(fā)板,這樣就可以把母板上的IO接口做多一些、調(diào)試手段做豐富一些,方便我們的開發(fā)。當(dāng)開發(fā)調(diào)試結(jié)束、需要實際應(yīng)用和部署的時候,可能就不需要這些額外的調(diào)試接口和IO了,留著它們反而會成為方便別人入侵的安全隱患。在這種情況下,就可以在母板上保留必要功能,而FPGA的部分保持不變,這樣能快速組成一個可以部署的產(chǎn)品化系統(tǒng)。

同理,當(dāng)FPGA芯片更新?lián)Q代的時候,我們其實也可以保持母板不變,只需要更換上面的FPGA核心板就可以了。特別是可以復(fù)用很多母板上的資源,項目文件很多也不需要大修和重寫,非常方便。

具體到這個KR260,它的FPGA核心板其實是一個Zynq UltraScale+ FPGA芯片。這是一個16納米的器件,包含4核ARM Cortex-A53處理器,以及圍繞它搭建的一系列SoC子系統(tǒng),包括嵌入式的GPU、內(nèi)存控制器,還有各種IO和總線控制單元等等。可編程邏輯部分,包含25.6萬個可編程邏輯單元,144個BRAM、64個URAM,這些都是片上的存儲單元,此外還有1200多個DSP。

母板的部分前面說過,有四個以太網(wǎng)、4個USB3.0,此外還有顯示接口、樹莓派接口等等,能很大程度滿足開發(fā)的需求。

不過我覺得,Kria系列的最大特點,除了這種模塊化的板卡設(shè)計之外,更多的是它的開發(fā)方法。

不寫RTL的FPGA開發(fā)

玩過FPGA的朋友應(yīng)該都知道,F(xiàn)PGA開發(fā)起來非常麻煩,特別是和基于CPU或者GPU的這些軟件開發(fā)相比。比如我們要玩Raspberry Pi,直接接上電源連上外設(shè),然后開始寫python去開發(fā)就好了。

相比之下,F(xiàn)PGA完全是兩個概念,傳統(tǒng)的開發(fā)方法要用特別的硬件設(shè)計語言Verilog、VHDL或者SystemVerilog,以及相應(yīng)的仿真和測試的方法,這個學(xué)起來就很麻煩了;此外還要用特別的開發(fā)軟件,比如賽靈思的Vivado或者Vitis,這個也需要大量的學(xué)習(xí)成本。

不僅如此,F(xiàn)PGA的編譯和調(diào)試時間很長,一個普通大小的工業(yè)級FPGA設(shè)計,編譯時間通常也需要幾個小時之久,這就勸退了很多開發(fā)者和應(yīng)用廠商。

所以FPGA一直是很多開發(fā)者又愛又恨的存在,一方面FPGA有各種的好處,比如可以用來做并行計算和硬件加速,同時功耗又很低;但另一方面,F(xiàn)PGA的學(xué)習(xí)和開發(fā)方法非常的復(fù)雜和繁瑣,這個也是制約FPGA大規(guī)模發(fā)展的最主要因素。

但是,包括KR260在內(nèi)的Kria系列FPGA的開發(fā)方法就有很大不同,我們不需要Vitis、不需要使用RTL語言,而是通過Python語言進行開發(fā),就能很快跑起來一個應(yīng)用。對于KR260來說,它還有一個重要的特性,就是能支持運行機器人操作系統(tǒng)ROS2。它雖然名字里有「操作系統(tǒng)」,但其實并不是像windows、linux那樣的操作系統(tǒng),它更多的是一個中間件和編程框架,包含了一整套開源的軟件庫和工具,專門用來做機器人編程。

ROS的作用是抽象機器人控制和傳感器驅(qū)動的過程,讓不同協(xié)議的器件之間能夠互相通信。起到了一個總線的作用,不需要交互協(xié)議,所有的控制用Python,C++這些高層語言完成就可以了。所以通過支持ROS,就能進一步提升KR260的易用性和它的開發(fā)效率。

接下來我們就一起來看一下,如何使用KR260開發(fā)一個機械臂控制系統(tǒng)。

機械臂控制器的開發(fā)過程

去年我們玩KV260的時候用的是賽靈思的官方示例,在很短時間之內(nèi)就完成了一個視覺加速器的開發(fā)。那么這次用KR260,我們挑戰(zhàn)了一下更高難度,想嘗試一下實際開發(fā)起來是一種怎樣的體驗,也想體驗一下ROS系統(tǒng)的使用,以及這種開發(fā)方式帶來的好處。

機械臂的控制,是機器人領(lǐng)域的主要應(yīng)用之一。我們要實現(xiàn)的功能其實并不是特別復(fù)雜,就是通過攝像頭定位不同顏色的小方塊,然后通過機械臂對小方塊進行抓取和分類放置。

我們用的都是現(xiàn)成的機械臂硬件,和稚暉君大佬自研一切肯定沒法比。我們這次開發(fā)的主要目的,其實就是評估KR260和ROS系統(tǒng)的易用性,看看它是不是真的像賽靈思宣傳里說的那么好用。

確定功能之后,就是梳理出具體的開發(fā)步驟,主要分以下這么幾步:

第一步,配置KR260的Ubuntu環(huán)境。我們接下來所有的開發(fā),都要基于Ubuntu操作系統(tǒng),所以這一步是基礎(chǔ)。具體做法可以參考賽靈思給出的一些步驟,鏈接我都整合在開發(fā)文檔里,點擊文末「閱讀全文」就可以看到。不過需要注意的是,這里需要選擇支持KR260的Ubuntu版本,不能隨便下。這個要到賽靈思的官網(wǎng),找到Ubuntu Desktop22.04 LTS的映像,確保它支持KR260,然后下載,并且燒錄到SD卡里。

燒錄好SD卡之后,就是把線纜插到KR260上,注意以太網(wǎng)口不要插錯,也插上SD卡,連接鍵盤鼠標(biāo),上電啟動Ubuntu。這一步的最后,就是為Ubuntu LTS設(shè)置一下賽靈思的開發(fā)環(huán)境,用這里的幾個命令就可以了。

sudo snap install xlnx-config --classic --channel=2.x

xlnx-config.sysinit

第二步,配置KR260的ROS2環(huán)境。對于KR260+Ubuntu22.04這樣的環(huán)境來說,目前只有ROS2 Humble Hawksbill這個版本。在安裝之前,需要先安裝一系列的依賴、配置源、然后再下載ROS包進行安裝。這部分內(nèi)容我就快進了,所有的命令代碼和文檔都是開源的,有條件的小伙伴可以試試看。安裝好之后可以做一些簡單的信息收發(fā)的測試,沒問題的話就證明ROS2已經(jīng)正常運行在KR260上了。

第三步,在KR260上安裝jupyter lab方便調(diào)試。先下載依賴、配置一下遠程登錄,然后重啟一下就好了。

第四步,搭建機械臂的硬件結(jié)構(gòu)。這一步其實獨立于FPGA開發(fā),我們用的是現(xiàn)成的機械臂硬件,主要涉及一些組裝和調(diào)試的工作。某寶上其實有很多機械臂開發(fā)件在賣,但是大家在買的時候一定要注意,問清楚控制接口到底是什么協(xié)議。這里我們踩了一個大坑,后面會介紹。

第五步,就是開發(fā)實際的功能了。功能主要包含兩塊,一塊是對機械臂動作的控制,一塊是通過攝像頭進行物體和顏色的識別。對于機械臂動作的控制,是通過動作組來實現(xiàn)的,每個動作組包含初始化、復(fù)位、抓取、轉(zhuǎn)移、放置,這五個基本的行為。

每個行為的本質(zhì)其實就是對機械臂里對應(yīng)的舵機進行控制,比如控制舵機旋轉(zhuǎn)的角度和方向等等,這些都可以通過Python來進行精確的編程控制。由于我們支持多種顏色的物體在多個區(qū)域的抓取和放置,因此而每個行為又包含很多個動作。比如同樣的一個抓取的動作,在不同區(qū)域就需要控制舵機轉(zhuǎn)動的次數(shù)、角度和順序,這些就組成了一個動作組。

我們把每個動作都做成一個函數(shù),然后通過不同函數(shù)的組合調(diào)用,又組成更高層的函數(shù),來完成不同的行為。這樣一級一級下來,呈現(xiàn)給最上層用戶的,就是幾個可以調(diào)用的函數(shù)接口。當(dāng)然最后這些都會用ROS集成起來。

攝像頭識別的部分,使用OpenCV來實現(xiàn)。主要的工作有兩個部分,分別是顏色識別、以及物體中心坐標(biāo)定位。每部分的具體操作在下圖中所示:

別著急,還有第六步,也就是最后一步,就是把這些分立的功能通過ROS連接起來。相當(dāng)于前一步我們做的都是一個個磚塊,現(xiàn)在可以把磚砌成房子了。除了識別算法和控制算法,ROS還可以直接驅(qū)動攝像頭,并且通過CV bridge把攝像頭的圖像傳遞給識別算法。識別出物體的輪廓和坐標(biāo)之后,自動判斷下一步要執(zhí)行的動作,然后在ROS里發(fā)送給機械臂完成執(zhí)行。

踩坑總結(jié)

開發(fā)過程肯定不是一帆風(fēng)順的,一些搭環(huán)境裝軟件的小問題就不說了,我們在開發(fā)過程中遇到的最大問題,其實是KR260目前存在的一些限制。

一開始我們想用一個性能更好、功能更強的機械臂,買好了抱回來之后發(fā)現(xiàn),那個機械臂的控制端口用的是I2C總線。根據(jù)KR260目前板卡的設(shè)計和引腳分配我們發(fā)現(xiàn),必須要把這個I2C總線連到KR260的FPGA端。但是問題就來了,目前賽靈思提供的Ubuntu系統(tǒng)還不能訪問FPGA PL端的新增AXI 設(shè)備,需要修改Ubuntu系統(tǒng)。

然后很自然的就想試試其他操作系統(tǒng),比如我們試過Petalinux,并且成功修改了設(shè)備樹,實現(xiàn)和I2C的通信,但是問題又來了,Petalinux不支持ROS,也沒辦法下載大部分依賴的安裝包和支持庫。我們試用KR260就是為了體驗ROS開發(fā)來的,所以這條路也走不通了。

所以最后的方案,就是選了另外一個支持USB串口驅(qū)動的機械臂,并且直接在Ubuntu+ROS的環(huán)境下完成了前面的開發(fā)。

事實上,這并不是什么bug,而是一些相關(guān)的功能和支持還沒完全開放。比如說不定過一段時間賽靈思就更新了Ubuntu版本,添加了對FPGA PL端IO資源的訪問支持。也就是說,可以直接從FPGA的可編程硬件部分訪問各種外設(shè),這樣肯定就方便更多了。

除此之外,一些其他的踩坑總結(jié)以及解決方案,也以文檔的形式列出來了,感興趣的朋友可以查看我們的Github鏈接:

https://github.com/shilicon/kr260_robotic_arm

小結(jié)

今天這篇文章,帶大家一起看了一下賽靈思最新的Kria KR260機器人開發(fā)套件的開發(fā)全過程。在這個過程中,可以不接觸到FPGA的底層硬件內(nèi)容。如果你是個軟件開發(fā)者,可以利用這個平臺直接進行上層機器人相關(guān)軟件和算法的開發(fā)和加速,這個就大大降低了使用FPGA的門檻。這個過程也很有趣,同時也能慢慢接觸到軟硬件協(xié)同開發(fā)的知識細節(jié),并且鍛煉這方面的技能。

關(guān)于Kria KR260的學(xué)習(xí)資料,還有這個基于KR260的機械臂控制項目的具體細節(jié)、步驟和代碼,我們都總結(jié)成了詳細的文檔,獲取方式在置頂評論里,想要學(xué)習(xí)和上手的朋友可以從這里開始。也歡迎點擊文末「閱讀原文」做一個小調(diào)查,有任何反饋也歡迎留言告訴我,祝玩的順利!

(注:本文不代表老石工作單位之觀點)

相關(guān)推薦

登錄即可解鎖
  • 海量技術(shù)文章
  • 設(shè)計資源下載
  • 產(chǎn)業(yè)鏈客戶資源
  • 寫文章/發(fā)需求
立即登錄

微信公眾號“老石談芯”主理人,博士畢業(yè)于倫敦帝國理工大學(xué)電子工程系,現(xiàn)任某知名半導(dǎo)體公司高級FPGA研發(fā)工程師,從事基于FPGA的數(shù)據(jù)中心網(wǎng)絡(luò)加速、網(wǎng)絡(luò)功能虛擬化、高速有線網(wǎng)絡(luò)通信等領(lǐng)域的研發(fā)和創(chuàng)新工作。曾經(jīng)針對FPGA、高性能與可重構(gòu)計算等技術(shù)在學(xué)術(shù)界頂級會議和期刊上發(fā)表過多篇研究論文。