去年這個(gè)時(shí)候發(fā)過一篇文章《我在隔離酒店,做了一個(gè)AI視覺加速器》,介紹了如何在半個(gè)小時(shí)之內(nèi)用FPGA開發(fā)一個(gè)AI視覺加速器,而且完全用軟件庫搭建,不用寫一行RTL代碼。之所以能這么方便,就是因?yàn)楫?dāng)時(shí)用的是名叫KRIA SOM的開發(fā)套件,支持用Python進(jìn)行純軟件的FPGA開發(fā)。
如今一年過去了,KRIA系列今年又推出了一個(gè)新的入門套件,名叫KR260。細(xì)心的朋友可能發(fā)現(xiàn)了,和之前的KV260只有一字之差。之前的V代表的是Vision、視覺,而這里R指的就是機(jī)器人 Robotics。
很高興這次也第一時(shí)間收到了AMD 賽靈思寄來的KR260,據(jù)說我們也是全國最早拿到這個(gè)板卡的。在今天的文章里,我會(huì)帶大家來一起近距離感受一下這個(gè)板卡的細(xì)節(jié)、特點(diǎn)和優(yōu)勢。
但和之前有那么億點(diǎn)點(diǎn)不同的是,我們并沒有簡單運(yùn)行一下賽靈思的實(shí)例程序就完事兒了,而是花了幾個(gè)星期的時(shí)間,真正用這個(gè)板卡開發(fā)了一個(gè)機(jī)械臂控制器。
完成功能還是其次,真正的目的是更好的感受一下這種新型開發(fā)方式到底有多便捷。順便帶大家一起來看下,一個(gè)完整的項(xiàng)目開發(fā)周期都需要經(jīng)歷哪些階段,我們踩了哪些坑,如何解決的問題,都會(huì)給大家一一呈現(xiàn)。這個(gè)項(xiàng)目的源代碼和文檔,也都會(huì)進(jìn)行開源,鏈接在文末,希望能幫到更多感興趣的朋友。
在開發(fā)過程中我們一直在嘗試回答的一個(gè)問題,就是這種基于軟件開發(fā)的新型FPGA開發(fā)方法,是否會(huì)成為未來的主流?折騰完我們的答案是:
很有可能,但前面的路可能還很長。
KR260,到底是什么?
KR260的全稱,是Kria KR260開發(fā)套件。其中Kria是整個(gè)產(chǎn)品系列的名字。前面說過,KR260的R,指的就是機(jī)器人。也就是說,這個(gè)板卡就是為了機(jī)器人的相關(guān)應(yīng)用而特別設(shè)計(jì)的,比如這篇文章介紹的機(jī)械臂的控制開發(fā)。事實(shí)上,除了機(jī)器人應(yīng)用之外,KR260還能用于工業(yè)控制、通信,在板卡上還有攝像頭接口,所以也可以用來做工業(yè)視覺的應(yīng)用。
接下來我們就看下KR260這個(gè)開發(fā)板。它最大的特點(diǎn),就是采用了SoM - System on Module的形式。也就是說它其實(shí)是有兩塊板卡,上面帶風(fēng)扇的部分就是FPGA卡本身,里面裝著一個(gè)定制版的SoC芯片,而下面的這個(gè)部分就是母板,叫做base board或者carrier board。母板上包含了各種接口,最明顯的就是這4個(gè)RJ45以太網(wǎng)端口,以及一個(gè)SFP+10G光口,這些都是為了做工業(yè)通信的;此外還有4個(gè)USB3.0,主要設(shè)計(jì)用來做為多個(gè)攝像頭的接口。
這種使用兩種板卡的SoM模式,本質(zhì)就是一種模塊化的設(shè)計(jì)方法。我們可以分別設(shè)計(jì)這些核心板和母板,來滿足不同應(yīng)用場景的需要。
比如在一個(gè)設(shè)計(jì)的開發(fā)階段,我們肯定需要一個(gè)有著很多接口和調(diào)試功能的開發(fā)板,這樣就可以把母板上的IO接口做多一些、調(diào)試手段做豐富一些,方便我們的開發(fā)。當(dāng)開發(fā)調(diào)試結(jié)束、需要實(shí)際應(yīng)用和部署的時(shí)候,可能就不需要這些額外的調(diào)試接口和IO了,留著它們反而會(huì)成為方便別人入侵的安全隱患。在這種情況下,就可以在母板上保留必要功能,而FPGA的部分保持不變,這樣能快速組成一個(gè)可以部署的產(chǎn)品化系統(tǒng)。
同理,當(dāng)FPGA芯片更新?lián)Q代的時(shí)候,我們其實(shí)也可以保持母板不變,只需要更換上面的FPGA核心板就可以了。特別是可以復(fù)用很多母板上的資源,項(xiàng)目文件很多也不需要大修和重寫,非常方便。
具體到這個(gè)KR260,它的FPGA核心板其實(shí)是一個(gè)Zynq UltraScale+ FPGA芯片。這是一個(gè)16納米的器件,包含4核ARM Cortex-A53處理器,以及圍繞它搭建的一系列SoC子系統(tǒng),包括嵌入式的GPU、內(nèi)存控制器,還有各種IO和總線控制單元等等???a target="_blank">編程邏輯部分,包含25.6萬個(gè)可編程邏輯單元,144個(gè)BRAM、64個(gè)URAM,這些都是片上的存儲(chǔ)單元,此外還有1200多個(gè)DSP。
母板的部分前面說過,有四個(gè)以太網(wǎng)、4個(gè)USB3.0,此外還有顯示接口、樹莓派接口等等,能很大程度滿足開發(fā)的需求。
不過我覺得,Kria系列的最大特點(diǎn),除了這種模塊化的板卡設(shè)計(jì)之外,更多的是它的開發(fā)方法。
不寫RTL的FPGA開發(fā)
玩過FPGA的朋友應(yīng)該都知道,F(xiàn)PGA開發(fā)起來非常麻煩,特別是和基于CPU或者GPU的這些軟件開發(fā)相比。比如我們要玩Raspberry Pi,直接接上電源連上外設(shè),然后開始寫python去開發(fā)就好了。
相比之下,F(xiàn)PGA完全是兩個(gè)概念,傳統(tǒng)的開發(fā)方法要用特別的硬件設(shè)計(jì)語言Verilog、VHDL或者SystemVerilog,以及相應(yīng)的仿真和測試的方法,這個(gè)學(xué)起來就很麻煩了;此外還要用特別的開發(fā)軟件,比如賽靈思的Vivado或者Vitis,這個(gè)也需要大量的學(xué)習(xí)成本。
不僅如此,F(xiàn)PGA的編譯和調(diào)試時(shí)間很長,一個(gè)普通大小的工業(yè)級(jí)FPGA設(shè)計(jì),編譯時(shí)間通常也需要幾個(gè)小時(shí)之久,這就勸退了很多開發(fā)者和應(yīng)用廠商。
所以FPGA一直是很多開發(fā)者又愛又恨的存在,一方面FPGA有各種的好處,比如可以用來做并行計(jì)算和硬件加速,同時(shí)功耗又很低;但另一方面,F(xiàn)PGA的學(xué)習(xí)和開發(fā)方法非常的復(fù)雜和繁瑣,這個(gè)也是制約FPGA大規(guī)模發(fā)展的最主要因素。
但是,包括KR260在內(nèi)的Kria系列FPGA的開發(fā)方法就有很大不同,我們不需要Vitis、不需要使用RTL語言,而是通過Python語言進(jìn)行開發(fā),就能很快跑起來一個(gè)應(yīng)用。對(duì)于KR260來說,它還有一個(gè)重要的特性,就是能支持運(yùn)行機(jī)器人操作系統(tǒng)ROS2。它雖然名字里有「操作系統(tǒng)」,但其實(shí)并不是像windows、linux那樣的操作系統(tǒng),它更多的是一個(gè)中間件和編程框架,包含了一整套開源的軟件庫和工具,專門用來做機(jī)器人編程。
ROS的作用是抽象機(jī)器人控制和傳感器驅(qū)動(dòng)的過程,讓不同協(xié)議的器件之間能夠互相通信。起到了一個(gè)總線的作用,不需要交互協(xié)議,所有的控制用Python,C++這些高層語言完成就可以了。所以通過支持ROS,就能進(jìn)一步提升KR260的易用性和它的開發(fā)效率。
接下來我們就一起來看一下,如何使用KR260開發(fā)一個(gè)機(jī)械臂控制系統(tǒng)。
機(jī)械臂控制器的開發(fā)過程
去年我們玩KV260的時(shí)候用的是賽靈思的官方示例,在很短時(shí)間之內(nèi)就完成了一個(gè)視覺加速器的開發(fā)。那么這次用KR260,我們挑戰(zhàn)了一下更高難度,想嘗試一下實(shí)際開發(fā)起來是一種怎樣的體驗(yàn),也想體驗(yàn)一下ROS系統(tǒng)的使用,以及這種開發(fā)方式帶來的好處。
機(jī)械臂的控制,是機(jī)器人領(lǐng)域的主要應(yīng)用之一。我們要實(shí)現(xiàn)的功能其實(shí)并不是特別復(fù)雜,就是通過攝像頭定位不同顏色的小方塊,然后通過機(jī)械臂對(duì)小方塊進(jìn)行抓取和分類放置。
我們用的都是現(xiàn)成的機(jī)械臂硬件,和稚暉君大佬自研一切肯定沒法比。我們這次開發(fā)的主要目的,其實(shí)就是評(píng)估KR260和ROS系統(tǒng)的易用性,看看它是不是真的像賽靈思宣傳里說的那么好用。
確定功能之后,就是梳理出具體的開發(fā)步驟,主要分以下這么幾步:
第一步,配置KR260的Ubuntu環(huán)境。我們接下來所有的開發(fā),都要基于Ubuntu操作系統(tǒng),所以這一步是基礎(chǔ)。具體做法可以參考賽靈思給出的一些步驟,鏈接我都整合在開發(fā)文檔里,點(diǎn)擊文末「閱讀全文」就可以看到。不過需要注意的是,這里需要選擇支持KR260的Ubuntu版本,不能隨便下。這個(gè)要到賽靈思的官網(wǎng),找到Ubuntu Desktop22.04 LTS的映像,確保它支持KR260,然后下載,并且燒錄到SD卡里。
燒錄好SD卡之后,就是把線纜插到KR260上,注意以太網(wǎng)口不要插錯(cuò),也插上SD卡,連接鍵盤鼠標(biāo),上電啟動(dòng)Ubuntu。這一步的最后,就是為Ubuntu LTS設(shè)置一下賽靈思的開發(fā)環(huán)境,用這里的幾個(gè)命令就可以了。
sudo snap install xlnx-config --classic --channel=2.x
xlnx-config.sysinit
第二步,配置KR260的ROS2環(huán)境。對(duì)于KR260+Ubuntu22.04這樣的環(huán)境來說,目前只有ROS2 Humble Hawksbill這個(gè)版本。在安裝之前,需要先安裝一系列的依賴、配置源、然后再下載ROS包進(jìn)行安裝。這部分內(nèi)容我就快進(jìn)了,所有的命令代碼和文檔都是開源的,有條件的小伙伴可以試試看。安裝好之后可以做一些簡單的信息收發(fā)的測試,沒問題的話就證明ROS2已經(jīng)正常運(yùn)行在KR260上了。
第三步,在KR260上安裝jupyter lab方便調(diào)試。先下載依賴、配置一下遠(yuǎn)程登錄,然后重啟一下就好了。
第四步,搭建機(jī)械臂的硬件結(jié)構(gòu)。這一步其實(shí)獨(dú)立于FPGA開發(fā),我們用的是現(xiàn)成的機(jī)械臂硬件,主要涉及一些組裝和調(diào)試的工作。某寶上其實(shí)有很多機(jī)械臂開發(fā)件在賣,但是大家在買的時(shí)候一定要注意,問清楚控制接口到底是什么協(xié)議。這里我們踩了一個(gè)大坑,后面會(huì)介紹。
第五步,就是開發(fā)實(shí)際的功能了。功能主要包含兩塊,一塊是對(duì)機(jī)械臂動(dòng)作的控制,一塊是通過攝像頭進(jìn)行物體和顏色的識(shí)別。對(duì)于機(jī)械臂動(dòng)作的控制,是通過動(dòng)作組來實(shí)現(xiàn)的,每個(gè)動(dòng)作組包含初始化、復(fù)位、抓取、轉(zhuǎn)移、放置,這五個(gè)基本的行為。
每個(gè)行為的本質(zhì)其實(shí)就是對(duì)機(jī)械臂里對(duì)應(yīng)的舵機(jī)進(jìn)行控制,比如控制舵機(jī)旋轉(zhuǎn)的角度和方向等等,這些都可以通過Python來進(jìn)行精確的編程控制。由于我們支持多種顏色的物體在多個(gè)區(qū)域的抓取和放置,因此而每個(gè)行為又包含很多個(gè)動(dòng)作。比如同樣的一個(gè)抓取的動(dòng)作,在不同區(qū)域就需要控制舵機(jī)轉(zhuǎn)動(dòng)的次數(shù)、角度和順序,這些就組成了一個(gè)動(dòng)作組。
我們把每個(gè)動(dòng)作都做成一個(gè)函數(shù),然后通過不同函數(shù)的組合調(diào)用,又組成更高層的函數(shù),來完成不同的行為。這樣一級(jí)一級(jí)下來,呈現(xiàn)給最上層用戶的,就是幾個(gè)可以調(diào)用的函數(shù)接口。當(dāng)然最后這些都會(huì)用ROS集成起來。
攝像頭識(shí)別的部分,使用OpenCV來實(shí)現(xiàn)。主要的工作有兩個(gè)部分,分別是顏色識(shí)別、以及物體中心坐標(biāo)定位。每部分的具體操作在下圖中所示:
別著急,還有第六步,也就是最后一步,就是把這些分立的功能通過ROS連接起來。相當(dāng)于前一步我們做的都是一個(gè)個(gè)磚塊,現(xiàn)在可以把磚砌成房子了。除了識(shí)別算法和控制算法,ROS還可以直接驅(qū)動(dòng)攝像頭,并且通過CV bridge把攝像頭的圖像傳遞給識(shí)別算法。識(shí)別出物體的輪廓和坐標(biāo)之后,自動(dòng)判斷下一步要執(zhí)行的動(dòng)作,然后在ROS里發(fā)送給機(jī)械臂完成執(zhí)行。
踩坑總結(jié)
開發(fā)過程肯定不是一帆風(fēng)順的,一些搭環(huán)境裝軟件的小問題就不說了,我們在開發(fā)過程中遇到的最大問題,其實(shí)是KR260目前存在的一些限制。
一開始我們想用一個(gè)性能更好、功能更強(qiáng)的機(jī)械臂,買好了抱回來之后發(fā)現(xiàn),那個(gè)機(jī)械臂的控制端口用的是I2C總線。根據(jù)KR260目前板卡的設(shè)計(jì)和引腳分配我們發(fā)現(xiàn),必須要把這個(gè)I2C總線連到KR260的FPGA端。但是問題就來了,目前賽靈思提供的Ubuntu系統(tǒng)還不能訪問FPGA PL端的新增AXI 設(shè)備,需要修改Ubuntu系統(tǒng)。
然后很自然的就想試試其他操作系統(tǒng),比如我們試過Petalinux,并且成功修改了設(shè)備樹,實(shí)現(xiàn)和I2C的通信,但是問題又來了,Petalinux不支持ROS,也沒辦法下載大部分依賴的安裝包和支持庫。我們試用KR260就是為了體驗(yàn)ROS開發(fā)來的,所以這條路也走不通了。
所以最后的方案,就是選了另外一個(gè)支持USB串口驅(qū)動(dòng)的機(jī)械臂,并且直接在Ubuntu+ROS的環(huán)境下完成了前面的開發(fā)。
事實(shí)上,這并不是什么bug,而是一些相關(guān)的功能和支持還沒完全開放。比如說不定過一段時(shí)間賽靈思就更新了Ubuntu版本,添加了對(duì)FPGA PL端IO資源的訪問支持。也就是說,可以直接從FPGA的可編程硬件部分訪問各種外設(shè),這樣肯定就方便更多了。
除此之外,一些其他的踩坑總結(jié)以及解決方案,也以文檔的形式列出來了,感興趣的朋友可以查看我們的Github鏈接:
https://github.com/shilicon/kr260_robotic_arm
小結(jié)
今天這篇文章,帶大家一起看了一下賽靈思最新的Kria KR260機(jī)器人開發(fā)套件的開發(fā)全過程。在這個(gè)過程中,可以不接觸到FPGA的底層硬件內(nèi)容。如果你是個(gè)軟件開發(fā)者,可以利用這個(gè)平臺(tái)直接進(jìn)行上層機(jī)器人相關(guān)軟件和算法的開發(fā)和加速,這個(gè)就大大降低了使用FPGA的門檻。這個(gè)過程也很有趣,同時(shí)也能慢慢接觸到軟硬件協(xié)同開發(fā)的知識(shí)細(xì)節(jié),并且鍛煉這方面的技能。
關(guān)于Kria KR260的學(xué)習(xí)資料,還有這個(gè)基于KR260的機(jī)械臂控制項(xiàng)目的具體細(xì)節(jié)、步驟和代碼,我們都總結(jié)成了詳細(xì)的文檔,獲取方式在置頂評(píng)論里,想要學(xué)習(xí)和上手的朋友可以從這里開始。也歡迎點(diǎn)擊文末「閱讀原文」做一個(gè)小調(diào)查,有任何反饋也歡迎留言告訴我,祝玩的順利!
審核編輯:湯梓紅
-
FPGA
+關(guān)注
關(guān)注
1629文章
21729瀏覽量
602978 -
amd
+關(guān)注
關(guān)注
25文章
5466瀏覽量
134087 -
機(jī)械臂
+關(guān)注
關(guān)注
12文章
513瀏覽量
24554
原文標(biāo)題:用軟件開發(fā)FPGA:機(jī)械臂設(shè)計(jì)保姆級(jí)教程
文章出處:【微信號(hào):賽靈思,微信公眾號(hào):Xilinx賽靈思官微】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論