作者:席東河,申一歌,杜娟,高吉珍
1 系統(tǒng)方案設(shè)計(jì)
人形機(jī)器人控制系統(tǒng)包括機(jī)器人控制器和機(jī)器人遙控器兩部分。其中控制器以飛利浦公司的ARM7處理器為核心,包含17個(gè)舵機(jī)控制驅(qū)動(dòng)電路與接口、串口通信調(diào)試電路、遙控接口、電源等。通過(guò)串口下載和傳輸控制信息。機(jī)器人遙控器使用無(wú)線(xiàn)模塊向機(jī)器人控制器發(fā)送指令,控制機(jī)器人完成規(guī)定動(dòng)作。
2 硬件設(shè)計(jì)
人形機(jī)器人控制器主板由控制核心LPC2114、電源及檢測(cè)電路、外部晶振、JTAG調(diào)試接口、串口模塊、遙控模塊、舵機(jī)接口、LED指示燈等組成,組成框圖如圖1所示。
LPC2114基于一個(gè)支持實(shí)時(shí)仿真和跟蹤的32位ARM7TDMI-S CPU,并帶有128 k字節(jié)的高速Flash存儲(chǔ)器,非常小的LQFP64封裝、極低的功耗、2個(gè)32位定時(shí)器、4路10位ADC、PWM輸出、46個(gè)GPIO以及多達(dá)9個(gè)外部中斷使它們特別適用于工業(yè)控制、醫(yī)療系統(tǒng)、訪(fǎng)問(wèn)控制和電子收款機(jī)(POS)等[2]。
較高的功能集成度和強(qiáng)大的端口驅(qū)動(dòng)能力使得機(jī)器人控制器主板電路的核心部分非常簡(jiǎn)潔,基本上實(shí)現(xiàn)了單芯片的設(shè)計(jì),如圖2所示為L(zhǎng)PC2114控制器電路和4個(gè)舵機(jī)的驅(qū)動(dòng)接口電路,其余13個(gè)舵機(jī)驅(qū)類(lèi)同。
考慮到教育機(jī)器人的運(yùn)動(dòng)平衡控制,將PCB電路板按圖3(a)所示位置布局。該布局除了處理器最小系統(tǒng),以及必要的指示和控制電路外,最重要的就是17個(gè)舵機(jī)驅(qū)動(dòng)接口,這里使用彎角3排針連接,保證鏈接的緊湊和可靠。17個(gè)舵機(jī)接口分為5組,與下載接口按照左右各9個(gè)布局,其中人形機(jī)器人的頭包含1個(gè)舵機(jī)接口,負(fù)責(zé)左右運(yùn)動(dòng),左胳膊包含3個(gè)舵機(jī)接口,分控肩、肘、腕3個(gè)運(yùn)動(dòng)自由度,左腿包含4個(gè)舵機(jī)接口,分控胯的左右/上下、膝蓋及腳腕4個(gè)自由度。右胳膊與右腿的分控接口和功能與機(jī)器人控制器左半部分對(duì)稱(chēng)[3]。
最后將控制器與7.2V電芯并列裝配到鋁合金外殼中,作為機(jī)器人的軀體,同時(shí)作為運(yùn)動(dòng)平衡的重心,良好的布局對(duì)機(jī)器人的運(yùn)動(dòng)至關(guān)重要[4]。
考慮到人形機(jī)器人的自重和動(dòng)作力度,設(shè)計(jì)采用FUTABA系列產(chǎn)品中的S3050大力矩車(chē)用、船用競(jìng)賽型金屬齒輪數(shù)字舵機(jī),如圖3(b)所示。該舵機(jī)自重48.8克,尺寸小,在6V電壓下工作,能夠達(dá)到0.16秒/60度的轉(zhuǎn)速,力矩大小為6.5千克/厘米。
17個(gè)舵機(jī)按照前述的分組和人體關(guān)節(jié)結(jié)構(gòu)對(duì)稱(chēng)排列布局,頭部1個(gè)舵機(jī),左右胳膊各3個(gè)舵機(jī),分別做為肩、肘、腕關(guān)節(jié),左右腿各5個(gè)舵機(jī),分別為髖關(guān)節(jié)的左右運(yùn)動(dòng)1個(gè)、前后運(yùn)動(dòng)1個(gè)、膝關(guān)節(jié)1個(gè)、踝關(guān)節(jié)前后運(yùn)動(dòng)1個(gè)、左右運(yùn)動(dòng)1個(gè),其中2個(gè)肩關(guān)節(jié)舵機(jī)和2個(gè)髖關(guān)節(jié)的左右運(yùn)動(dòng)的舵機(jī),上下左右對(duì)稱(chēng)緊湊安裝,作為身體的一部分,所有其他舵機(jī)使用鋁合金支撐固定成緊湊的人形結(jié)構(gòu)[5]。
3 軟件設(shè)計(jì)
軟件設(shè)計(jì)主要包含軟件架構(gòu)設(shè)計(jì)、程序流程設(shè)計(jì)和驅(qū)動(dòng)控制函數(shù)的設(shè)計(jì)。
3.1 軟件架構(gòu)
該人形機(jī)器人控制系統(tǒng)原理是:當(dāng)機(jī)器人控制器接收到遙控器發(fā)出的指令后,ARM處理器根據(jù)指令要求,將要執(zhí)行的動(dòng)作參數(shù)分解成一系列寬度不等的PWM信號(hào),并通過(guò)驅(qū)動(dòng)電路輸出到舵機(jī)接口,外部舵機(jī)根據(jù)占空比不同的PWM信號(hào)轉(zhuǎn)動(dòng)相應(yīng)的角度,多個(gè)舵機(jī)不同的轉(zhuǎn)動(dòng)角度構(gòu)成了不同的機(jī)器人瞬時(shí)動(dòng)作,多個(gè)動(dòng)作連貫執(zhí)行就完成與外部命令相應(yīng)的響應(yīng)動(dòng)作。軟件架構(gòu)如圖4所示。本文主要對(duì)關(guān)鍵驅(qū)動(dòng)函數(shù)進(jìn)行說(shuō)明。
3.2 舵機(jī)驅(qū)動(dòng)程序設(shè)計(jì)
驅(qū)動(dòng)脈沖與舵機(jī)轉(zhuǎn)動(dòng)角度如表1所示,不同的高電平時(shí)間對(duì)應(yīng)著舵機(jī)不同的輸出位置。因此可以使用LPC2114內(nèi)部定時(shí)器模擬出17路以20ms為周期、高電平寬度與位置時(shí)序?qū)?yīng)的PWM波形,來(lái)分別驅(qū)動(dòng)控制17個(gè)舵機(jī)轉(zhuǎn)動(dòng)的角度,配合完成機(jī)器人的相關(guān)動(dòng)作[6]。
多個(gè)舵機(jī)的驅(qū)動(dòng)需要依據(jù)機(jī)器人的姿態(tài)數(shù)據(jù)計(jì)算出轉(zhuǎn)動(dòng)時(shí)間,將其時(shí)間數(shù)據(jù)按一定算法進(jìn)行排序,并在CPU的控制下設(shè)置各舵機(jī)的運(yùn)動(dòng)和停止時(shí)間。
3.3 機(jī)器人舵機(jī)整體驅(qū)動(dòng)函數(shù) ManMoveFrame()設(shè)計(jì)
函數(shù)功能:將輸入的各伺服器角度轉(zhuǎn)換為各伺服器的高電平時(shí)間,按照17個(gè)伺服器高電平時(shí)間從短到長(zhǎng)依次調(diào)用對(duì)應(yīng)伺服器驅(qū)動(dòng)。共18個(gè)入口參數(shù),17個(gè)是伺服器角度,1個(gè)是動(dòng)畫(huà)停留時(shí)間,轉(zhuǎn)換關(guān)系:1度約為0.00814ms。
函數(shù)定義:void ManMoveFrame(int16 Head_Angle,int16 Larm1_Angle,… ,,int16 Rleg5_Angle,uint8 t)
{uint8 i,t1; int HeadTime,Larm1Time,Larm2Time, … ,Rleg4Time,Rleg5Time;/*與角度對(duì)應(yīng)的時(shí)間變量*/
int MotorTime[17]; /*各舵機(jī)驅(qū)動(dòng)脈沖時(shí)間數(shù)組*/
MotorTime[0]=HeadTime=Head_0+Head_Angle*Angle1;/*頭部驅(qū)動(dòng)脈沖時(shí)間*/
/*MotorTime[1]至MotorTime[16]略;*/
qsort(MotorTime,17,sizeof(int),Compare); /*對(duì)MotorTime數(shù)組快排序,使其值從小到大重排*/ …
for(i=0;i機(jī)器人姿態(tài)數(shù)據(jù)輸入驅(qū)動(dòng)函數(shù)ManMoveKeyframeData()設(shè)計(jì)
機(jī)器人動(dòng)作的關(guān)鍵姿態(tài)是由各舵機(jī)轉(zhuǎn)動(dòng)位置決定的,需要參照機(jī)器人的體態(tài)對(duì)17個(gè)舵機(jī)的自由度關(guān)系數(shù)據(jù)進(jìn)行設(shè)置,驅(qū)動(dòng)函數(shù)將如表2所示設(shè)置的參數(shù)轉(zhuǎn)換為驅(qū)動(dòng)信號(hào),控制17個(gè)舵機(jī)的轉(zhuǎn)動(dòng),從而完成機(jī)器人行走的動(dòng)作。表格空白的地方默認(rèn)數(shù)據(jù)為0。
函數(shù)功能:初始化各伺服器角度/時(shí)間數(shù)組,將機(jī)器人每姿態(tài)動(dòng)作的各舵機(jī)角度數(shù)據(jù)輸入給各伺服器數(shù)組。共19個(gè)入口參數(shù):1個(gè)關(guān)鍵幀號(hào)、17個(gè)伺服器角度、1個(gè)動(dòng)畫(huà)停留時(shí)間。
函數(shù)定義:void ManMoveKeyframeData(uint16 ID,int16 H_Angle, …,int16 RL5_Angle,uint8 t){
ID_Max++;/*動(dòng)作幀數(shù),全局變量,記錄動(dòng)作幀數(shù),每加入1幀,ID_Max的值就增1*/
H[ID]=H_Angle;/*頭的角度*/ … RL5[ID]=RL5_Angle; /*左肩的角度*/
T_Key[ID]=t;/*幀動(dòng)作完成的時(shí)間長(zhǎng)度*/ }
3.5 機(jī)器人動(dòng)作控制驅(qū)動(dòng)函數(shù)ManMoveKeyframeToFrame()設(shè)計(jì)
主要功能:把動(dòng)作幅度較大的姿態(tài)關(guān)鍵幀數(shù)據(jù)結(jié)合其下面緊挨的姿態(tài)關(guān)鍵幀數(shù)據(jù)轉(zhuǎn)換為時(shí)間均勻的普通幀驅(qū)動(dòng)參數(shù),供整體驅(qū)動(dòng)使用。入口參數(shù):無(wú)。出口參數(shù):無(wú)。
函數(shù)定義:void ManMoveKeyframeToFrame(void)
{uint16 id,h,la1,la2,la3,ra1,ra2,ra3,ll1,ll2,ll3,ll4,ll5,rl1,rl2,rl3,rl4,rl5;uint8 t,k;/*幀號(hào)、舵機(jī)時(shí)間臨時(shí)變量*/
for(id=0;id機(jī)器人程序流程
機(jī)器人根據(jù)接收到的遙控命令自行判斷并完成動(dòng)作,工作流程如圖5所示。因?yàn)槿诵螜C(jī)器人使用電池,工作比較耗電,所以在運(yùn)動(dòng)前要先檢測(cè)工作電壓,如果達(dá)到工作要求就接著工作,否則不執(zhí)行動(dòng)作并報(bào)警,工作電壓不滿(mǎn)足要求會(huì)造成機(jī)器人因動(dòng)力不足而摔倒,接收到結(jié)束命令就停止運(yùn)行,不再響應(yīng)外部所發(fā)來(lái)的遙控命令,如果完成一個(gè)動(dòng)作就恢復(fù)到立正站立狀態(tài)[7]。
需要指出的是,在機(jī)器人運(yùn)動(dòng)時(shí),程序?qū)ζ渫獠康乃欧骺刂埔M(jìn)行分時(shí)分批控制,以減輕處理器功耗壓力,達(dá)到可靠驅(qū)動(dòng)的目的。
4 結(jié)論
按照機(jī)器人的運(yùn)動(dòng)體態(tài)完成運(yùn)動(dòng)數(shù)據(jù)的設(shè)計(jì),經(jīng)過(guò)測(cè)試,該控制系統(tǒng)可以完成包括前滾翻、后滾翻、俯臥撐在內(nèi)的多種體操運(yùn)動(dòng)。課題組計(jì)劃進(jìn)一步封裝函數(shù),并設(shè)計(jì)可視化圖形編程界面,以便可以在電腦上更加直觀(guān)地生成運(yùn)動(dòng)數(shù)據(jù),積木化編程,降低操作難度。
責(zé)任編輯:gt
-
處理器
+關(guān)注
關(guān)注
68文章
19384瀏覽量
230492 -
控制器
+關(guān)注
關(guān)注
112文章
16416瀏覽量
178779 -
機(jī)器人
+關(guān)注
關(guān)注
211文章
28562瀏覽量
207698
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論