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