如何借助 ROS 2 實現基于 FPGA 的軟件定義硬件
連載一:什么是自適應機器人?
機器人是一種系統級的系統,它由感知周邊環境的傳感器、根據感知采取行動的致動器和負責處理數據的計算構成,用于對其應用做出連貫一致的響應。在很大程度上機器人技術是一種系統集成的藝術,從軟件的角度和硬件的角度看皆是如此。以往的研究揭示,在機器人領域中多達 70% 的資源被用于集成,而不是用于開發最終應用。直到最近,隨著較低端的工業機器人走向大規模普及化,機器人公司才開始在硬件基礎上著重軟件開發。盡管如此,機器人仍然是高度專業化的系統,旨在以高可靠性和高精度執行一系列任務。因此,機器人內部的硬件和軟件能力之間的關系十分重要。
大多數機器人通過內部網絡交換信息并滿足時序要求。從這種意義上來講,機器人屬于時間敏感型網絡。
機器人系統機載資源通常有限,包括存儲器、I/O 和磁盤或計算功能,從而阻礙了系統集成進程,使之難以滿足非結構化、動態和不斷變化環境的實時性要求。隨著機器人內部網絡安全的發展,這一點更是如此,因為它經常會在使用壽命方面給機器人帶來新的要求,這需要修改機器人的邏輯,從而對實時環路產生影響。因此,為機器人系統選擇合適的計算平臺至關重要,該平臺既要簡化系統集成、符合功耗限制,同時也要適應機器人應用不斷變化的需求。
自適應機器人是指那些能夠成功應對新狀況的機器人。要成為一個名副其實的自適應機器人,必須具備以下三大基本特征中至少一個:自適應行為、自適應機電一體化、自適應計算。擁有全部三大基本特征的機器人,則可被視為“全自適應機器人”。
總而言之,機器人是能夠以高可靠性和高精度執行一系列任務的高度專業化的系統。機器人內部的硬件和軟件能力之間的關系十分重要。因此,為機器人系統選擇合適的計算平臺至關重要。該平臺既要能夠簡化系統集成、符合功耗需求,同時也要能夠適應機器人應用不斷變化的需求。
自適應機電一體化 (Adaptive mechatronics)是一個業已存在數十年的概念。Gosselin 從機械的角度探討這個課題,并將自適應系統定義為能夠成功響應新狀況的系統。此外,他還將自適應機器人機械系統定義為自適應系統,即通過高度依賴機械屬性,能夠適應外部的新狀況。Gosselin 提供了各種純粹依靠機械構造的自適應機器人系統的雛形示例,包括自適應機器人手。此外,Ivanov 也從純機械角度研究自適應機器人,在研究中他提議自適應機器人應考慮使用自適應電力驅動裝置,根據載荷改變電力驅動裝置的輸出。他將這種自適應行為命名為自調節 (self-regulation),并認為自適應電力驅動裝置能在機器人應用中實現高能效。通過采用傳感器輸入控制機制將這項研究延伸到機電一體化領域,產生了一項有關采用傳感器反饋實現自適應機器人控制的研究。示例包括視覺反饋或力傳感器反饋等。
機器人的自適應行為并非新穎概念。它可追溯到上世紀 80 年代中期 Brooks 提出的基于行為的機器人方法和他的包容式架構 (subsumption architecture)。在上世紀 90 年代,不同的研究小組都在研究如何讓機器人具備靈活應變能力和自我組織能力,從而提高機器人的自主性。他們往往是通過某種控制機制(使用某種形式的人工神經網絡與機器人的傳感器和致動器相連)來實現的。后來的 Ziemke在其研究中總結了這種方法,提出了自適應神經機器人的概念。這種概念創造性地率先使用“自適應機器人”一詞,指代用人工神經系統和自適應技術控制自主主體。最近,在《Robotic Fabrication in Architecture, Art and Design 2018》的機器人專輯中,作者援引“自適應機器人”的說法,指通過添加感知和處理實現的完全自適應行為(與 Ivanov提出的“自適應機器人”概念不同,后者主要關注機械構造角度)。根據原文,自適應機器人是指能夠通過加裝傳感器,適應不斷變化的環境條件和材料特性,同時在一定程度上保持可預測性的機器人。與該研究同時代、同思路的 Mayoral-Vilches 等提出自主適配機器人的概念。這個概念利用硬件模塊化和人工智能(指上世紀 90 年代的自適應神經機器人趨勢)節省構建這種機器人所需的工作量和時間。
自適應計算是自適應機器人第三大基本特征。對于機器人而言,它指的是機器人能夠在運行過程中適配其計算系統的一個或多個屬性(如確定性、功耗或吞吐量)。正如“What is adaptive computing?”中介紹的,FPGA 是實現自適應計算的理想技術。FPGA 最早由賽靈思聯合創始人之一 Freeman 在 1984 年提出,它為自適應計算奠定了基礎。FPGA 兼具通用性和強大功能,同時效率高、成本低。因為在 FPGA 上實現其他處理架構,還可以實現并行處理,因此 FPGA 可以用于處理幾乎任何機器人內部的任務。讓 FPGA 成為自適應計算的另一特征在于,能夠針對每一種機器人應用的需求專門定制數據路徑寬度和寄存器長度。如何在機器人中使用自適應計算的示例包括為加速運動規劃而設計的計算流水線、分布式同步或時間敏感型彈性通信等。有關機器人自適應計算的更多示例可參閱“A survey of FPGA-based robotic computing”和“A survey on FPGA-based sensor systems: towards intelligent and reconfigurable low-power sensors for computer vision, control and signal processing”。
連載三:為什么 FPGA 能在機器人中起到重要作用
CPU 和 GPU 擅長控制流計算。它們的控制驅動機器模型基于控制令牌,控制令牌提示應執行語句的時間。這賦予 CPU 和 GPU 完全的控制力,能輕松實現復雜的數據和控制結構。然而,這樣做的代價是效率較低且難以毫無差錯地準確編程。相反,FPGA 擅長數據流運算。它們遵循數據驅動機器的模式,一旦所有操作數可用就執行語句。這樣的結果就是 FPGA 能釋放巨大的并行性和吞吐量潛力,同時避免出錯或產生副作用。
總體而言,作為 CPU 和 GPU 通用平臺的替代技術,FPGA 能夠自適應生成定制計算架構,滿足機器人的需求。因為擁有前所未有的靈活性,并能縮短設計周期,同時降低開發成本,FPGA 已經z在各類知名工業機器人制造商和醫療機器人應用中大量采用。在 “A survey of FPGA- based robotic computing”中,讀者可以看到一份有關基于 FPGA 的機器人計算的調研,該調研展示了 FPGA 在機器人應用領域的廣泛適用性。下面是對 FPGA 特征的詳細描述:
● 自適應:當同時需要控制流和數據流時,CPU 和 GPU因為時延和響應時間問題無法使用,而 FPGA 則能生成無與倫比的定制計算架構,滿足嚴格的實時要求和多重關鍵性要求。CPU 和 GPU 所采用的固定計算架構,限制了它們的整體能力,包括響應時間和時延。
● 高性能:FPGA 通過建立深度流水線化的數據路徑(流計算)來提升計算性能,而不是像 CPU 和 GPU 那樣依靠計算單元數量的增加。流計算的工作原理是一個計算單元產生的數據立即被流水線中的下一個計算單元處理,這樣就免去了數據流通道中“提取-計算-存儲 (fetch-compute-store)”的環節,便于數據產生者和消費者的運算操作,從而提升了性能。相反,由于存在架構固定、核數量固定、指令集固定、存儲器架構僵化等多重限制,CPU 和 GPU 只能以犧牲性能的方式進行計算。
● 高能效:速度和功耗是數字電路的基本品質因數 (FOM,figures of merit)。功率是表示數字電路頻率和觸發率的函數。 FPGA 通過并行和直接執行算法調節頻率。FPGA 保持較低頻率和較低切換率(無指令獲取)進行計算,但與 CPU 和 GPU 的等效計算性能相比,FPGA 在更高的頻率下具有更大的并行性優勢,從而客戶以實現更好的功率指數和更高的能效。
● 不浪費算力:FPGA 借助靈活性實現芯片利用率最大化以提升性能。動態功能交換(DFX,過去被稱為“部分重配置”)允許在 CPU 上運行的線程化應用分時共享 FPGA。由此當給定線程正在處理 FPGA 生成的結果時,另一線程能使用 FPGA 進行不同的計算。
● 可預測:FPGA 幫助 CPU 和 GPU 卸載嚴格意義的實時計算,在執行時間上提供納秒級預測能力,而且不會受到與 GPU 和 CPU 計算有關的軟件變更或抖動的影響。
● 可重配置:機器人算法仍處于高速演進發展中,FPGA 能夠按需進行動態重配置和更新。此外,還可以輕松地對 FPGA 進行重新編程以滿足異構需求,實現 CPU 和 GPU 才能提供的通用能力。
● 安全:FPGA 能夠按需靈活地構建安全電路,保障機器人數據流的安全。此外,FPGA 能充分利用重配置功能修正其硬件架構的缺陷(避免硬件風險)。這樣設計人員就能迅速解決在固定計算架構上難以解決或者無法解決的安全風險(避免未來的風險,例如“熔毀”和“幽靈”)。
然而也有觀點認為,盡管 FPGA 是機器人專家心目中理想的計算基干,但是它們提供的靈活性是以增加復雜性和所需的設計技能為代價的。“A survey of FPGA- based robotic computing”列出了部分所需的額外技能。只有能夠全面綜合地運用含多核 CPU、GPU 和 FPGA 在內的所有這些技術,才能實現最優異的機器人性能。實際不然,賽靈思所提供這種集成式片上系統 (SoC) 解決方案,是將 CPU 通用軟件的可編程能力與 FPGA 自適應硬件功能完美結合在了同一器件之中。
這些自適應 SoC 為機器人應用提供了軟硬件兼有的高靈活性計算基礎,并可提供高性能、低功耗、確定性、硬件可重配置、安全,以及自適應特性等價值。
要點總結:CPU 和 GPU 擅長控制流計算,而 FPGA 擅長數據流計算。自適應 SoC 解決方案為機器人應用提供了軟硬件兼具的高靈活性計算基干,可提供低功耗、高性能、確定性、硬件可重配置、安全,以及自適應等特性。
連載四:如何理解面向機器人的“軟件定義硬件”
術語“軟件定義硬件software-defined hardware o”往往指將應用映射至 FPGA,從而通過軟件創建運行時可重配置硬件。軟件定義硬件旨在實現特定算法或計算的運行時效率最大化,是基于固定的馮諾依曼計算架構的 CPU 和 GPU或是成本高、同樣功能不可變的 ASIC 的替代產品。因此,面向機器人的軟件定義硬件,應被理解成能夠通過軟件重新編程和適配的運行時可重配置機器人硬件。.
傳統的機器人軟件編程是在預定義的架構和約束條件下,在給定機器人的 CPU 中進行功能編程。正如前文所述,一旦機器人遇到適配需求,就會導致復雜的系統集成操作。然而如果使用 FPGA,構建機器人的行為就是為解決任務的架構編程。機器人架構師可以純粹從軟件創建自己的硬件設計,并可以通過各種平臺完成交付,如圖1所示。
圖1 賽靈思自適應計算解決方案
對于機器人專家來說,有三種與 FPGA 技術交互的途徑。首先是芯片級入手( chip-down)的方法(圖 1a),既將片上系統 (SoC) 集成到定制設計的 PCB 中,以滿足應用需求。這種方法最適合機器人制造商,是大批量和成本優化型批量的理想選擇。第二種方法是采用系統模塊 (SOM)(圖 1b),將預裝配電路板插入定制的承載電路板。SOM 幫助硬件工程師加快產品開發速度,將他們從計算平臺上解放出來,把精力集中在更有價值的創新上。第三種方法是采用已經集成大量外設的完全裝配好的電路板(圖 1c)。對于高計算強度的運算而言,可直接插入工作站的完整電路板代表了最佳的權衡取舍。
要點總結:傳統的機器人軟件編程是在預定義的架構和約束條件下,在給定機器人的 CPU 中進行功能編程。而采用自適應計算后,構建機器人行為則是對架構的編程。
連載五:為什么是通過 ROS 2集成自適應計算?
機器人操作系統 (ROS) 是機器人應用開發的實際框架。在 Open Robotics 的維護和指導下,ROS 不僅是一種操作系統,也是一種框架。它由構建和管理機器人的不同工具構成,包括調試和可視化實用工具、編排工具、機器人庫(如運動規劃、導航、定位等),以及促進機器人系統開發的通信工具。
目前,原始版本的 ROS 文章已被引用 8,500 次以上,充分證明其在研究和學術領域得到廣泛的認可,ROS 就誕生在這樣的環境下。其主要目的是為開展前沿研發的用戶提供所需的軟件工具。在像 ROS-Industrial(簡稱 ROS-I)這樣項目的支持下,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所示:
圖1 軟件架構
上層建立在中間件抽象層 (rmw) 上,后者負責將 ROS 抽象轉譯成具體的中間件。ROS 客戶端庫 (rcl) 不會暴露任何具體中間件的實現細節(如 DDS)。這樣一來,rcl 保持免受中間件的影響,且能夠輕松擴展到其他需要不同傳輸方式的應用。
ROS 擁有數千名活躍用戶,目前已是規模最大的機器人專家群體。ROS 因研究而誕生,現已演進發展有十多年的時間,在各種應用領域得到廣泛采用,并且還能服務于工業需求。
ROS 不僅提供工具、庫和慣例,而且還擁有不斷擴大的機器人專家社區。從概念上講,ROS 在大多數方面圍繞著被稱為 ROS 計算圖的抽象。計算圖內的每個節點都能開展機器人計算,并通過用底層通信中間件實現的通用點對點數據總線與其他節點交換信息。數據總線內的通信通道按話題組織。因此,機器人的總體行為取決于計算圖,而計算圖可以實現在一部或多部計算機上(以分布方式)。這就完成了第二次抽象,也就是將計算圖映射到機器人中可用的計算基干形成 ROS 數據層圖。數據層圖代表的是物理分組和連接,用于在計算圖中實現建模行為。簡單地說,其捕獲的是機器人的物理現實,包括通信總線、機器人組件(包括傳感器和/或致動器),以及計算圖與現有機器人組件中可用的計算基干間的映射。
ROS 計算圖可以涉及一個或多個機器人,并且本質上是模塊化的,能夠以分布式或集中式的方式實現。圖 2 所示的是 ROS 計算圖(圖 2 的上部分)和數據層圖(圖 2 的下部分)。表 1 是對一些最重要的ROS概念的總結。
(a) ROS 2 計算圖:通過每個表示為節點的單獨計算,為機器人總體行為建模的數據結構。
(b) ROS 2 數據層圖:表示用于在計算圖中實現建模行為的物理分組和連接。
圖2 ROS 抽象用于具備導航能力的 2 輪機器人
表1 ROS 最相關概念的總結
ROS 概念 | 解讀 |
計算圖 | 通過每個表示為節點的單獨運算,為機器人總體行為建模的數據結構。節點間按話題和其他抽象與其他計算節點通信。計算圖不僅有助于將機器人行為可視化,而且也通過將每個機器人計算劃分成節點,加快了設計流程。從電氣工程師的角度來看,可以將計算圖理解為機器人總體行為的原理圖。 |
數據層圖 | 表示在計算圖中實現建模行為的物理分組和連接。從電氣工程的角度來看,如果計算圖映射的是原理圖,那么數據層圖對應的就是布局圖。 |
節點 | 執行計算的流程。ROS 設計旨在以精細粒度級實現模塊化;機器人控制系統通常由多個節點構成。節點執行任意邏輯都會影響到機器人的總體行為。 |
話題 | 數據總線(底層通信通道)內的連續數據流。數據總線上的節點可通過發布/訂閱通信范式來交換信息。話題一般用于連續數據流(傳感器數據、機器人狀態等)。它們通常表示為多對多連接。數據可以隨時在獨立于任意發送方/接收方的情況下發布和訂閱。 |
服務 | 數據總線上針對具體機器人任務的按需阻塞連接。在計算圖中作為 RPC 實現。主要用于需要特定數據的較快速任務。在語義學上,用于處理請求。 |
行動 | 數據總線上的按需非阻塞連接,通常用于移動機器人的任何離散行為,或是運行較長時間但在執行過程中提供反饋的任何離散行為。行動可以是預先考慮過的。廣泛用于啟動較低級別的控制任務。在語義學上,用于現實世界的行動。 |
要點總結: ROS 計算圖是一種為機器人總體行為建模的數據結構,而數據層圖捕獲的則是機器人組件(用于在計算圖中實現建模行為)的物理分組和連接。
評論