梁巧儀 鄭譽(yù)煌 李國(guó)豪 林煥然 亞梅 肖俊杰
摘要:六軸舞獅機(jī)器人采用Arduino平臺(tái)控制六個(gè)數(shù)字舵機(jī),每個(gè)舵機(jī)分別牽引帶動(dòng)機(jī)器人腰部、大臂、小臂、小臂旋轉(zhuǎn)、腕部、爪部動(dòng)作。根據(jù)舞獅子的運(yùn)動(dòng)特點(diǎn),這臺(tái)機(jī)器人實(shí)現(xiàn)了一套完整的機(jī)器人舞獅動(dòng)作。
關(guān)鍵詞:舞獅;機(jī)器人;Arduino
中圖分類號(hào):TP18 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2017)08-0090-02
舞獅文化源遠(yuǎn)流長(zhǎng)并且深得廣大人民群眾的喜愛,每逢佳節(jié)喜事,舞獅是用來活躍氣氛很好的選擇。當(dāng)今舞獅主要是由人穿上舞獅服來舞動(dòng),需要多個(gè)人來配合。舞獅屬于高強(qiáng)度運(yùn)動(dòng),對(duì)人的體力消耗很大,人不可能長(zhǎng)時(shí)間不停歇進(jìn)行。另外有些小型慶?;顒?dòng)或臨時(shí)節(jié)目需要舞獅子助興,請(qǐng)舞獅隊(duì)的成本較高。為此本文研究了采用基于Arduino的六軸舞獅機(jī)器人,這臺(tái)機(jī)器人便于攜帶,而且能夠?qū)崿F(xiàn)常見的舞獅動(dòng)作。
1六軸舞獅機(jī)器人的硬件構(gòu)造
本文提出的六軸舞獅機(jī)器人的工作原理框圖如圖1所示。將支架和舵機(jī)進(jìn)行組裝、電路連接以及舞獅模型固定,即完成六軸舞獅機(jī)器人的硬件安裝,其外觀如圖2所示。
六軸舞獅機(jī)器人的核心部件功能介紹如下:
1)舵機(jī):又稱伺服馬達(dá),是程序的執(zhí)行器,也是機(jī)器人的動(dòng)力來源,本系統(tǒng)采用六個(gè)舵機(jī)分別來驅(qū)動(dòng)機(jī)器人的六個(gè)關(guān)節(jié),從而控制機(jī)器人底部、大臂、小臂、小臂旋轉(zhuǎn)關(guān)節(jié)、腕部、爪部六個(gè)部位的運(yùn)動(dòng)。舵機(jī)的輸入信號(hào)為周期為20ms的脈沖信號(hào),信號(hào)脈沖寬度0.5ms~2 4ms對(duì)應(yīng)0°~180°。我們選用的是輝盛MG-996r舵機(jī)。
2)Arduino上位機(jī):整個(gè)機(jī)器人的控制中心,根據(jù)編程輸出脈沖信號(hào)來控制六個(gè)舵機(jī)的轉(zhuǎn)動(dòng)角度、速率、時(shí)間點(diǎn),從而達(dá)成機(jī)器人的運(yùn)動(dòng)達(dá)成一整套舞獅動(dòng)作。Arduino上位機(jī)的程序由Arduino IDE編譯器編譯燒錄,我們選用的型號(hào)是ArduinoUNO。
3)Arduino UNO擴(kuò)展板:為上位機(jī)和舵機(jī)提供電壓,承載舵機(jī)的電流,同時(shí)對(duì)Arduino上位機(jī)的接口進(jìn)一步擴(kuò)展以及排列,以便電路進(jìn)行連接。
4)開關(guān)電源:將220V交流電轉(zhuǎn)換為5V直流電源,為Ardui-no上位機(jī)和舵機(jī)提供額定5V電壓。
5)機(jī)械臂支架:整個(gè)的機(jī)器人主體支架,為六軸結(jié)構(gòu)。
6)舞獅模型:分為頭和身兩部分,頭固定在機(jī)器人爪部、身披在機(jī)器人小臂上。
2舞獅機(jī)器人的控制原理
2.1程序關(guān)鍵函數(shù)
Arduino上位機(jī)的編程是在Arduino IDE上進(jìn)行編譯,其語(yǔ)言開發(fā)環(huán)境與Java和c語(yǔ)言近似。
在程序的最開始會(huì)調(diào)用舵機(jī)庫(kù)文件,其調(diào)用語(yǔ)句為#in-clude
1)Servo.attach():該函數(shù)的參數(shù)有(pin,min,max),pin參數(shù)設(shè)置舵機(jī)對(duì)應(yīng)在上位機(jī)上連接的pwm端,Arduino UNO上的pwm端口為3、5、6、9、10、11。min、max(可選,默認(rèn)min為544,max為2400)參數(shù)設(shè)置舵機(jī)舵機(jī)最小、最大角度時(shí)的脈沖寬度,以微秒為單位。
2)Servo.write ():控制舵機(jī)轉(zhuǎn)動(dòng)到對(duì)應(yīng)角度,范圍為0~180。
3J Servo.read():讀取舵機(jī)當(dāng)前對(duì)應(yīng)的角度值,范圍為0~180。
4)sutup();loop():這兩個(gè)函數(shù)為Arduino IDE中的兩個(gè)重要默認(rèn)函數(shù),setup()函數(shù)會(huì)在上位機(jī)每次啟動(dòng)時(shí)自動(dòng)運(yùn)行一次,本套程序中是在此函數(shù)里設(shè)置舵機(jī)的對(duì)應(yīng)連接端口,以及對(duì)舵機(jī)的角度初始化,loop()函數(shù)會(huì)在上位機(jī)啟動(dòng)后循環(huán)運(yùn)行,本套函數(shù)中是在此函數(shù)里寫入機(jī)器人的動(dòng)作運(yùn)行代碼,以達(dá)到機(jī)器人不斷地執(zhí)行舞獅動(dòng)作的目的。
圳本程序中是以for(pos=0;pos<=speed;pos++),{servo.write(int(map(pos,1,speed,a,b)));}的組合形式運(yùn)用這兩個(gè)函數(shù)來控制舵機(jī)的轉(zhuǎn)動(dòng)速度以及舵機(jī)的始末角度。speed為舵機(jī)轉(zhuǎn)動(dòng)速度控制值,實(shí)際上此組合函數(shù)是控制for()函數(shù)的循環(huán)次數(shù)來控制舵機(jī)從始位置轉(zhuǎn)到末位置的時(shí)間,進(jìn)而控制舵機(jī)轉(zhuǎn)動(dòng)速度,因此speed實(shí)質(zhì)為for()函數(shù)的循環(huán)次數(shù)。a為舵機(jī)的始角度值,b為末角度值,map()函數(shù)的功能是控制servo.write()中的值隨循環(huán)次數(shù)的遞增從a變化到b,即舵機(jī)從a角度轉(zhuǎn)到b角度。
6)delay():此函數(shù)為延時(shí)函數(shù),由函數(shù)內(nèi)的整數(shù)值決定延遲時(shí)間,單位為一,函數(shù)作為動(dòng)作函數(shù)之間的緩沖,能讓舵機(jī)在上個(gè)動(dòng)作完成時(shí)得到一定的穩(wěn)定時(shí)間,以免舵機(jī)在不停歇的工作中損壞。
2.2舞獅動(dòng)作說明
1)初始狀態(tài):本程序中設(shè)置舵機(jī)A、B、C、D、E、F分別對(duì)應(yīng)端口3、5、6、9、10、11。首先需要給機(jī)器人設(shè)置靜止?fàn)顟B(tài)時(shí)每個(gè)舵機(jī)的角度,考慮到舞獅動(dòng)作的美觀性,我們?cè)O(shè)置舵機(jī)A、B、C、D、E、F的靜止時(shí)角度分別為80、140、10、90、170、90。
2)獅子點(diǎn)頭動(dòng)作:主要由E舵機(jī)來實(shí)現(xiàn),舵機(jī)轉(zhuǎn)動(dòng)范圍在150到170之間,每個(gè)點(diǎn)頭動(dòng)作完成后延時(shí)300ms,換句話說,就是每個(gè)點(diǎn)頭動(dòng)作之間間隔為300ms。
3)獅子搖頭動(dòng)作:主要由F舵機(jī)來實(shí)現(xiàn),F(xiàn)舵機(jī)從靜止?fàn)顟B(tài)時(shí)的90度轉(zhuǎn)動(dòng)到45度,再?gòu)?5度轉(zhuǎn)動(dòng)到135度,繼而從135度轉(zhuǎn)動(dòng)到90度,完成一個(gè)搖頭動(dòng)作,每次舵機(jī)轉(zhuǎn)動(dòng),延時(shí)200ms,實(shí)現(xiàn)了獅子三次搖頭動(dòng)作。
4)獅子搖身動(dòng)作:主要是由D舵機(jī)來實(shí)現(xiàn),舵機(jī)由靜止?fàn)顟B(tài)時(shí)的90度轉(zhuǎn)動(dòng)到110,然后轉(zhuǎn)動(dòng)到70度,繼而回到靜止?fàn)顟B(tài)時(shí)的90度,每一次舵機(jī)轉(zhuǎn)動(dòng),延時(shí)200ms,實(shí)現(xiàn)了獅子三次搖身動(dòng)作。
5)獅子連貫綜合動(dòng)作:獅子完成了點(diǎn)頭,搖頭和搖身三個(gè)動(dòng)作之后,開始站立,在高處動(dòng)作。實(shí)現(xiàn)獅子站立的是B舵機(jī),B舵機(jī)由靜止?fàn)顟B(tài)時(shí)的90度轉(zhuǎn)動(dòng)到120度,實(shí)現(xiàn)站立,并且在高處重復(fù)點(diǎn)頭,搖頭,搖身等動(dòng)作。動(dòng)作完之后,獅子可以繼續(xù)站立,站得更高,由B舵機(jī)實(shí)現(xiàn)獅子站立得更高。B舵機(jī)由原來的120度繼續(xù)站立到90度,之后舵機(jī)延時(shí)300ms。獅子站高之后可以做低頭轉(zhuǎn)身動(dòng)作,低頭轉(zhuǎn)身動(dòng)作由A舵機(jī)和C舵機(jī)共同實(shí)現(xiàn)。首先獅子低頭,由C舵機(jī)來完成,C舵機(jī)從10度轉(zhuǎn)動(dòng)到70度,之后舵機(jī)延時(shí)250ms。低頭后轉(zhuǎn)身,A舵機(jī)主要是實(shí)現(xiàn)轉(zhuǎn)身,由80度轉(zhuǎn)動(dòng)到40度,獅子動(dòng)作到左邊方向,之后舵機(jī)延時(shí)250ms。獅子轉(zhuǎn)過身之后,在此方向舞動(dòng),重復(fù)上面的搖頭、轉(zhuǎn)身動(dòng)作。在左下方舞動(dòng)完之后,獅子站立,C舵機(jī)回到10度,轉(zhuǎn)身,A舵機(jī)回到80度,在此方向繼續(xù)做點(diǎn)頭、搖頭、搖身動(dòng)作。同樣的,獅子低頭轉(zhuǎn)身到右下方,繼續(xù)舞動(dòng),在此不再詳述。
實(shí)際上,在這套舞獅編程中,我們?cè)O(shè)置了機(jī)器人有三個(gè)模式,分別為靜止模式,計(jì)算機(jī)控制模式和自動(dòng)運(yùn)行模式。在編寫動(dòng)作時(shí),我們主要采用計(jì)算機(jī)控制模式來編寫,觀察機(jī)器人舞動(dòng)時(shí)舵機(jī)應(yīng)設(shè)定的最佳角度,確定下來并完成一整套編程。值得注意的是,獅子頭的安裝位置會(huì)影響?yīng){子舞動(dòng)時(shí)每個(gè)舵機(jī)應(yīng)該設(shè)置的角度,不同的獅子頭安裝位置會(huì)對(duì)應(yīng)不同的角度,在設(shè)置舞獅動(dòng)作的速度時(shí),我們應(yīng)避免速度設(shè)置得過快,防止舵機(jī)燒壞。
3結(jié)束語(yǔ)
本文研究了基于Arduino平臺(tái)的六軸舞獅機(jī)器人,這臺(tái)機(jī)器人體型較小,便于攜帶。實(shí)踐證明,本機(jī)器人在迎賓和一些小型慶祝會(huì)上能帶來很好的喜慶氣氛,也得到觀眾們的肯定。今后將研究六軸以上和實(shí)現(xiàn)可以自動(dòng)行走的舞獅機(jī)器人。