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