摘 要:使用Arduino板控制舵機(jī)旋轉(zhuǎn)角度進(jìn)而控制機(jī)器人的行走是四足步行機(jī)器人研究的一個(gè)重要方法。文章通過(guò)重點(diǎn)研究Arduino的編程程序?qū)崿F(xiàn)Arduino板、舵機(jī)和視覺(jué)模塊的聯(lián)動(dòng),從而控制視覺(jué)機(jī)器人的工作。
關(guān)鍵詞:Arduino;視覺(jué)步行機(jī)器人;舵機(jī);Pixy
引言
Arduino是一款便捷靈活、方便上手的開(kāi)源電子原型平臺(tái),包含硬件(各種型號(hào)的Arduino板)和軟件(Arduino IDE)。它具有跨平臺(tái)性、簡(jiǎn)單清晰、開(kāi)放性等優(yōu)點(diǎn),且近年來(lái)發(fā)展迅速,成為全球最流行的開(kāi)源硬件,因此將其作為視覺(jué)步行機(jī)器人的控制模塊具有很高的可操作性。
1 Arduino的軟件--Arduino IDE
Arduino IDE是Arduino的編程軟件,基于processing IDE開(kāi)發(fā),具有很高的靈活性,且Arduino語(yǔ)言基于wiring語(yǔ)言開(kāi)發(fā),是對(duì) AVRGCC庫(kù)的二次封裝,它可以在Windows、Macintosh OS X、Linux三大主流操作系統(tǒng)上運(yùn)行,而其他的大多數(shù)控制器只能在Windows上開(kāi)發(fā),對(duì)于編程者來(lái)說(shuō)極其便利。
2 Arduino控制舵機(jī)角度
舵機(jī)是一種位置伺服的驅(qū)動(dòng)器,其工作原理是由接收機(jī)或者單片機(jī)發(fā)出信號(hào)給舵機(jī),其內(nèi)部有一個(gè)基準(zhǔn)電路,產(chǎn)生周期為20ms,寬度為1.5ms的基準(zhǔn)信號(hào),將獲得的直流偏置電壓與電位器的電壓比較,獲得電壓差輸出。一般舵機(jī)旋轉(zhuǎn)的角度范圍是0°到180°度。
正是由于舵機(jī)轉(zhuǎn)動(dòng)的角度是通過(guò)調(diào)節(jié)PMW(脈沖寬度調(diào)制)信號(hào)的占空比來(lái)實(shí)現(xiàn)的,所以可以通過(guò)硬件上將Arduino板與舵機(jī)接線,軟件上向Arduino嵌入控制程序來(lái)控制舵機(jī)旋轉(zhuǎn)角度。
下面是一個(gè)簡(jiǎn)單的Arduino舵機(jī)角度控制程序:
#include
Servo myservo;
int pos = 0;
void setup()
{
myservo.attach(9);
}
void loop()
{
for(pos = 0; pos < 180; pos += 1)
{
myservo.write(pos);
delay(15);
}
}
此程序可以實(shí)現(xiàn)舵機(jī)0到180度的轉(zhuǎn)動(dòng),且每個(gè)角度之間相隔15ms。
通過(guò)Arduino控制舵機(jī)轉(zhuǎn)動(dòng)的控制程序簡(jiǎn)單,且角度轉(zhuǎn)動(dòng)的精確度較高,對(duì)于小型四足步行機(jī)器人的行走要求很符合。
3 Arduino控制視覺(jué)模塊
視覺(jué)模塊我們使用Pixy CMUcam5 圖像識(shí)別傳感器。Pixy是一個(gè)開(kāi)源的圖像識(shí)別傳感器,支持多物體,多色彩的顏色識(shí)別,最高支持識(shí)別7種顏色。你可以告訴它你想要的顏色,它就會(huì)去尋找所需顏色。Pixy支持多種通信方式,如SPI,I2C等,可以直插在Arduino控制板上面。它搭載的圖像傳感器配合強(qiáng)大的硬件,可以配合PC跟蹤、分析多色的數(shù)據(jù)。
之所以選擇Pixy這種視覺(jué)模塊,不僅因?yàn)樗cArduino控制板聯(lián)接簡(jiǎn)單,功能強(qiáng)大,還因?yàn)樗浅7纤淖悴叫袡C(jī)器人的要求。它采用以顏色為中心的辦法——使該產(chǎn)品只是將特定顏色的物體的視覺(jué)數(shù)據(jù)發(fā)送給相互配合的微型控制器,而不是輸出所有視覺(jué)數(shù)據(jù)以進(jìn)行圖像處理。所以Arduino板很容易跟它交流,并騰出許多CPU來(lái)執(zhí)行其他事件。這一點(diǎn)對(duì)我們的四足機(jī)器人至關(guān)重要,因?yàn)閷?duì)于四足機(jī)器人來(lái)說(shuō),其步態(tài)、行走方式等影響極大。
硬件上Arduino與Pixy的聯(lián)接非常簡(jiǎn)單,Pixy可以直接與Arduino進(jìn)行通訊。它會(huì)以1Mbits/s的速度發(fā)送塊信息給Arduino,這意味著Pixy每秒可以發(fā)送超過(guò)6000個(gè)識(shí)別的物體或每幀135個(gè)被識(shí)別的物體(Pixy每秒可以處理50幀畫面)。想讓Pixy與Arduino進(jìn)行通訊,只需使用Pixy自帶的數(shù)據(jù)線連接Pixy到Arduino。軟件上我們通過(guò)向Arduino嵌入控制程序來(lái)實(shí)現(xiàn)與Pixy的聯(lián)接。
4 Arduino與視覺(jué)模塊、舵機(jī)的聯(lián)接
硬件上分別將舵機(jī)、Pixy與Arduino進(jìn)行聯(lián)接,注意信號(hào)線、電源線與接地線的正確連接,這對(duì)整個(gè)系統(tǒng)的安全至關(guān)重要。
軟件上通過(guò)一個(gè)嵌套的控制程序?qū)崿F(xiàn)三者的互相聯(lián)系。首先Pixy會(huì)對(duì)被識(shí)別物體的大小、形狀進(jìn)行分析,且對(duì)初始位置時(shí)物體的中心點(diǎn)編為坐標(biāo)原點(diǎn),當(dāng)被識(shí)別物體開(kāi)始運(yùn)動(dòng)時(shí),Pixy會(huì)將物體大小和方位的變化信息傳遞給Arduino,Arduino再控制舵機(jī)旋轉(zhuǎn)相應(yīng)角度,從而實(shí)現(xiàn)機(jī)器人前后左右的行走。
下面是判斷物體大小方位變化的程序:
if(pixy.blocks[0].x<200pixy.blocks[0].x>100)
{
if(pixy.blocks[0].width * pixy.blocks[0].height<10000)
advance();
else
back();
}
if(pixy.blocks[0].x>200)
right();
if(pixy.blocks[0].x<100)
left();
上面程序中advance()、back()、right()、left()是子函數(shù),控制機(jī)器人的行走方向。
下面是advance()函數(shù)的程序:
void advance() //前進(jìn)
{
Serial.println(\"advance\");
for(int j=0;j<16;j++)
{for(int i=0;i<8;i++)
{tst_srv[i].write(adv_srv_pos[i][j]);}
delay(50);}
Serial.println(\"adv end\");
}
經(jīng)過(guò)實(shí)驗(yàn)測(cè)試,Arduino完全能承擔(dān)控制核心的作用,實(shí)現(xiàn)與視覺(jué)模塊和舵機(jī)的聯(lián)動(dòng),從而實(shí)現(xiàn)視覺(jué)四足步行機(jī)器人的追蹤功能。
參考文獻(xiàn)
[1][美]Michael McRoberts.Arduino從基礎(chǔ)到實(shí)踐[M].電子工業(yè)出版
社.
[2]譚鋒.四足機(jī)器人視覺(jué)系統(tǒng)研究與實(shí)現(xiàn)[D].同濟(jì)大學(xué).
[3]趙建領(lǐng),薛園園.51單片機(jī)開(kāi)發(fā)與應(yīng)用技術(shù)詳解[M].電子工業(yè)出版社.