

0 引言
1 機(jī)器人控制系統(tǒng)的理想化設(shè)計(jì)目
2 基于ROS實(shí)現(xiàn)反饋控制環(huán)路的性能瓶頸、基于FPGA的解決方法
2.1 建立作為分析對(duì)象的簡化系統(tǒng)架構(gòu)
2.2 對(duì)信號(hào)采集階段的分析
2.2.1 基于ROS的架構(gòu)中典型的信號(hào)采集過程
2.2.2 基于ROS的架構(gòu)中信號(hào)采集過程的性能瓶頸
2.2.3 基于FPGA的架構(gòu)針對(duì)信號(hào)采集過程的解決方法
2.3 對(duì)數(shù)據(jù)處理階段的分析
2.3.1 基于ROS的架構(gòu)中典型的數(shù)據(jù)處理過程
2.3.2 基于ROS的架構(gòu)中數(shù)據(jù)處理過程的性能瓶頸
2.3.3 基于FPGA的架構(gòu)針對(duì)數(shù)據(jù)處理過程的解決方
2.4 對(duì)指令執(zhí)行階段的分析
2.4.1 基于ROS的架構(gòu)中典型的指令執(zhí)行過程
2.4.2 基于ROS的架構(gòu)中指令執(zhí)行過程的性能瓶頸
2.4.3 基于FPGA的架構(gòu)針對(duì)指令執(zhí)行過程的解決方法
2.5 關(guān)于RTOS + ROS2
2.6 小結(jié)
3 基本思路及實(shí)施方法
3.1 在機(jī)器人領(lǐng)域深入應(yīng)用FPGA技術(shù)的基本思路
3.2 基本思路的實(shí)施方法
4 系統(tǒng)優(yōu)化科技樹 -- 基于FPGA實(shí)現(xiàn)EtherCAT主站控制器之后
5 建議
FPGA相比于CPU、DSP,具有高速、并行、運(yùn)算及引腳資源極其豐富、定時(shí)精確、功能靈活、硬件直接實(shí)現(xiàn)算法、操作數(shù)存取機(jī)制簡單高效、開發(fā)調(diào)試手段直探硬件底層的優(yōu)點(diǎn)。個(gè)人認(rèn)為,在機(jī)器人領(lǐng)域深入應(yīng)用FPGA技術(shù)具有非常廣闊的前景,有望成為行業(yè)技術(shù)創(chuàng)新的下一個(gè)突破點(diǎn)。
在伺服驅(qū)動(dòng)器中應(yīng)用FPGA是業(yè)界的常規(guī)做法,在此基礎(chǔ)上更進(jìn)一步,已經(jīng)有專業(yè)的機(jī)器人技術(shù)團(tuán)隊(duì)在深入應(yīng)用FPGA的方向做出努力,我了解到的有武漢某初創(chuàng)公司的研發(fā)團(tuán)隊(duì)(以下簡稱為“武漢J團(tuán)隊(duì)”)以及某大型國企。武漢J團(tuán)隊(duì)的最新方案“新一代片上驅(qū)控一體系統(tǒng)”以Zynq芯片作為硬件載體,用Zynq內(nèi)置的一個(gè)ARM核跑Linux+ROS作為系統(tǒng)的基礎(chǔ),改寫一部分ROS功能模塊以提高其實(shí)時(shí)性,用Zynq內(nèi)置的另一個(gè)ARM核無操作系統(tǒng)執(zhí)行實(shí)時(shí)性要求比較高的軟件算法(例如運(yùn)動(dòng)控制),用Zynq內(nèi)置的FPGA資源實(shí)現(xiàn)硬件加速、信號(hào)處理、電機(jī)控制(包括電流環(huán)控制)、I/O擴(kuò)展功能,在電機(jī)側(cè)直接摒棄了EtherCAT。
武漢J團(tuán)隊(duì)的技術(shù)負(fù)責(zé)人曾經(jīng)就他們的上述工作做過一次公開的介紹,其內(nèi)容篇幅不長,并且整體來說偏重于從系統(tǒng)架構(gòu)設(shè)計(jì)的角度進(jìn)行闡述,可能不利于讀者深入理解在架構(gòu)中引入FPGA的重要意義;他關(guān)于ROS局限性的闡述,更多的是提供一些經(jīng)驗(yàn),沒有進(jìn)行原理方面的分析。
本文依據(jù)筆者對(duì)機(jī)器人系統(tǒng)、計(jì)算機(jī)體系結(jié)構(gòu)、操作系統(tǒng)、ROS、FPGA技術(shù)的理解,定性分析以Linux+ROS為代表的軟件系統(tǒng)實(shí)現(xiàn)實(shí)時(shí)多任務(wù)目標(biāo)時(shí)存在的性能短板,提出關(guān)于在機(jī)器人領(lǐng)域深入應(yīng)用FPGA技術(shù)的一些想法。
本文內(nèi)容復(fù)制自筆者幾年前寫的一篇技術(shù)文檔。這篇文檔當(dāng)時(shí)曾在小范圍內(nèi)傳播,現(xiàn)在以知乎文章的形式予以公布,以期為機(jī)器人領(lǐng)域底層技術(shù)的更新?lián)Q代略盡綿薄之力。
筆者并非機(jī)器人專業(yè)科班出身,所述內(nèi)容難免存在謬誤之處,歡迎業(yè)內(nèi)人士批評(píng)、指正。
所述內(nèi)容若侵犯他人知識(shí)產(chǎn)權(quán),請(qǐng)留言告知,筆者將道歉、刪除相關(guān)內(nèi)容。
1 機(jī)器人控制系統(tǒng)的理想化設(shè)計(jì)目標(biāo)
為展開分析,首先明確在已完成反饋控制算法設(shè)計(jì)的情況下機(jī)器人控制系統(tǒng)的理想化設(shè)計(jì)目標(biāo):
在一定的成本約束下,在統(tǒng)一的時(shí)標(biāo)下,在盡可能短的時(shí)間周期之內(nèi),以盡可能小的周期抖動(dòng)幅度,完成對(duì)傳感器信號(hào)集的采樣、傳輸、數(shù)據(jù)處理、生成控制信號(hào)集,然后,以盡可能短的延遲,在各控制信號(hào)所需的盡可能精確的時(shí)刻,將控制信號(hào)集傳輸?shù)礁鱾€(gè)執(zhí)行器。
2 基于ROS實(shí)現(xiàn)反饋控制環(huán)路的性能瓶頸、基于FPGA的解決方法
2.1 建立作為分析對(duì)象的簡化系統(tǒng)架構(gòu)圖
為方便分析問題,首先將基于ROS的機(jī)器人反饋控制系統(tǒng)抽象為一個(gè)簡化的系統(tǒng)架構(gòu)圖(圖A),然后逐一分析反饋控制環(huán)中的三個(gè)階段:信號(hào)采集、數(shù)據(jù)處理、指令執(zhí)行,指出因?yàn)檐浖膱?zhí)行必須在操作系統(tǒng)的調(diào)度下時(shí)分復(fù)用CPU而導(dǎo)致系統(tǒng)存在性能瓶頸,進(jìn)而設(shè)計(jì)了加入FPGA之后系統(tǒng)的簡單架構(gòu)(圖B),分析后者在解決這些瓶頸問題方面所能起到的作用。
圖A中,在Linux內(nèi)核調(diào)度下,多個(gè)ROS節(jié)點(diǎn)以時(shí)分復(fù)用CPU的模式運(yùn)行,通過API與傳感器/執(zhí)行器的驅(qū)動(dòng)程序通信,進(jìn)而實(shí)現(xiàn)與傳感器/執(zhí)行器進(jìn)行參數(shù)、指令、數(shù)據(jù)、狀態(tài)的傳輸。
圖B在圖A的基礎(chǔ)上增加了FPGA,F(xiàn)PGA一側(cè)掛在CPU的外部總線上,另一側(cè)連接各傳感器/執(zhí)行器,形成驅(qū)動(dòng)程序與傳感器/執(zhí)行器之間的中間環(huán)節(jié)。
(1) 此處著重討論軟件運(yùn)行機(jī)制對(duì)機(jī)器人性能的影響,所以并未按標(biāo)準(zhǔn)的機(jī)器人系統(tǒng)5級(jí)架構(gòu)(主機(jī)、運(yùn)動(dòng)控制器、伺服驅(qū)動(dòng)器、電機(jī)、機(jī)械結(jié)構(gòu))進(jìn)行描述,而是將其抽象為“CPU+總線+內(nèi)存+外設(shè)”的簡化計(jì)算機(jī)系統(tǒng)。
(2) 圖A、B中將內(nèi)存掛接在外部總線上屬于抽象的示意。實(shí)際的DDRX-SDRAM模組應(yīng)該連接到位于CPU或北橋芯片中的內(nèi)存控制器,若應(yīng)用程序/外設(shè)需對(duì)內(nèi)存進(jìn)行讀寫,就要由CPU、各級(jí)Cache控制器、內(nèi)存控制器協(xié)同執(zhí)行一系列復(fù)雜的軟硬件操作,這些操作僅僅在外部行為上可以抽象地表述為“某軟/硬件讀寫了由某段地址標(biāo)定的一塊內(nèi)存空間”。
(3) 如某些技術(shù)資料中提到的,在產(chǎn)品化的機(jī)器人系統(tǒng)中,純粹的ROS節(jié)點(diǎn)只能實(shí)現(xiàn)機(jī)器人所必須的大量功能中的一部分,很多功能需要由開發(fā)者自己編寫的應(yīng)用程序予以實(shí)現(xiàn)。這些應(yīng)用程序在形式上未必與ROS節(jié)點(diǎn)相同,但兩者同屬于應(yīng)用軟件,兩者與操作系統(tǒng)、內(nèi)存、傳感器、執(zhí)行器進(jìn)行數(shù)據(jù)交互的基本過程也相差不多,所以在圖中、在后續(xù)分析中未予單獨(dú)表述。
(4) 后續(xù)分析中,除了涉及EtherCAT的數(shù)據(jù)輸入/輸出操作之外,假設(shè)各應(yīng)用程序、外設(shè)獲取CPU使用權(quán)都采用中斷模式。輪詢模式存在不同的問題,但不影響對(duì)軟件系統(tǒng)性能瓶頸的分析,從略。
(5) 為簡化表述,圖中忽略了驅(qū)動(dòng)程序經(jīng)GPIO之類的接口訪問傳感器/執(zhí)行器的模式。
以下針對(duì)信號(hào)采集、數(shù)據(jù)處理、指令執(zhí)行三個(gè)階段分析簡化機(jī)器人控制系統(tǒng)的反饋控制流程。
2.2.1 基于ROS的架構(gòu)中典型的信號(hào)采集過程
考慮圖A,對(duì)于帶EtherCAT從站接口模塊的傳感器來說,運(yùn)行于Linux內(nèi)核之上的、作為ROS節(jié)點(diǎn)之一(或獨(dú)立運(yùn)行)的EtherCAT主站程序定時(shí)發(fā)送過程數(shù)據(jù)幀到以太網(wǎng)環(huán)路(圖中未示出)上,傳感器經(jīng)EtherCAT從站接口模塊接收過程數(shù)據(jù)幀、將上一個(gè)定時(shí)周期內(nèi)采集到的狀態(tài)數(shù)據(jù)裝載進(jìn)過程數(shù)據(jù)幀,然后將其轉(zhuǎn)發(fā)到以太網(wǎng)環(huán)路上,攜帶狀態(tài)數(shù)據(jù)的過程數(shù)據(jù)幀環(huán)回到運(yùn)行EtherCAT主站程序的設(shè)備之后,其他ROS節(jié)點(diǎn)就能獲得環(huán)路上的這些傳感器在上個(gè)定時(shí)周期內(nèi)采集到的狀態(tài)數(shù)據(jù)。
對(duì)于不帶EtherCAT從站接口模塊的傳感器來說,Linux內(nèi)核需要響應(yīng)各傳感器的中斷信號(hào)(圖中未畫出其線路),啟動(dòng)對(duì)應(yīng)的傳感器驅(qū)動(dòng)程序,驅(qū)動(dòng)程序按照總線仲裁時(shí)序訪問CPU外部總線上與此傳感器對(duì)應(yīng)的地址區(qū),讀取傳感器緩沖的待上傳數(shù)據(jù)(或與傳感器進(jìn)行握手操作、直至讀到其上傳的數(shù)據(jù)),寫入內(nèi)存中為其分配的地址空間,通過各自的API告知對(duì)應(yīng)的ROS節(jié)點(diǎn):有傳感器數(shù)據(jù)需要讀取。
2.2.2 基于ROS的架構(gòu)中信號(hào)采集過程的性能瓶頸
采集帶EtherCAT從站接口模塊的傳感器獲得的數(shù)據(jù)時(shí),作為ROS節(jié)點(diǎn)之一(或獨(dú)立運(yùn)行)的EtherCAT主站程序必須實(shí)時(shí)運(yùn)行,任何比較大的幀發(fā)送延遲抖動(dòng)都有可能導(dǎo)致信號(hào)采集不及時(shí),進(jìn)而影響反饋控制算法的執(zhí)行。例如,在CPU運(yùn)算、控制負(fù)荷比較大(例如算法更復(fù)雜、軸數(shù)更多)的情況下,有可能因?yàn)閿?shù)據(jù)處理不及時(shí)而迫使幀發(fā)送時(shí)刻延后。
采集不帶EtherCAT從站接口模塊的傳感器獲得的數(shù)據(jù)時(shí),在傳感器數(shù)量比較多、采樣頻率比較高的情況下,Linux內(nèi)核頻繁響應(yīng)傳感器的中斷信號(hào),把大量CPU工作時(shí)間耗費(fèi)在頻繁保存-恢復(fù)現(xiàn)場(chǎng)、執(zhí)行傳感器驅(qū)動(dòng)程序上,影響承載核心業(yè)務(wù)的各ROS節(jié)點(diǎn)(包括EtherCAT主站程序)的執(zhí)行。當(dāng)然,可以用DMA模式(或者為傳感器單獨(dú)設(shè)置CPU小系統(tǒng),其實(shí)質(zhì)就是DMA控制器)以防止主CPU被頻繁的外部中斷打擾,但是,大多數(shù)情況下不可能為每個(gè)傳感器都配備一個(gè)DMA控制器,而且,一旦DMA控制器或CPU小系統(tǒng)的數(shù)量多了,它們就會(huì)替代傳感器的位置,導(dǎo)致同樣的問題。
事實(shí)上,ROS1不支持RTOS,非實(shí)時(shí)Linux執(zhí)行(以及開始執(zhí)行)EtherCAT主站程序、傳感器驅(qū)動(dòng)程序的時(shí)間(時(shí)刻)很難實(shí)現(xiàn)固定,導(dǎo)致ROS節(jié)點(diǎn)從EtherCAT主站程序、API處獲知有傳感器數(shù)據(jù)待讀的時(shí)刻也很難實(shí)現(xiàn)固定。ROS2 + RTOS的問題后述。
2.2.3 基于FPGA的架構(gòu)針對(duì)信號(hào)采集過程的解決方法
考慮圖B,對(duì)于采集帶EtherCAT從站接口模塊的傳感器獲得的數(shù)據(jù),由FPGA實(shí)現(xiàn)EtherCAT主站功能,以確保其發(fā)送、接收過程數(shù)據(jù)幀的實(shí)時(shí)性 -- 事實(shí)上,我并不認(rèn)為這樣做是最合適的,我更傾向于武漢J團(tuán)隊(duì)的方案:在實(shí)時(shí)反饋控制環(huán)路中摒棄EtherCAT,將所有傳感器的對(duì)外接口都簡單化,用本小節(jié)后述的方式完成信號(hào)采集。
在FPGA中,為每個(gè)傳感器都提供一塊獨(dú)立的硬件電路作為它們的上位機(jī),形成一個(gè)“DMA控制器集群”,其中的各成員并行運(yùn)行;利用FPGA片內(nèi)硬件資源設(shè)計(jì)控制電路,對(duì)集群中的各成員實(shí)現(xiàn)高效的協(xié)同管理。FPGA中的各“DMA控制器”獨(dú)立響應(yīng)所負(fù)責(zé)傳感器的中斷請(qǐng)求,獨(dú)立按照各傳感器需要的個(gè)性化交互模式建立數(shù)據(jù)通道、讀取其數(shù)據(jù)接口(或讀取其數(shù)據(jù)緩沖區(qū)),把讀出的上傳數(shù)據(jù)緩存在片內(nèi)RAM塊中,按照系統(tǒng)分配下來的CPU外部總線連續(xù)地址段對(duì)緩存的數(shù)據(jù)統(tǒng)一編址,視系統(tǒng)需求提供數(shù)據(jù)更新標(biāo)記、時(shí)間戳。
FPGA根據(jù)預(yù)設(shè)的規(guī)則對(duì)傳感器上傳的中斷信號(hào)進(jìn)行合并、統(tǒng)一向Linux內(nèi)核發(fā)出中斷信號(hào),啟動(dòng)傳感器驅(qū)動(dòng)程序讀取相應(yīng)的地址空間;或者,由1個(gè)掛在CPU外部總線上的DMA控制器統(tǒng)一讀取。
此時(shí),軟件系統(tǒng)中用于傳感器驅(qū)動(dòng)程序由于不再需要直接面對(duì)傳感器硬件信號(hào),因而可以被大幅度簡化,并且不必為了與傳感器建立數(shù)據(jù)通道而無謂等待,從而減少了執(zhí)行驅(qū)動(dòng)程序所占用的CPU工作時(shí)間、降低了這一段CPU工作時(shí)間長度的不確定程度,進(jìn)而降低了ROS節(jié)點(diǎn)獲得傳感器數(shù)據(jù)的時(shí)刻的不確定程度。
2.3 對(duì)數(shù)據(jù)處理階段的分析
2.3.1 基于ROS的架構(gòu)中典型的數(shù)據(jù)處理過程
考慮圖A,在Linux內(nèi)核的調(diào)度下,ROS節(jié)點(diǎn)在屬于自己的CPU工作時(shí)段讀取與它所涉及傳感器、關(guān)聯(lián)ROS節(jié)點(diǎn)對(duì)應(yīng)的內(nèi)存空間,獲取涉及自身狀態(tài)、操作對(duì)象、協(xié)作對(duì)象、外部環(huán)境的數(shù)據(jù),執(zhí)行反饋控制算法,生成待執(zhí)行的指令、節(jié)點(diǎn)間交互信息,寫入內(nèi)存中為其輸出指令、輸出信息分配的地址空間,通過API告知執(zhí)行器驅(qū)動(dòng)程序:有指令、傳輸信息需要讀取。
不具備ROS節(jié)點(diǎn)特征的應(yīng)用程序,在上述機(jī)制涉及的層面上,其行為特征與ROS節(jié)點(diǎn)類似。
2.3.2 基于ROS的架構(gòu)中數(shù)據(jù)處理過程的性能瓶頸
從宏觀上看,機(jī)器人作為強(qiáng)實(shí)時(shí)反饋控制系統(tǒng),應(yīng)該采用RTOS,否則對(duì)軟件編寫的質(zhì)量要求會(huì)很高。但是,ROS1不支持RTOS,實(shí)時(shí)性不好。在使用非實(shí)時(shí)操作系統(tǒng)的情況下,即使針對(duì)有實(shí)時(shí)性需求的功能自己開發(fā)了相應(yīng)的程序模塊,或者,對(duì)涉及的ROS節(jié)點(diǎn)程序進(jìn)行了實(shí)時(shí)性優(yōu)化,各ROS節(jié)點(diǎn)、應(yīng)用程序的執(zhí)行仍然必須時(shí)分復(fù)用CPU(非規(guī)整化的應(yīng)用程序在多核CPU上的顯式并行編程是非常非常復(fù)雜的)、彼此競爭,而操作系統(tǒng)內(nèi)核運(yùn)行過程的不可控性、各級(jí)軟件執(zhí)行時(shí)間的不確定性又將加劇數(shù)據(jù)處理周期的不確定性,最終導(dǎo)致生成下發(fā)指令、交互信息的時(shí)刻不確定,以及執(zhí)行器的動(dòng)作效果(尤其是協(xié)同動(dòng)作效果)不確定。
從微觀上看,不論是馮諾依曼體系結(jié)構(gòu)還是哈佛體系結(jié)構(gòu),反饋控制算法的每一個(gè)運(yùn)算步驟都要遵循指令/數(shù)據(jù)尋址、取指令/數(shù)據(jù)、執(zhí)行指令、寫執(zhí)行結(jié)果的流程,其間還必須經(jīng)過極其復(fù)雜的Cache更新決策、多級(jí)存儲(chǔ)器映射、流水線調(diào)度等一系列底層軟-硬件操作,由此導(dǎo)致大量時(shí)間被消耗在底層指令/數(shù)據(jù)的定位、存取、傳輸、更新的過程中;并且,其間產(chǎn)生的延遲,還必將因?yàn)楦鞣N不可預(yù)知的復(fù)雜情況(例如Cache是否命中,據(jù)說有的RTOS不惜為此關(guān)掉了Cache)及其疊加而變得難以預(yù)測(cè)。
2.3.3 基于FPGA的架構(gòu)針對(duì)數(shù)據(jù)處理過程的解決方法
考慮圖B,利用FPGA高速、并行、運(yùn)算資源極其豐富、定時(shí)精確、功能靈活、硬件直接實(shí)現(xiàn)算法、操作數(shù)存取模式簡單高效的特征,運(yùn)用圖B中FPGA內(nèi)的硬件資源,并行執(zhí)行一部分在圖A中由CPU執(zhí)行的、不很復(fù)雜的、運(yùn)算量大的ROS節(jié)點(diǎn)算法(或一部分ROS節(jié)點(diǎn)算法中的某些步驟),利用片內(nèi)硬件資源設(shè)計(jì)控制電路,對(duì)各算法模塊的運(yùn)行、彼此之間的數(shù)據(jù)交互進(jìn)行高效的協(xié)同管理,形成一個(gè)協(xié)處理器。
例如,個(gè)人比較看好的是精密機(jī)械臂的靈敏控制算法,原因在于其對(duì)運(yùn)算的實(shí)時(shí)性有較高的需求。
實(shí)際應(yīng)用中對(duì)軌跡/位姿復(fù)雜性、反力多變性、運(yùn)動(dòng)敏捷性、動(dòng)作平順性的要求越高,設(shè)計(jì)時(shí)考慮的現(xiàn)場(chǎng)干擾因素越多,對(duì)控制算法的復(fù)雜度的需求就會(huì)越高,對(duì)核心芯片執(zhí)行算法的實(shí)時(shí)性、并行性、協(xié)同性的需求就會(huì)越高。如果能從其反饋控制算法中切分出較多適合FPGA執(zhí)行的部分(主要標(biāo)準(zhǔn)是:運(yùn)算量大、并行性及協(xié)同性要求高,算法可以有一定的復(fù)雜度 -- 由于多數(shù)早期的FPGA工程師是硬件出身,硬件思維比較多,以及,他們最初入手的可編程邏輯芯片是CPLD、簡單FPGA,芯片對(duì)復(fù)雜算法的支持度很低,這些因素導(dǎo)致很多人誤認(rèn)為FPGA只適合執(zhí)行非常簡單的算法,這已經(jīng)是非常過時(shí)的觀念了),必將顯著縮短整個(gè)系統(tǒng)的反饋控制時(shí)間、顯著提高反饋控制時(shí)間的可預(yù)測(cè)性。
另外,F(xiàn)PGA在執(zhí)行圖像處理算法方面比CPU、DSP(作為基于Linux+ROS系統(tǒng)中的協(xié)處理器,下述的GPU同義)強(qiáng)得多,是最優(yōu)方案;在執(zhí)行人工智能算法(從硬件底層實(shí)現(xiàn)已經(jīng)訓(xùn)練好的人工智能網(wǎng)絡(luò))時(shí),F(xiàn)PGA是與GPU并列的主流方案,而且在功耗方面具備非常大的優(yōu)勢(shì)。
進(jìn)而,F(xiàn)PGA在這兩方面的性能,又會(huì)因?yàn)槠渚邆?strong style="font-weight: 600;">實(shí)質(zhì)上的SOC(System On Chip,非特指FPGA內(nèi)置CPU核的“類ZYNQ”架構(gòu))屬性,能夠和其他算法功能模塊、存儲(chǔ)功能模塊、I/O功能模塊實(shí)現(xiàn)基于芯片內(nèi)通信的高效協(xié)同(多通道、大數(shù)據(jù)量、低延遲量、低延遲抖動(dòng)量),從而在系統(tǒng)整體性能上相比于以CPU+DSP/GPU為基礎(chǔ)的Linux+ROS體系結(jié)構(gòu)獲得了更為顯著的加成。
2.4.1 基于ROS的架構(gòu)中典型的指令執(zhí)行過程
考慮圖A,對(duì)于驅(qū)動(dòng)帶EtherCAT從站接口模塊的執(zhí)行器來說,運(yùn)行于Linux內(nèi)核之上的、作為ROS節(jié)點(diǎn)之一(或獨(dú)立運(yùn)行)的EtherCAT主站程序定時(shí)發(fā)送攜帶著各執(zhí)行器所需指令數(shù)據(jù)的過程數(shù)據(jù)幀到以太網(wǎng)環(huán)路(圖中未示出)上,帶EtherCAT從站接口模塊的執(zhí)行器接收過程數(shù)據(jù)幀、從中解析出屬于自己的指令數(shù)據(jù),然后將過程數(shù)據(jù)幀轉(zhuǎn)發(fā)到以太網(wǎng)環(huán)路上,執(zhí)行器執(zhí)行收到的指令。
對(duì)于驅(qū)動(dòng)不帶EtherCAT從站接口模塊的執(zhí)行器來說,在Linux內(nèi)核的調(diào)度下,執(zhí)行器驅(qū)動(dòng)程序獲知下傳指令的需求,在屬于自己的CPU時(shí)段內(nèi),按照總線仲裁時(shí)序訪問系統(tǒng)總線上與自己對(duì)應(yīng)的地址區(qū),讀取屬于自己的內(nèi)存空間以獲取待下傳的指令、數(shù)據(jù), 將其寫入執(zhí)行器的指令緩沖區(qū),或者,以DMA方式直接訪問系統(tǒng)總線上屬于自己的地址區(qū)段、直接對(duì)其進(jìn)行讀取操作。
2.4.2 基于ROS的架構(gòu)中指令執(zhí)行過程的性能瓶頸
對(duì)于驅(qū)動(dòng)帶EtherCAT從站接口模塊的執(zhí)行器來說,作為ROS節(jié)點(diǎn)之一(或獨(dú)立運(yùn)行)的EtherCAT主站程序必須實(shí)時(shí)運(yùn)行,任何比較大的幀發(fā)送延遲抖動(dòng)都有可能導(dǎo)致指令數(shù)據(jù)發(fā)送不及時(shí),從而影響執(zhí)行器的動(dòng)作效果(尤其是協(xié)同動(dòng)作效果)。例如,在CPU運(yùn)算、控制負(fù)荷比較大(例如算法更復(fù)雜、各協(xié)作運(yùn)行的機(jī)械臂的總軸數(shù)更多)的情況下,有可能因?yàn)閿?shù)據(jù)處理不及時(shí)而迫使幀發(fā)送時(shí)刻延后。
對(duì)于驅(qū)動(dòng)不帶EtherCAT從站接口模塊的執(zhí)行器來說,當(dāng)執(zhí)行器數(shù)量比較多、動(dòng)作頻率比較高的時(shí)候,Linux內(nèi)核就必須把大量CPU工作時(shí)間耗費(fèi)在執(zhí)行傳感器驅(qū)動(dòng)程序上,影響承載核心業(yè)務(wù)的各ROS節(jié)點(diǎn)的執(zhí)行。同時(shí),由于各執(zhí)行器的驅(qū)動(dòng)程序只能一個(gè)接一個(gè)地順序執(zhí)行(多核、多線程系統(tǒng)的任務(wù)并行程度本質(zhì)上是比較低的),導(dǎo)致各驅(qū)動(dòng)器的動(dòng)作協(xié)同性是難以保證的。
事實(shí)上,ROS1不支持RTOS,非實(shí)時(shí)Linux執(zhí)行(以及開始執(zhí)行)EtherCAT主站程序、執(zhí)行器驅(qū)動(dòng)程序的時(shí)間(時(shí)刻)很難實(shí)現(xiàn)固定,導(dǎo)致執(zhí)行器從EtherCAT主站程序、執(zhí)行器驅(qū)動(dòng)程序處獲得指令數(shù)據(jù)的時(shí)刻很難實(shí)現(xiàn)固定,最終影響執(zhí)行器的動(dòng)作效果(尤其是協(xié)同動(dòng)作效果)。
2.4.3 基于FPGA的架構(gòu)針對(duì)指令執(zhí)行過程的解決方法
考慮圖B,對(duì)于驅(qū)動(dòng)帶EtherCAT從站接口模塊的執(zhí)行器來說,由FPGA實(shí)現(xiàn)EtherCAT主站功能,以確保其發(fā)送過程數(shù)據(jù)幀的實(shí)時(shí)性 -- 事實(shí)上,我并不認(rèn)為這樣做是最合適的,我更傾向于武漢J團(tuán)隊(duì)的方案:在實(shí)時(shí)反饋控制環(huán)路中摒棄EtherCAT,將所有執(zhí)行器的對(duì)外接口都簡單化,用本小節(jié)后述的方式完成信號(hào)采集。
FPGA一側(cè)掛在CPU的外部總線上,一側(cè)連接各執(zhí)行器、作為它們的上位機(jī),形成一個(gè)“總驅(qū)動(dòng)器”。FPGA并行為各執(zhí)行器提供其所需的信號(hào)波形、指令字段,利用分布式的、并行運(yùn)行的片內(nèi)硬件資源設(shè)計(jì)控制電路,對(duì)各執(zhí)行器的動(dòng)作時(shí)刻進(jìn)行高效的協(xié)同管理,使其按照實(shí)際需要的量化時(shí)序關(guān)系進(jìn)行動(dòng)作,以確保各個(gè)執(zhí)行器協(xié)同動(dòng)作的效果。
同時(shí),軟件系統(tǒng)中用于執(zhí)行器的驅(qū)動(dòng)程序由于不再需要面對(duì)各種各樣的執(zhí)行器硬件信號(hào),從而使執(zhí)行器驅(qū)動(dòng)程序可以盡可能簡化,并且不必為了與執(zhí)行器建立數(shù)據(jù)通道而無謂等待,從而減少了其占用的CPU工作時(shí)間,減少了這一段CPU工作時(shí)間長度的不確定程度,進(jìn)而減少了執(zhí)行器獲得指令的時(shí)刻的不確定程度。
提高ROS節(jié)點(diǎn)、自研應(yīng)用程序模塊的運(yùn)行實(shí)時(shí)性,最直接的方法是把非實(shí)時(shí)Linux換成RTOS。事實(shí)上,據(jù)說ROS2已經(jīng)在兼容RTOS方面做了很多工作。
但是,RTOS的本質(zhì)仍然是軟件操作系統(tǒng),系統(tǒng)中的各內(nèi)核子程序以及運(yùn)行在系統(tǒng)上的中間件、應(yīng)用程序、API、驅(qū)動(dòng)程序,仍然要采用時(shí)分復(fù)用CPU的基本工作模式,其對(duì)CPU內(nèi)核流水線調(diào)度、Cache更新決策、多級(jí)存儲(chǔ)器映射、存儲(chǔ)器一致性操作等復(fù)雜、耗時(shí)、延遲不確定的底層軟硬件操作的依賴,也是不可能改變的。也就是說,即使基于RTOS實(shí)現(xiàn)了機(jī)器人控制系統(tǒng),其實(shí)時(shí)性指標(biāo)也會(huì)比FPGA低很多。
而且,從筆者已經(jīng)了解到的信息來看,目前ROS2對(duì)RTOS的支持仍然是不完善的。
綜上所述,在機(jī)器人反饋控制系統(tǒng)中加入FPGA,能夠提高多路傳感器采樣的實(shí)時(shí)性、協(xié)同性,提高反饋控制算法的實(shí)時(shí)性、協(xié)同性,提高多路驅(qū)動(dòng)器動(dòng)作的實(shí)時(shí)性、協(xié)同性,進(jìn)而提高反饋控制的速度(同等速度下提高對(duì)更復(fù)雜、協(xié)同性要求更高、基于更多路傳感器/執(zhí)行器的、效果更好的反饋控制算法的承載力),降低反饋控制過程耗時(shí)的不確定性,優(yōu)化反饋控制的效果。
3.1 在機(jī)器人領(lǐng)域深入應(yīng)用FPGA技術(shù)的基本思路
分析反饋控制流程中的所有算法、功能模塊,只要適合在FPGA中予以實(shí)現(xiàn),就移植到FPGA中,以使系統(tǒng)實(shí)時(shí)性最大化、承載更多高性能算法(此前因?yàn)檫\(yùn)算量大、實(shí)時(shí)性差而被放棄了);與此同時(shí),中高端CPU(以及DSP)及其基于ROS的軟件系統(tǒng)負(fù)責(zé)實(shí)現(xiàn)反饋控制算法流程中復(fù)雜程度太大以至于不適合用FPGA實(shí)現(xiàn)的算法模塊,以及ROS節(jié)點(diǎn)等低實(shí)時(shí)性需求的復(fù)雜算法模塊;低端CPU(或者空閑時(shí)段的中高端CPU)負(fù)責(zé)非實(shí)時(shí)的慢速任務(wù),例如系統(tǒng)管理、人機(jī)界面、讀寫慢速外圍設(shè)備(如FLASH)等等,并經(jīng)外部接口完成與中高端CPU(以及DSP)、FPGA之間的慢速數(shù)據(jù)交互。
FPGA的一側(cè)連接傳感器、執(zhí)行器,獲取各監(jiān)測(cè)點(diǎn)的實(shí)時(shí)狀態(tài)信息、發(fā)出控制指令及參數(shù);一側(cè)連接中高端CPU(以及DSP)的高速外部總線,與之進(jìn)行反饋控制算法數(shù)據(jù)的實(shí)時(shí)交互;另一側(cè)連接低端CPU的外部接口,獲取配置信息等慢速數(shù)據(jù),提交系統(tǒng)管理、人機(jī)界面所需的狀態(tài)信息。
武漢J團(tuán)隊(duì)基于Zynq的“新一代片上驅(qū)控一體系統(tǒng)”,也是可供選擇的很好的方案。但是,我認(rèn)為,除了應(yīng)考慮將更多算法移植進(jìn)FPGA,他們的一些重要設(shè)計(jì)思想應(yīng)該加以修改。
另外,如果仍然希望使用帶有EtherCAT從站模塊的傳感器、執(zhí)行器,則應(yīng)將EtherCAT主站的實(shí)時(shí)部分的功能移植到FPGA中予以實(shí)現(xiàn)。
在這個(gè)技術(shù)方向,華中科技大學(xué)的宋寶教授帶領(lǐng)的團(tuán)隊(duì)(并非前述的武漢J團(tuán)隊(duì))已經(jīng)獲授了一項(xiàng)發(fā)明專利:一種基于FPGA的EtherCAT主站裝置(CN201510107162.X,在國家知識(shí)產(chǎn)權(quán)局網(wǎng)站能查到詳情)。
在系統(tǒng)架構(gòu)設(shè)計(jì)方面,需要首先如下個(gè)自然段所述大致確定算法移植的方案,然后由FPGA工程師與機(jī)器人系統(tǒng)架構(gòu)設(shè)計(jì)師進(jìn)行討論,針對(duì)現(xiàn)有某產(chǎn)品控制系統(tǒng)的軟硬件功能劃分方案、軟硬件底層通訊機(jī)制、軟硬件上層數(shù)據(jù)交互機(jī)制、軟硬件時(shí)序協(xié)同機(jī)制、軟件系統(tǒng)的基本框架、FPGA系統(tǒng)的基本框架、硬件系統(tǒng)的基本框架、各種傳感器/執(zhí)行器的性能參數(shù)和接口特征、整機(jī)數(shù)據(jù)流設(shè)計(jì)、整機(jī)時(shí)序配合機(jī)制進(jìn)行比較深入的討論,最終共同商討確定新版系統(tǒng)架構(gòu)。
在算法移植方面,FPGA工程師很可能對(duì)于機(jī)器人專業(yè)涉及的位姿計(jì)算、動(dòng)力學(xué)計(jì)算、運(yùn)動(dòng)規(guī)劃、運(yùn)動(dòng)控制、伺服驅(qū)動(dòng)等等算法了解不多,需要由相關(guān)的算法設(shè)計(jì)師對(duì)各種算法的原理、框架、基本的運(yùn)算流程(常規(guī)內(nèi)容即可,可以不針對(duì)相關(guān)單位實(shí)際采用的技術(shù))進(jìn)行梳理,然后由FPGA工程師研究判斷其中哪一些可以移植進(jìn)FPGA,進(jìn)而初步確定算法移植方案。
事實(shí)上,根據(jù)筆者看過的一些技術(shù)資料,多軸機(jī)器人的運(yùn)動(dòng)規(guī)劃、運(yùn)動(dòng)控制算法中雖然涉及大量復(fù)雜的公式變換,但絕大多數(shù)運(yùn)算都能變換為由基礎(chǔ)算子(算術(shù)運(yùn)算、開方、三角函數(shù)等)構(gòu)成的形式,都可以基于FPGA實(shí)現(xiàn),實(shí)現(xiàn)之后必將大幅度提高運(yùn)動(dòng)規(guī)劃、運(yùn)運(yùn)動(dòng)控制算法執(zhí)行的實(shí)時(shí)性。
在初步確定算法移植方案之后,由算法設(shè)計(jì)師將現(xiàn)有產(chǎn)品的待移植算法進(jìn)行簡化,然后借助數(shù)學(xué)變換將其轉(zhuǎn)化為由基礎(chǔ)算子構(gòu)成的形式,由FPGA工程師或算法設(shè)計(jì)師用MATLAB驗(yàn)證其效果,由FPGA工程師依據(jù)各算法模塊本身的實(shí)現(xiàn)過程、算法模塊之間的協(xié)同情況、基礎(chǔ)算子的參數(shù)特征和應(yīng)用場(chǎng)景、資源調(diào)度需求的特征等等因素,規(guī)劃待移植算法在FPGA中實(shí)現(xiàn)的體系架構(gòu)、FPGA與外部軟/硬件模塊的接口形式及協(xié)同機(jī)制(為外部軟/硬件模塊的修改提供依據(jù)),然后寫HDL代碼予以實(shí)現(xiàn)。
之后,將FPGA工程生成的加載文件寫入FPGA板的板載FLASH芯片,在新的軟/硬件系統(tǒng)的合作下運(yùn)行機(jī)器人系統(tǒng),初步驗(yàn)證加入FPGA之后的運(yùn)行效果。
進(jìn)而,整理各種已研究過但尚未添加的各種優(yōu)化算法,各種有思路但因?yàn)?strong style="font-weight: 600;">運(yùn)算量大、CPU/DSP+軟件的實(shí)時(shí)性不能滿足系統(tǒng)要求而被放棄的各種優(yōu)化算法,添加進(jìn)FPGA設(shè)計(jì)、系統(tǒng)設(shè)計(jì)中,針對(duì)機(jī)器人的動(dòng)力學(xué)實(shí)時(shí)運(yùn)算、精細(xì)化實(shí)時(shí)運(yùn)動(dòng)控制、反力的精細(xì)化捷變響應(yīng)等性能進(jìn)行深度優(yōu)化。
4 系統(tǒng)優(yōu)化科技樹 -- 基于FPGA實(shí)現(xiàn)EtherCAT主站控制器之后
考慮到EtherCAT仍然是當(dāng)前機(jī)器人系統(tǒng)架構(gòu)中的主流總線,在此提供基于FPGA實(shí)現(xiàn)EtherCAT主站控制器之后的系統(tǒng)優(yōu)化科技樹,由業(yè)內(nèi)人士進(jìn)行參考。
目前,在FPGA應(yīng)用方面,業(yè)界正處在從局部性能優(yōu)化(伺服驅(qū)動(dòng)器)到系統(tǒng)架構(gòu)優(yōu)化(武漢J團(tuán)隊(duì)、某大型國企)轉(zhuǎn)變的最初階段,一旦完成比較成熟的應(yīng)用案例,其性能優(yōu)勢(shì)必將非常顯著,不能及時(shí)跟進(jìn)的企業(yè)在產(chǎn)品性能落后、受到先行者建立的專利體系的制約的情況下,必將面臨嚴(yán)峻的挑戰(zhàn)。
所以,筆者在此向從事機(jī)器人整機(jī)研發(fā)、控制系統(tǒng)/部件研發(fā)的各單位提出建議:
認(rèn)真考慮在產(chǎn)品中深入應(yīng)用FPGA技術(shù),建立系統(tǒng)架構(gòu)、底層技術(shù)、產(chǎn)品性能的優(yōu)勢(shì),以期在新一輪行業(yè)技術(shù)創(chuàng)新中搶得先機(jī)。
1 《計(jì)算機(jī)體系結(jié)構(gòu):量化研究方法》,作者:John L. Hennessy,David A. Patterson。
2 《計(jì)算機(jī)組成與設(shè)計(jì):硬件/軟件接口》,作者:David A. Patterson,John L。Hennessy。
3 《ROS入門實(shí)例》,作者:R.帕特里克.戈貝爾,J.羅哈斯。
4 《工業(yè)以太網(wǎng)現(xiàn)場(chǎng)總線EtherCAT驅(qū)動(dòng)程序設(shè)計(jì)及應(yīng)用》,作者:郇極,劉艷強(qiáng)。
5 《現(xiàn)場(chǎng)總線CANopen設(shè)計(jì)與應(yīng)用》,作者:Holger Zeltwanger。
6 知乎回答:如何評(píng)價(jià)微軟在數(shù)據(jù)中心使用 FPGA 代替?zhèn)鹘y(tǒng) CPU 的做法? ,作者:李博杰
7 知乎文章:林偉:FPGA的性能特征及其尷尬處境
8 知乎文章:林偉:演示基于FPGA的圖像處理模塊:Harris角點(diǎn)實(shí)時(shí)提取、視頻流DDR3緩沖,關(guān)于FPGA的拓展分析
9 知乎文章:林偉:關(guān)于波士頓動(dòng)力Atlas機(jī)器人的最新動(dòng)作:轉(zhuǎn)體起跳,關(guān)于FPGA
10 知乎文章:林偉:優(yōu)必選Walker機(jī)器人解鎖上樓梯動(dòng)作,與行走動(dòng)作的對(duì)比分析
11 知乎回答:雙臂冗余機(jī)器人有哪些研究熱點(diǎn)? ,作者:林偉
12 知乎回答:數(shù)字孿生背后的關(guān)鍵技術(shù)是什么? ,作者:林偉
https://zhuanlan.zhihu.com/p/349759810?utm_source=wechat_session&utm_medium=social&utm_oi=886903612599574528&from=timeline&s_r=0
推薦閱讀

轉(zhuǎn)載申明:轉(zhuǎn)載本號(hào)文章請(qǐng)注明作者和來源,本號(hào)發(fā)布文章若存在版權(quán)等問題,請(qǐng)留言聯(lián)系處理,謝謝。
推薦閱讀
更多架構(gòu)相關(guān)技術(shù)知識(shí)總結(jié)請(qǐng)參考“架構(gòu)師技術(shù)全聯(lián)盟書店”相關(guān)電子書(35本技術(shù)資料打包匯總詳情可通過“閱讀原文”獲取)。
全店內(nèi)容持續(xù)更新,現(xiàn)下單“架構(gòu)師技術(shù)全店打包匯總(全)”,后續(xù)可享全店內(nèi)容更新“免費(fèi)”贈(zèng)閱,價(jià)格僅收188元(原總價(jià)290元)。
溫馨提示:
掃描二維碼關(guān)注公眾號(hào),點(diǎn)擊閱讀原文鏈接獲取“架構(gòu)師技術(shù)全店資料打包匯總(全)”電子書資料詳情。
