楊劍,黃澤鵬,吳昶華,李昆
(華南理工大學(xué) 廣州學(xué)院,廣州510800)
目前機(jī)器人應(yīng)用主要面向制造業(yè)和娛樂行業(yè),隨著全國各地機(jī)器人大賽的舉辦和普及,各大、中、小學(xué)校越來越重視機(jī)器人教育與培訓(xùn)。本文設(shè)計了一款應(yīng)用于普及機(jī)器人知識的17自由度仿真人形教育機(jī)器人。
控制器系統(tǒng)以ARM7處理器為核心通過串口下載和傳輸控制信息,主要由17路舵機(jī)控制驅(qū)動電路接口、串口通信調(diào)試電路、遙控接口及電源等幾部分組成。通過UBT12HB 舵機(jī)總線半雙工串口UART通信協(xié)議,采用定時器產(chǎn)生17路PWM驅(qū)動信號,控制機(jī)器人各種姿態(tài)下的舵機(jī)角度和速度。該系統(tǒng)具有運動形態(tài)新穎、運動效果優(yōu)異、操作反應(yīng)靈敏、體態(tài)特征豐富等特點,可應(yīng)用于機(jī)器人知識普及和教學(xué)。
舵機(jī)是一種位置角度伺服驅(qū)動器,含控制電路、驅(qū)動馬達(dá)、差速器、位置檢測器和外殼等部件,其中控制電路上有用于驅(qū)動馬達(dá)與進(jìn)行信號通信的IC電路,內(nèi)部齒輪一般采用金屬材質(zhì),能夠在提供大轉(zhuǎn)矩的同時保證結(jié)構(gòu)上的穩(wěn)固。舵機(jī)結(jié)構(gòu)如圖1所示。
本文采用的舵機(jī)是UBT12HB 串行總線伺服舵機(jī),舵機(jī)輸出轉(zhuǎn)矩為0.8 N·m(6.5 V),1.2 N·m (8.5 V),最大可以提供0.198 s/60°的轉(zhuǎn)速,角度偏轉(zhuǎn)范圍為-30°~240°。滿載電流為0.9 A,采用半雙工串口UART通信協(xié)議。URAT串口波特率:115 200;數(shù)據(jù)位位:8;停止位:1;校驗位:0;流量控制:NONE。采用TTL電平多層連接,共用總線,最多可以連接240個舵機(jī)。舵機(jī)主要通信協(xié)議部分參數(shù)如表1所示。
圖1 舵機(jī)結(jié)構(gòu)圖
上位機(jī)通過winform平臺下提供的接口發(fā)送串口數(shù)據(jù),經(jīng)簡單硬件轉(zhuǎn)換成半雙工串口傳輸信號與舵機(jī)通信。17自由度串行總線舵機(jī)機(jī)器人控制上位機(jī)的主要功能如圖2所示。
上位機(jī)依靠串口通信,在進(jìn)行通信之前需要對串口進(jìn)行檢測,檢查舵機(jī)機(jī)器連接狀態(tài)及通信狀態(tài)是否穩(wěn)定,在連接穩(wěn)定之后才能進(jìn)行下一步的操作。舵機(jī)控制模塊由舵機(jī)編號(id)選擇、角度、速度,以及批處理功能模塊組成,能夠?qū)?7路總線舵機(jī)組中的單個或多個進(jìn)行單獨或批量控制和通信。在控制信號發(fā)送之前需要對控制信號及指令進(jìn)行檢查校驗其合法性及是否具有實際意義。篩選過濾無用指令,計算整理后由串口發(fā)送之后交給串口控制模塊檢查通信情況。
圖2 上位機(jī)整體主要功能圖
表1 舵機(jī)主要通信協(xié)議部分參數(shù)
軟件主界面如圖3所示:左半界面是與17路串行伺服舵機(jī)實際對應(yīng)位置圖,用于顯示實際控制中的舵機(jī)機(jī)器人的狀態(tài),以及能夠以某些交互方式提高舵機(jī)選擇效率與定位;右側(cè)為數(shù)據(jù)控制與舵機(jī)操控面板,右下為信息面板,用于顯示各種交互信息和反饋數(shù)據(jù)。
圖3 軟件主界面
在Visual C#平臺下,利用.NET Framework 中的SerialPort組件,可以實現(xiàn)底層的串口通信,使用之前引入相應(yīng)的命名空間System.IO.Ports,利用SerialPort屬性:PortName、BaudRate、DataBits、StopBits、Parity 等 進(jìn) 行 串口的配置,采用DataReceived方法進(jìn)行數(shù)據(jù)接收和通信檢查。配置部分代碼如圖4所示。
由于SerialPort接收數(shù)據(jù)是同步阻塞調(diào)用,所以使用Invoke自動創(chuàng)建線程,接收來自串口的數(shù)據(jù)之后通過緩存數(shù)據(jù)幀再在程序線程內(nèi)部檢查格式,匹配舵機(jī)機(jī)器人的應(yīng)答指令。
在舵機(jī)機(jī)器人的連接過程中,需要進(jìn)行通信的應(yīng)答,來判斷舵機(jī)組的連接情況與通信情況,在判斷之前需要校驗接收數(shù)據(jù)的格式,部分代碼如圖5所示。
根據(jù)舵機(jī)通信協(xié)議,將某些控制指令定義在屬性上,部分代碼如圖6所示。
代碼中的幀頭內(nèi)容對應(yīng)舵機(jī)文檔協(xié)議,stop、test、read等字節(jié)數(shù)組內(nèi)存放常用指令,在程序內(nèi)部通過線程使用相應(yīng)的屬性,可以達(dá)到一個基本的控制效果。
圖4 Serial Port配置部分代碼
上位機(jī)通過串口發(fā)送字節(jié)指令,接收來自舵機(jī)機(jī)器人應(yīng)答信號處理通信問題,但是程序內(nèi)部字節(jié)指令不能直觀地進(jìn)行操作和交互,需轉(zhuǎn)換成字符、十進(jìn)制或者其他格式交互操作,部分指令格式轉(zhuǎn)換的代碼如圖7所示。
常見的幾種轉(zhuǎn)換方法有textWork16、str10to16、str16to10等,由于交互界面上的指令數(shù)據(jù)基本是text,在獲取輸入數(shù)據(jù)之后,調(diào)用相關(guān)方法將string指令轉(zhuǎn)換為byte指令存入指令表中以獲取操作數(shù),并將指令缺失的字節(jié)操作碼補(bǔ)全。
圖5 串口檢查校驗部分代碼圖
圖6 通信1協(xié)議部分圖
圖7 部分指令轉(zhuǎn)換方法代碼
上位機(jī)的指令編輯可以分為單路伺服舵機(jī)的指令編輯與多路舵機(jī)指令的批量編輯。部分編輯的指令存放如圖8所示。
圖8 部分指令存放結(jié)構(gòu)圖
單個舵機(jī)的指令編輯比較簡單,并沒有太多的操作限制,對于批量舵機(jī)的操作,關(guān)系到舵機(jī)機(jī)器人的姿態(tài)及批量操作中的舵機(jī)id,會存在重復(fù)、不規(guī)范、無意義的情況,所以需要對姿態(tài)的操作做一個結(jié)構(gòu)上的定義和編輯上的限制。
對于17路伺服舵機(jī)機(jī)器人的姿態(tài)(主要是在某一時刻狀態(tài)和連續(xù)的動作時對相關(guān)舵機(jī)的操作角度、回讀角度、持續(xù)時間、延時等情況)進(jìn)行描述,舵機(jī)組控制指令編輯流程如圖9所示。
圖9 舵機(jī)組控制指令編輯流程圖
對于舵機(jī)機(jī)器人姿態(tài)控制,可以分為靜態(tài)和動態(tài)狀態(tài),連續(xù)的靜態(tài)姿態(tài)組成一個基本的動態(tài),多個動態(tài)組成一個動作指令集,對于多個靜態(tài)姿態(tài)組成的動態(tài),在編輯的時候?qū)⑵浞譃槎鄠€動作組,不同的動作組之間互不影響,相同的動作組內(nèi)應(yīng)該是舵機(jī)的最小集合,對于指令的編輯的增、刪、改,有跨組編輯和組內(nèi)編輯,應(yīng)該考慮不同情況下操作合法性和合理性。
指令編輯操作完成后需要更新數(shù)據(jù),其次刷新現(xiàn)有動作組,然后提交給異步線程處理,可以在異步線程中執(zhí)行指令或者保存指令,在執(zhí)行指令時可能會有一些誤差,可以在執(zhí)行過程中給指令進(jìn)度添加一進(jìn)度條,方便對當(dāng)前執(zhí)行狀態(tài)的觀察及后續(xù)數(shù)據(jù)調(diào)整。部分執(zhí)行代碼如圖10所示。
圖10 部分執(zhí)行指令進(jìn)度代碼
區(qū)別于普通的通過控制板控制伺服舵機(jī),文章研究了在.net平臺下利用總線串口直觀地控制一種17伺服舵機(jī)組成的機(jī)器人姿態(tài),通過指令集及對指令集的操作,可以直接獲取到控制所需的字節(jié)指令,方便指令的移植及機(jī)器人姿態(tài)的研究,對于獲取到的動作指令,內(nèi)容包括舵機(jī)號、舵機(jī)角度、速度及持續(xù)時間,得到的數(shù)據(jù)可以適用于其他型號的總線型伺服舵機(jī),能夠縮短舵機(jī)組動作姿態(tài)開發(fā)的進(jìn)度。