摘要:針對以往教育機器人自由度少、控制不靈活、教育功能弱的缺點,使用高集成度ARM芯片設計了一個簡潔的17自由度人形機器人控制系統。規劃了機器人的軟硬件結構,設計了控制電路和驅動系統,采用1個定時器產生17路PWM驅動信號。重點以實例講解了波形產生及驅動函數的編寫方法和技巧。設計的機器人能夠完成整套體操運動。這種方法在多自由度機器人操控和教學中具有廣泛的借鑒意義。 1 系統方案設計 人形機器人控制系統包括機器人控制器和機器人遙控器兩部分。其中控制器以飛利浦公司的ARM7處理器為核心,包含17個舵機控制驅動電路與接口、串口通信調試電路、遙控接口、電源等。通過串口下載和傳輸控制信息。機器人遙控器使用無線模塊向機器人控制器發送指令,控制機器人完成規定動作。 2 硬件設計 人形機器人控制器主板由控制核心LPC2114、電源及檢測電路、外部晶振、JTAG調試接口、串口模塊、遙控模塊、舵機接口、LED指示燈等組成,組成框圖如圖1所示。 LPC2114基于一個支持實時仿真和跟蹤的32位ARM7TDMI-S CPU,并帶有128 k字節的高速Flash存儲器,非常小的LQFP64封裝、極低的功耗、2個32位定時器、4路10位ADC、PWM輸出、46個GPIO以及多達9個外部中斷使它們特別適用于工業控制、醫療系統、訪問控制和電子收款機(POS)等[2]。 較高的功能集成度和強大的端口驅動能力使得機器人控制器主板電路的核心部分非常簡潔,基本上實現了單芯片的設計,如圖2所示為LPC2114控制器電路和4個舵機的驅動接口電路,其余13個舵機驅類同。 考慮到教育機器人的運動平衡控制,將PCB電路板按圖3(a)所示位置布局。該布局除了處理器最小系統,以及必要的指示和控制電路外,最重要的就是17個舵機驅動接口,這里使用彎角3排針連接,保證鏈接的緊湊和可靠。17個舵機接口分為5組,與下載接口按照左右各9個布局,其中人形機器人的頭包含1個舵機接口,負責左右運動,左胳膊包含3個舵機接口,分控肩、肘、腕3個運動自由度,左腿包含4個舵機接口,分控胯的左右/上下、膝蓋及腳腕4個自由度。右胳膊與右腿的分控接口和功能與機器人控制器左半部分對稱[3]。 最后將控制器與7.2V電芯并列裝配到鋁合金外殼中,作為機器人的軀體,同時作為運動平衡的重心,良好的布局對機器人的運動至關重要[4]。 考慮到人形機器人的自重和動作力度,設計采用FUTABA系列產品中的S3050大力矩車用、船用競賽型金屬齒輪數字舵機,如圖3(b)所示。該舵機自重48.8克,尺寸小,在6V電壓下工作,能夠達到0.16秒/60度的轉速,力矩大小為6.5千克/厘米。 17個舵機按照前述的分組和人體關節結構對稱排列布局,頭部1個舵機,左右胳膊各3個舵機,分別做為肩、肘、腕關節,左右腿各5個舵機,分別為髖關節的左右運動1個、前后運動1個、膝關節1個、踝關節前后運動1個、左右運動1個,其中2個肩關節舵機和2個髖關節的左右運動的舵機,上下左右對稱緊湊安裝,作為身體的一部分,所有其他舵機使用鋁合金支撐固定成緊湊的人形結構[5]。 3 軟件設計 軟件設計主要包含軟件架構設計、程序流程設計和驅動控制函數的設計。 3.1 軟件架構 該人形機器人控制系統原理是:當機器人控制器接收到遙控器發出的指令后,ARM處理器根據指令要求,將要執行的動作參數分解成一系列寬度不等的PWM信號,并通過驅動電路輸出到舵機接口,外部舵機根據占空比不同的PWM信號轉動相應的角度,多個舵機不同的轉動角度構成了不同的機器人瞬時動作,多個動作連貫執行就完成與外部命令相應的響應動作。軟件架構如圖4所示。本文主要對關鍵驅動函數進行說明。 3.2 舵機驅動程序設計 驅動脈沖與舵機轉動角度如表1所示,不同的高電平時間對應著舵機不同的輸出位置。因此可以使用LPC2114內部定時器模擬出17路以20ms為周期、高電平寬度與位置時序對應的PWM波形,來分別驅動控制17個舵機轉動的角度,配合完成機器人的相關動作[6]。 多個舵機的驅動需要依據機器人的姿態數據計算出轉動時間,將其時間數據按一定算法進行排序,并在CPU的控制下設置各舵機的運動和停止時間。 3.3 機器人舵機整體驅動函數 ManMoveFrame()設計 函數功能:將輸入的各伺服器角度轉換為各伺服器的高電平時間,按照17個伺服器高電平時間從短到長依次調用對應伺服器驅動。共18個入口參數,17個是伺服器角度,1個是動畫停留時間,轉換關系:1度約為0.00814ms。 函數定義:void ManMoveFrame(int16 Head_Angle,int16 Larm1_Angle,… ,,int16 Rleg5_Angle,uint8 t) {uint8 i,t1; int HeadTime,Larm1Time,Larm2Time, … ,Rleg4Time,Rleg5Time;/*與角度對應的時間變量*/ int MotorTime[17]; /*各舵機驅動脈沖時間數組*/ MotorTime[0]=HeadTime=Head_0+Head_Angle*Angle1;/*頭部驅動脈沖時間*/ /*MotorTime[1]至MotorTime[16]略;*/ qsort(MotorTime,17,sizeof(int),Compare); /*對MotorTime數組快排序,使其值從小到大重排*/ … for(i=0;i機器人姿態數據輸入驅動函數ManMoveKeyframeData()設計 機器人動作的關鍵姿態是由各舵機轉動位置決定的,需要參照機器人的體態對17個舵機的自由度關系數據進行設置,驅動函數將如表2所示設置的參數轉換為驅動信號,控制17個舵機的轉動,從而完成機器人行走的動作。表格空白的地方默認數據為0。 函數功能:初始化各伺服器角度/時間數組,將機器人每姿態動作的各舵機角度數據輸入給各伺服器數組。共19個入口參數:1個關鍵幀號、17個伺服器角度、1個動畫停留時間。 函數定義:void ManMoveKeyframeData(uint16 ID,int16 H_Angle, …,int16 RL5_Angle,uint8 t){ ID_Max++;/*動作幀數,全局變量,記錄動作幀數,每加入1幀,ID_Max的值就增1*/ H[ID]=H_Angle;/*頭的角度*/ … RL5[ID]=RL5_Angle; /*左肩的角度*/ T_Key[ID]=t;/*幀動作完成的時間長度*/ } 3.5 機器人動作控制驅動函數ManMoveKeyframeToFrame()設計 主要功能:把動作幅度較大的姿態關鍵幀數據結合其下面緊挨的姿態關鍵幀數據轉換為時間均勻的普通幀驅動參數,供整體驅動使用。入口參數:無。出口參數:無。 函數定義: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;/*幀號、舵機時間臨時變量*/ for(id=0;id機器人程序流程 機器人根據接收到的遙控命令自行判斷并完成動作,工作流程如圖5所示。因為人形機器人使用電池,工作比較耗電,所以在運動前要先檢測工作電壓,如果達到工作要求就接著工作,否則不執行動作并報警,工作電壓不滿足要求會造成機器人因動力不足而摔倒,接收到結束命令就停止運行,不再響應外部所發來的遙控命令,如果完成一個動作就恢復到立正站立狀態[7]。 需要指出的是,在機器人運動時,程序對其外部的伺服器控制要進行分時分批控制,以減輕處理器功耗壓力,達到可靠驅動的目的。 4 結論 按照機器人的運動體態完成運動數據的設計,經過測試,該控制系統可以完成包括前滾翻、后滾翻、俯臥撐在內的多種體操運動。課題組計劃進一步封裝函數,并設計可視化圖形編程界面,以便可以在電腦上更加直觀地生成運動數據,積木化編程,降低操作難度。 參考文獻: [1] 閻世梁, 張華等.高等工程教育中的機器人教育探索與實踐[J].實驗室研究與探索.2013(8):149-152 [2] 高彥杰.嵌入式溫度測量系統的設計與實現[J]. 數字技術與應用.2012(6):147-149 [3] 趙瑞林,盧慶林,張順星.教學型雙足步行機器人的結構及其控制電路設計[J]. 計算技術與自動化.2014(2):74 [4]付偉,王建華.一種用于仿人型機器人控制的腳本語言的設計與實現[J].計算機應用. 2014,32(8):24 [5] 劉磊,韓冰,王連弟等.一種雙足行走機構的構型設計與運動學分析[J]. 天津理工大學學報.2014(3):32-35 [6] 陳強,羅斌,秦超.仿人型機器人控制系統設計的幾個問題[J]. 自動化技術與應用.2013,32(5) 14 [7] 李紅巖,高陽東.基于LPC2131的RF遙控多關節蛇形機器人[J]. 自動化與儀表.2014(6):3-4 |