術語「軟體定義硬體(Software-defined Hardware)」,往往指將應用映射至FPGA,進而透過軟體創建運行時可重配置硬體。軟體定義硬體旨在實現特定演算法或運算的運行時效率最大化,是使用固定的馮紐曼運算架構的CPU和GPU,或是成本高、同樣功能不可變的ASIC的替代產品。因此,針對機器人的軟體定義硬體,應被理解成能夠透過軟體重新程式設計和適配的運行時可重配置機器人硬體。
傳統的機器人軟體程式設計是在預定義的架構和約束條件下,在給定機器人的CPU中進行功能程式設計。正如上篇文章所述,一旦機器人遇到適配需求,就會導致複雜的系統整合操作。然而如果使用FPGA,構建機器人的行為就是為解決任務的架構程式設計。機器人架構師可以純粹從軟體創建自己的硬體設計,並可以透過各種平台實現。
對於機器人專家來說,有三種與FPGA技術相互影響的途徑。首先是晶片級入手(Chip-down)的方法,即將系統單晶片(SoC)整合到客製化設計的PCB中,以滿足應用需求。這種方法較適合機器人製造商,是大量和成本優化型批量的選擇。第二種方法是採用系統模組(SOM),將預裝配電路板插入客製化的承載電路板。SOM可讓硬體工程師加快產品開發速度,將他們從運算平台上解放出來,把精力集中在更有價值的創新上。第三種方法是採用已經整合大量周邊、完全裝配好的電路板。對於高強度的運算而言,可直接插入工作站的完整電路板,為權衡取捨下較佳的考量。
總括來說,傳統的機器人軟體程式設計是在預定義的架構和約束條件下,在給定機器人的CPU中進行功能程式設計。而採用自我調整運算後,構建機器人行為則是針對架構的程式設計。
透過ROS 2整合自我調整運算
機器人作業系統(ROS)是機器人應用開發的實際框架。在Open Robotics的維護和指導下,ROS不僅是一種作業系統,也是一種框架。它由構建和管理機器人的不同工具構成,包括調試和視覺化實用工具、編排工具、機器人庫(如運動規畫、導航、定位等),以及促進機器人系統開發的通訊工具。
目前,由於原始版本的ROS文章已被引用8,500次以上,可充分證明其在研究和學術領域獲得廣泛認可,因此ROS便在這樣的環境下誕生。其主要目的是為開展初期研發的使用者提供所需的軟體工具。在像ROS-I(ROS-Industrial)這樣項目的支持下,ROS在業界的熱度持續成長。ROS-I是一個開源計畫,目的是將ROS軟體的先進功能推廣到工業應用。由於ROS-I聯盟的帶動,ROS現已在業界成功部署。日前該聯盟已擁有80多家成員,每年在歐洲、美國和亞洲舉辦會議,廣聚數百位機器人專家和知名製造商。後者藉此機會,透過演示介紹他們自己的ROS驅動程式。
隨著ROS超越學術層面開始進入工業和其他領域,ROS的局限性也日漸突顯,如缺乏嵌入式支援和深度嵌入的原生支援,單機器人軟體架構,無即時功能和缺乏安全性等。為了解決這些問題,Open Robotics於2014年開始重新設計ROS,由此ROS 2問世。ROS 2透過將通訊中介軟體與機器人邏輯分離,突破大部分已知的局限性。具體而言,Open Robotics選擇「資料分發服務(DDS)」作為初始通訊中介軟體,並針對各種DDS解決方案構建適配器,同時對上層暴露DDS特性。儘管如此,ROS核心層仍然保持免受通訊中介軟體的影響,ROS 2軟體架構如圖1所示。
上層建立在中介軟體抽象層(RMW)上,後者負責將ROS抽象層轉譯成具體的中介軟體。ROS用戶端庫(RCL)不會暴露任何具體中介軟體的實現細節(如DDS)。這樣一來,RCL保持免受中介軟體的影響,且能夠輕鬆擴展到其他需要不同傳輸方式的應用。
ROS擁有數千名活躍使用者,目前已是規模最大的機器人專家群體。ROS因研究而誕生,現已演進發展有十多年的時間,在各種應用領域得到廣泛採用,並且還能服務於工業需求。
ROS不僅提供工具、工具庫和慣例,而且還擁有不斷擴大的機器人專家社區。從概念上講,ROS在大多數方面圍繞著被稱為ROS運算圖的抽象層。運算圖內的每個節點都能開展機器人運算,並透過用底層通訊中介軟體實現的通用點對點資料匯流排與其他節點交換資訊。資料匯流排內的通訊通道按主題組織。因此,機器人的總體行為取決於運算圖,而運算圖可以分布方式實現在一部或多部電腦上。如此就完成了第二次抽象層,也就是將運算圖映射到機器人中可用的運算基板,形成ROS資料層圖。資料層圖代表的是物理分組和連接,用於在運算圖中實現建模行為。簡單地說,其捕獲的是機器人的物理現實,包括通訊匯流排、機器人元件(包括感測器和/或致動器),以及運算圖與現有機器人元件中可用運算基板間的映射。
ROS運算圖可以涉及一個或多個機器人,並且本質上是模組化的,能夠以分散式或集中式的方式實現。圖2所示的是ROS運算圖(圖2a)和資料層圖(圖2b)。
表1是對一些最重要的ROS概念的總結。
綜上所述,ROS運算圖是一種為機器人總體行為建模的資料結構,而資料層圖捕獲的則是機器人元件(用於在運算圖中實現建模行為)的物理分組和連接。
自我調整運算平台實現ROS之路
圖3所示的是歷年來將ROS和ROS 2分別實現在一些自我調整運算平台的既往研究中,較具相關性的成果。
從圖3也反映出學界對促進自我調整運算發展的興趣越來越濃厚。從ROS的角度來看,可以將過去的研究分為三類:第一類研究提出敘明機器人專家充分利用硬體加速功能,將ROS運算圖的一部分卸載到可程式設計邏輯(FPGA)並進行加速的工具和方法。第二類研究提出加速ROS底層的概念,特別是用網路堆疊優化節點間網路內的相互影響。如根據「Real-time Linux Communications:An Evaluation of the Linux Communication Stack for Real- time Robotic Applications」的描述,網路堆疊是ROS通訊的瓶頸,而「Acceleration of Publish/Subscribe Messaging in ROS-compliant FPGA Component」等研究也對即時分散式系統有參考價值。第三類研究提出用自我調整運算優化ROS運算圖。
除了在使用者空間層面加速特定應用和ROS庫,值得一提的還有在流程間、流程內,乃至網路內的層面加速ROS節點間的相互影響。由於機器人行為建立在ROS節點相互影響的結果上,因此用於此用途的加速器透過從總體上減少ROS和ROS 2運算圖資料流程,顯著影響總延遲。也就是說,在考慮ROS和ROS 2時,必須應用全面的硬體加速視圖。這種視圖能體現針對流程中、流程內、網路內(含底層)ROS運算圖相互影響的優化,以及針對ROS上運行應用的加速。 根據圖3列出的既往研究,還可以得出另一個結論。過去的大多數方法主要都是從硬體工程師的視角解決自我調整運算與ROS的整合問題,其提出的大多數工具和方法都有一個先決條件,即最終用戶必須具備嵌入式流和硬體流的既有經驗。這往往意謂著需要熟悉RTL、HDL和HLS等概念,或能熟練使用Vivado設計套件與Vitis統一軟體平台等工具。類似地,部署到嵌入式目標也需要使用者在一定程度上熟悉Yocto、OpenEmbedded以及相關工具。大多數從事ROS研發的機器人專家不具備這樣的能力。要整合自我調整運算,需要採用一種以ROS為中心的方法。硬體和嵌入式流程必須直接整合到ROS生態系統中,提供的體驗與機器人專家在其桌面工作站上構建ROS工作空間時的體驗相似。在充分利用所有既往研究結果和經驗的基礎上,以下將提出一種以ROS為中心的架構,用於整合自我調整運算。
新架構以ROS 2在機器人內部整合自我調整運算
圖4所示的架構將硬體加速整合到ROS 2中,同時堅持以機器人專家為中心的理念。不要求熟悉非ROS工具(如Vivado或Vitis工具),或熟悉OpenEmbedded與Yocto。此外,該架構構建在開放的標準之上,以C++和OpenCL作為生成加速核心的目標運算語言。透過這種方法,機器人領域的大多數使用者都可以受益於硬體加速的功能。該架構使用三大支柱構建:ROS構建系統(ament)、ROS元構建工具(colcon)以及嵌入式韌體(firmware)。 第一個支柱是ament ROS 2構建系統的擴展。ament_vitis透過一系列CMake巨集(Macro)和實用工具實現這些擴展,將Vitis工具包含到ROS 2生態系統內。提議的架構是一種適用於幾乎任何加速技術的架構,即ament_acceleration抽象層從框架和軟體平台(如Vitis工具)抽象層構建系統擴展,為FPGA和GPU提供支援。作為替代加速技術的例子,圖4中包含了ament_rocm,展現未來整合ROCm5軟體發展平台的潛力,以實現超大規模等級GPU運算。在後台,ament_acceleration的每次專門優化都需要對應的庫。例如,ament_vitis依靠Vitis和賽靈思(Xilinx)運行時(XRT)庫,後者是一種開源的標準化軟體介面,用於簡化應用代碼和加速核心之間的通訊。Vitis工具和XRT完全對機器人工程師隱藏,不僅簡化了加速核心的創建,而且還幫助機器人專家專注於運算圖像的改進。透過提供猶如任何其他ROS封裝的體驗,以這種方式實現簡化加速核心創建工作的目標。圖5所示的代碼列表1展示的是使用ament_vitis ROS封裝的示例。巨集vitis_acceleration_kernel提供靈活性,允許用戶無縫地擴展CMakeLists.txt並選擇加速ROS封裝的哪些部分。
第二個支柱擴展「colcon」ROS元構建工具,以整合硬體加速專用流。
第三個支柱是嵌入式韌體。表達為acceleration_firmware,第三個支柱旨在為硬體加速平台提供韌體專用工件,這樣就能針對這些工件編譯加速核心,進而簡化流程並保持ROS開發流程。提出的架構在構建時特別考量到各種硬體加速平台,可以支援邊緣(嵌入式)元件,以及適用於工作站、資料中心乃至雲端硬體加速的PCIe加速器。平台選擇透過在ROS工作空間資源(在src/下)中加入特定的acceleration_firmware庫來實現。構建過程中的平台選擇透過colconmixins來實現。透過這種方式,colcon build-build-base=build-zcu102-install-base=install-zcu102-merge-install-mixinzcu102將為ZCU102硬體平台構建完整的ROS 2工作空間,交叉編譯ROS封裝,在運行中視情況為ZCU102平台生成核心。所有中間步驟完全實現自動化,而且產生的install-zcu102目錄能直接在硬體中使用。
為了容納中間工件並在嵌入式流程中提供靈活性,acceleration_firmware在ROS 2工作空間中導入新的子資料夾結構,即/acceleration/firmware/路徑。
圖6是acceleration_examples ROS 2封裝構建完成後,該架構的工作方式預演。流程從colcon構建ROS 2工作空間開始(圖6,插圖編號1)。毋需使用特殊的旗標,只是對應的封裝和硬體加速工作組(HAWG)基礎設施必須位於工作空間的src目錄內。colcon將為開發工作站架構構建每一個封裝。這其中包含ament_vitisCmake巨集(圖6,插圖編號1),該巨集將一系列CMake擴展部署到產生的本地ROS 2疊加工作空間中。 這些擴展與本地Vitis安裝(圖6,插圖編號3)相連,對ROS 2封包直接提供其功能。換句話說,ROS 2封包能從它們的CMakeLists.txt檔使用這些巨集,並且使用硬體加速工具。
韌體封包(如acceleration_firmware_kv260)是該架構的重要元件。切換加速器時,只需以適用於新目標加速器的封包替換這個封包即可。任意一個有效的韌體封包都應包含韌體工件和CMake邏輯,以便在ROS疊加工作空間中正確地為實現硬體加速目的而解封包、部署和配置韌體(圖6,插圖編號4)。此外,有效的韌體封包應包含根檔案系統、根檔案系統的sysroot(用於交叉編譯)或在構建時自動生成ROS 2 mixins的範本,以簡化嵌入式流程和其他部分。 總之,首先調用colcon構建(圖6,插圖編號3),讓ROS 2工作空間為硬體加速做好準備並將檔案部署在本地疊加內(圖6,插圖編號2、3和4)。在此之後,從本地疊加第二次調用帶-mixin旗標的colcon構建,將進行交叉編譯(圖6,插圖編號5₁ )並根據需要為目標加速器硬體生成加速器(圖6,插圖編號5₂)。從這一點開始,colcon_acceleration封包有助於其餘流程的進一步自動化。
下列三種不同的電路開發板已經獲得基本支援:如賽靈思Zynq UltraScale+ MPSoC ZCU102、ZCU104以及Kria KV260視覺AI入門套件。 在既往研究的啟發下,當前研究提出一種以ROS 2為中心的架構,讓硬體加速在ROS生態系統中發揮關鍵作用。這種架構適用於各種平台(瞄準邊緣、工作站、資料中心或雲端提供支援等),也適用於支援FPGA和GPU的各種技術,並且只需提供對應的專業acceleration_firmware,就能輕鬆地將其移植到其他電路板。
(本文作者皆任職於賽靈思)