朱 丹 王宇洋 陸 揚(yáng)
(南京理工大學(xué)紫金學(xué)院,江蘇 南京 210023)
雙足步行機(jī)器人與輪式機(jī)器人不同,在地勢較復(fù)雜的情況下,雙足步行機(jī)器人的靈活性更高,不僅具有更廣闊的應(yīng)用場景,而且還可以更協(xié)調(diào)地完成任務(wù)。同時(shí),其跨越多個(gè)學(xué)科,有深厚的研究基礎(chǔ),因此雙足機(jī)器人發(fā)展速度極快[1]。該文通過建立雙足機(jī)器人的模型、列寫D-H 參數(shù)進(jìn)行MATLAB 仿真,對雙足機(jī)器人的步態(tài)穩(wěn)定性進(jìn)行分析、算法調(diào)試,最終制造實(shí)物并對實(shí)物進(jìn)行驗(yàn)證。
設(shè)計(jì)目標(biāo)是制造一個(gè)雙足步行機(jī)器人。首先,研究成年人身體的具體數(shù)據(jù),找出合適的構(gòu)建機(jī)器人腿的D-H 參數(shù)。其次,通過MATLAB 軟件的機(jī)器人工具箱建模,并為其規(guī)劃適合步行的軌跡并進(jìn)行仿真,獲得合適的行走數(shù)據(jù)。最后,通過STM32 單片機(jī)設(shè)計(jì)系統(tǒng)的硬件電路,編寫相應(yīng)的C 語言程序,使實(shí)物具備相應(yīng)的功能。
從運(yùn)動(dòng)學(xué)的角度來看,機(jī)器人的腿更像是機(jī)械臂,對簡單的雙足機(jī)器人來說,2 個(gè)旋轉(zhuǎn)關(guān)節(jié)的串聯(lián)機(jī)械臂就可以滿足相關(guān)需求。但是要確定其D-H 參數(shù)也是一個(gè)很復(fù)雜的過程,要制造一個(gè)機(jī)器人,其尺寸最好與人的尺寸比例一致。通過研究靜態(tài)尺寸來研究人體構(gòu)造尺寸及人體部分肢體長度。根據(jù)《中國成年人人體尺寸(GB 10000—1988)》的要求,具體計(jì)算和取值見表1[2]。
表1 機(jī)器人主要設(shè)計(jì)尺寸
根據(jù)上文的數(shù)據(jù)、D-H 參數(shù)和機(jī)器人正運(yùn)動(dòng)學(xué)的相關(guān)理論內(nèi)容構(gòu)造1條機(jī)器人單腿。其模型如圖1 所示,列寫的D-H 參數(shù)見表2。
表2 機(jī)器人單腿的連桿參數(shù)
圖1 雙足機(jī)器人機(jī)構(gòu)模型
人體步行的姿態(tài)為2條腿交替前行,因此可以根據(jù)單足的運(yùn)動(dòng)分析推導(dǎo)雙足運(yùn)動(dòng)的規(guī)律。因?yàn)樵诘芽柨臻g的軌跡規(guī)劃要求大量逆解,換算到關(guān)節(jié)空間還有可能出現(xiàn)部分軌跡不在工作空間的情況,所以要在關(guān)節(jié)空間進(jìn)行軌跡規(guī)劃。主要考慮步行過程中單腿的運(yùn)動(dòng)分為幾個(gè)狀態(tài)以及每個(gè)狀態(tài)的角度[3]。
首先,在關(guān)節(jié)空間中進(jìn)行單腿路徑規(guī)劃,通過觀察人走路的情況可以分析人在行走時(shí)胯關(guān)節(jié)、膝關(guān)節(jié)和踝關(guān)節(jié)的運(yùn)動(dòng)情況。將機(jī)器人單腿行走的關(guān)節(jié)空間變化情況分為8 種狀態(tài):1) 向前抬左腳。2) 左腳向前著地。3) 重心落在左腳,右腳微抬。4) 右腳抬起,兩腿平行。5) 向前抬右腳。6) 右腳向前著地。7) 重心落在右腳,左腳微抬。8) 左腳抬起,兩腿平行。用q1~q8分別表示8 種狀態(tài)的關(guān)節(jié)角度。其次,規(guī)定每個(gè)動(dòng)作的持續(xù)時(shí)間,用100 Hz 的頻率對末端路徑軌跡坐標(biāo)值進(jìn)行采樣。最后,通過動(dòng)畫觀察腿部運(yùn)動(dòng),以驗(yàn)證它是否按照一般行走的姿勢完成所有動(dòng)作。
通過復(fù)制上文生成的串聯(lián)連桿對象(leg)就可以創(chuàng)建多條腿的機(jī)器人。但是需要提供不同的基座轉(zhuǎn)換,從而將腿連接到機(jī)體不同的點(diǎn)上,得到的結(jié)果是1 個(gè)包括多個(gè)串聯(lián)連桿(SerialLink)對象的向量[4]。
由于腿的軌跡是一個(gè)周期運(yùn)動(dòng),因此可以通過使每個(gè)腿的運(yùn)動(dòng)軌跡有一個(gè)相位偏移來實(shí)現(xiàn)按順序復(fù)位的目標(biāo),該相位偏移時(shí)間為總循環(huán)周期的1/2。由于總周期有180 個(gè)點(diǎn),因此每條腿的相移為90 個(gè)點(diǎn)。使用模運(yùn)算來模擬每條腿的循環(huán)步態(tài),其結(jié)果如圖2 所示[5]。
圖2 MATLAB 仿真雙足運(yùn)動(dòng)的2 個(gè)狀態(tài)
在完成MATLAB 軟件仿真并獲得機(jī)器人雙足步行的關(guān)節(jié)變換的基本數(shù)據(jù)后,就可以設(shè)計(jì)基于STM32 的雙足機(jī)器人系統(tǒng),將舵機(jī)運(yùn)行的參數(shù)轉(zhuǎn)換成MATLAB 中仿真的數(shù)據(jù)。
雙足機(jī)器人系統(tǒng)中設(shè)計(jì)的機(jī)器人結(jié)構(gòu)尺寸比例是將人體下半身按照比例縮放得到的,其核心部分是6 個(gè)轉(zhuǎn)動(dòng)關(guān)節(jié),分別為2 個(gè)髖關(guān)節(jié)、2 個(gè)膝關(guān)節(jié)和2 個(gè)踝關(guān)節(jié)。在制造前參考大量仿真試驗(yàn)、人體下半身的主要數(shù)據(jù)以及國家標(biāo)準(zhǔn),最終確定各個(gè)零部件的形狀,通過打孔、加工裝訂等工序,最終完成整個(gè)機(jī)器人的機(jī)械結(jié)構(gòu)設(shè)計(jì)和裝配工作。
4.2.1 總體電路
雙足機(jī)器人的控制部分通過程序下載完成步態(tài)規(guī)劃,控制器穩(wěn)定電壓供給(電源模塊為控制器和舵機(jī)提供穩(wěn)定的電壓供給),通過LED 燈顯示機(jī)器處于不同狀態(tài),蜂鳴器鳴響表示電壓過低(需要充電)。因此,根據(jù)上面的各種功能,電路主要由以下7 個(gè)部分組成,分別是主控芯片STM32F103RBT6、串口驅(qū)動(dòng)模塊、顯示模塊、蜂鳴器模塊、按鍵模塊、FLASH 模塊和舵機(jī)系統(tǒng)。具體系統(tǒng)框圖如圖3 所示。
圖3 雙足機(jī)器人控制部分系統(tǒng)框圖
各部分的具體設(shè)計(jì)如下:1) 電源模塊。電源模塊主要由濾波電容、AMS1117-3 芯片構(gòu)成。舵機(jī)系統(tǒng)和CPU 共用1 個(gè)電源,其供電電壓為5.0 V~8.4 V,電源的功率一般可以根據(jù)舵機(jī)數(shù)量自行搭配,例如當(dāng)使用5~6 個(gè)舵機(jī)、使用15~16 個(gè)舵機(jī)時(shí),所需要的額定電流是不同的,前者要達(dá)到3 A 及以上,而后者達(dá)到8 A 及以上。一般不是每個(gè)舵機(jī)都會(huì)同時(shí)工作,因此隨著舵機(jī)數(shù)量增加,電流的增長速度可以適當(dāng)變慢。2) 串口驅(qū)動(dòng)模塊。CPU 的額定電壓為3.3 V,而RS232 串口通信邏輯1 為-3 V~-15 V 的電壓;邏輯0 為3 V~15 V 的電壓。兩者是不匹配的,因此需要通過轉(zhuǎn)接芯片來完成兩者的電壓轉(zhuǎn)接工作,該轉(zhuǎn)換芯片就是CH340。通過串口驅(qū)動(dòng)電路也可以下載程序,還可以實(shí)現(xiàn)控制器和PC 機(jī)的雙向通信。3) 顯示電路。顯示電路主要由2 個(gè)LED發(fā)光二極管構(gòu)成。通過限流電阻接在CPU 的I/O 口上,從而顯示不同模式下的狀態(tài)。4) 蜂鳴器模塊。使用源的蜂鳴器通過三極管輸入電平就可以驅(qū)動(dòng)鳴響。當(dāng)電源電壓不符合要求時(shí),啟動(dòng)蜂鳴器,提醒用戶充電。5) 舵機(jī)系統(tǒng)。采用串行總線舵機(jī),該控制系統(tǒng)可以控制6 個(gè)串口總線舵機(jī),還可以控制髖、膝以及踝關(guān)節(jié)運(yùn)動(dòng),使機(jī)器人完成各種動(dòng)作。6) 按鍵模塊。通過按鍵可以控制當(dāng)前機(jī)器人的模式運(yùn)行。7) Flash 模塊。將機(jī)器人要執(zhí)行的動(dòng)作編寫成動(dòng)作組程序存入Flash 中,開啟控制器后可以根據(jù)模式選擇執(zhí)行動(dòng)作組或者單獨(dú)動(dòng)作。
4.2.2 舵機(jī)系統(tǒng)
該設(shè)計(jì)采用的舵機(jī)為串行總線數(shù)字舵機(jī),型號(hào)為LX-824,控制板可以同時(shí)控制6 個(gè)串行總線舵機(jī),在沒有使用彈性連接件和無線傳感器的條件下,舵機(jī)的控制效果良好。在使用舵機(jī)前要先用舵機(jī)調(diào)試控制板對舵機(jī)的偏差調(diào)零。
將雙足機(jī)器人的硬件電路裝配好后,就編寫軟件程序,以控制雙足機(jī)器人運(yùn)動(dòng)??紤]7 種機(jī)器人的運(yùn)動(dòng)模式,分別為立正、前進(jìn)、后退、左轉(zhuǎn)、右轉(zhuǎn)、向前翻滾以及向后翻滾。采集人體各個(gè)關(guān)節(jié)的動(dòng)作數(shù)據(jù),首先,進(jìn)行MATLAB 仿真,通過動(dòng)畫觀察雙足機(jī)器人的運(yùn)動(dòng)效果。其次,基于相關(guān)的數(shù)據(jù)編寫C 語言程序,以控制舵機(jī)完成各種運(yùn)動(dòng),使其達(dá)到預(yù)定狀態(tài)。其主程序流程如圖4所示。該程序最核心的部分是控制單個(gè)舵機(jī)在一定時(shí)間內(nèi)轉(zhuǎn)動(dòng)一定角度,通過串口發(fā)送指令來完成任務(wù),將MATLAB 中仿真的各個(gè)關(guān)節(jié)數(shù)據(jù)作為函數(shù)參數(shù)進(jìn)行傳遞后,再根據(jù)ZMP 的步態(tài)規(guī)劃算法進(jìn)行預(yù)判和調(diào)整。
圖4 系統(tǒng)流程圖
對機(jī)器人進(jìn)行調(diào)試的方法分為2 個(gè)步驟:1) 在MATLAB軟件中獲取各動(dòng)作的關(guān)節(jié)旋轉(zhuǎn)角度,將該數(shù)據(jù)輸入設(shè)計(jì)好的上位機(jī)界面的動(dòng)作中,再將若干個(gè)動(dòng)作組成動(dòng)作組,從而完成一系列動(dòng)作。2) 編寫基于STM32 的C 語言程序,以完成動(dòng)作組脫機(jī)任務(wù)。在雙足機(jī)器人的運(yùn)動(dòng)過程中,采用基于ZMP 的步態(tài)規(guī)劃算法對機(jī)器人的步行軌跡進(jìn)行預(yù)判,以保證機(jī)器人行走的穩(wěn)定性。
以前進(jìn)為例,分析從人體采集的運(yùn)動(dòng)數(shù)據(jù)和機(jī)器人運(yùn)行數(shù)據(jù)的試驗(yàn)結(jié)果。如圖5 所示,機(jī)器人和人體前進(jìn)步伐一致。
圖5 機(jī)器人和真人的步態(tài)對比
首先,該文根據(jù)人體數(shù)據(jù)得出雙足機(jī)器人的D-H 參數(shù),通過MATLAB 動(dòng)畫仿真機(jī)器人的運(yùn)動(dòng)情況,以驗(yàn)證數(shù)據(jù)的實(shí)用性。其次,設(shè)計(jì)、制造雙足機(jī)器人實(shí)體編寫相關(guān)程序,試驗(yàn)結(jié)果驗(yàn)證了該雙足機(jī)器人的正確性。在STM32 單片機(jī)的控制下結(jié)合多種模塊,實(shí)現(xiàn)了機(jī)器人前進(jìn)、后退、前后翻滾、左右轉(zhuǎn)動(dòng)以及模擬步態(tài)行走的一系列動(dòng)作且各個(gè)動(dòng)作相對穩(wěn)定。盡管在行走的過程中機(jī)器人會(huì)發(fā)生偏移,但是在試驗(yàn)和調(diào)試后,實(shí)現(xiàn)了機(jī)器人正常行走的目標(biāo)。