張興華
(廣東白云學院機電工程學院,廣州 510450)
目前,工業機器人逐漸在多種行業從事生產應用,開始了制造業的轉型與升級,從而出現了機器人替代人的熱潮。機器人視覺識別技術,基于實時監控和信息管理平臺設備通信模塊對機器人進行數據采集和三維建模仿真,實現對機器人設備的遠程實時監控[1-4]。運動學方面,采用對時間求導的方法求線速度逆問題的解析解;采用向量分解原理求角速度逆問題的解析解。將工業機器人的模型抽象簡化為數學模型,可進行離機求解[5-6]。文獻[7]中針對汽車零部件自動化生產的發展需求,設計了一套用于汽車尾門裝飾板自動焊接的機器人工作站。文獻[8]中利用六維力傳感器采集機器人末端受到的外力或力矩,將采集的數據進行濾波、重力補償處理后,通過導納控制策略控制機器人關節運動,從而調整機器人末端的姿態,實現軸孔的柔順自動裝配。文獻[9]中針對平面金屬薄板飾件精加工智能產線,研究了基于視覺的產線各加工單元自動上下料裝置的解決方案。文獻[10]中運用智能和物聯網等先進技術,重點進行了機器視覺系統的引入、裝配過程裝配力及位置的全過程監控。文獻[11]中提出一種基于激光掃描測量臂測量系統的6軸工業機器人運動學標定方法。文獻[12]中設計了一種基于CANopen的六軸串聯機器人控制系統,并給出控制系統的硬件組成和軟件設計。文獻[13]中設計開發了一種六軸工業機器人虛擬仿真教學系統,并實現了系統網站部署訪問。文獻[14]中根據機器人D-H模型設計了由步進電機提供驅動的6軸工業機器人,采用循環反饋的方式進行優化設計。文獻[15]中設計了機器人伺服控制系統,六軸機器人運行時,由于其末端姿態與位置的變化,使機器人各軸的負載與轉動慣量實時變化,如果機器人在運動過程中受到外在擾動,將導致機器人各軸伺服系統不能快速、精確辨識負載轉動慣量,導致機器人各軸電機容易出現震蕩、諧振的現象。提出一種基于非線性動態學習因子的粒子群優化算法,該算法以伺服系統控制模型中的速度控制器為核心,實時辨識負載轉動慣量值,使伺服系統內部控制參數根據實際工況調節,運用該辨識值,通過計算得到速度控制PI參數值,并實時修正速度環控制器PI參數值。基于工業機器人搭建實驗平臺,使得機器人行走軌跡的位置誤差最大波動量從±10 mm減小到±3 mm,但是這種算法的控制精度不夠理想。
本文基于神經網絡自適應控制算法對控制器的脈沖輸出進行補償控制,從而使得機器人各關節的運動更加平滑可靠。實驗結果表明本機器人可以實現按預設連續軌跡精確運行,運行精度可以達到±0.03 mm。
機器人視覺模塊選用OpenMV3,它配置了STM32F765微處理器。在機器人工作范圍的正上方安放OpenMV3視覺模塊,用于檢測工件坐標位置數據。通過STM32F765微處理器串口把數據發送到裝備有Matlab的電腦,編寫控制程序。根據工件坐標位置數據實時計算出每個關節驅動電動機轉角的q值并且等周期地發送到微處理器。微處理器把轉角換算成脈沖,采用神經網絡自適應控制算法對控制器的脈沖輸出進行補償控制,從而使得機器人各關節的運動更加平滑可靠,送到各個電動機驅動器,從而控制機器人的各個關節精確轉動。
OpenMV3 STM32F765上的引腳P0、P1、P2、P4、P5、P6接臺達ASDA-B2系列的6個伺服驅動器PULSE引腳,用Python編程語言進行視覺模塊OpenMV3進行工件坐標位置的獲得,程序中主要的類與方法如下:
image.match_descriptor返回的Kptmatch類。kptmatch.rect()返回一個矩形元組(x,y,w,h),用于特征點的邊界框image.draw_rectangle的圖像中心視覺獲取方法。kptmatch.cx()返回工件的中心x位置通過索引[0]取得這個值。kptmatch.cy()返回工件的中心y位置通過索引[1]取得這個值。
機器人三維模型如圖1所示,機器人的機械結構參數如下:

