徐謀鋒,黃雪梅
(山東理工大學機械工程學院,山東淄博255049)
舞蹈機器人在做動作時是按順序讀取預先設計好的動作程序,而這些動作程序是每個舵機轉動的數(shù)據(jù)。舞蹈機器人動作實現(xiàn)的傳統(tǒng)方法是把每個舵機的轉動數(shù)據(jù)存儲在一個大型數(shù)組中,每隔一段時間讀取這些數(shù)據(jù)[1].這種實現(xiàn)方法的缺點是舞蹈機器人在做動作時,有些舵機并不參與運動,這樣在數(shù)組中會有很多的0元素存在,從而占用了大量的存儲空間.本文對這些數(shù)據(jù)的存儲方式進行了改進,并且只存儲那些參與運動的舵機轉動數(shù)據(jù),從而大大節(jié)省了存儲空間.
舞蹈機器人的動作,主要是通過各個關節(jié)的精確運動來實現(xiàn).由于舵機具有精確的位置角度控制能力,所以選用舵機作為舞蹈機器人的驅動元件.圖1為舞蹈機器人自由度分配圖,圖1中,“”表示側向轉動的自由度;”表示水平轉動的自由度;“”表示前后轉動的自由度.舞蹈機器人踝關節(jié)分配2個自由度,膝關節(jié)有1個自由度,髖關節(jié)分配2個自由度,這樣下肢共有10個自由度;肘部分配1個自由度,肩部分配2個自由度,這樣上身共設計6個自由度;再加上頭部的1個自由度,舞蹈機器人一共有17個自由度.為了方便識別每個自由度,對每個舵機進行了數(shù)字編號.
圖1 舞蹈機器人自由度分配圖
采用TI公司的高性能數(shù)字信號處理器TMS320LF2407A來控制17個舵機的轉動.為了縮短程序的編寫時間和降低開發(fā)難度,采用C語言作為舞蹈機器人動作的編程語言,采用TI公司提供的DSP開發(fā)工具CCS2000進行開發(fā)[2].采用TMS320LF2407A數(shù)字I/O端口A、B、E進行17路舵機控制用PWM波形輸出.利用TMS320LF2407A的事件管理器A中的定時器1和全比較單元1、2、3來產生中斷.舵機的控制信號PWM周期為20ms,PWM對應的高電平時間0.5ms~2.5ms對應的舵機輸出角度為0~180°,它們之間呈線性關系.可以把一個PWM周期分成8個時間段,每個時間段輸出3路PWM波形[3-4].這樣在一個PWM周期內可以同步輸出24路PWM波形,完全滿足同步輸出17路PWM波形的需要.把A、B、E口相對應的端口分為一組,定時器1定時2.5ms,定時時間到,發(fā)生中斷,把下一組的端口置高.把各組端口控制的PWM波形高電平計數(shù)值對應地存入3個比較寄存器中.其中比較單元1控制A口輸出,比較單元2控制B口輸出,比較單元3控制E口輸出.當定時器1的計數(shù)器值和比較單元值匹配時,在比較中斷函數(shù)中置低相應的端口.24路PWM波形的發(fā)生時序如圖2所示.
圖2 24路PWM波發(fā)生時序
舞蹈機器人動作實現(xiàn)總流程如圖3所示.初始化主要包括系統(tǒng)CPU初始化;數(shù)字I/O初始化;事件管理器A的初始化;機器人初始位置初始化,即機器人各個舵機輸出初始角度的初始化.在完成初始化后,按組號讀取數(shù)組中的動作數(shù)據(jù).在讀取數(shù)據(jù)前,需要對動作數(shù)據(jù)進行地址計算,按照計算出的地址從數(shù)組中讀取數(shù)據(jù).讀取完數(shù)據(jù)后就可以輸出舵機的輸出角度了.這組的動作做完后再讀取下一組的動作數(shù)據(jù).
舞蹈機器人的這些數(shù)據(jù)可以利用solidworks的動畫制作插件Animator進行獲取,利用插件Animator對舞蹈機器人的動作進行設計.在用solidwoiks對舞蹈機器人進行建模時,對應于17個舵機的轉動,分別做了17個角度配合.在動作設計時,為了簡化動作,將每個舵機的轉動均設計成勻速轉動.舞蹈機器人每做完一個動作,對每個舵機的轉動角度設置一個關鍵點,關鍵點記錄了角度位置,關鍵點之間的距離記錄了所用的時間.這樣就可以得到舞蹈機器人的動作數(shù)據(jù).
圖3 舞蹈機器人動作實現(xiàn)流程圖
采用型號為S3003的舵機作為舞蹈機器人的驅動元件,該型號舵機在4.8V時輸出的最大轉速為0.23s/60°.即在230ms內允許舵機轉動60°,超過這個角度舵機反應不過來.對舵機速度的調節(jié),以每40ms增加舵機的輸出角度來實現(xiàn).在40ms內允許舵機最大的輸出角度為αmax=40×60/230≈10°,即其輸出的角度范圍在0~10°.舵機增加輸出的角度越大,舵機轉速越快,所以舵機的速度可以在0~10°范圍內調節(jié).因此可以把舵機的轉速數(shù)據(jù)存在一個數(shù)組中,數(shù)據(jù)越多,舵機可調的速度越豐富.考慮到舵機的轉速一般很少使用高速,所以在慢速的區(qū)域分布的點多,而高速的區(qū)域分布的點可以很少.速度數(shù)組定義如下:
為了方便對17個舵機轉動數(shù)據(jù)信息的描述和處理我們定義結構體數(shù)組,結構體的數(shù)據(jù)有:舵機的輸出角度、舵機的輸出轉速地址、舵機的轉動方向.舵機的輸出角度是指舵機在做這組動作時,要轉動的角度.舵機的輸出轉速地址是指舵機在轉動時的速度值在速度數(shù)組中的位置.用1或-1來表示舵機的正轉或反轉(1表示正轉,-1表示反轉).結構體數(shù)組的定義代碼如下:
為了減少動作中的數(shù)據(jù),可以只記錄那些轉動的舵機數(shù)據(jù)信息,以節(jié)省存儲空間.定義舞蹈機器人動作數(shù)據(jù)的代碼如下:
把舞蹈機器人每做一個動作所涉及到的舵機轉動數(shù)據(jù)作為一組.每一組動作數(shù)據(jù)的第一位是指在這個動作中有多少個在舵機轉動,例如data[0] =2,是指在第1組的動作數(shù)據(jù)中有兩個舵機在轉動.在動作數(shù)據(jù)中,舵機轉動數(shù)據(jù)信息由4個元素描述,第1個元素指舵機的編號,所謂舵機的編號是指對舞蹈機器人17個舵機進行編號,以識別舞蹈機器人的各個自由度.例如data[1] =2是指編號為2的舵機,在這里是指舞蹈機器人的右肩關節(jié).第2個元素是指舵機的轉動角度.第3個元素是指舵機每40ms增加的角度值在速度數(shù)組中的地址,其取值范圍為0~39.第4個元素是指舵機的轉動方向,當其值為1時代表舵機正轉,其值為-1時代表舵機反轉.
舞蹈機器人在做動作時,需要從動作數(shù)組中讀取數(shù)據(jù).在讀取數(shù)據(jù)時是以組為基本單位的,也就是說舞蹈機器人在做一個動作時需要讀取一組數(shù)據(jù).而這需要知道這個動作的數(shù)據(jù)在動作數(shù)組中的位置,即地址.因此需要對各個組的地址進行計算.計算各個組地址的代碼如下:
函數(shù)adreesdata(int grop)的功能是實現(xiàn)各個動作數(shù)據(jù)的首地址計算.傳遞的參數(shù)是每個動作所在的組號,而返回的是這個動作數(shù)據(jù)的首地址.
在知道了動作數(shù)據(jù)的首地址后就可以按照地址讀取數(shù)據(jù)了,讀取的數(shù)據(jù)存儲在結構體數(shù)組中.讀取數(shù)據(jù)的函數(shù)傳遞的參數(shù)也是動作數(shù)據(jù)的組號.根據(jù)傳遞的組號讀取相應組的數(shù)據(jù).其主要代碼如下:
局部變量adr存儲返回的該組動作數(shù)據(jù)的首地址.數(shù)據(jù)data[adr] 是本動作數(shù)據(jù)中運動的舵機個數(shù).用兩層for循環(huán)對結構體數(shù)組的地址標號和舵機編號進行比較.如果相等則把動作數(shù)據(jù)組中的數(shù)據(jù)存儲到相應的結構體數(shù)組中.
讀取完數(shù)據(jù)后,就可以根據(jù)舵機的轉動數(shù)據(jù)來對舵機進行輸出.定時器1的定時時間是2.5ms,每40ms對舵機輸出角度增加一次[5].可以定義一個計數(shù)器,定時器1定時時間到,計數(shù)器的值增1.如果計數(shù)器的值從0增到15時,40ms時間到,對要輸出的角度按照動作數(shù)據(jù)中的速度值增加到相應的舵機上.增加的角度還需要轉化為以定時器1中的計數(shù)器為單位的計數(shù)值.TMS320LF2407A處理器的時鐘采用10MHz的無源晶振,經過內部鎖相環(huán)的4倍頻后的CPU時鐘為40MHz.定時器1設置為16分頻,則舵機輸出角度α和以定時器1中的計數(shù)器為單位的計數(shù)值C之間的關系為
則
根據(jù)公式(2)可以通過速度值計算出每40ms比較寄存器需要增加的值,這樣就可以實現(xiàn)舵機按照設定的速度值輸出.
將編寫的程序在TMS320LF2407A學習板上仿真運行,以驗證其正確性.程序的在線仿真利用DSP仿真器XDS510-USB2.0通過14口的JTAG引腳與目標板進行連接.程序的編譯環(huán)境采用CCS2000.如果程序編譯無誤,通過仿真器下載到TMS320LF2407A學習板上的RAM進行仿真運行.仿真運行后如果效果令人滿意則可以通過CCS2000的FLASH燒寫插件,把編譯的程序燒寫到芯片內的FLASH存儲器上.這樣處理器可以脫離仿真器進行獨立運行.在CCS2000編譯環(huán)境下讀取的一組動作數(shù)據(jù)如圖4所示.
圖4 動作數(shù)據(jù)的讀取
采用結構體數(shù)組來存儲轉動舵機的信息,在存儲舞蹈機器人動作數(shù)據(jù)時忽略了數(shù)據(jù)為0的舵機,這樣節(jié)省了大量的存儲空間.舞蹈機器人在做動作的時候,按照預先設置好的動作數(shù)據(jù)組順序讀取,然后按照動作組內的數(shù)據(jù)信息輸出舵機的轉動角度,這樣舞蹈機器人就可以按照預先設置好的動作進行表演.
[1] 楊子夫,米良川,李德升,等.舞蹈機器人步進電機驅動電路和程序設計[J] .計算機應用,2002,28(9):1-5.
[2] 張小鳴.DSP控制器原理及應用[M] .北京:清華大學出版社,2009.
[3] 劉歌群,盧京朝,閆建國,等.用單片機產生7路舵機控制PWM波的方法[J] .機械與電子,2004(2):76-78.
[4] 梁峰,王志良,解侖,等.多舵機控制在類人機器人上的應用[J] .微計算機信息,2008(1-2):242-243.
[5] 司東宏,劉紅俊.舵機的程序控制[J] .實驗室科學,2005(4):83-86.