白昊天,李 萍
(北京信息科技大學(xué),北京 100192)
當(dāng)前解決機(jī)械臂末端路徑軌跡規(guī)劃大都采用運(yùn)動學(xué)正逆解及路徑規(guī)劃的方法,如陳雪華[1]對四自由度寫字機(jī)器人進(jìn)行了研究,類延超[2]對五自由度寫字機(jī)器人系統(tǒng)進(jìn)行了研究,何薇[3]基于機(jī)器視覺設(shè)計(jì)了機(jī)器人寫字技術(shù)。這些方法精度高,有嚴(yán)謹(jǐn)?shù)臄?shù)學(xué)理論支撐,但用到的硬件成本較高。本文嘗試采用低成本的簡易的方法設(shè)計(jì)多自由度書寫機(jī)械臂控制系統(tǒng)。
機(jī)械人手部若在其工作空間內(nèi)到達(dá)任意位置并實(shí)現(xiàn)任意姿態(tài),機(jī)器人必須至少有6個自由度[2],寫字時只需要夾緊筆,不需要松開,所以可以將末端的第6個關(guān)節(jié)去掉。為了方便分析,先用matlab對機(jī)械臂結(jié)構(gòu)做建模。建立機(jī)械臂模型需要用到4個參數(shù),即連桿長度ai、連桿扭角αi、兩連桿距離di、兩連桿夾角θi。連桿長度指連桿上兩個關(guān)節(jié)軸線的最小距離;連桿扭角指兩關(guān)節(jié)軸線的夾角;兩連桿距離指關(guān)節(jié)軸上兩個法線的距離;兩連桿夾角指關(guān)節(jié)軸上兩個法線的夾角。連桿四參數(shù)示意圖如圖1所示,建立的機(jī)械臂結(jié)構(gòu)如圖2所示。
采用以51單片機(jī)為核心的舵機(jī)控制器,六個舵機(jī)控制器端口對應(yīng)六個關(guān)節(jié)處的舵機(jī)。通過舵機(jī)控制器發(fā)送的不同占空比的PWM波以及運(yùn)用插補(bǔ)算法,可以控制舵機(jī)以指定速度轉(zhuǎn)動指定角度。插補(bǔ)算法將在下文詳細(xì)討論。

圖1 連桿四參數(shù)結(jié)構(gòu)示意圖

圖2 六自由度機(jī)械臂結(jié)構(gòu)
首先得到待書寫漢字的各坐標(biāo)值,將其發(fā)送給寫字程序按時間序列生成一系列各關(guān)節(jié)需轉(zhuǎn)動的角度值,將這些值發(fā)送給舵機(jī)控制器,舵機(jī)控制器控制機(jī)械臂各關(guān)節(jié)按指定速度轉(zhuǎn)動指定角度實(shí)現(xiàn)漢字的書寫。多自由度書寫機(jī)械臂控制系統(tǒng)總體結(jié)構(gòu)如圖3所示。
下位機(jī)接收上位機(jī)通過串口發(fā)送過來的字符串并將之解析為某關(guān)節(jié)的運(yùn)動角度和速度,如上位機(jī)發(fā)送#1P1500T100 ,那么數(shù)字1為舵機(jī)控制板上的S1通道,數(shù)字1500是控制舵機(jī)的角度(范圍為500~2500),控制舵機(jī)的0~180°,數(shù)字100是時間,即從當(dāng)前的位置,旋轉(zhuǎn)到命令中的位置,所需要的時間。最后 是一個特殊字符。以上命令的意思就是:S1上連接的舵機(jī),在100 ms的時間內(nèi),從現(xiàn)在的位置旋轉(zhuǎn)到90度。程序流程圖如圖4所示。

圖3 六自由度書寫機(jī)械臂控制系統(tǒng)總體結(jié)構(gòu)

