白昊天,李 萍
(北京信息科技大學,北京 100192)
當前解決機械臂末端路徑軌跡規(guī)劃大都采用運動學正逆解及路徑規(guī)劃的方法,如陳雪華[1]對四自由度寫字機器人進行了研究,類延超[2]對五自由度寫字機器人系統(tǒng)進行了研究,何薇[3]基于機器視覺設計了機器人寫字技術。這些方法精度高,有嚴謹?shù)臄?shù)學理論支撐,但用到的硬件成本較高。本文嘗試采用低成本的簡易的方法設計多自由度書寫機械臂控制系統(tǒng)。
機械人手部若在其工作空間內(nèi)到達任意位置并實現(xiàn)任意姿態(tài),機器人必須至少有6個自由度[2],寫字時只需要夾緊筆,不需要松開,所以可以將末端的第6個關節(jié)去掉。為了方便分析,先用matlab對機械臂結(jié)構做建模。建立機械臂模型需要用到4個參數(shù),即連桿長度ai、連桿扭角αi、兩連桿距離di、兩連桿夾角θi。連桿長度指連桿上兩個關節(jié)軸線的最小距離;連桿扭角指兩關節(jié)軸線的夾角;兩連桿距離指關節(jié)軸上兩個法線的距離;兩連桿夾角指關節(jié)軸上兩個法線的夾角。連桿四參數(shù)示意圖如圖1所示,建立的機械臂結(jié)構如圖2所示。
采用以51單片機為核心的舵機控制器,六個舵機控制器端口對應六個關節(jié)處的舵機。通過舵機控制器發(fā)送的不同占空比的PWM波以及運用插補算法,可以控制舵機以指定速度轉(zhuǎn)動指定角度。插補算法將在下文詳細討論。
圖1 連桿四參數(shù)結(jié)構示意圖
圖2 六自由度機械臂結(jié)構
首先得到待書寫漢字的各坐標值,將其發(fā)送給寫字程序按時間序列生成一系列各關節(jié)需轉(zhuǎn)動的角度值,將這些值發(fā)送給舵機控制器,舵機控制器控制機械臂各關節(jié)按指定速度轉(zhuǎn)動指定角度實現(xiàn)漢字的書寫。多自由度書寫機械臂控制系統(tǒng)總體結(jié)構如圖3所示。
下位機接收上位機通過串口發(fā)送過來的字符串并將之解析為某關節(jié)的運動角度和速度,如上位機發(fā)送#1P1500T100 ,那么數(shù)字1為舵機控制板上的S1通道,數(shù)字1500是控制舵機的角度(范圍為500~2500),控制舵機的0~180°,數(shù)字100是時間,即從當前的位置,旋轉(zhuǎn)到命令中的位置,所需要的時間。最后 是一個特殊字符。以上命令的意思就是:S1上連接的舵機,在100 ms的時間內(nèi),從現(xiàn)在的位置旋轉(zhuǎn)到90度。程序流程圖如圖4所示。
圖3 六自由度書寫機械臂控制系統(tǒng)總體結(jié)構
圖4 下位機軟件程序流程
對舵機速度的控制采用的是插補算法,該算法的基本思想是:將舵機的整個運動過程分解,使舵機并不是從初始位置直接到達到目標位置,而是劃分成多個小過程讓其逐步到達,如此便實現(xiàn)了速度的控制。假設舵機初始位置的值是x,舵機要運行到目標位置y,對其插補100次。首先設置變量a=0,則下一個目標位置就是:
x+(y-x)·a/100,
之后每隔固定的時間對a加1,隨著a的變化舵機位置逐步從初始位置向目標位置靠近,到a=100的時候完全到達目標位置,停止a的自加。
3.2.1 機械臂末端到達指定位置的方法
當前解決機械臂末端路徑軌跡規(guī)劃大都采用運動學正逆解及路徑規(guī)劃的方法,首先需要得到精確的機械臂結(jié)構參數(shù),構造正逆解方程,帶入路徑的解析式求出各關節(jié)需要運動的角度、速度甚至角加速度。軌跡規(guī)劃的具體步驟是:①確定字體筆劃起點和終點的坐標,并給出若干中間路徑點;②將這些路徑點的坐標值代入逆運動學求解方程中得到各個關節(jié)的變量;③根據(jù)這些關節(jié)變量來控制機器人的軌跡。
(2)
ai指連桿長度,αi指連桿扭角,di指兩連桿距離,θi指兩連桿夾角,s指sin,c指cos。
對于逆向運動學問題,即已知連桿幾何參數(shù),給定末端執(zhí)行器的位姿,求機器人到達指定位置的關節(jié)變量。運動學方程是非線性超越方程組,沒有通用的解法,求解過程繁瑣。對于機器人的軌跡規(guī)劃,除了上面提到的正、逆向運動學,還需要進行位置和姿態(tài)的插補算法,對各關節(jié)的角度和角速度都有要求。
這種方法精度高,有理論支撐,但計算略顯復雜,用到的硬件成本較高。如下方法可采用低成本解決該問題,該方法并不是將路徑點的坐標值代入逆運動學求解方程中得到各個關節(jié)的變量,而是采用“示教法”,先把寫字區(qū)域劃分為100份,記錄下機械臂末端到達每個坐標點處的各個關節(jié)轉(zhuǎn)動角度,由此便得到了各點處的位姿。這樣只要指定筆畫的起點終點,并指定若干中間點,即可使機械臂按指定路徑運動。因為一個點可能有多種位姿,為了保證書寫的平滑性,記錄角度值時就要采取一定的技巧:要從一個點出向四周擴展,保證該點的上、下、左、右、斜對角的點處各關節(jié)轉(zhuǎn)動的角度值不發(fā)生突變,不可隨便指定點標記。
3.2.2 上位機軟件設計
由給出的坐標值,從數(shù)組中找出對應的各關節(jié)角度值,這時需要判斷這個點是不是一個筆畫的終點,可以通過輸入的數(shù)據(jù)格式判斷,若是則需要提筆,可把第二個關節(jié)的角度值增加讓筆提起來。按時間順序生成一系列各關節(jié)角度值,機械臂按此運動即可完成漢字的書寫。
機械臂書寫的漢字“北京”結(jié)果如圖5、圖6所示,按照該方法可以完成漢字的書寫。但因為采用的是毛筆書寫,寫字的力度不太好把握。寫字過程中筆尖容易出現(xiàn)分叉現(xiàn)象,影響了書寫漢字的美觀。按本文的方法要寫出漢字需要手動按時間序列輸入一系列坐標值,這里提供兩種自動生成坐標值的方法:首先制作待書寫漢字的圖像,然后用matlab等軟件讀取圖像的灰度值,以此為參考編寫書寫程序;也可通過Inkscape矢量圖像編輯軟件將輸入的文字圖像轉(zhuǎn)換成坐標形式的數(shù)組代碼,以數(shù)組代碼為依據(jù)編寫書寫程序。
圖5 “北”字書寫結(jié)果
圖6 “京”字書寫結(jié)果