圖1 機器人三維模型(mm)
L1 底座高度0.234 m,底座軸線與大臂的關節處相距0 m,軸線夾角90°;
L2 大臂的長度0.400 m,它的軸線與關節的角度為pi/2;
L3 大臂的上關節比小臂的軸線0.113 m,即a=0.113,α=pi/2;
L4 小臂的臂長0.347 m,小臂的軸線與前一個連桿的交角pi/2;
L5 關節手腕;
L6 末端定位平面比手腕關節中心低63 mm。
六軸機器人主要包含了機械本體系統、運動控制系統、傳感反饋系統等,機器人負載5 kg,確定工業機器人的總體設計目標和具體的技術指標,從而確定總體設計方案。該機器人共包含6個串聯關節,全部為旋轉關節。
6關節機械手動態可描述為:

式中:q∈R6為關節角度;M(q)∈R6×6為慣量矩陣;C∈R6×6為離心力和哥氏力項;G(q)∈R6為重力項;F()為摩擦力矩;τ∈R6為控制力矩。
6關節機械手模型具有如下特性:
特性2 M(q)為正定對稱矩陣,且存在常數m1>0和m2>0使得:

控制目的:在機械手非線性未知的情形下設計控制器使得q跟蹤期望軌跡qd,其中和有界且已知,

定義跟蹤誤差為

定義滑模變量為

其中,Λ>0為設計參數。可以驗證q··=-r+q·d+Λe且

式中:

由于機械手非線性未知,f(x)也未知。將f(x)的第i個元素記為fi(x),利用神經網絡,當x屬于某一緊集時,fi(x)可表示為

式中:wi為權值向量;ei(x)<eN;

第i軸的角速度

視覺模塊檢測到工件物體坐標X、Y,因為工作臺的高度是已知的,所以Z坐標作為常量寫入到計算程序中。數據通過串口通信發到通過給定機器人之末端執行器需要到達的位置,對其進行反解,求出各個關節的角度變化。把6個關節的即時轉角q運算出來,傳送到伺服驅動器。
如圖2所示的抓取點坐標(0,0.5,0),圖3放置點坐標(0.5,0,0.8)。根據給定2個點的值,得到末端位姿,再來規劃即時關節轉角。編寫Matlab計算程序如下:

圖2 抓取點坐標

圖3 放置點坐標
clear;clc;%建立機器人模型定義D-H參數
%theta d a alpha offset%
L1=Link([0 0.234 0 pi/2 0]);
L2=Link([pi/2 0 0.4 0 0]);
L3=Link([0 0 0.113 pi/2 0]);
L4=Link([0 0.347 0 pi/2 0]);
L5=Link([pi 0 0 pi/2 0]);
L6=Link([0 0.07 0 0 0]);
robot=SerialLink([L1 L2 L3 L4 L5 L6],'name','myRobot');
T1=transl(0,0.5,0);%根據起點得到起點位姿
T2=transl(0.5,0,0.8);%根據終點得到終點位姿
q1=robot.ikine(T1);%根據起點位姿得起點關節角
q2=robot.ikine(T2);%根據終點位姿得終點關節角
t=0:0.2:2;%開始于0 s,結束于2 s,采樣步長0.2 s[q,qd,qdd]=jtraj(q1,q2,t);
T=robot.fkine(q);%根據插值,得到末端執行器位姿
robot.plot(q); %動畫
用Matlab進行白色工件取放的即時關節電動機轉角計算,執行10次等周期計算的每間隔0.2 s的6個軸的關節角數值如表1所示。該表格是機器人運行控制的關鍵數據,表中的數據單位是rad。
對表1進行數據分析,每0.2 s解算一次6個關節角度的轉角,以機器人底座上的腰身回轉關節1為例加以說明:關節1的轉角是表格中的第1列的數據,從第1步的1.570 8 rad即pi/2 rad(90°),再經過0.2 s運轉到1.557 4 rad,再經過0.2 s運轉到1.479 8 rad,再經過0.2 s運轉到1.479 8,再經過0.2 s運轉到1.314 6 rad,再經過0.2 s運轉到1.072 2,再經過0.2 s運轉到0.785 4 rad,再經過0.2 s運轉到1.072 2,再經過0.2 s運轉到0.785 4 rad,再經過0.2 s運轉到0.498 6 rad,再經過0.2 s運轉到0.256 2,再經過0.2 s運轉到0.091 0 rad,再經過0.2 s運轉到0.013 4 rad,再經過0.2 s運轉到1.332 3×10-15即0 rad(0°)。大臂俯仰電動機關節2至手部關節6的電動機轉角詳見表1。表中第1~6列表示6個電動機的關節角度,通過串口通信方式把角度數據傳送到控制器發脈沖控制機器人6個關節的電動機轉動到一定的角度,通過STM32F765上面下載的經過模擬驗證的Python程序,對伺服驅動器上設置的電子齒輪比換算成脈沖信號,脈沖的個數決定了電動機的角度,脈沖的頻率決定了伺服電動機的轉速。電機的即時轉速見表2所示。