圖4 下位機(jī)軟件程序流程
對舵機(jī)速度的控制采用的是插補(bǔ)算法,該算法的基本思想是:將舵機(jī)的整個運(yùn)動過程分解,使舵機(jī)并不是從初始位置直接到達(dá)到目標(biāo)位置,而是劃分成多個小過程讓其逐步到達(dá),如此便實(shí)現(xiàn)了速度的控制。假設(shè)舵機(jī)初始位置的值是x,舵機(jī)要運(yùn)行到目標(biāo)位置y,對其插補(bǔ)100次。首先設(shè)置變量a=0,則下一個目標(biāo)位置就是:
x+(y-x)·a/100,
之后每隔固定的時間對a加1,隨著a的變化舵機(jī)位置逐步從初始位置向目標(biāo)位置靠近,到a=100的時候完全到達(dá)目標(biāo)位置,停止a的自加。
3.2.1 機(jī)械臂末端到達(dá)指定位置的方法
當(dāng)前解決機(jī)械臂末端路徑軌跡規(guī)劃大都采用運(yùn)動學(xué)正逆解及路徑規(guī)劃的方法,首先需要得到精確的機(jī)械臂結(jié)構(gòu)參數(shù),構(gòu)造正逆解方程,帶入路徑的解析式求出各關(guān)節(jié)需要運(yùn)動的角度、速度甚至角加速度。軌跡規(guī)劃的具體步驟是:①確定字體筆劃起點(diǎn)和終點(diǎn)的坐標(biāo),并給出若干中間路徑點(diǎn);②將這些路徑點(diǎn)的坐標(biāo)值代入逆運(yùn)動學(xué)求解方程中得到各個關(guān)節(jié)的變量;③根據(jù)這些關(guān)節(jié)變量來控制機(jī)器人的軌跡。

(2)
ai指連桿長度,αi指連桿扭角,di指兩連桿距離,θi指兩連桿夾角,s指sin,c指cos。
對于逆向運(yùn)動學(xué)問題,即已知連桿幾何參數(shù),給定末端執(zhí)行器的位姿,求機(jī)器人到達(dá)指定位置的關(guān)節(jié)變量。運(yùn)動學(xué)方程是非線性超越方程組,沒有通用的解法,求解過程繁瑣。對于機(jī)器人的軌跡規(guī)劃,除了上面提到的正、逆向運(yùn)動學(xué),還需要進(jìn)行位置和姿態(tài)的插補(bǔ)算法,對各關(guān)節(jié)的角度和角速度都有要求。
這種方法精度高,有理論支撐,但計(jì)算略顯復(fù)雜,用到的硬件成本較高。如下方法可采用低成本解決該問題,該方法并不是將路徑點(diǎn)的坐標(biāo)值代入逆運(yùn)動學(xué)求解方程中得到各個關(guān)節(jié)的變量,而是采用“示教法”,先把寫字區(qū)域劃分為100份,記錄下機(jī)械臂末端到達(dá)每個坐標(biāo)點(diǎn)處的各個關(guān)節(jié)轉(zhuǎn)動角度,由此便得到了各點(diǎn)處的位姿。這樣只要指定筆畫的起點(diǎn)終點(diǎn),并指定若干中間點(diǎn),即可使機(jī)械臂按指定路徑運(yùn)動。因?yàn)橐粋€點(diǎn)可能有多種位姿,為了保證書寫的平滑性,記錄角度值時就要采取一定的技巧:要從一個點(diǎn)出向四周擴(kuò)展,保證該點(diǎn)的上、下、左、右、斜對角的點(diǎn)處各關(guān)節(jié)轉(zhuǎn)動的角度值不發(fā)生突變,不可隨便指定點(diǎn)標(biāo)記。
3.2.2 上位機(jī)軟件設(shè)計(jì)
由給出的坐標(biāo)值,從數(shù)組中找出對應(yīng)的各關(guān)節(jié)角度值,這時需要判斷這個點(diǎn)是不是一個筆畫的終點(diǎn),可以通過輸入的數(shù)據(jù)格式判斷,若是則需要提筆,可把第二個關(guān)節(jié)的角度值增加讓筆提起來。按時間順序生成一系列各關(guān)節(jié)角度值,機(jī)械臂按此運(yùn)動即可完成漢字的書寫。
機(jī)械臂書寫的漢字“北京”結(jié)果如圖5、圖6所示,按照該方法可以完成漢字的書寫。但因?yàn)椴捎玫氖敲P書寫,寫字的力度不太好把握。寫字過程中筆尖容易出現(xiàn)分叉現(xiàn)象,影響了書寫漢字的美觀。按本文的方法要寫出漢字需要手動按時間序列輸入一系列坐標(biāo)值,這里提供兩種自動生成坐標(biāo)值的方法:首先制作待書寫漢字的圖像,然后用matlab等軟件讀取圖像的灰度值,以此為參考編寫書寫程序;也可通過Inkscape矢量圖像編輯軟件將輸入的文字圖像轉(zhuǎn)換成坐標(biāo)形式的數(shù)組代碼,以數(shù)組代碼為依據(jù)編寫書寫程序。

圖5 “北”字書寫結(jié)果

圖6 “京”字書寫結(jié)果