機械人學2 二自由度機械臂建模及控制

2021-10-23 14:57:53 字數 3670 閱讀 8970

(1) pid控制:kp比例、ki積分、kd微分;

(2) 座標變換基礎

(3) atan2(y,x)雙引數反正切

對機械臂進行逆運動學求解:

(4)(5)建立如下圖所示的二自由度機械臂

p點座標:

p=rot(theta2,『z』)*[a;0;0];

e點座標:

e=p+rot(theta2,『z』)rot(phi,『z』)[b;0;0];

若給定的e點座標與實際利用上式求解的座標一致則說明逆解正確

(1)正運動學

while 1

clc;

clear;

%圓心座標

x0=110;

y0=110;

%半徑r=40;

%連桿長度

a=100;

b=100;

t=1;

for i=0:0.1:2*pi+0.1

x=x0+r*cos(i);

y=y0+r*sin(i);

% x=(a+b)*cos(i);

% y=(a+b)*sin(i);

theta1=atan2(y,x);

% theta1=acos(x/sqrt(x*x+y*y));

c=sqrt(x*x+y*y); % 末端到原點的距離

theta3=acos((c*c+a*a-b*b)/(2*a*c));

theta2=theta1-theta3; % 關節1 角度

phi=pi-acos((a*a+b*b-c*c)/(2*a*b)); %關節2角度

%連桿 p 位置

p=rot(theta2,'z')*[a;0;0];

% 連桿末端位置(正運動學驗證)

e=p+rot(theta2,'z')*rot(phi,'z')*[b;0;0];

%連桿連線處p的座標

px=a*cos(theta2);

py=a*sin(theta2);

%末端繪製圓的座標

rolx(t)=x;

roly(t)=y;

t=t+1;

plotrobot(p(1),p(2),e(1),e(2),rolx,roly); % 繪圖驗證

pause(0.0000001)

hold off

endend

(2)pid

調速跟蹤位置

clc;

clear;

%圓心座標

x0=110;

y0=110;

%半徑r=40;

%連桿長度

a=100;

b=100;

t=1;

% 控制週期

dt=0.05 % 秒

time=[0]; % 當前時間

realtheta=[0];% 關節1實際角度

realphi=[0];%關節2實際角度

errtehta=[0]; % 關節1 角度誤差

errphi=[0]; % 關節2 角度誤差

errthetasum=0;%關節1累積誤差

errphisum=0;%關節2累積誤差

derrtheta=0;%關節1 本次角度誤差與上一次角度誤差的差值

derrphi=0;%關節2 本次角度誤差與上一次角度誤差的差值

% pid 引數(關節1)

kp1=10;

ki1=2;

kd1=4;

% pid 引數(關節2)

kp2=8;

ki2=1;

kd2=2;

for i=0:1:150

theta2=i/150*2*pi;

phi=i/150*pi;

%連桿 p 位置

p=rot(theta2,'z')*[a;0;0];

% 連桿末端位置(正運動學驗證)

e=p+rot(theta2,'z')*rot(phi,'z')*[b;0;0];

% pid 控制

w1=kp1*(theta2-realtheta(end))+derrtheta*kd1+ki1*errthetasum;%關節1 瞬時角速度

w2=kp2*(phi-realphi(end))+derrphi*kd2+ki1*errphisum;%關節2 瞬時角速度

realtheta(end+1)=realtheta(end)+w1*dt;

realphi(end+1)=realphi(end)+w2*dt;

% 誤差

errtehta(end+1)=theta2- realtheta(end);

errphi(end+1)=phi- realphi(end);

errthetasum=errthetasum+errtehta(end);

errphisum=errphisum+errphi(end);

derrtheta= errtehta(end)-errtehta(end-1);

derrphi= errphi(end)-errphi(end-1);

% 當前時間

time(end+1)=dt*i;

%連桿 p 位置

realp=rot(realtheta(end),'z')*[a;0;0];

% 連桿末端位置(正運動學驗證)

reale=p+rot(realtheta(end),'z')*rot(realphi(end),'z')*[b;0;0];

%末端繪製圓的座標

rolx(t)=e(1);

roly(t)=e(2);

t=t+1;

subplot(121);

plotrobot(realp(1),realp(2),reale(1),reale(2),rolx,roly); % 繪圖驗證

根據調速跟蹤位置的**,寫出用pid調節加速度跟蹤位置的**

長期從事機械人學相關研究,涉及機械臂、輪式機械人、四足機械人的建模及**,可共同**機械人相關問題,可指導課程設計及畢業設計,如需,私聊。

六自由度機械臂研究(2) 機械臂座標系建立

機械臂的座標系建立是未來解析推導運動學演算法的基礎,也是機械臂入學者的第乙個坑。坑的原因是網上資料無數,但是幾乎沒有任何乙個建系教程是完全一樣的。更有甚者,有好多部落格還是有或多或少的錯誤,把原理與引數定義搞錯者也是大有人在。博主排坑無數後總結了親測可行的建系方法,有興趣或者有需求的同學可以跟著博主...

Nao機械人學習(二)

用c 使用nao機械人,需要用cmake進行動態編譯,那麼怎樣進行動態編譯呢?用cmd的方法固然簡單,但是新手使用往往摸不著頭腦,這裡提供了一種ui編輯方式,能夠更好地使用c 編譯nao的工程。然後,開啟cmake的視窗介面,如圖,新增 source code directory 和 build b...

六自由度機械人實訓系統

zn ior03六自由度機械人實訓系統 一 概述 機械人已廣泛應用於汽車與汽車零部件製造業 機械加工行業 電子電器行業 橡膠及塑料工業 食品工業 木材與家具製造業等領域。在工業生產中,弧焊機械人,點焊機械人,噴塗機械人及裝配機械人等都被大量使用。zn ior03六自由度機械人實訓系統由機械人和作業物...