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