表1 關節1~6的電動機每0.2 s所在角度

表2 關節1~6的電動機運行角速度
OpenMv3上微控制器定時器引腳分配:從P0~P6分別接在6個ASDA-B2型的臺達交流伺服電動機驅動器PULSE引腳。
Timer 1 Channel 3 Negative->P0(PB15)
Timer 1 Channel 2 Negative->P1(PB14)
Timer 1 Channel 1 Negative->P2(PB13)
Timer 2 Channel 3 Positive->P4(PB10)
Timer 2 Channel 4 Positive->P5(PB11)
Timer 2 Channel 1 Positive->P6(PA5)
由Pyhton編寫的程序讓P0、P1、P2、P4、P5、P6端口接到上位機的即時轉角弧度及角速度數據后,使以上6個引腳發出PWM脈寬信號,信號發生程序如下:
from pyb import Pin,Timer
p=Pin('P0')#P0 has TIM1,CH3
tim=Timer(1,freq=1000)
ch=tim.channel(3,Timer.PWM,pin=p)
ch.pulse_width_percent(50)
此程序運行效果為用OpenMV3的P0引腳產生了頻率為1.0 kHz的脈沖信號來控制1號電動機,即實現機器人腰身的回轉動作。
6個關節電動機的運行速度q1,rad/s。關節1~6的電動機每運行角速度見表3。應用了臺達ASDA-B2伺服電動機驅動器的電子齒輪比的設置P1-44設置電子齒輪比分子(N1)參數P1-45設置電子齒輪比分母(M),ECMA系列電機的編碼器2 500線的,電動機1轉,編碼器產生2 500個脈沖,假如編碼器計數模式是4倍計數,那么轉1圈就是10 000脈沖轉1圈為360°,即2Pi rad,3.141 6×2=6.283 2 rad。
末端執行器走直線的程序設計:如從右上點p1(1.414 2,0,1.914 2)直線運行到左下點p2(0.933 1,1.933 1,0.861 8),編寫如下的程序:
init_ang=[0 0 0 0 0 0];step=40;
targ_ang=[pi/4,-pi/3,pi/5,pi/2,-pi/4,pi/6];
[q,qd,qdd]=jtraj(init_ang,targ_ang,step);
subplot(3,2,[1,3]);robot.plot(q);subplot(3,2,2);
i=1:6;plot(q(:,i));
p1=[-0.707 1-0.000 0 0.707 1 1.414 2;0.000 0-1.000 0-0.000 0-0.000 0;0.707 1 0.000 0 0.707 1 1.914 2;0 0 0 1.0000];
p2=[0.964 0-0.263 9-0.033 2 0.933 1;0.097 9 0.236 1 0.966 8 1.933 1;-0.247 3-0.935 2 0.253 4 0.861 8;0 0 0 1.000 0];
Tc=ctraj(p1,p2,step);
Tjtraj=transl(Tc);subplot(3,2,5);
plot2(Tjtraj,'r');title('p1--p2');
運行結果如圖4所示。

圖4 直線插補運行結果
當需要運行其他的線性軌跡時,只要修改末端執行器在p1、p2的位姿矩陣,在矩陣第4列填寫新的坐標位置即可。
圓弧軌跡插補運動的實現:當需要運行圓弧軌跡時,可以把圓弧根據精度需要劃分出若干等分,精度要求越高,等分數越大,用折線來擬合圓弧。實驗結果機器人末端執行器可以精確靈活地實現圓弧運動。
經過反復工件抓取實驗,工件抓取后放置的位置偏差均在0.03 mm左右,機器人工作精度可以達到大多數實際工業場合下的精度要求。