武豪杰,李發(fā)海
(湖北汽車工業(yè)學院電氣與信息工程學院,湖北十堰, 442002)
本項目主要是應用所學知識對STM32F407單片機進項改裝設(shè)計來控制仿人型格斗機器人以達到競賽所需的目的,本次項目為我校學生提供了一次探索科技、創(chuàng)新思維與實際行動結(jié)合的機會。也為激發(fā)我校學生對高科技的興趣與愛好、激勵創(chuàng)新意識、活躍校園科技活動、培養(yǎng)未來科技人才提供了大舞臺,也是深化“科技興國”戰(zhàn)略方針的一個新舉措。
仿人型格斗機器人的系統(tǒng)結(jié)構(gòu)主要由主控機構(gòu)、伺服舵機、傳動系統(tǒng)組成[1]。仿生機器人共有2條腿,均勻分布在圓形軀干的兩邊,每條腿上有5個關(guān)節(jié),機器人中的關(guān)節(jié)一般用“自由度”來表示。即機器人每條腿上有5個自由度,全身共19個自由度。對于一個仿生機器人來說,每條腿上的5個自由度基本能滿足到達各個位置的要求,關(guān)節(jié)部位通過來伺服舵機進行實現(xiàn)。主控機構(gòu)可以控制全身的伺服舵機進行合適的角度調(diào)整以達到仿人效果。手部可以根據(jù)實際情況安裝合適的手型。
控制板可以控制全身的伺服舵機進行合適的角度調(diào)整以達到仿人效果,在此基礎(chǔ)上完成合適的仿人動作。核心處理器采用STM32F407VET6;動作存儲空間:采用128MBTF儲存卡,最大可支持32G;控制方式:藍牙模塊控制;485舵機接口:5個,理論可同時控制舵機數(shù)量為254個;TTL舵機接口: 5個,理論可同時控制舵機數(shù)量為254個;喇叭接口: 可同時連接2個8歐3瓦的喇叭;串口數(shù)量: 預留3個TTL接口;三維軟件操作接口:標準USB接口;姿態(tài)傳感器(陀螺儀);電源模塊:采用12V
圖1 系統(tǒng)模塊設(shè)計圖
航模電池供電,再使用降壓模塊分別引出10V、5V、3.3V接口,分別為電機、各傳感器、STM32單片機供電。
要完成在藍牙模塊控制的情況下,能夠根據(jù)周圍情況的不同,做出合適的仿人動作。其動作有前進,后退,左右撤步和左、右轉(zhuǎn)正面,左、右直拳。通過STM32控制板進行藍牙模塊控制、電源檢測等基礎(chǔ)硬件配置,接收藍牙發(fā)送過來的信息[2],進行電源監(jiān)控以及進一步子模塊的運行。其子模塊是其某個具體動作的實現(xiàn)。系統(tǒng)模塊設(shè)計圖如圖1所示。
機器人采用的舵機為總線式舵機,此種舵機連接方式可以看作是所有的舵機是被一組線串聯(lián)起來的[3]。因此控制方式不是簡單的單對單控制命令,而是主控器將控制信號下發(fā)之后,每個舵機根據(jù)自己的ID號自動挑選自己對應的命令而執(zhí)行。而這些命令全部通過485或串口發(fā)送給各個舵機,同時也將舵機的當前信息發(fā)回到控制器。
本項目要研究的主要問題是通過所學知識對STM32F407單片機的改裝以及機器人程序的編寫和改進,同時對機器人進行硬件改裝和軟件設(shè)計以用于適應仿人搏斗機器人競賽。而基于STM32F407芯片的單片機與傳感器和數(shù)量足夠多的舵機的組合設(shè)計成的格斗機器人是一個嵌入式系統(tǒng),通過藍牙控制系統(tǒng)以執(zhí)行各種命令,實現(xiàn)仿人格斗動作。軟件系統(tǒng)結(jié)構(gòu)框圖如圖2所示。
圖2 軟件系統(tǒng)結(jié)構(gòu)框圖
機器人的多個關(guān)節(jié)組合運動實現(xiàn)了機器人的連貫性動作,在控制機器人動作的時候,能夠控制各個舵機分別勻速平滑的由一個位置到另外一個位置,便可以實現(xiàn)機器人的動作連貫性。通過將舵機位移過程分數(shù)的方式,使得舵機的運行速度盡量的勻速平滑。舵機運動控制圖如圖3所示。
圖3 舵機運動控制圖
//函數(shù)名稱:voidp_to_p(int delay)
//函數(shù)說明:position 變化子程序,實現(xiàn)同起同落
//入口參數(shù):delay=延時,define:決定循環(huán)次數(shù)由自//己決定還是通過程序算出結(jié)果
voidp_to_p(s16 delay,s16 define)
{
u8i,j; float c;
s16a,b=0,M=0;
u8 position_buあer[24];
for(i=0;i<24;i++)
{
position_buあer[i]=position[i];
//記錄當前位置值
}
if(define==0) //決定循環(huán)次數(shù)M
M=1;
else
M=define;
for(i=1;i<=M;i++) //開始循環(huán)M次輸出
{
for(j=0;j<24;j++)
{
// position_change記錄的是舵機的目標位置與當前位置差
c = position_change[j]; //將距離目標點的值分數(shù),一步步逼近目標值
if(i==1)
a=(c*i)/M;
else
{
a=(c*i)/M;
b=(c*(i-1))/M;
}
position[j]+=(a-b);//每次加上分數(shù)值取整
}
SendMultipleServosAngles(position, 24); //執(zhí)行24舵機輸出
low_level_500u(delay); //小延時,用于調(diào)速。
}
for(i=0;i<24;i++) //最后補償每個舵機的誤差
{
position[i]= position_buあer[i]+ position_change[i];
}
SendMultipleServosAngles(position, 24);
//執(zhí)行24舵機輸出
low_level_500u(delay);
}
嵌入式系統(tǒng)裝置一般都由嵌入式計算機系統(tǒng)和執(zhí)行裝置組成,執(zhí)行裝置也稱為被控對象,它可以接受嵌入式計算機系統(tǒng)發(fā)出的控制命令,執(zhí)行所規(guī)定的操作或任務(wù)。執(zhí)行裝置可以很簡單,如轉(zhuǎn)動機器人左臂的舵機,當遙控左臂出拳時,左臂的四個舵機調(diào)節(jié)轉(zhuǎn)軸角度做出類人出拳的動作。程序流程圖如圖4所示。
姿態(tài)傳感器是一種將非電量轉(zhuǎn)換為電量信號的檢測裝置,靈活的運用它,可以賦予機器人調(diào)整姿態(tài),使其出現(xiàn)任何不規(guī)則的姿勢回歸到標準站姿。開始要給傳感器設(shè)置合理的初始數(shù)值,作為判斷摔倒的依據(jù),在倒地時能準確判斷并站立。機器摔倒判流程如圖5所示。
圖4 程序流程圖
圖5 機器摔倒判別流程圖
本項目的關(guān)鍵問題在于,第一在硬件上理解舵機的驅(qū)動原理,即通過某種頻率的脈沖信號來控制舵機的轉(zhuǎn)動速度和方向,需要對19個舵機進行通電同步控制,連接藍牙模塊,設(shè)置好舵機穩(wěn)定的初始位置,配置姿態(tài)傳感器等處理。第二在軟件上,利用proteus仿真和keil5軟件進行C語言編寫,編程語言嵌入單片機后,當用藍牙控制機器人時,使機器人能夠依靠多個舵機同時轉(zhuǎn)動及時做出合理的動作,即要為單片機植入合理的程序,寫入多樣的動作模塊,使機器人結(jié)合多個攻擊動作,完成比賽要求。第三,在其他方面上,例如機械結(jié)構(gòu),既要保證機器人的強度也要保證機器人的靈活性,確保材料穩(wěn)定,同時也要研究多個舵機轉(zhuǎn)動協(xié)調(diào)出動作,這是確保機器人在應對突發(fā)情況時是否能及時做出應對的關(guān)鍵。