自適應(yīng)計算在機器人領(lǐng)域的應(yīng)用
序言
2021年 4 月, 賽靈思創(chuàng)新性地推出自適應(yīng)系統(tǒng)模塊(SOM)產(chǎn)品組合 Kria SOM。作為一種量產(chǎn)型小尺寸嵌入式板卡,該平臺經(jīng)濟實惠、開箱即用,最主要是賽里思通過工具創(chuàng)新,借助SOM賦能上百萬軟件開發(fā)者,使其可以獲益于賽靈思自適應(yīng)計算平臺的高性能和靈活性優(yōu)勢,而且可以使其將應(yīng)用部署時間縮短多達 9 個月。
“一石激起千層浪”, Kria 的出現(xiàn),在其所面向的廣泛的邊緣應(yīng)用領(lǐng)域引起積極的反響,而機器人應(yīng)用就是其中之一。
傳統(tǒng)的機器人軟件開發(fā),是基于預(yù)定義的架構(gòu)和約束條件在給定機器人 CPU 中進行功能編程。然而采用自適應(yīng)計算后,構(gòu)建機器人行為則是在進行架構(gòu)編程。通過采用自適應(yīng)計算,機器人專家能在運行中適配機器人計算系統(tǒng)的一個或多個屬性(如它的確定性、功耗、安全態(tài)勢或吞吐量)。
然而,機器人專家并不是硬件工程師,他們普遍缺乏與嵌入式技術(shù)相關(guān)的專業(yè)知識。本文將從當今熱門的?。⒆赃m應(yīng)機器人"概念入手,從 ROS 2 機器人專家的視角介紹自適應(yīng)計算,并提出一種能夠讓 FPGA 在 ROS 2 生態(tài)系統(tǒng)中起主要作用的架構(gòu)。這個架構(gòu)適用于多種平臺和多種技術(shù),并且便于移植。架構(gòu)的核心組件在 Apache 2.0 許可證下提供,為機器人專家充分運用自適應(yīng)計算,實現(xiàn)軟件定義硬件鋪平了道路。
其中 :
● “連載一:什么是自適應(yīng)機器人”通過三大基本特征,征剖析自適應(yīng)機器人的概念產(chǎn)生、發(fā)展及特點
● “連載二:工業(yè)類比CPU/GPU,ASIC和FPGA,誰更適合機器人計算”通過工業(yè)車間操作流程進行類比,形象展示不同處理器平臺對于機器人系統(tǒng)的權(quán)衡利弊
● “連載三:為什么 FPGA 能在機器人中起到重要作用” 介紹機器人自適應(yīng)計算的概念,對自適應(yīng)計算的核心技術(shù)與功能進行總體介紹,并詳解 FPGA 在機器人應(yīng)用中發(fā)揮的作用,以及有關(guān)軟件定義硬件的概念
● “連載四:如何理解面向機器人的“軟件定義硬件””通過比較傳統(tǒng)機器人軟件編程和基于賽靈思自適應(yīng)解決方案平臺的編程模式進行比較,介紹軟件定義硬件的實現(xiàn)方法
● “連載五:為什么是通過 ROS 2集成自適應(yīng)計算?”簡要介紹 ROS 2 及其與自適應(yīng)計算的淵源
● “連載六:自適應(yīng)計算平臺實現(xiàn) ROS 之路”則分享了前期業(yè)界在自適應(yīng)計算及在機器人操作系統(tǒng)上的相關(guān)研究。
● “連載七:用ROS 2 在機器人內(nèi)部集成自適應(yīng)計算的新架構(gòu)”介紹了本文提出的架構(gòu),以及如何利用這個架構(gòu)為 ROS 2 集成自適應(yīng)計算功能,并使其發(fā)揮重要作用。
機器人專家花費大量時間,以計算圖形式構(gòu)建機器人行為,解決手里的機器人任務(wù)。他們經(jīng)常使用現(xiàn)代的 C++ 語言,通過高級軟件工程操作,構(gòu)建復(fù)雜的實時系統(tǒng)。然而,他們并不是硬件工程師。機器人專家普遍缺乏硬件和嵌入式技術(shù)專業(yè)知識,因而妨礙了 FPGA 等自適應(yīng)計算技術(shù)的廣泛采用。本文在既往研究的啟發(fā)下,介紹機器人自適應(yīng)計算的基礎(chǔ)知識,并提出一種生成 ROS 2 軟件定義硬件的架構(gòu)。與過去的其他方法相比,本文提出的方法是假設(shè)面向的是沒有硬件或嵌入式技術(shù)專業(yè)知識的機器人專家,是以機器人專家為中心的角度提出的。
本文首先總結(jié)了開發(fā)機器人時選擇正確計算平臺的重要性,以及機器人內(nèi)部軟硬件之間的重要關(guān)系。然后使用工廠做類比,簡要講解 CPU、GPU、FPGA 和 ASIC 的計算原理并回顧相關(guān)研究文獻,發(fā)現(xiàn) FPGA 因低功耗、高性能、確定性、可重配置能力、安全性和自適應(yīng)特征,在用于機器人時具有顯著的優(yōu)勢。此外,本文也回顧了有關(guān)將 ROS 集成到 FPGA 平臺的既往研究,發(fā)現(xiàn)這些研究都從硬件工程師的角度出發(fā),導(dǎo)致做出的設(shè)計決策往往嚴重制約性能空間。出于這個原因,本文從ROS 2 機器人專家的視角提出了一個提出建議,即全面考慮 ROS 2 的硬件加速。這一視角能體現(xiàn):a) 優(yōu)化流程中、流程內(nèi)、網(wǎng)絡(luò)內(nèi)(含底層)的 ROS 2 計算圖交互;以及 b) 加速 ROS 上運行的應(yīng)用。
本文提出一種能夠?qū)崿F(xiàn)上述目標的架構(gòu)。該架構(gòu)由一套 ROS 2 包構(gòu)成,能夠?qū)⒂布铀偌傻?ROS 工作空間。這種架構(gòu)適用于各種平臺(瞄準支持邊緣、工作站、數(shù)據(jù)中心或云)和各種技術(shù)(支持 FPGA 和 GPU),并且能夠輕松地移植到其他電路板上。該架構(gòu)的核心組件已經(jīng)在 Apache 2.0 許可證下公開,對三種電路板的基本支持也已通過演示。此外,提供的架構(gòu)還適用于各種應(yīng)用,將來可以通過包含 catkin 擴展( 非 ament)輕松移植到 ROS。
連載二:工業(yè)類比CPU/GPU,ASIC和FPGA,誰更適合機器人計算
CPU 和通用 GPU (GPGPU) 是兩種廣泛使用的商業(yè)計算平臺,因為它們可用性高且具有通用性。這些計算技術(shù)的通用性,是機器人專家對其特別感興趣的原因。但是通用性的代價是:
1.通用平臺的固定架構(gòu)難以適應(yīng)新的機器人場景。追加功能往往需要追加硬件,這也往往意味著要花時間對新的硬件進行新的系統(tǒng)集成度。
2.通用性必然導(dǎo)致其在時效上的缺陷,從而影響確定性形成(難以滿足嚴格的實時性要求)。
3.其功耗通常比專用計算架構(gòu)(如 FPGA 或 ASIC)高一到兩個數(shù)量級 (1)。
4.其固定的、不具備靈活應(yīng)變能力的架構(gòu),導(dǎo)致其對網(wǎng)絡(luò)安全威脅和惡意行為的抵御能力減弱。熔毀 ( Meltdown ) 或者幽靈 ( Spectre ) 等網(wǎng)絡(luò)攻擊示例表明,如果缺乏重新配置數(shù)據(jù)流流水線的能力,計算平臺最終將喪失安全性。
總體而言,CPU、GPU 和 ASIC 等采用固定架構(gòu)的器件,在其為開發(fā)者提供優(yōu)勢的同時,也讓其付出了代價。它們所缺乏的靈活應(yīng)變能力,導(dǎo)致其缺乏時效性,能耗增加。而且由于它們無法通過重新配置架構(gòu)來提高硬件的抗風險能力,因此在網(wǎng)絡(luò)威脅面前更加脆弱。
CPU的工業(yè)類比
圖1是 CPU 的工業(yè)類比,它將 CPU 理解成一系列車間,并且每個車間安排一位技能非常嫻熟的工人。
圖1 CPU 的工業(yè)類比
這些工人每人都能使用通用工具生產(chǎn)出幾乎任何產(chǎn)品。每位工人按順序使用不同的工具,將原材料制造為成品,一次生產(chǎn)一件產(chǎn)品。根據(jù)任務(wù)的性質(zhì),這種串行生產(chǎn)流程可能用到大量步驟。這些車間基本(不考慮緩存的情況下)彼此獨立,工人能全身心地完成不同任務(wù),不必擔心干擾或協(xié)調(diào)問題。盡管CPU 十分靈活,但它的底層硬件是固定的。CPU 仍然在基本的馮諾依曼架構(gòu)(或者更確切地說,存儲程序計算機)上運行。數(shù)據(jù)從存儲器讀取到處理器進行運算,然后寫回到存儲器?;旧厦總€ CPU 都以串行方式運行,一次一個指令。同時架構(gòu)以算術(shù)邏輯單元 (ALU) 為中心,每次運算都需要將數(shù)據(jù)輸入到 ALU 并從 ALU 輸出數(shù)據(jù)。
CPU的工業(yè)類比
GPU 也可以用車間和工人類比,但它們的數(shù)量要大得多,并且工人的專業(yè)化程度也要高很多,如圖2所示。
圖2 GPU 的工業(yè)類比
GPU 工人只能使用特定的工具,每人能完成的任務(wù)種類要少得多,但他們完成任務(wù)的效率非常高。GPU 工人在重復(fù)做相同的少量任務(wù)時效率最高,尤其是當他們?nèi)w同時做同一件事情時。GPU 解決了 CPU 的主要缺陷之一,即并行處理大量數(shù)據(jù)的能力。
雖然 GPU 比 CPU 擁有非常多的核,但 GPU 采用的依然是固定的硬件架構(gòu)。GPU 的核仍然包含某種類型的馮諾依曼處理器。一條指令就能處理上千條或者更多數(shù)量的數(shù)據(jù),盡管通常必須對同時處理的每一條數(shù)據(jù)進行相同的運算。原子處理元在數(shù)據(jù)矢量上運算(非 CPU 情況下的數(shù)據(jù)點),但仍然是每個 ALU 執(zhí)行一條固定的指令。因此,用戶仍然需要通過固定的數(shù)據(jù)路徑,從存儲器將數(shù)據(jù)傳遞給這些處理單元。與 CPU 相似,GPU 也采用固定硬件構(gòu)建,對所有的機器人應(yīng)用而言,其基本架構(gòu)和數(shù)據(jù)流都是固定不變的。
FPGA 的工業(yè)類比
如果說 CPU 和 GPU 是工人按照順序依次將輸入加工成輸出的車間,那么 FPGA 就是靈活的自適應(yīng)工廠,能夠針對手中的具體任務(wù)定制創(chuàng)設(shè)裝配線和傳送帶(參見圖 3)。
圖3 FPGA 的工業(yè)類比
這種靈活應(yīng)變能力,意味著 FPGA 架構(gòu)師可以先構(gòu)建工廠、裝配線和工位,然后根據(jù)所需完成的任務(wù)對它們進行量身定制,而不是使用通用工具。這些工廠中的原材料由分配在裝配線上的工人小組逐步加工成成品。每名工人都重復(fù)地完成同樣的任務(wù),同時半成品通過傳送帶在工人間進行傳遞。這樣能大幅提升生產(chǎn)力,并保證以最佳方式充分利用資源和電力。在這個類比中,工廠是 OpenCL 加速內(nèi)核,裝配線是數(shù)據(jù)流流水線,工位是 OpenCL 計算功能。
ASIC的工業(yè)類比
與 FPGA 類似,ASIC 也建造工廠,但是 ASIC 中的工廠是最終形態(tài),不能改動(參見圖 4)。換言之,這些 ASIC 內(nèi)部只有機器人,工廠內(nèi)不存在人類認知。這些裝配線和傳送帶是固定的,不允許變更自動化流程。ASIC 的這種專用型固定架構(gòu)賦予它們極高的能效,以及大批量規(guī)?;a(chǎn)下的最低價格。但遺憾的是,ASIC 的開發(fā)通常需要耗時多年,而且不支持進行任何變更,這將會導(dǎo)致前期投入的資產(chǎn)很快跟不上未來生產(chǎn)力提升的變化。
圖4 ASIC 的工業(yè)類比
表1和表2總結(jié)的是將 ROS 和 ROS 2 分別實現(xiàn)在圖 1 所示一些自適應(yīng)計算平臺的既往研究。圖 4 所示的是歷年來最具相關(guān)性的成果。
圖 1 賽靈思自適應(yīng)計算解決方案
表1 在自適應(yīng)計算平臺上實現(xiàn) ROS 的既往研究
表2 有關(guān)在自適應(yīng)計算平臺上運行 ROS 的既往研究
圖2 ROS 與 ROS 2 演進變革
圖2反映出科研界對促進自適應(yīng)計算發(fā)展的興趣越來越濃厚。從 ROS 的角度來看,可以將過去的研究分為三類:第一類研究提出幫助機器人專家充分利用硬件加速功能,將 ROS 計算圖的一部分卸載到可編程邏輯 (FPGA) 并進行加速的工具和方法。第二類研究提出加速 ROS 底層的概念,特別是用網(wǎng)絡(luò)堆棧優(yōu)化節(jié)點間的網(wǎng)絡(luò)內(nèi)交互。根據(jù)"Real-time Linux communications: an evaluation of the linux communication stack for real- time robotic applications"的描述,網(wǎng)絡(luò)堆棧是 ROS 通信的瓶頸,"Acceleration of publish/subscribe messaging in ROS-compliant FPGA component"等研究對實時分布式系統(tǒng)有參考價值。第三類研究提出用自適應(yīng)計算優(yōu)化 ROS 計算圖。
除了在用戶空間層面加速特定應(yīng)用和 ROS 庫,值得一提的還有在流程間、流程內(nèi)乃至網(wǎng)絡(luò)內(nèi)的層面上加速 ROS 節(jié)點間的交互。由于機器人行為建立在 ROS 節(jié)點交互的結(jié)果之上,因此用于這個用途的加速器通過從總體上減少 ROS 和 ROS 2 計算圖數(shù)據(jù)流,顯著影響總時延。也就是說,在考慮 ROS 和 ROS 2 時,必須應(yīng)用全面的硬件加速視圖。這種視圖能體現(xiàn):a) 對流程中、流程內(nèi)、網(wǎng)絡(luò)內(nèi)(含底層) ROS 計算圖交互的優(yōu)化;以及 b) 對 ROS 上運行的應(yīng)用的加速。
要點總結(jié):在考慮 ROS 和 ROS 2 時,必須應(yīng)用全面的硬件加速視圖。這種視圖能體現(xiàn):a) 對流程中、流程內(nèi)、網(wǎng)絡(luò)內(nèi)(含底層)的 ROS 計算圖交互的優(yōu)化;以及 b) 對 ROS 上運行的應(yīng)用的加速。
根據(jù)圖 2 列出的既往研究,還可以得出另一個結(jié)論。過去的大多數(shù)方法主要都是從硬件工程師的視角解決自適應(yīng)計算與 ROS 的集成問題,其提出的大多數(shù)工具和方法都有一個先決條件,即最終用戶必須具備嵌入式流和硬件流的既有經(jīng)驗。這往往意味著需要熟悉 RTL、HDL 和 HLS 等概念,或能熟練使用 Vivado? 設(shè)計套件或 Vitis? 統(tǒng)一軟件平臺等工具。類似地,部署到嵌入式目標也需要用戶在一定程度上熟悉 Yocto,OpenEmbedded 以及相關(guān)工具。大多數(shù)從事 ROS 研發(fā)的機器人專家不具備這樣的能力。要集成自適應(yīng)計算,需要采用一種以 ROS 為中心的方法。硬件和嵌入式流程必須直接集成到 ROS 生態(tài)系統(tǒng)中,提供的體驗與機器人專家在其桌面工作站上構(gòu)建 ROS 工作空間時的體驗相似。在充分利用所有既往研究結(jié)果和經(jīng)驗的基礎(chǔ)上,下一章節(jié)將提出一種以 ROS 為中心的架構(gòu),用于集成自適應(yīng)計算。
連載七:用ROS 2 在機器人內(nèi)部集成自適應(yīng)計算的新架構(gòu)
圖 1 所示的架構(gòu)將硬件加速集成到 ROS 2 中,同時堅持以機器人專家為中心的理念。不要求熟悉非 ROS 工具(如 Vivado 或 Vitis 工具),或熟悉 OpenEmbedded 或 Yocto。此外,該架構(gòu)構(gòu)建在開放的標準之上,以 C++ 和 OpenCL 作為生成加速內(nèi)核的目標計算語言。通過這種方法,機器人領(lǐng)域的大多數(shù)用戶都可以受益于硬件加速的功能。該架構(gòu)基于三大支柱構(gòu)建:ROS 構(gòu)建系統(tǒng) (ament)、ROS 元構(gòu)建工具 (colcon) 以及嵌入式固件 (firmware)。
圖1 ROS 2 硬件加速工作組 (HAWG) 初始架構(gòu)
第一個支柱是 ament ROS 2 構(gòu)建系統(tǒng)的擴展。ament_vitis(1)通過一系列 CMake 宏和實用工具實現(xiàn)這些擴展,將 Vitis 工具包含到 ROS 2 生態(tài)系統(tǒng)內(nèi)。提議的架構(gòu)是一種適用于幾乎任何加速技術(shù)的架構(gòu),即 ament_acceleration 抽象層從框架和軟件平臺(如 Vitis 工具)抽象構(gòu)建系統(tǒng)擴展,為 FPGA 和 GPU 提供支持。作為替代加速技術(shù)的例子,圖 10 里包含了 ament_rocm,展現(xiàn)未來集成 ROCm5(2)軟件開發(fā)平臺的潛力,以實現(xiàn) HPC/超大規(guī)模級 GPU 計算。在后臺,ament_acceleration 的每次專門優(yōu)化都需要對應(yīng)的庫。例如,ament_vitis 依靠 Vitis 和賽靈思運行時 (XRT) 庫(3)。后者是一種開源的標準化軟件接口,用于簡化應(yīng)用代碼和加速內(nèi)核之間的通信。Vitis 工具和 XRT 完全對機器人工程師隱藏,不僅簡化了加速內(nèi)核的創(chuàng)建,而且還幫助機器人專家專注于計算圖像的改進。通過提供猶如任何其他 ROS 封裝的體驗,以這種方式實現(xiàn)簡化加速內(nèi)核創(chuàng)建工作的目標。圖 2 所示的代碼列表 1 展示的是使用 ament_vitis ROS 封裝的示例。宏 vitis_acceleration_kernel 提供靈活性,允許用戶無縫地擴展CMakeLists.txt 并選擇加速 ROS 封裝的哪些部分。
圖2 代碼列表 1
第二個支柱擴展“colcon”ROS 元構(gòu)建工具,以集成硬件加速專用流。
第三個支柱是嵌入式固件。表達為 acceleration_firmware(1),第三個支柱旨在為硬件加速平臺提供固件專用工件,這樣就能針對這些工件編譯加速內(nèi)核,從而簡化流程并保持ROS 開發(fā)流程。提出的架構(gòu)在構(gòu)建時特意考慮到各種硬件加速平臺,可以支持邊緣(嵌入式)器件,以及適用于工作站、數(shù)據(jù)中心乃至云硬件加速的 PCIe? 加速器。平臺選擇通過在 ROS 工作空間資源(在 src/ 下)中加入特定的 acceleration_firmware 庫(acceleration_firmware_xilinx)來實現(xiàn)。構(gòu)建過程中的平臺選擇(本例中為賽靈思 Zynq UltraScale+? MPSoC ZCU102 平臺)通過 colcon mixins 來實現(xiàn)。通過這種方式,colcon build -build- base=build-zcu102 -install-base=install-zcu102 -merge-install -mixin zcu102 將為 ZCU102 硬件平臺構(gòu)建完整的 ROS 2 工作空間,交叉編譯 ROS 封裝,在運行中視情況為 ZCU102 平臺生成內(nèi)核。所有中間步驟完全實現(xiàn)自動化,而且產(chǎn)生的 install-zcu102 目錄能直接在硬件中使用。
為了容納中間工件并在嵌入式流程中提供靈活性,acceleration_firmware 在 ROS 2 工作空間中引入新的子文件夾結(jié)構(gòu),即 <ros2-workspace-path>/acceleration/firmware/<platform> 路徑。
圖 3 是 acceleration_examples ROS 2 封裝構(gòu)建完成后,該架構(gòu)的工作方式預(yù)演。流程從 colcon 構(gòu)建 ROS 2 工作空間開始(圖 3,插圖編號 1)。無需使用特殊的旗標,只是對應(yīng)的封裝和硬件加速工作組 (HAWG) 基礎(chǔ)設(shè)施必須位于工作空間的 src 目錄內(nèi)。colcon 將為開發(fā)工作站架構(gòu)構(gòu)建每一個封裝。這其中包含 ament_vitis Cmake 宏(圖 3,插圖編號 1),該宏將一系列 CMake 擴展部署到產(chǎn)生的本地 ROS 2 疊加工作空間中。
這些擴展與本地 Vitis 安裝(1)(圖 3,插圖編號 3)相連,對ROS 2 包直接提供其功能。換句話說,ROS 2 包能從它們的 CMakeLists.txt 文件使用這些宏,并且使用賽靈思的硬件加速工具。
固件包(如 acceleration_firmware_kv260)是該架構(gòu)的重要組件。切換加速器時,只需用適用于新的目標加速器的包替換這個包即可。任意一個有效的固件包都應(yīng)包含固件工件和 CMake 邏輯,以便在 ROS 疊加工作空間中正確地為實現(xiàn)硬件加速目的而解包、部署和配置固件(圖 3,插圖編號 4)。此外,有效的固件包應(yīng)包含根文件系統(tǒng)、根文件系統(tǒng)的 sysroot(用于交叉編譯)或在構(gòu)建時自動生成 ROS 2 mixins(2) 的模板,以簡化嵌入式流程和其他方面。如需進一步詳細了解,請參閱任何官方固件包的完整工件列表。
總之,首先調(diào)用 colcon 構(gòu)建(圖 3,插圖編號 3),讓 ROS 2 工作空間為硬件加速做好準備并將文件部署在本地疊加內(nèi)(圖 3,插圖編號 2、3 和 4)。在此之后,從本地疊加第二次調(diào)用帶 -mixin<target-board> 旗標的 colcon 構(gòu)建,將進行交叉編譯(圖 3,插圖編號 51)并根據(jù)需要為目標加速器硬件生成加速器(圖 3,插圖編號 52)。從這一點開始,colcon_acceleration 包有助于其余流程的進一步自動化。這部分已超出本文所要探討的內(nèi)容。
下列三種不同的電路開發(fā)板已經(jīng)獲得基本支持:賽靈思 Zynq UltraScale+ MPSoC ZCU102,ZCU104 以及 Kria? KV260 視覺 AI 入門套件。
圖3 HAWG 初始架構(gòu)內(nèi) ROS 2 包之間的交互走查
要點總結(jié):在既往研究的啟發(fā)下,當前研究提出一種以 ROS 2 為中心的架構(gòu),讓硬件加速在 ROS 生態(tài)系統(tǒng)中發(fā)揮關(guān)鍵作用。圖 12 體現(xiàn)的提議被模塊化成不同的 ROS 2 包,它們的構(gòu)建方式與任何其他 ROS 包一樣。這種架構(gòu)適用于各種平臺(瞄準邊緣、工作站、數(shù)據(jù)中心或云提供支持),也適用于各種技術(shù)(支持 FPGA 和 GPU ),并且只需提供對應(yīng)的專業(yè) acceleration_firmware,就能輕松地將其移植到其他電路板。
表 4 總結(jié)了這里提出的方法與以前的工作的比較。
表4 ROS 與 ROS 2 各類自適應(yīng)計算集成方法比較表(含賽靈思 ament_vitis)
資源獲?。?/p>
1. 如需獲取 ament_vitis,請訪問鏈接:https://github.com/ros-acceleration/ament_vitis
2. 如需獲取 ROCm,請訪問鏈接:https://github.com/RadeonOpenCompute/ROCm
3. 如需獲取 XRT,請訪問鏈接:https://github.com/Xilinx/XRT
4. 如需獲取 acceleration_firmware,請訪問:https://github.com/ros-acceleration/acceleration_firmware。參見 acceleration_firmware_xilinx,查看專為賽靈思平臺優(yōu)化的具體示例。
評論