崔雪渭,彭熙,2,3,顏順,陳含麗子,杜笛簫,楊琬晨
(1 華中師范大學(xué) 計算機學(xué)院,武漢 430079;2 湖北省高等學(xué)校計算機基礎(chǔ)實驗教學(xué)示范中心,武漢 430079;3 湖北省人工智能與智慧學(xué)習(xí)重點實驗室,武漢 430079)
隨著控制技術(shù)、信息技術(shù)等現(xiàn)代科技的飛速發(fā)展,擁有與人手相似結(jié)構(gòu)的仿生機械手已具備很強的靈活性,因而可代替人手完成復(fù)雜操作,成為醫(yī)療保健、資源勘探、災(zāi)難救援等諸多領(lǐng)域的實用工具[1]。表面肌電信號(Surface Electromyography,SEMG)是肌肉收縮時伴隨的電信號,是在體表無創(chuàng)檢測肌肉活動的高效方法,在人機交互控制、手勢識別等領(lǐng)域發(fā)揮著重要作用[2]。
在仿生機械手結(jié)構(gòu)設(shè)計方面,Xu 等人[3]提出了一種與人手高度相似的仿生機械手結(jié)構(gòu)。在肌電信號方面,程揚威[4]對基于多通道表面肌電特征圖像的手勢識別進行了深入研究,通過提取不同表征的肌電特征及深度學(xué)習(xí),實現(xiàn)了對不同手勢的精準(zhǔn)識別。吳娜[5]也提出了一種基于一維卷積神經(jīng)網(wǎng)絡(luò)-獨立循環(huán)神經(jīng)網(wǎng)絡(luò)(Conv1D-IndRNN)模型的手勢識別算法,提升了通過表面肌電信號進行手勢識別的準(zhǔn)確率。但是對于如何將肌電信號處理與仿生機械手控制相結(jié)合,構(gòu)成面向仿生機械手的肌電控制系統(tǒng),卻少見成熟可行的設(shè)計。
本文提出了一種面向仿生機械手的肌電控制系統(tǒng)的設(shè)計與實現(xiàn),即仿生機械手能夠?qū)崟r模擬手部動作,可用于災(zāi)難救援、醫(yī)療恢復(fù),也可用于排爆等高危環(huán)境中。
本文所設(shè)計的仿生機械手肌電控制系統(tǒng)大致可以分為3 個部分:肌電信號的采集、肌電信號的處理和動作匹配。首先,利用六導(dǎo)聯(lián)肌肉電傳感器搭配Arduino UNO 采集肌電信號;然后,樹莓派接收Arduino UNO 傳送的數(shù)據(jù),進行數(shù)據(jù)處理和加工;最后由樹莓派做出判斷,向仿生機械手發(fā)出運動指令,使其執(zhí)行相應(yīng)的動作。各組成部分的結(jié)構(gòu)框架如圖1 所示。
圖1 仿生機械手肌電控制系統(tǒng)的結(jié)構(gòu)框架Fig.1 Structural framework of myoelectric control system of bionic manipulator
本文選用的肌電傳感器為六導(dǎo)聯(lián)肌肉電傳感器,能夠采集人體手臂或者腿部的表面肌電信號,并對其進行一系列的放大與濾波處理。還有2 種通道增益方式,也可結(jié)合Arduino UNO 輸出原始肌電信號或者包絡(luò)后的肌電信號。
樹莓派是一款基于ARM 的微型電腦主板,以SD/MicroSD 卡為內(nèi)存硬盤,不僅具備所有PC 的基本功能,還有著豐富的硬件接口。本文使用的樹莓派四代B型,具有40 個引腳接口,不僅可以讀取肌電傳感器采集的肌電信號并進行處理匹配,還可以與仿生機械手進行串口通信,以控制仿生機械手做出與肌電信號相對應(yīng)的動作。
本文選用了樹莓派和并行舵機控制板協(xié)同工作的方式,根據(jù)通信原理及舵機控制指令對樹莓派控制系統(tǒng)進行設(shè)計。即樹莓派在對肌電信號加以處理后,將進行仿生機械手的動作匹配,再向并行舵機控制板發(fā)出相應(yīng)命令,從而控制仿生機械手對動作進行實時模擬。
肌電信號,是人體運動時肌肉產(chǎn)生的生物電信號,能夠反映肌肉動作的狀態(tài)。當(dāng)人的肌肉在運動時,相應(yīng)的肌肉群會發(fā)生收縮。比如,當(dāng)人的右手運動時,會受到大腦中樞神經(jīng)系統(tǒng)的控制,右手骨骼肌的肌肉將會收縮以完成相應(yīng)動作,此時就會在皮膚表面產(chǎn)生生物電信號。
肌電信號具有微弱性、低頻性、易受干擾性等特點[6],其幅值主要在100~5 000 μV,頻率范圍在0~1 000 Hz,信號中的主要能量和頻譜主要集中在10~500 Hz。同時,采集肌電信號時易受電極位置、皮膚狀態(tài)、場所噪音等影響。
目前,肌電信號的采集方式主要有2 種:侵入式采集與非侵入式采集。兩者的區(qū)別在于采集的位置和方式不同。其中,侵入式采集需要把針極刺入被試者的肌肉組織內(nèi)部,這樣一來信號采集的過程就不受外界干擾,但在一定程度上會對被試者造成傷害;非侵入式采集需要把電極貼片與被試者的皮膚表面接觸,通過此種方式采集到的信號就是表面肌電信號。
本文選用六導(dǎo)聯(lián)肌肉電傳感器進行肌電信號的非侵入式采集。其前端采集電路通過1~6 通道采集人體手臂或者腿部的肌電信號,并對SEMG 進行一系列的放大與濾波;中端通過單刀雙擲開關(guān)切換Envelope Mode 和RAW Mode 輸出信號;后端采用Arduino UNO 采集中端的輸出信號,并控制LED燈發(fā)光,可以通過其亮度快速得出SEMG 信號的強度。
肢體所完成的動作是依靠若干肌肉相互協(xié)調(diào)所致,并非其中一塊肌肉單獨引起的。人體手臂的肌肉分布如圖2 所示。
圖2 人體手臂肌肉分布示意圖Fig.2 Schematic diagram of human arm muscles
經(jīng)過反復(fù)的實驗測試,發(fā)現(xiàn)指部的伸屈與肱橈肌、指淺屈肌、指深屈肌、尺側(cè)腕屈肌和橈側(cè)腕屈肌的關(guān)系更加緊密。故將肌電傳感器的一次性貼片電極貼在上述肌肉組織上進行采集。該電極貼片與肌肉接觸面積小,從而能夠減少周邊肌肉對選定肌肉的信號干擾。根據(jù)前人的醫(yī)學(xué)研究發(fā)現(xiàn),在被試者手臂上放置4~5 個電極片,可使動作識別率最大化。
在多通道肌電信號的數(shù)據(jù)處理中,活動段檢測是極其重要的一個部分,可以確定很多組手勢中每一個手勢動作的起始時刻和終止時刻,對每一個手勢動作進行劃分。信號的活動段檢測能夠?qū)B續(xù)多個手勢動作進行準(zhǔn)確判別,直接影響著后期的特征提取和模式分類。本文使用移動平均法進行活動段檢測。移動平均法是短時能量檢測算法中一種典型方法,能夠從連續(xù)的肌電信號中有效區(qū)分出活動段和靜息段,方便不同手勢動作的識別。
在初步采集中,共收集了3 個動作的39 445 條肌電信號數(shù)據(jù)。由于采集時肌電傳感器使用了2 個通道,因此數(shù)據(jù)集的總維度是39 445×2,對應(yīng)39 445個標(biāo)簽。此后,根據(jù)標(biāo)簽將數(shù)據(jù)轉(zhuǎn)換為3 個部分,并在每個部分中進行分組操作,每200 個合并為一組,因此每一組的維度為200×2×1,作為卷積神經(jīng)網(wǎng)絡(luò)的輸入。在訓(xùn)練過程中將數(shù)據(jù)集打亂,同時對標(biāo)簽數(shù)據(jù)進行one-hot 操作,并取80%作為訓(xùn)練集,20%作為測試集。在構(gòu)建神經(jīng)網(wǎng)絡(luò)模型時使用了Python的Keras 模塊,該卷積神經(jīng)網(wǎng)絡(luò)共有5 層、即3 層卷積層和2 層全連接層,如圖3 所示。
圖3 卷積神經(jīng)網(wǎng)絡(luò)模型圖Fig.3 Convolution neural network model
每一層經(jīng)過卷積操作后得到的特征圖大小的計算公式如下:
特征圖的數(shù)目由卷積核個數(shù)決定,因此每一次卷積操作之后得到的特征圖大小為(高度,寬度,卷積核個數(shù))。
本文中,選擇了基于梯度優(yōu)化算法的Adam 優(yōu)化器,損失函數(shù)則選擇了多分類研究任務(wù)中常用的categorical_crossentropy。訓(xùn)練過程共迭代100次,每次訓(xùn)練的數(shù)據(jù)樣本量為64。訓(xùn)練后的損失值如圖4 所示。
圖4 訓(xùn)練集和測試集損失值Fig.4 Loss value of training set and test set
考慮到樹莓派達不到正常PC 機的算力,為了能夠在用樹莓派運行時取得實時的效果,本文采用了KNN 分類算法,KNN 算法作為最經(jīng)典的機器學(xué)習(xí)算法之一,實現(xiàn)起來也十分簡單。KNN 算法的核心思想為:如果2 個樣本足夠相似,即在特征空間中的距離足夠近,則這2 個樣本大概率屬于同一類別。為了提高判斷的準(zhǔn)確率,在實際應(yīng)用中通常尋找離待測樣本最近的K個樣本,根據(jù)K個樣本的類別來判斷待測樣本的類別。在不考慮距離權(quán)重時,K個樣本中哪種類別的樣本數(shù)量最多,則待測樣本同屬于此類別。本文使用了Sklearn庫中的KNeighborsClassifier 來實現(xiàn)KNN 算法。
首先是采集數(shù)據(jù),將采集到的握拳、張開以及Yeah 手勢的數(shù)據(jù)集分別設(shè)置標(biāo)簽,依據(jù)標(biāo)簽分成三大組。而后將一個標(biāo)簽中的數(shù)據(jù)視為KNN 中的一個點,將數(shù)據(jù)集中80%的數(shù)據(jù)設(shè)置為訓(xùn)練集,將數(shù)據(jù)集中20%的數(shù)據(jù)設(shè)置為測試集。
之后將數(shù)據(jù)進行存儲后便可以進行K個預(yù)測投票,再利用測試集中的數(shù)據(jù)進行測試,發(fā)現(xiàn)精度達到96%,屬于簡單的學(xué)習(xí)任務(wù),適用于KNN 算法。
用新數(shù)據(jù)預(yù)測時,可按行讀取輸入的數(shù)據(jù),并按行投票判斷歸屬于哪一類,最終將每一行的結(jié)果再依據(jù)類別進行累計,輸出累計數(shù)目最多的結(jié)果。
本機械手具有高度的仿生性能,根據(jù)人手手指關(guān)節(jié)的結(jié)構(gòu)和運動自由度進行設(shè)計,采用了連桿結(jié)構(gòu),使得一個伺服舵機能夠控制一個手指上3 個關(guān)節(jié)的運動,即伺服舵機通過主舵轉(zhuǎn)動推動連桿使得一個手指向前彎曲,主舵反方向轉(zhuǎn)動拉動連桿使得手指伸張,如圖5 所示。這樣的結(jié)構(gòu)能夠使仿生機械手比較輕巧靈活地實現(xiàn)人手的動作。
圖5 機械手連桿結(jié)構(gòu)Fig.5 Connecting rod structure of the manipulator
仿生機械手使用的舵機是LX-224 雙軸總線舵機,如圖6 所示。LX-224 雙軸總線舵機扭矩為20 kg,自由度為180°,能夠充分滿足手指關(guān)節(jié)的運動需求。
圖6 LX-224 舵機Fig.6 LX-224 steering gear
該舵機為并行舵機,在舵機控制系統(tǒng)中,本文研制并開發(fā)了一款具有多并行舵機控制功能的舵機控制板。舵機控制板大多以單片機(STM32/STM8等)作為核心,本文的并行舵機控制板以單片機STM8S003 為主板。STM8S003 提供了10 比特模數(shù)轉(zhuǎn)換器、3 個定時器、1 個串口、1 個IIC 等功能模塊。同時并行舵機控制板內(nèi)還集成了2 塊PCA9685 作為驅(qū)動模塊。驅(qū)動模塊PCA9685 是一款I(lǐng)IC 總線控制的16 通道的PWM 波發(fā)生器,每個輸出通道都有自己的12 位分辨率固定和頻率單獨的PWM 控制器,該控制器在典型的24~1 526 Hz 的可編程頻率下運行,占空比在0%~100%范圍內(nèi)可調(diào)。PCA9685 還具有一個外部時鐘輸入引腳,可以接受用戶提供的時鐘(最大50 MHz),代替內(nèi)部25 MHz振蕩器,此功能允許同步多個設(shè)備。僅占用主控板的4 個引腳,通過IIC 通信協(xié)議就可以驅(qū)動16 臺舵機。此外,可以通過級聯(lián)的方式最多級聯(lián)62 個驅(qū)動板。本機械手所使用的并行舵機控制板共級聯(lián)了2個驅(qū)動板,可以驅(qū)動32 臺舵機。
并行舵機控制板如圖7 所示,控制板電路圖如圖8 所示。
圖7 并行舵機控制板Fig.7 Parallel steering gear control board
圖8 舵機控制板電路圖Fig.8 Circuit diagram of steering gear control board
本文所涉及的系統(tǒng)主要由樹莓派4B、并行舵機控制板、并行舵機、肌電傳感器、Arduino 等部分組成。控制系統(tǒng)各模塊硬件連接如圖9 所示。
圖9 控制系統(tǒng)各模塊硬件連接圖Fig.9 Hardware connection diagram of each module of control system
為了滿足本文硬件需要,樹莓派需要設(shè)置開機自啟動項,同時通過配置文件來修改樹莓派的設(shè)備樹,改變引腳的映射關(guān)系,將ttyAMA0 映射到引出的GPIO Tx /Rx上,以此使用高性能的硬件串口。Arduino 需要使用A0~A5和D0~D13的引腳完成與肌電傳感器的數(shù)據(jù)傳輸、控制LED 燈等功能。此外,還要使用USB 線將Arduino 與樹莓派進行連接。
5.2.1 Arduino 與肌電傳感器之間的通信
Arduino 與肌電傳感器之間通過Arduino的D0和D1引腳來實現(xiàn)串口通信;通過D2~D4引腳分別實現(xiàn)移位寄存器的數(shù)據(jù)、時鐘和鎖存功能;通過D5和D6引腳來控制燈的按鍵;通過D7~D12引腳輸出的數(shù)據(jù)來控制傳感器上燈的顏色;通過D13引腳來使能控制燈的模塊;通過A0~A5引腳來接收肌電傳感器的包絡(luò)信號。最終能夠通過Arduino 讀取肌電傳感器的肌肉電信號數(shù)據(jù)。
5.2.2 樹莓派與Arduino 之間的通信
樹莓派與Arduino 之間通過USB 口進行連接,使用串口通信方式。連接后檢查是否存在ttyACM0文件,存在即可正常使用。由于串口通信簡單、并且能夠?qū)崿F(xiàn)遠(yuǎn)距離通信,符合項目要求,所以樹莓派和Arduino 之間使用串口通信。串口通信主要就在于各類參數(shù)的匹配,例如波特率、數(shù)據(jù)位、奇偶校驗。2個端口如要實現(xiàn)通信,這些參數(shù)必須匹配。
5.2.3 樹莓派與舵機控制板之間的通信
本文選用了樹莓派和并行舵機控制板協(xié)同工作的方式來控制機械手。并行傳輸相比于串行傳輸?shù)膬?yōu)點在于易于實現(xiàn)和速度較快,雖然傳輸距離近,但對本系統(tǒng)來說已經(jīng)足夠,所以選擇并行傳輸方式,并使用上述自主研制的并行舵機控制板。具體實現(xiàn)方式為:控制板的Tx 接樹莓派的Rx,控制板的Rx 接樹莓派的Tx。本次設(shè)計中,圖9 中樹莓派的8 號引腳(TXD)、10 號引腳(RXD)分別與并行舵機控制板的Rx、Tx 引腳相連。最后設(shè)置相同的波特率,即可將樹莓派上的指令傳輸給舵機控制板,從而實現(xiàn)對舵機的控制。
本文針對仿生機械手肌電控制系統(tǒng)進行了測試與評估。5 名被試者首先進行表面皮膚處理,然后使用自主設(shè)計的上位機軟件采集當(dāng)前動作的肌電信號,如圖10 所示。
圖10 數(shù)據(jù)可視化及動作預(yù)測Fig.10 Data visualization and action prediction
測試中,握拳、五指張開和Yeah 手勢每個動作各做20次,即每個動作都有100 組數(shù)據(jù),分別統(tǒng)計每個動作正確識別的個數(shù)、錯誤識別的個數(shù)以及識別率見表1。
表1 測試實驗結(jié)果統(tǒng)計Tab.1 Statistics of test results
從表1 可以看出,在進行測試的動作中,握拳的識別率最高,達93%,而張開和Yeah 手勢識別率略低。考慮到被試者之間體質(zhì)差異的問題,這樣的誤差可以理解。另外,實驗過程中還發(fā)現(xiàn),張開和Yeah 手勢之間容易發(fā)生錯誤識別,經(jīng)分析發(fā)現(xiàn)是由于兩者肌電信號有時近似度較高。
另一個評估標(biāo)準(zhǔn)是系統(tǒng)的響應(yīng)時間。實驗中,發(fā)現(xiàn)仿生機械手反應(yīng)相對迅速。為了實現(xiàn)定量分析,對每個動作從開始預(yù)測到輸出結(jié)果的時間進行了統(tǒng)計。結(jié)果表明,系統(tǒng)的平均識別時間為12 s。而本系統(tǒng)每20 ms 采集一條肌電數(shù)據(jù),即采集當(dāng)前動作的400 條肌電數(shù)據(jù)需要8s,所以預(yù)測速度平均為4 s。進一步分析后可知,通過提高采集速度和優(yōu)化匹配模型,能夠更好、更快地得出結(jié)果。
綜上所述,本文的仿生機械手肌電控制系統(tǒng)是合理的。
本文設(shè)計了一種基于肌電控制技術(shù)的仿生機械手肌電操控系統(tǒng),由六導(dǎo)聯(lián)肌肉電傳感器、肌電信號傳輸導(dǎo)聯(lián)線、Arduino UNO 單片機、上位機、樹莓派4B、并行舵機控制板及仿生機械手構(gòu)成,基本實現(xiàn)了對人手的實時模仿。后續(xù)可通過ZigBee 實現(xiàn)遠(yuǎn)程控制,進而用于排爆等高危行業(yè)和偏癱患者的手部功能恢復(fù)等領(lǐng)域。目前由于只采集了3 個動作的肌電數(shù)據(jù)做測試,存在一定的局限性。但總體上對仿生機械手的后續(xù)發(fā)展與應(yīng)用具有一定的借鑒意義。