用FPGA開發一個機械臂控制器,到底有多簡單?
去年我們玩KV260的時候用的是官方示例,在很I2C短時間之內就完成了一個視覺加速器的開發。那麼這次用KR260,我們挑戰了一下更高難度,想嘗試一下實際開發起來是一種怎樣的體驗,也想體驗一下ROS系統的使用,以及這種開發方式帶來的好處。

去年這個時候發過一篇文章《我在隔離酒店,做了一個AI視覺加速器》,介紹了如何在半個小時之內用FPGA開發一個AI視覺加速器,而且完全用軟體庫搭建,不用寫一行RTL代碼。之所以能這麼方便,就是因為當時用的是名叫KRIA SOM的開發套件,支援用Python進行純軟體的FPGA開發。
如今一年過去了,KRIA系列今年又推出了一個新的入門套件,名叫KR260。細心的朋友可能發現了,和之前的KV260只有一字之差。之前的V代表的是Vision、視覺,而這裡R指的就是機器人Robotics。
很高興這次也第一時間收到了AMD賽靈思(Xilinx)寄來的KR260。在今天的文章裡,我會帶大家來一起近距離感受一下這個板卡的細節、特點和優勢。
但和之前有那麼一點點不同的是,我們並沒有簡單運行一下賽靈思的實例程式就完事兒了,而是花了幾個星期的時間,真正用這個板卡開發了一個機械臂控制器。完成功能還是其次,真正的目的是更好的感受一下這種新型開發方式到底有多便捷。順便帶大家一起來看下,一個完整的專案開發週期都需要經歷哪些階段,我們踩了哪些坑,如何解決的問題,都會給大家一一呈現。這個專案的原始程式碼和文檔,也都會進行開源,希望能幫到更多感興趣的朋友。
在開發過程中我們一直在嘗試回答的一個問題,就是這種基於軟體發展的新型FPGA開發方法,是否會成為未來的主流?折騰完我們的答案是:很有可能,但前面的路可能還很長。
KR260,到底是什麼?
KR260的全稱,是Kria KR260開發套件。其中Kria是整個產品系列的名字。前面說過,KR260的R,指的就是機器人。也就是說,這個板卡就是為了機器人的相關應用而特別設計的,比如這篇文章介紹的機械臂的控制開發。事實上,除了機器人應用之外,KR260還能用於工業控制、通訊,在板卡上還有攝影機介面,所以也可以用來做工業視覺的應用。
接下來我們就看下KR260這個開發板。它最大的特點,就是採用了SoM——System on Module的形式。也就是說它其實是有兩塊板卡,上面帶風扇的部分就是FPGA卡本身,裡面裝著一個定製版的SoC晶片,而下面的這個部分就是主機板,叫做base board或者carrier board。主機板上包含了各種介面,最明顯的就是這4個RJ45乙太網路埠,以及一個SFP+10G光口,這些都是為了做工業通訊的;此外還有4個USB 3.0,主要設計用來做為多個攝影機的介面。
這種使用兩種板卡的SoM模式,本質就是一種模組化的設計方法。我們可以分別設計這些核心板和主機板,來滿足不同應用場景的需要。
比如在一個設計的開發階段,我們肯定需要一個有著很多介面和除錯功能的開發板,這樣就可以把主機板上的IO介面做多一些、除錯手段做豐富一些,方便我們的開發。當開發除錯結束、需要實際應用和部署的時候,可能就不需要這些額外的除錯介面和IO了,留著它們反而會成為方便別人入侵的安全隱患。在這種情況下,就可以在主機板上保留必要功能,而FPGA的部分保持不變,這樣能快速組成一個可以部署的產品化系統。
同理,當FPGA晶片更新換代的時候,我們其實也可以保持主機板不變,只需要更換上面的FPGA核心板就可以了。特別是可以重複使用很多重母片上的資源,專案檔案很多也不需要大修和重寫,非常方便。
具體到這個KR260,它的FPGA核心板其實是一個Zynq UltraScale+ FPGA晶片。這是一個16奈米的元件,包含4核心ARM Cortex-A53處理器,以及圍繞它搭建的一系列SoC子系統,包括嵌入式的GPU、記憶體控制器,還有各種IO和匯流排控制單元等等。可程式設計邏輯部分,包含25.6萬個可程式設計邏輯單元,144個BRAM、64個URAM,這些都是片上的儲存單元,此外還有1,200多個DSP。
主機板的部分前面說過,有四個乙太網路、4個USB 3.0,此外還有顯示介面、樹莓派介面等等,能很大程度滿足開發的需求。
不過我覺得,Kria系列的最大特點,除了這種模組化的板卡設計之外,更多的是它的開發方法。
不寫RTL的FPGA開發
玩過FPGA的朋友應該都知道,FPGA開發起來非常麻煩,特別是和基於CPU或者GPU的這些軟體發展相比。比如我們要玩Raspberry Pi,直接接上電源連上周邊,然後開始寫python去開發就好了。
相比之下,FPGA完全是兩個概念,傳統的開發方法要用特別的硬體設計語言Verilog、VHDL或者SystemVerilog,以及相應的模擬和測試的方法,這個學起來就很麻煩了;此外還要用特別的開發軟體,比如賽靈思的Vivado或者Vitis,這個也需要大量的學習成本。
不僅如此,FPGA的編譯和除錯時間很長,一個普通大小的工業級FPGA設計,編譯時間通常也需要幾個小時之久,這就勸退了很多開發者和應用廠商。
所以FPGA一直是很多開發者又愛又恨的存在,一方面FPGA有各種的好處,比如可以用來做平行運算和硬體加速,同時功耗又很低;但另一方面,FPGA的學習和開發方法非常的複雜和繁瑣,這個也是制約FPGA大規模發展的最主要因素。
但是,包括KR260在內的Kria系列FPGA的開發方法就有很大不同,我們不需要Vitis、不需要使用RTL語言,而是透過Python語言進行開發,就能很快跑起來一個應用。對於KR260來說,它還有一個重要的特性,就是能支援運行機器人作業系統ROS2。它雖然名字裡有「作業系統」,但其實並不是像Windows、Linux那樣的作業系統,它更多的是一個中介軟體和程式設計框架,包含了一整套開源的軟體庫和工具,專門用來做機器人程式設計。ROS的作用是抽象機器人控制和感測器驅動的過程,讓不同協議的元件之間能夠互相通訊。發揮一個匯流排的作用,不需要交互協定,所有的控制用Python,C++這些高層語言完成就可以了。所以透過支持ROS,就能進一步提升KR260的易用性和它的開發效率。
接下來我們就一起來看一下,如何使用KR260開發一個機械臂控制系統。
機械臂控制器的開發過程
去年我們玩KV260的時候用的是賽靈思的官方示例,在很短時間之內就完成了一個視覺加速器的開發。那麼這次用KR260,我們挑戰了一下更高難度,想嘗試一下實際開發起來是一種怎樣的體驗,也想體驗一下ROS系統的使用,以及這種開發方式帶來的好處。
機械臂的控制,是機器人領域的主要應用之一。我們要實現的功能其實並不是特別複雜,就是透過攝影機定位不同顏色的小方塊,然後利用機械臂對小方塊進行抓取和分類放置。我們用的都是現成的機械臂硬體,和稚暉君大佬自研一切肯定沒法比。我們這次開發的主要目的,其實就是評估KR260和ROS系統的易用性,看看它是不是真的像賽靈思宣傳裡說的那麼好用。
確定功能之後,就是梳理出具體的開發步驟,主要分以下這麼幾步:
第一步,配置KR260的Ubuntu環境。我們接下來所有的開發,都要基於Ubuntu作業系統,所以這一步是基礎。具體做法可以參考賽靈思提供的一些步驟,連結我都整合在開發文檔裡,點擊文末「閱讀全文」就可以看到。不過需要注意的是,這裡需要選擇支援KR260的Ubuntu版本,不能隨便下。這個要到賽靈思的官網,找到Ubuntu Desktop22.04 LTS的映射,確保它支持KR260,然後下載,並且燒錄到SD卡裡。
燒錄好SD卡之後,就是把線纜插到KR260上,注意乙太網口不要插錯,也插上SD卡,連接鍵盤滑鼠,上電啟動Ubuntu。這一步的最後,就是為Ubuntu LTS設置一下賽靈思的開發環境,用這裡的幾個命令就可以了。
sudo snap install xlnx-config –classic –channel=2.x
xlnx-config.sysinit
第二步,配置KR260的ROS2環境。對於KR260+Ubuntu22.04這樣的環境來說,目前只有ROS2 Humble Hawksbill這個版本。在安裝之前,需要先安裝一系列的依賴、配置源、然後再下載ROS包進行安裝。這部分內容我就快進了,所有的命令代碼和文檔都是開源的,有條件的小夥伴可以試試看。安裝好之後可以做一些簡單的資訊收發的測試,沒問題的話就證明ROS2已經正常運行在KR260上了。
第三步,在KR260上安裝jupyter lab方便除錯。先下載依賴、配置一下遠端登入,然後重啟一下就好了。
第四步,搭建機械臂的硬體結構。這一步其實獨立於FPGA開發,我們用的是現成的機械臂硬體,主要涉及一些組裝和除錯的工作。某寶上其實有很多機械臂開發件在賣,但是大家在買的時候一定要注意,問清楚控制介面到底是什麼協定。這裡我們踩了一個大坑,後面會介紹。
第五步,就是開發實際的功能了。功能主要包含兩塊,一塊是對機械臂動作的控制,一塊是透過攝影機進行物體和顏色的識別。對於機械臂動作的控制,是利用動作組來實現,每個動作組包含初始化、復位、抓取、轉移、放置,這五個基本的行為。
每個行為的本質其實就是對機械臂裡對應的舵機進行控制,比如控制舵機旋轉的角度和方向等等,這些都可以利用Python來進行精確的程式設計控制。由於我們支援多種顏色的物體在多個區域的抓取和放置,因此而每個行為又包含很多個動作。比如同樣的一個抓取的動作,在不同區域就需要控制舵機轉動的次數、角度和順序,這些就組成了一個動作組。
我們把每個動作都做成一個函數,然後透過不同函數的組合調用,又組成更高層的函數,來完成不同的行為。這樣一級一級下來,呈現給最上層用戶的,就是幾個可以調用的函數介面。當然最後這些都會用ROS整合。
攝影機識別的部分,使用OpenCV來實現。主要的工作有兩個部分,分別是顏色識別、以及物體中心座標定位。每部分的具體操作在下圖中所示:
![]() |
![]() |
別著急,還有第六步,也就是最後一步,就是把這些離散的功能利用ROS連接起來。相當於前一步我們做的都是一個個磚塊,現在可以把磚砌成房子了。除了識別演算法和控制演算法,ROS還可以直接驅動攝影機,並且透過CV bridge把攝影機的影像傳遞給識別演算法。識別出物體的輪廓和座標之後,自動判斷下一步要執行的動作,然後在ROS裡發送給機械臂完成執行。
踩坑總結
開發過程肯定不是一帆風順的,一些搭環境裝軟體的小問題就不說了,我們在開發過程中遇到的最大問題,其實是KR260目前存在的一些限制。一開始我們想用一個性能更好、功能更強的機械臂,買好了抱回來之後發現,那個機械臂的控制埠用的是I2C匯流排。根據KR260目前板卡的設計和引腳分配,我們發現,必須要把這個I2C匯流排連到KR260的FPGA端。但是問題就來了,目前賽靈思提供的Ubuntu系統還不能訪問FPGA PL端的新增AXI設備,需要修改Ubuntu系統。
然後很自然的就想試試其他作業系統,例如我們試過Petalinux,並且成功修改了設備樹,實現和I2C的通訊,但是問題又來了,Petalinux不支持ROS,也沒辦法下載大部分依賴的安裝包和支援函式庫。我們試用KR260就是為了體驗ROS開發來的,所以這條路也走不通了。
所以最後的方案,就是選了另外一個支持USB接口驅動的機械臂,並且直接在Ubuntu + ROS的環境下完成了前面的開發。
事實上,這並不是什麼bug,而是一些相關的功能和支持還沒完全開放。比如說不定過一段時間賽靈思就更新了Ubuntu版本,添加了對FPGA PL端IO資源的訪問支援。也就是說,可以直接從FPGA的可程式設計硬體部分訪問各種周邊,這樣肯定就方便更多了。
除此之外,一些其他的踩坑總結,以及解決方案,也以文檔的形式列在文末連結。
如需觀看視訊:請點擊這裡:http://bit.ly/3WA1Ubd
小結
今天這篇文章,帶大家一起看了一下賽靈思最新的Kria KR260機器人開發套件的開發全過程。在這個過程中,可以不接觸到FPGA的底層硬體內容。如果你是個軟體發展者,可以利用這個平台直接進行上層機器人相關軟體和演算法的開發和加速,這個就大大降低了使用FPGA的門檻。這個過程也很有趣,同時也能慢慢接觸到軟硬體協同開發的知識細節,並且鍛煉這方面的技能。
關於Kria KR260的學習資料,還有這個基於KR260的機械臂控制專案的具體細節、步驟和代碼,我們都總結成了詳細的文檔,可以點選連結獲取:https://bestcem.com/t/5VwnTi,想要學習和上手的朋友可以點選連結完成問卷(不記名)之後即可獲取。
從無線連接、更快的處理和運算、網路安全機制、更複雜的虛擬實境(VR)到人工智慧(AI)等技術,都將在未來的每一個嵌入式系統中發揮更關鍵功能。「嵌入式系統設計研討會」將全面涵蓋在電子產業最受熱議的「智慧」、「互連」、「安全」與「運算」等系統之相關硬體和軟體設計。
會中將邀請來自嵌入式設計相關領域的研究人員、代表廠商以及專家,透過專題演講、產品展示與互動交流,從元件、模組到系統,從概念設計到開發工具,深入介紹嵌入式系統設計領域的最新趨勢、創新和關注重點,並深入分享關於嵌入式系統設計的經驗、成果以及遇到的實際挑戰及其解決方案。









訂閱EETimes Taiwan電子報
加入我們官方帳號LINE@,最新消息一手掌握!