徐 偉
(江漢大學(xué)工程訓(xùn)練中心 武漢 430056)
縱觀仿生機器人發(fā)展歷程,到現(xiàn)在為止經(jīng)歷了三個階段。第一階段是原始探索時期,該階段主要是生物原型的原始模仿,如原始的飛行器,模擬鳥類的翅膀撲動,該階段主要靠人力驅(qū)動。第二個階段是宏觀仿形與運動仿生階段,20世紀(jì)中后期,由于計算機技術(shù)的出現(xiàn)以及驅(qū)動裝置的革新,主要是利用機電系統(tǒng)實現(xiàn)諸如行走、跳躍、飛行等生物功能,并實現(xiàn)了一定程度的人為控制。進入21世紀(jì),隨著人類對生物系統(tǒng)功能特征、形成機理認(rèn)識的不斷深入,以及計算機技術(shù)的發(fā)展,仿生機器人進入了第三個階段,機電系統(tǒng)開始與生物性能進行部分融合,如傳統(tǒng)結(jié)構(gòu)與仿生材料的融合以及仿生驅(qū)動的運用[1]。
當(dāng)前,隨著生物機理認(rèn)識的深入、智能控制技術(shù)的發(fā)展,仿生機器人正向第四個階段發(fā)展,即結(jié)構(gòu)與生物特性一體化的類生命系統(tǒng),強調(diào)仿生機器人不僅具有生物的形態(tài)特征和運動方式,同時具備生物的自我感知、自我控制等性能特性,更接近生物原型[2]。
在實驗室利用傳感器模擬不同外界刺激,實現(xiàn)生物的自我感知、自我控制特性是本文仿生機器人設(shè)計的突破點,也是一個難題。
21世紀(jì)初,俄羅斯生理學(xué)家巴甫洛夫在研究條件反射的過程中,創(chuàng)立了高級神經(jīng)活動學(xué)說,即反射弧理論。在中樞神經(jīng)系統(tǒng)的控制下,機體對刺激所做出的規(guī)律性應(yīng)答反應(yīng)稱為反射[3]。連接肌肉中感受器和脊髓的弧線或路徑穿過間隙,回到肌肉纖維,稱之為反射弧(reflex arc)[4]。
巴甫洛夫認(rèn)為反射是有機體與環(huán)境取得平衡的基本形式,反射弧是反射的結(jié)構(gòu)基礎(chǔ)和生理基礎(chǔ)。反射弧通常由感受器、傳入神經(jīng)、反射中樞、傳出神經(jīng)和效應(yīng)器五個部分組成,包括從接受刺激到發(fā)生反應(yīng)整個神經(jīng)系統(tǒng)內(nèi)循環(huán)的路徑。反射活動的完成依賴于反射弧的完整性,如果反射弧中任何一環(huán)節(jié)被破壞,反射活動都不能進行[5]。
按照神經(jīng)反射弧的生物學(xué)理論,對仿生機器人的神經(jīng)反射弧實驗確定實驗?zāi)繕?biāo),本實驗既要使仿生機器人能實現(xiàn)神經(jīng)反射弧的基本傳導(dǎo)功能,體現(xiàn)神經(jīng)反射弧的絕對不應(yīng)期和相對不應(yīng)期。同時,還要體現(xiàn)仿生機器人的“大腦”對反射弧產(chǎn)生的抑制作用和“腎上腺素”對反射弧的激勵作用,具體功能如下:
1)反射弧的基本傳導(dǎo)功能。反射弧的傳導(dǎo)是單向連接,從肌肉感受器到感覺傳導(dǎo)纖維,再通過脊髓間隙或者神經(jīng)突觸到達(dá)運動纖維,之后穿過肌肉神經(jīng)結(jié)點最終傳遞到肌肉纖維[6]。肌肉感受器和與之相關(guān)的反射弧有不同的閾值,與數(shù)字電路類似,一旦感受器閾值達(dá)到,感受器就被觸發(fā)[7]。
2)反射弧的絕對不應(yīng)期和相對不應(yīng)期。反射弧有一個絕對不應(yīng)期(absolute refractory period)或者說在觸發(fā)后需要經(jīng)過一定的時間才能再次觸發(fā),可以把這一段時間認(rèn)為是感受器的重啟期。在絕對不應(yīng)期后,感受器對刺激是不敏感的。隨后,反射弧呈現(xiàn)出一個相對不應(yīng)期(relative refractory period)[8]。即在絕對不應(yīng)期后,感受器的不靈敏程度呈指數(shù)形式減弱,也即感受器靈敏程度應(yīng)該是逐步加強,如圖1所示。
3)反射弧實驗的第三個特點是來自大腦的另外一些神經(jīng)纖維。當(dāng)它們被激活時,能夠抑制(inhibit)反射弧的行為,按時或者直接命令運動系統(tǒng)采取一些措施或者直接停止某種錯誤的反射行為[9]。但反射行為的速度遠(yuǎn)大于可疑行為的速度,因為刻意行為的速度可能涉及到各種信號,信號在大腦中要穿過成百上千的連接點或神經(jīng)突觸(neural synapse),而反射弧只設(shè)計一堆局部神經(jīng)元,所以刻意行為要比反射弧緩慢得多[10]。所以在后面程序編譯中,定義抑制常量(globalInhibition)要略大于興奮常量(globalExcitation)。
圖1 反射弧的絕對不應(yīng)期和相對不應(yīng)期
4)反射弧實驗的第四個特點是腎上腺素的參與。腎上腺素是人體經(jīng)歷某種刺激后,由腎上腺分泌的激素。腎上腺素的作用比較復(fù)雜,而且對于不同的器官的影響也大相庭徑??傮w來說,腎上腺素能暫時增強肌肉收縮力并增強忍耐力[11]。
一般電化學(xué)信號由大腦或感受器發(fā)出,最終傳遞到神經(jīng)纖維,但腎上腺激素與人體神經(jīng)系統(tǒng)的電化學(xué)信號不同,它并不生成信號,它只是降低觸發(fā)感受器的閾值,而且當(dāng)反射弧發(fā)生時,能最大限度發(fā)揮肌肉收縮潛能[12]。神經(jīng)反射弧的生物原理如圖2所示。
圖2 反射弧的生物原理圖
仿生機器人神經(jīng)反射弧實驗基于Arduino單片機,一個開源的單片機電子設(shè)計硬件平臺。硬件部分由Atmel AVR單片機、I/O接口及相關(guān)電路組成,軟件部分包括標(biāo)準(zhǔn)的程序編譯器和程序下載器。作為一種新型的集成開發(fā)環(huán)境,其采用C++或Java語言編程,簡單易用且適用面廣[13]。主要硬件如下:
1)伺服舵機兩個。伺服電機由一個電機和一個編碼器組成,編碼器可以跟蹤電機旋轉(zhuǎn)角度,所以伺服電機可以用于靜謐的運動,實現(xiàn)移動若干角度到達(dá)準(zhǔn)確位置。一般伺服電機轉(zhuǎn)動角度從0°~179°,在本實驗中模擬生物體肌肉的動作。伺服電機引腳分別接Arduino單片機的數(shù)字量9、10引腳。這里的10號引腳上的伺服電機可以看做是第二塊肌肉或者同一塊肌肉上的第二束肌肉纖維。
2)S1、S2兩個觸敏開關(guān)。分別接Arduino單片機的6、7號數(shù)字量引腳。其中7號S1模擬大腦,在實驗中抑制反射。6號模擬腎上腺素,在實驗中促進反射。
3)P1是10KΩ的線性電位器,它的讀數(shù)通過Arduino UNO的模擬量輸入端口A0讀入,控制伺服電機的初始位置。在刺激消失的情況下,伺服電機能夠回到初始狀態(tài)的位置。
4)FSR1是Sparkfun生產(chǎn)的力敏電阻。這種電阻在無外力時阻值最大可達(dá)到1MΩ,若用手在上面輕輕按壓,則可以改變其阻值。當(dāng)壓力越大,其阻值越小,最小可達(dá)到1KΩ。力敏電阻模擬的是外界刺激。
5)力敏電阻和一個10KΩ的電阻R1形成串聯(lián)回路,通過按壓力敏電阻FSR1,改變力敏電阻的電阻值,R1兩端的分壓也會隨之改變。這樣,R1兩端的電壓信號則反映了外界刺激的大小,該數(shù)值通過Arduino UNO的模擬量輸入端口A1讀入。
其硬件原理圖如圖3所示。
圖3 仿生機器人神經(jīng)反射弧硬件原理圖
編寫仿生機器人神經(jīng)反射弧程序代碼,如何做到通過以上多個傳感器共同完成一個反射動作?這是一個關(guān)鍵的問題。解決渠道一般有兩種方式:
1)包容體系結(jié)構(gòu)(subsumption architecture)。在這種體系結(jié)構(gòu)內(nèi),某些特定的傳感器可以否決或抑制其余的傳感器,可以認(rèn)為手工劃分傳感器等級,但這種方法的問題在于不能很好地處理一些錯綜復(fù)雜的情況[14]。
2)傳感器融合(sensor fusion)。這種方法可以處理那些由不同傳感器發(fā)出的可能沖突的信號,簡單來說就是傳感器信號的混合[15]。有很多種辦法可以實現(xiàn)傳感器信號的融合,簡單的方法就是直接取各傳感器信號的平均值,較為復(fù)雜的辦法是用數(shù)字信號濾波器應(yīng)用于多傳感器輸出的信號,或者用相應(yīng)的算法公式在程序中體現(xiàn)出來[16]。
經(jīng)適當(dāng)調(diào)試的傳感器融合程序?qū)⑾嚓P(guān)傳感器傳來的信號按特定方式綜合,通過這種方式對設(shè)計觸發(fā)和抑制反射的復(fù)雜問題給出一個有意義且實施有效的響應(yīng)。本程序中的語句“FSRValue>(noiseLevel+(inhibitionState*globalInhibition)+(excitationState*globalExcitation))”就是典型的傳感器融合用法。
注1:參見硬件組成部分,將各輸入、輸出引腳以全局變量定義;
注2:定義P1線性電位器的引腳;
注3:定義馬達(dá)延時5ms,馬達(dá)反射延時2ms;
注4:給絕對不響應(yīng)賦予初值1000ms,即1s;
注5:用millis函數(shù)分別給當(dāng)前時間變量和相對時間變量賦予初值,即當(dāng)前程序運行的時間值,單位為ms;
注6:給定干擾值,經(jīng)驗數(shù)據(jù),可以人為設(shè)定;
注7:為相對不響應(yīng)期設(shè)定一個斜率參數(shù)1000;
注8:為S1和S2分別設(shè)定一個權(quán)重系數(shù)值,經(jīng)驗數(shù)據(jù),可以人為設(shè)定;
注9:當(dāng)前時間與絕對不應(yīng)期的基數(shù)時間值的差只有大于絕對不響應(yīng)設(shè)定值(1000ms)時,才能發(fā)生反射弧現(xiàn)象;
注10:觸發(fā)值triggerVal取干擾值和相對不應(yīng)期漸進直線的縱坐標(biāo)值,相對不應(yīng)期本來應(yīng)該是一個指數(shù)函數(shù),但為了編程方便,采取用一個漸進直線函數(shù)y=kx+b,k取0.25,b取1000;
注11:只有當(dāng)力敏傳感器FSRMaxVal的值大于觸發(fā)值時,刺激反射才能發(fā)生,程序轉(zhuǎn)而去運行makeReflex()子函數(shù),發(fā)生反射動作;
注12:當(dāng)力敏傳感器FSRMaxVal的值小于觸發(fā)值時,刺激反射不發(fā)生,程序轉(zhuǎn)而去運行置位子函數(shù)reset(),等待下一次的“刺激”。
以上基于Arduino仿生機器人神經(jīng)反射弧實驗通過傳感器和舵機組成的硬件電路,完全可以實現(xiàn)神經(jīng)反射弧的一系列仿真動作。同時,可以在代碼中加入中斷或者其他更加復(fù)雜的算法,使程序代碼可以為后續(xù)的仿生機器人的制作設(shè)置專門的“神經(jīng)反射弧”的庫文件,可以無限地在仿生機器人相關(guān)的實驗中進行擴展和應(yīng)用。在未來的發(fā)展中,仿生機器人將生物基礎(chǔ)理論與機器人控制相結(jié)合,可以在行為鏈、動態(tài)平衡、光視覺、聲音定位、心肺功能、內(nèi)循環(huán)系統(tǒng)、機體衰老和情感表達(dá)等方面進行實驗和探索。