王天偉
摘要:隨著科技發(fā)展,機(jī)器人在越來(lái)越多的領(lǐng)域得到發(fā)展與應(yīng)用。該文通過(guò)作者參加“華北五省機(jī)器人機(jī)器人大賽”前期準(zhǔn)備,以及參賽過(guò)程中的經(jīng)驗(yàn),簡(jiǎn)要介紹下基于開(kāi)源Arduino控制板的類(lèi)人機(jī)器人的驅(qū)動(dòng)與控制,比賽結(jié)果表明了該方法的有效性。
關(guān)鍵詞:Arduino;類(lèi)人;多自由度;驅(qū)動(dòng)與控制
中圖分類(lèi)號(hào):TP242 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2016)07-0181-02
對(duì)于雙足類(lèi)人機(jī)器人控制的研究一直是近些年機(jī)器人研究的熱點(diǎn)問(wèn)題。能否精確地執(zhí)行預(yù)設(shè)動(dòng)作,是評(píng)價(jià)機(jī)器人性能的指標(biāo)之一,而本科生可接觸到的傳統(tǒng)中小型機(jī)器人上,所運(yùn)用的主控以傳統(tǒng)單片機(jī)為主,原理是利用定時(shí)器和中斷的方式來(lái)實(shí)現(xiàn)對(duì)舵機(jī)的控制,在舵機(jī)數(shù)量較少時(shí)表現(xiàn)尚可,而在競(jìng)賽中所用到的類(lèi)人舞蹈機(jī)器人、類(lèi)人競(jìng)技機(jī)器人等上面,往往需要十幾個(gè)自由度甚至更多,以達(dá)到使機(jī)器人更加靈活的目的,這樣的情況下傳統(tǒng)單片機(jī)控制起來(lái)就沒(méi)有那么方便了, 尤其在要求機(jī)器人進(jìn)行復(fù)雜動(dòng)作,多個(gè)舵機(jī)同時(shí)驅(qū)動(dòng)時(shí),單片機(jī)不但精度難以保證,在編程方面也相當(dāng)復(fù)雜。因此本文結(jié)合作者的比賽經(jīng)驗(yàn),介紹時(shí)下較為流行的開(kāi)源Arduino,來(lái)實(shí)現(xiàn)對(duì)雙足類(lèi)人機(jī)器人的控制。
1 Arduino簡(jiǎn)介
Arduino是可編程的,使用功能強(qiáng)大的AVR微控制器,標(biāo)準(zhǔn)板擁有20個(gè)I/O引腳(Arduino的變體擁有更多的I/O引腳),并且很便宜。主Arduino使用標(biāo)準(zhǔn)的USB數(shù)據(jù)線連接到計(jì)算機(jī),不僅提供到PC的串行連接,還包括所需的5V電源。其最大的優(yōu)勢(shì)在于它秉承開(kāi)源硬件的思想,程序開(kāi)發(fā)接口免費(fèi)下載,也可依需自己修改。Arduino UNO的引腳如圖1所示:
圖1 Arduino UNO控制板I/O口示意圖
Arduino的硬件是高度模塊化的,在核心控制板的外圍,有開(kāi)關(guān)量輸入輸出模塊、各種模擬量傳感器輸入模塊、總線類(lèi)傳感器的輸入模塊, 還有網(wǎng)絡(luò)通信模塊,只要在核心控制板上增加網(wǎng)絡(luò)控制模塊,就可以容易地與互聯(lián)網(wǎng)連接。Arduino還提供了自己的開(kāi)發(fā)環(huán)境Arduino IDE,支持Windows、Linux、MacOS等主流操作系統(tǒng)。Arduino系統(tǒng)是基于單片機(jī)開(kāi)發(fā)的,并且大量應(yīng)用通用和標(biāo)準(zhǔn)的電子元器件,包括硬件和軟件在內(nèi)的整個(gè)設(shè)計(jì),代碼均采用開(kāi)源方式發(fā)布,因此采購(gòu)的成本較低,在各種電子制作競(jìng)賽、電子藝術(shù)品創(chuàng)意設(shè)計(jì)等越來(lái)越多地使用Arduino作為開(kāi)發(fā)平臺(tái)。
2 主控的選擇
在“華北五省機(jī)器人大賽”前,作者對(duì)市面上在售的控制系統(tǒng)進(jìn)行了數(shù)據(jù)收集與對(duì)比,對(duì)控制精度及擴(kuò)展寬容度等多方面參數(shù)進(jìn)行對(duì)比,并對(duì)其他參賽隊(duì)伍所選用的主控實(shí)際測(cè)試后,選擇了Arduino UNO R3的一個(gè)變體版Manshow-RC1,后者集成了Arduino UNO R3及24通道的SoftServo舵機(jī)控制系統(tǒng),其優(yōu)點(diǎn)在于:集成度更高,極大減小了主控安裝于機(jī)器人上所占用的空間,一定程度上減小了機(jī)器人的自重;擁有24路舵機(jī)控制通道,滿(mǎn)足了比賽中對(duì)機(jī)器人靈活度的要求;集成軟啟動(dòng)功能,眾所周知,PWM 類(lèi)型的舵機(jī)其初始位置往往是未知的。傳統(tǒng)的啟動(dòng)模式將使舵機(jī)以全速運(yùn)行到目標(biāo)位置,在很多機(jī)器人應(yīng)用中是非常忌諱的。軟啟動(dòng)模式在初始位置未知的情況下可將舵機(jī)緩速運(yùn)行到目標(biāo)位置,但在短時(shí)間內(nèi)需要較大的電流(當(dāng)需要控制多個(gè)舵機(jī)時(shí),可采用分時(shí)啟動(dòng)的方式緩解)。
在決定使用Arduino之前,作者也曾試驗(yàn)過(guò)比較熟悉的51單片機(jī)在機(jī)器人控制上的效果,結(jié)果發(fā)現(xiàn)除了在對(duì)多個(gè)舵機(jī)的控制方面表現(xiàn)不足外,在代碼編寫(xiě)方面,傳統(tǒng)單片機(jī)也不及Arduino方便,因?yàn)锳rduino的編譯環(huán)境對(duì)AVR-GCC庫(kù)實(shí)現(xiàn)了二次封裝,使用者即使對(duì)C等編譯語(yǔ)言不是很熟悉,沒(méi)有很多單片機(jī)基礎(chǔ),進(jìn)行簡(jiǎn)單學(xué)習(xí)后也能很快上手,大大縮短了開(kāi)發(fā)周期,節(jié)約了開(kāi)發(fā)成本。并且由于開(kāi)源的環(huán)境,可以根據(jù)自己的需求到Arduino論壇上下載已有的代碼,然后進(jìn)行修改,其中包括傳感器等模塊的庫(kù)文件及測(cè)試程序。以下為作者參賽時(shí)所用雙足類(lèi)人舞蹈機(jī)器上程序的一段截?。?/p>
#include "GI2C_V11.h"
#include
#include
unsigned char Buf[61 + 1];
GI2CV11 ManShow_RC1(Buf, sizeof(Buf));
const unsigned char back[][49] PROGMEM = { 90, 90, 111, 93, 90, 134, 86, 104, 76, 91, 83, 205, 8, 93, 88, 92, 88, 86, 86, 119, 91, 90, 88, 96, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 3 };
大括號(hào)內(nèi)的48個(gè)數(shù)字,分別對(duì)應(yīng)24個(gè)舵機(jī)的預(yù)設(shè)位置(0-180°)和運(yùn)轉(zhuǎn)時(shí)的速度(1-250)。由于已經(jīng)有現(xiàn)成的庫(kù)文件可以使用,只需簡(jiǎn)單配置寄存器即可,由此可見(jiàn)與傳統(tǒng)單片機(jī)相比,Arduino在開(kāi)發(fā)周期上極大地縮短,并且減少了代碼占用空間,讓使用者省去了擴(kuò)展內(nèi)存的麻煩,為增加擴(kuò)展模塊帶來(lái)便利。
3 PWM類(lèi)型的舵機(jī)控制器性能評(píng)價(jià)
1)PWM 類(lèi)型的舵機(jī),其PWM有效寬度并非完全一致,考慮到兼容性問(wèn)題,PWM有效寬度必須可設(shè)定。
2)對(duì)于標(biāo)準(zhǔn)的PWM類(lèi)型舵機(jī),PWM信號(hào)周期通常建議為20ms,但對(duì)于數(shù)字舵機(jī),可允許更高頻率的信號(hào)輸入,當(dāng)應(yīng)用系統(tǒng)要求舵機(jī)具有更高的響應(yīng)速度時(shí),可縮短PWM信號(hào)的周期。因此,PWM信號(hào)的周期可人為設(shè)定,也是很有必要的。
3)有些時(shí)候我們希望所有的PWM信號(hào)同時(shí)輸出,并且信號(hào)間的耦合性控制在肉眼難以察覺(jué)的程度。
4)在一些動(dòng)態(tài)的應(yīng)用系統(tǒng)中,尤其是人形機(jī)器人,我們希望在任意時(shí)刻每個(gè)通道的位置和速度均可單獨(dú)控制,因?yàn)闄C(jī)器人的動(dòng)態(tài)平衡是依靠慣性力實(shí)現(xiàn)的。
5)絕大多數(shù)的舵機(jī)控制器均將舵機(jī)的動(dòng)作代碼固化在EEPROM或Flash ROM中,或許這樣操作起來(lái)很簡(jiǎn)單。我們認(rèn)為,一個(gè)機(jī)器人系統(tǒng),需要結(jié)合搭載的傳感器與智能控制算法,動(dòng)態(tài)生成舵機(jī)的動(dòng)作代碼。此外,關(guān)于通訊接口的簡(jiǎn)易性、實(shí)時(shí)性和穩(wěn)定性也是非常的關(guān)鍵。
6)為了更好地保護(hù)舵機(jī),必須能夠在任意時(shí)刻停止PWM信號(hào)的輸出。在使用過(guò)程中經(jīng)常會(huì)發(fā)現(xiàn)一個(gè)現(xiàn)象:舵機(jī)毀于沖擊力,原則上,當(dāng)存在異常的沖擊力時(shí),應(yīng)當(dāng)停止信號(hào)的輸出。例如:機(jī)器人處于跌落狀態(tài)(可由加速度傳感器檢測(cè)),倘若提前停止PWM信號(hào)的輸出,使舵機(jī)進(jìn)入惰行或制動(dòng)狀態(tài),便可避免剛性沖擊。
4 傳感器的使用
針對(duì)不同應(yīng)用情境或比賽項(xiàng)目的不同,機(jī)器人可視情況加載合適的傳感器,以達(dá)到適應(yīng)外界環(huán)境和精確控制的目的。比如擂臺(tái)對(duì)抗機(jī)器人,為了防止掉下擂臺(tái),往往加載灰度傳感器檢測(cè)擂臺(tái)邊緣的色帶;舞蹈機(jī)器人可增加加速度傳感器,用以檢測(cè)機(jī)器人的意外跌落,因?yàn)閷?duì)于舵機(jī),跌落后的意外卡死往往是致命的。
5 一些主流的控制方式
如若沒(méi)有特殊要求的情況下,可以給機(jī)器人增設(shè)遙控,通過(guò)一組紅外傳感器來(lái)控制機(jī)器人,在遙控器上對(duì)于每個(gè)按下的按鈕都發(fā)送一個(gè)特定的紅外線編碼,可以在Arduino上使用IR接收集成電路讀取紅外線編碼,這樣使用者可以更及時(shí)的調(diào)整機(jī)器人的姿態(tài)。
語(yǔ)音控制也是一種不錯(cuò)的選擇,預(yù)先將一些指令錄入主控當(dāng)中,具體操作時(shí),語(yǔ)音模塊對(duì)使用者的指令進(jìn)行識(shí)別,然后調(diào)動(dòng)舵機(jī)或其他模塊進(jìn)行相應(yīng)動(dòng)作。
談到了聲控就不得不提及光控,雖然此種控制方式對(duì)環(huán)境要求較高,但倘若使用好了也會(huì)給人耳目一新的感覺(jué),比如舞蹈機(jī)器人,結(jié)合特定舞臺(tái)燈光的指令后可以更好地進(jìn)行姿態(tài)調(diào)整。
為了實(shí)時(shí)監(jiān)控機(jī)器人的動(dòng)態(tài)參數(shù),也可以選擇上位機(jī)控制機(jī)器人,可以自主編寫(xiě)上位機(jī)軟件或網(wǎng)上下載現(xiàn)成的軟件使用。上位機(jī)控制方式分為有線和無(wú)線兩種。
藍(lán)牙模塊、語(yǔ)音模塊以及光傳感器等在網(wǎng)上商城均有銷(xiāo)售,買(mǎi)時(shí)需注意是否與Arduino兼容。
6 結(jié)束語(yǔ)
雙足類(lèi)人機(jī)器人運(yùn)動(dòng)靈活,因與人類(lèi)相似,可以在眾多領(lǐng)域得到應(yīng)用。本文對(duì)基于Arduino主控的機(jī)器人的控制進(jìn)行了簡(jiǎn)述,結(jié)合作者的參賽經(jīng)歷,從主控的選擇、外設(shè)擴(kuò)展以及其他主流控制方式三方面給予建議。經(jīng)過(guò)驗(yàn)證,Arduino在中小型機(jī)器人的設(shè)計(jì)制造上確實(shí)有很多傳統(tǒng)單片機(jī)沒(méi)有的優(yōu)勢(shì)。
參考文獻(xiàn):
[1] John-David Warren,Josh Adams,Harald Molle.Arduino Robotics[M]. Apress,2011.
[2] 陳呂洲.Arduino程序設(shè)計(jì)基礎(chǔ)[M].北京:北京航空航天大學(xué)出版社,2015.
[3] 蔡睿妍.基于Arduino的舵機(jī)控制系統(tǒng)設(shè)計(jì)[J].電腦知識(shí)與技術(shù),2012,5(15).
[4] 孟浩,王妍瑋.基于Arduino 的雙足仿人機(jī)器人設(shè)計(jì)[J].林業(yè)機(jī)械與木工設(shè)備,2014,2(2).