林俊武,周雨成,伍 坪,鄭劍鋒
(三明學(xué)院 機(jī)電工程學(xué)院,福建 三明 365004)
當(dāng)下機(jī)器人技術(shù)的研究越來(lái)越多樣化及智能化,仿人機(jī)器人技術(shù)的研究成為一種新的熱點(diǎn),相對(duì)于傳統(tǒng)的輪式機(jī)器人技術(shù),仿人機(jī)器人技術(shù)更接近于人類的行為,有較明顯的優(yōu)勢(shì)。人類的身體結(jié)構(gòu)是經(jīng)過(guò)長(zhǎng)期自然進(jìn)化后的結(jié)果和選擇,實(shí)踐證明不管是對(duì)于直立行走、快速跑步,還是更復(fù)雜的運(yùn)動(dòng)項(xiàng)目,比如跳舞以及各種競(jìng)技的體育項(xiàng)目,在整個(gè)自然界里無(wú)不說(shuō)明人類具有更加合理性的身體結(jié)構(gòu)。仿人型機(jī)器人在現(xiàn)代日常生活中具有越來(lái)越廣泛的應(yīng)用,其目的就是替代人類完成各種各樣的工作。一方面可以應(yīng)用于生產(chǎn)發(fā)展領(lǐng)域,比如可應(yīng)用于軍事任務(wù)、災(zāi)難救治、生活?yuàn)蕵?lè)、科學(xué)探測(cè)、服務(wù)業(yè)等各個(gè)領(lǐng)域,另一方面就是在家庭服務(wù)和醫(yī)療康復(fù)等領(lǐng)域的應(yīng)用,在當(dāng)今老齡化越來(lái)越突出的社會(huì)中,利用仿人機(jī)器人能夠有效地替代人類完成各種的家務(wù)以及看護(hù)工作,這樣就可以把人們從各種瑣碎工作中解脫出來(lái),從而安心工作,因此研究如何讓仿人機(jī)器人實(shí)現(xiàn)高效的人類行為并為人類服務(wù)具有重要的意義[1-2]。
基于此,本文設(shè)計(jì)了一種基于STM32單片機(jī)簡(jiǎn)易的仿人類行為機(jī)器人,可以用來(lái)替代人類完成災(zāi)難救治或者生活?yuàn)蕵?lè)等任務(wù),具有很好的實(shí)用價(jià)值。
本設(shè)計(jì)采用 STM32F103C8T6作為系統(tǒng)的控制核心,主要由MPU6050芯片實(shí)時(shí)監(jiān)控和采集模塊、CDS5516數(shù)字舵機(jī)人體動(dòng)作的模仿模塊、藍(lán)牙通信模塊等與外圍電路組成,其系統(tǒng)結(jié)構(gòu)框圖如圖1所示。
圖1 系統(tǒng)結(jié)構(gòu)框圖
由圖1可以看出,系統(tǒng)的工作原理:首先單片機(jī)從MPU-6050傳感器模塊獲取到人體姿態(tài)的位置數(shù)據(jù),即在給定三維直角坐標(biāo)系中關(guān)節(jié)點(diǎn)的x,y,z的坐標(biāo),并由此計(jì)算出三軸對(duì)應(yīng)的角度,并通過(guò)藍(lán)牙從機(jī)向驅(qū)動(dòng)板的藍(lán)牙主機(jī)傳輸數(shù)據(jù),然后通過(guò)STM32對(duì)接收的的數(shù)據(jù)進(jìn)行信息處理,下達(dá)指令控制CDS5516,從而啟動(dòng)數(shù)字舵機(jī),開(kāi)始模仿人的手部動(dòng)作。為了避免了數(shù)據(jù)的混亂和出錯(cuò),直到舵機(jī)執(zhí)行的動(dòng)作的完成之后,再獲取采集下一組的信號(hào),繼續(xù)模仿,這樣周而復(fù)始完成各種模仿動(dòng)作。
本設(shè)計(jì)采用STM32F103C8T6作為系統(tǒng)的控制核心,其原理圖如圖2所示,此芯片共有48個(gè)引腳,系統(tǒng)中所用到的引腳都被標(biāo)注著網(wǎng)絡(luò)標(biāo)號(hào),并連接到對(duì)應(yīng)的相同標(biāo)號(hào)上。其中的引腳RX1和TX1網(wǎng)絡(luò)標(biāo)號(hào)中的PA2~PA3中的2根引腳分別連接到CDS5516的通訊線上,以此進(jìn)行數(shù)據(jù)的傳輸。其中的引腳VDD_1~VDD_3和VDDA全部連接到3.3 V電源線上,而VSS_1~VSS_3和VSSA都接連到地線上,并且電源到地都要有接連濾波電容來(lái)進(jìn)行耦合濾波以提高系統(tǒng)的穩(wěn)定性。雖然芯片中提供有內(nèi)置晶振,設(shè)計(jì)中的可以不連接外部晶振,但是內(nèi)部晶振比較不穩(wěn)定,為了提高晶振的穩(wěn)定性,在PD0和PD1接了晶振電路,如圖3所示,再通過(guò)給外部電路進(jìn)行倍頻,給系統(tǒng)提供工作的時(shí)鐘。STM32F103的啟動(dòng)模式分別由第20腳(BOOT0)和44腳(BOOT1)來(lái)進(jìn)行控制,其中系統(tǒng)的BOOT0腳接到地,選擇主閃存存儲(chǔ)器作為啟動(dòng)區(qū)域,BOOT1腳作為普通強(qiáng)推挽輸出口來(lái)使用。
圖2 控制模塊原理圖
圖3 晶振電路圖
目前舵機(jī)一般有數(shù)字舵機(jī)和模擬舵機(jī)兩種,但數(shù)字舵機(jī)和模擬舵機(jī)其實(shí)在結(jié)構(gòu)上差異并不大,主要區(qū)別在于數(shù)字舵機(jī)多了個(gè)微處理器和晶振,它可以對(duì)動(dòng)脈沖送到舵機(jī)之前就對(duì)信號(hào)進(jìn)行處理,并根據(jù)舵機(jī)本身設(shè)定的數(shù)值參數(shù)進(jìn)行處理,這樣激勵(lì)舵機(jī)馬達(dá)的動(dòng)力可以根據(jù)傳來(lái)的指令包來(lái)進(jìn)行調(diào)整,適應(yīng)了不同功能的需求和增強(qiáng)了舵機(jī)的性能,并且數(shù)字舵機(jī)相對(duì)于模擬舵機(jī)發(fā)送動(dòng)脈處的頻率高得多,數(shù)字舵機(jī)無(wú)反應(yīng)期更小,舵機(jī)馬達(dá)響應(yīng)發(fā)射機(jī)信號(hào)的頻率更加的快,可以提供更好的精度和緊固力。
基于數(shù)字舵機(jī)的優(yōu)勢(shì),而且模擬舵機(jī)的動(dòng)作控制主要通過(guò)信號(hào)線輸入PWM波,通過(guò)改變占空比的值來(lái)決定舵機(jī)轉(zhuǎn)動(dòng)的角度,容易產(chǎn)生誤差,且每個(gè)舵機(jī)的機(jī)械特性都不是線性的,這樣給舵機(jī)調(diào)試帶來(lái)了不便。因此,本設(shè)計(jì)中采用的是型號(hào)為CDS5516的數(shù)字舵機(jī),它是一種集總線式的通訊接口、電機(jī)、伺服驅(qū)動(dòng)為一體的數(shù)字舵機(jī),在控制方面具有較高的可靠性和靈活性,其原理結(jié)構(gòu)圖如圖4所示,其中引腳MCU_TXD和MCU_RXD分別是單片機(jī)用來(lái)給CDS5516接發(fā)數(shù)據(jù)的兩個(gè)引腳,但收發(fā)信號(hào)都是接在CDS5516的SIG引腳上,因此根據(jù)分時(shí)復(fù)用原理,加入了控制收發(fā)信號(hào)的開(kāi)關(guān),其中MCU_TXEN和MCU_RXEN連接在單片機(jī)上,是控制74HC126使能的引腳,作為控制收發(fā)(MCU_RXD和MCU_TXD)的開(kāi)關(guān)。CDS5516的電源范圍為6.8 V~14 V,它的電源外接了8.4V,而設(shè)計(jì)中實(shí)際接了9 V。因?yàn)樵O(shè)計(jì)中選用的微處理器的輸出電壓為3.3 V,所以為了防止信號(hào)的傳輸出錯(cuò),需要在單片連接SIG這條信號(hào)線上加5 V的上拉電源和10KΩ左右的上拉電阻限流。
在設(shè)計(jì)中則直接用繼電器來(lái)代替74HC126的開(kāi)關(guān)作用,其驅(qū)動(dòng)原理圖如圖5所示,其中繼電器的電源和地端接了個(gè)續(xù)流二極管,這樣以續(xù)流的形式消耗掉繼電器中電感帶來(lái)的高感應(yīng)電動(dòng)勢(shì),保護(hù)了三極管和單片機(jī)引腳不被擊穿。
圖4 CDS5516舵機(jī)驅(qū)動(dòng)電路連接原理圖
圖5 CDS5516驅(qū)動(dòng)設(shè)計(jì)原理圖
MPU6050芯片是一種具有實(shí)時(shí)監(jiān)控和采集的模塊[3],其結(jié)構(gòu)如圖6所示。
圖6 MPU-6050硬件模塊
它是一種整合了6軸運(yùn)動(dòng)處理的模塊,可以適應(yīng)不同的工作環(huán)境,串口的波特率有9 600 bps與115 200 bps,適合所有單片機(jī)和電腦連接。它的航向角、橫滾角、府仰角都為±180°且分辨率為0.01°。具有體積小、響應(yīng)快的特點(diǎn),它的工作電壓為3 V~5 V,可以直接用與STM32相同的電源進(jìn)行供電。STM32主要通過(guò)串口1的引腳與其RX和TX連接和通訊,其中的RST和B0直接懸空,SCL和SDA是I2C的時(shí)鐘和數(shù)據(jù)。該模塊位于采集模塊的STM32板上,用來(lái)采集人肢體的運(yùn)動(dòng)角度。
3.1.1 CDS5516數(shù)字舵機(jī)通信協(xié)議
CDS5516采用異步串行總線通訊方式,理論上可以選用UART異步串行方式來(lái)控制254個(gè)機(jī)器人舵機(jī),每個(gè)舵機(jī)可以設(shè)置不同的ID,然后就可以用尋址的方式獨(dú)立控制串聯(lián)起來(lái)的舵機(jī)。CDS5516上電后有0.6S不響應(yīng)期,這個(gè)時(shí)間段不接收單片機(jī)的任何指令[4]。CDS5516有指令包格式和應(yīng)答包格式。
指令包格式包括有字頭、ID、數(shù)據(jù)長(zhǎng)度、指令、參數(shù)和校驗(yàn)等6部分,字頭為指令的前兩個(gè)字節(jié),當(dāng)舵機(jī)接受到兩個(gè)0XFF時(shí)候,才接受這個(gè)指令包,它的ID號(hào)有254個(gè)。第254個(gè)ID是廣播ID,可以使每個(gè)舵機(jī)都接受到指令。數(shù)據(jù)長(zhǎng)度為發(fā)送參數(shù)的長(zhǎng)度再加上2,校驗(yàn)和:校驗(yàn)和為Check Sum = ~ (ID + Length + Instruction + Parameter1 + ... Parameter N),校驗(yàn)位只取8位,計(jì)算和如果超出255,則取最低的位。
應(yīng)答包格式包括有字頭、ID、數(shù)據(jù)長(zhǎng)度、當(dāng)前狀態(tài)、參數(shù)和校驗(yàn)和等6部分,應(yīng)答包包含舵機(jī)的當(dāng)前狀態(tài)ERROR,工作不正常的話會(huì)通過(guò)這個(gè)字節(jié)體現(xiàn)出來(lái),字節(jié)為0的時(shí)候則表示無(wú)出錯(cuò),否則出錯(cuò),各位的高電平分別代表:BIT6:指令出錯(cuò);BIT5:過(guò)載;BIT4:校驗(yàn)和錯(cuò);BIT3:指令超范圍;BIT2:過(guò)熱;BIT1:角度超范圍;BIT0:過(guò)壓欠壓。
3.1.2 HC-05藍(lán)牙通信協(xié)議
藍(lán)牙是一種常用的無(wú)線通信,它的收發(fā)設(shè)備中的芯片價(jià)格便宜,功耗低,射程是由應(yīng)用來(lái)決定的、理論上是無(wú)限的,但是由于墻壁對(duì)信號(hào)的衰弱和信號(hào)反射的相互干擾,藍(lán)牙大多數(shù)都應(yīng)用在室內(nèi)。
藍(lán)牙通信是指兩個(gè)藍(lán)牙模塊或藍(lán)牙設(shè)備之間進(jìn)行通信,進(jìn)行數(shù)據(jù)通信的雙方一個(gè)是主機(jī),一個(gè)是從機(jī)。數(shù)據(jù)處理主要過(guò)程:串口發(fā)生的數(shù)據(jù)只能一次一個(gè)字節(jié)數(shù)據(jù)在0~255位內(nèi),而采集的數(shù)據(jù)有負(fù)數(shù)且角度在0~300°范圍,所以只能用軟件進(jìn)行處理,符號(hào)可以在程序中轉(zhuǎn)換為正數(shù),只要要發(fā)送的數(shù)據(jù)中加個(gè)判斷正負(fù)的標(biāo)志位即可,然后一次發(fā)送數(shù)據(jù)長(zhǎng)度不夠的可以用16位的變量保存采集到的數(shù)據(jù),然后發(fā)送兩次,接著驅(qū)動(dòng)板接受到數(shù)據(jù)后在把數(shù)據(jù)給組合起來(lái),這樣就解決了數(shù)據(jù)的處理。通過(guò)在電腦的串口助手上給兩個(gè)藍(lán)牙模塊發(fā)送AT指令,做好配對(duì)后就可以進(jìn)行數(shù)據(jù)的透?jìng)?。每個(gè)藍(lán)牙的配對(duì)方式都有點(diǎn)不一樣,本設(shè)計(jì)中選用的是HC-05[5]。
3.1.3 MPU-6050通信協(xié)議
MPU-6050的通信協(xié)議中的數(shù)據(jù)格式有校驗(yàn)位、起始位、數(shù)據(jù)位、停止位等組成,通信中需要注意的是溫度和歐拉角的數(shù)據(jù)要放大100倍后輸出,而加速度計(jì)和陀螺儀數(shù)據(jù)則沒(méi)有放大輸出。另外假設(shè)串口的波特率為9 600,大概1 ms一個(gè)字節(jié),那么幀頭加幀尾一共24字節(jié),則串口輸出時(shí)間需要24 ms,這樣就超過(guò)了數(shù)據(jù)的更新頻率(通常為50 Hz),就會(huì)導(dǎo)致模塊的出錯(cuò),所以可以適當(dāng)降低其更新的頻率來(lái)解決,可以把更新頻率降為10 Hz左右。
3.2.1 驅(qū)動(dòng)模塊程序
驅(qū)動(dòng)模塊的功能是給機(jī)器人輸入激勵(lì),用來(lái)控制機(jī)器人的行動(dòng),其程序流程框圖如圖7所示,驅(qū)動(dòng)程序過(guò)程就是剛開(kāi)始先給機(jī)器人舵機(jī)上電反應(yīng)時(shí)間,等待接收采集板角度數(shù)據(jù),數(shù)據(jù)接收到后立馬發(fā)送激勵(lì)信號(hào)給CDS5516舵機(jī),控制對(duì)應(yīng)的舵機(jī)的運(yùn)作實(shí)現(xiàn)跟蹤功能。為了提高抗干擾能力,在程序中加了閉環(huán)控制系統(tǒng)。在程序的數(shù)據(jù)位中加入了校驗(yàn)位,以判斷執(zhí)行是否完成的指令,進(jìn)而進(jìn)行反饋,若是異常將不執(zhí)行這條指令的操作,并繼續(xù)請(qǐng)求采集板發(fā)送數(shù)據(jù),若是都完成,則發(fā)送接收標(biāo)志到采集板,繼續(xù)接收采集板數(shù)據(jù)。
圖7 驅(qū)動(dòng)板程序流程圖
3.2.2 采集模塊程序
采集板主要是負(fù)責(zé)信號(hào)的采集,其程序流程框圖如圖8所示,其中延遲3秒的目的是為了讓角度傳感器上電自動(dòng)校準(zhǔn)數(shù)據(jù),程序比較簡(jiǎn)單,只要采集到數(shù)據(jù),接收到驅(qū)動(dòng)的標(biāo)志信號(hào),通過(guò)藍(lán)牙發(fā)送數(shù)據(jù),再繼續(xù)判斷是否接收到下一次數(shù)據(jù)發(fā)送請(qǐng)求標(biāo)志,再繼續(xù)發(fā)送。
圖8 采集板程序框圖
系統(tǒng)調(diào)試是確定舵機(jī)的控制參數(shù),經(jīng)過(guò)不斷的測(cè)試確定了硬件的復(fù)位狀態(tài)的數(shù)值和對(duì)應(yīng)動(dòng)作的控制數(shù)據(jù),如表1所示。各個(gè)舵機(jī)的ID號(hào),輸入的信號(hào)值為0到1 023,對(duì)應(yīng)的角度為0°到300°,復(fù)位值是機(jī)器人模仿人立正姿勢(shì)的狀態(tài),通過(guò)傳輸±復(fù)位值來(lái)控制舵機(jī)的向前行動(dòng)或者向后運(yùn)動(dòng)。
表1 舵機(jī)的初始數(shù)值
通過(guò)調(diào)試實(shí)現(xiàn)了語(yǔ)音控制機(jī)器人的驅(qū)動(dòng),可以語(yǔ)音敬禮和舉起右手,機(jī)器人則分別做出敬禮和舉起右手的姿勢(shì),如圖9所示。語(yǔ)音跳舞,機(jī)器人則伴著音樂(lè)節(jié)奏舞蹈。
圖9 機(jī)器人敬禮手勢(shì)
本文以STM32F103C8T6作為系統(tǒng)的控制核心,結(jié)合實(shí)時(shí)監(jiān)控和采集模塊、數(shù)字舵機(jī)人體動(dòng)作的模仿模塊、藍(lán)牙通信模塊等,設(shè)計(jì)了一款簡(jiǎn)易的仿人類行為機(jī)器人,可以用來(lái)災(zāi)難救治、生活?yuàn)蕵?lè)、軍事任務(wù)區(qū)域。測(cè)試表明,該機(jī)器人具有測(cè)試性能好,成本低,操作簡(jiǎn)單等優(yōu)點(diǎn),具有很好的實(shí)用價(jià)值。