Механика и алгоритмы управления роботами

Дипломная работа - Компьютеры, программирование

Другие дипломы по предмету Компьютеры, программирование

 

 

 

 

 

 

 

 

 

 

 

 

 

Курсовая работа по предмету:

Механика и алгоритмы управления роботами

 

 

Задание

 

Кинематическое исследование механизма манипулятора

определить необходимые перемещения звеньев

определить траекторию движения захвата из точки (0,2; 0,2; 0,2) в точку (0,8; 0,5; 0,7), если закон движения №4

определить скорости и ускорения движения звеньев.

реализовать программу расчетов

построить графики:

траектории движения захвата в ZOX

скорости и ускорения захвата

скорости и ускорения 1-ого звена.

Начальные данные

 

Координаты xyz точек (метр)Закон движенияВывести на печать и построить графики движения звенаПлоскость движенияУгол движения деталиНачало движения AНачало движения B0,2 0,2 0,20,8 0,5 0,741ZOX60

Рис. 1

Кинематика управления манипулятором:

вывести законы движения во времени для детали и захвата;

реализовать программу расчетов.

построить графики:

траектории движения захвата детали в ZOX, если угол движения детали 60;

скоростей и ускорений ведомых звеньев;

проверить решение графическим способом.

 

 

Введение

 

На протяжении долгого времени человечество пыталось уйти от ручного труда. На это было много причин, главные из которых огромные силовые и временные затраты. Механизмы, создаваемые человеком усложнялись и совершенствовались. Трудно себе представить современную фабрику или завод, на котором не было бы ни одного робота. Но для того, чтобы робот работал необходимо уметь им управлять и хорошо представлять, как он функционирует. Данная курсовая работа направлена на кинематическое исследование механизма манипулятора и освоение кинематики его управления.

 

 

Кинематическое исследование механизма манипулятора. Определение необходимых перемещений звеньев

 

Рис. 2

=0.2; L2=0.2

В точке А: L3=0.2; j=0; ?=0

В точке В: L3= 1.08 м; j=0.529 рад; ?=0.279 рад

Определение траектории, скоростей и ускорений

 

Перемножив полученные матрицы и вектор L, получим следующие законы для изменения координат захвата по времени:

 

 

Перемещение, скорость и ускорение находятся по 4 закону:

f T<=T1 then:=H*Sqr(T) / (2*T1*(Tau - T1));:=H/(T1*(Tau-T1))*T;:=H/(T1*(Tau-T1));elseT<=(Tau-T1) then:=H*(2*T-T1)/(2*(Tau-T1));:=H/(Tau-T1);:=0;T<=Tau then:=H*(1-Sqr(Tau-T)/(2*T1*(Tau-T1)));:=H/(T1*(Tau-T1))*(Tau-T);:=-H/(T1*(Tau-T1)); +;

текст программыUnit1;, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, StdCtrls, ExtCtrls, Grids, ComOBJ;= class(TForm): TButton;: TButton;: TTimer;: TStringGrid;: TImage;: TImage;: TImage;: TImage;: TImage;: TImage;FormCreate(Sender: TObject);Button1Click(Sender: TObject);Timer1Timer(Sender: TObject);public end;: TForm1;

{$R *.dfm}=0.2; ay=0.2; az=0.2;=0.8; by=0.5; bz=0.7;=0.2; L2=0.2;=0.0; aPsi=0.0; aL3=0.2;=0.52955776771375359150; bPsi=0.27980931571248899761; bL3=1.0862780491200215724;,T1,dT,T,tx,ty,tz:Single;,HPsi,Hl3,qFi,qPsi,qL3,q1Fi,q1Psi,q1L3,q2Fi,q2Psi,q2L3:Single;,Kol_Step:Integer;Low_2(H,Tau,T1,T:Single; var q,q1,q2:Single);T<=T1 then:=H*Sqr(T) / (2*T1*(Tau - T1));:=H/(T1*(Tau-T1))*T;:=H/(T1*(Tau-T1));elseT<=(Tau-T1) then:=H*(2*T-T1)/(2*(Tau-T1));:=H/(Tau-T1);:=0;T<=Tau then:=H*(1-Sqr(Tau-T)/(2*T1*(Tau-T1)));:=H/(T1*(Tau-T1))*(Tau-T);:=-H/(T1*(Tau-T1));;;GetX(Fi,Psi,L3:Single):Single;

// Result:=L3*cos(Fi)*cos(Psi)+L2*sin(Fi)+L1*sin(Fi);:= Cos(fi)*Cos(Psi)*L3 - Sin(Fi)*L2;;GetY(Psi,L3:Single):Single;:= Sin(psi)*L3 + L1;;GetZ(Fi,Psi,L3:Single):Single;

Result:= Sin(Fi) * Cos(Psi)*L3 + Cos(Fi)*L2;;TForm1.FormCreate(Sender: TObject);:=2;:=0.45;_Step:=40;;TForm1.Button1Click(Sender: TObject);i:integer;StringGrid1 do begin[0,1]:='Fi'; Cells[0,2]:='Psi'; Cells[0,3]:='L3';[0,4]:='V(Fi)'; Cells[0,5]:='V(Psi)'; Cells[0,6]:='V(L3)';[0,7]:='a(Fi)'; Cells[0,8]:='a(Psi)'; Cells[0,9]:='a(L3)';:=Kol_Step+2;[1,0]:='0';i:=2 to Kol_Step+1 do[i,0]:=FloatToStr(Tau/Kol_Step*(i-1));;:=0;:=ax; ty:=ay; tz:=az;Image4.Canvas do begin.Color:=clGreen;(10+Round(ax*200),300);(10+Round(ax*200+0.7*ay*200),300-Round(0.7*ay*200));(10+Round(0.7*ay*200),300-Round(0.7*ay*200));(10+Round(ax*200+0.7*ay*200),300-Round(0.7*ay*200));(10+Round(ax*200+0.7*ay*200),300-Round(0.7*ay*200+az*200));;:=0;:=-aFi+bFi; HPsi:=ABS(-aPsi+bPsi); HL3:=ABS(-aL3+bL3);:=aFi; qPsi:=aPsi; qL3:=aL3;Fi:=0; q1Psi:=0; q1L3:=0;Fi:=0; q2Psi:=0; q2L3:=0;StringGrid1 do begin[Step+1,1]:=FloatToStr(qFi);[Step+1,2]:=FloatToStr(qPsi);[Step+1,3]:=FloatToStr(qL3);[Step+1,4]:=FloatToStr(q1Fi);[Step+1,5]:=FloatToStr(q1Psi);[Step+1,6]:=FloatToStr(q1L3);[Step+1,7]:=FloatToStr(q2Fi);[Step+1,8]:=FloatToStr(q2Psi);[Step+1,9]:=FloatToStr(q2L3);;.Canvas.MoveTo(20+Step*5,200-Round(qFi*200));.Canvas.MoveTo(20+Step*5,200-Round(q1Fi*300));.Canvas.MoveTo(20+Step*5,100-Round(q2Fi*80));.Canvas.MoveTo(20+Step*5,200-Round(q1L3*300));.Canvas.MoveTo(20+Step*5,100-Round(q2L3*80));:=(Tau/Kol_Step);.Interval:=round(dT*10);.Enabled:=true;;TForm1.Timer1Timer(Sender: TObject);,y,z:Single;(Step);.Enabled:=False;:=T+dT;_2(HFi,Tau,T1,T,qFi,q1Fi,q2Fi);_2(HPsi,Tau,T1,T,qPsi,q1Psi,q2Psi);_2(HL3,Tau,T1,T,qL3,q1L3,q2L3);:=qFi+aFi;:=qPsi+aPsi;:=qL3+aL3;:=GetX(qFi,qPsi,qL3);:=GetY(qPsi,qL3);:=GetZ(qFi,qPsi,qL3);Image4.Canvas do begin.Color:=clBlack;(10+Round(x*200+0.7*y*200),300-Round(0.7*y*200+z*200));.Color:=clGreen;(10+Round(x*200),300);(10+Round(x*200+0.7*y*200),300-Round(0.7*y*200));(10+Round(0.7*y*200),300-Round(0.7*y*200));(10+Round(x*200+0.7*y*200),300-Round(0.7*y*200));(10+Round(x*200+0.7*y*200),300-Round(0.7*y*200+z*200));;Step=Kol_Step:=bFi; qPsi:=bPsi; qL3:=bL3;Fi:=0; q1Psi:=0; q1L3:=0;Fi:=0; q2Psi:=0; q2L3:=0;;StringGrid1 do begin[Step+1,1]:=FloatToStr(qFi);[Step+1,2]:=FloatToStr(qPsi);[Step+1,3]:=FloatToStr(qL3);[Step+1,4]:=FloatToStr(q1Fi);[Step+1,5]:=FloatToStr(q1Psi);[Step+1,6]:=FloatToStr(q1L3);[Step+1,7]:=FloatToStr(q2Fi);[Step+1,8]:=FloatToStr(q2Psi);[Step+1,9]:=FloatToStr(q2L3);;.Canvas.LineTo(20+Step*5,200-Round(qFi*200));.Canvas.LineTo(20+Step*5,200-Round(q1Fi*200));.Canvas.LineTo(20+Step*5,100-Round(q2Fi*50));.Canvas.LineTo(20+Step*5,200-Round(q1L3*200));.Canvas.LineTo(20+Step*5,100-Round(q2L3*50));:=x; ty:=y; tz:=z;Step<Kol_Step then Timer1.Enabled:=True;

end;.

Построение графиков

 

FiPsiL3V(Fi)V(Psi)V(L3)a(Fi)a(Psi)a(L3)XYZ0,000,000,000,200,000,000,000,000,000,000,200,200,200,050,000,000,200,040,020,060,760,401,270,200,200,200,100,000,000,210,080,040,130,760,401,270,210,200,200,150,010,000,210,110,060,190,760,401,270,210,200,200,200,020,010,230,150,080,250,760,401,270,220,200,200,250,020,010,240,190,100,320,760,401,270,230,200,210,300,030,020,260,230,120,380,760,401,270,250,200,210,350,050,020,280,270,140,440,760,401,270,270,210,210,400,060,030,300,300,160,510,760,401,270,290,210,220,450,080,040,330,340,180,570,000,000,000,310,210,220,500,090,050,360,340,180,570,000,000,000,340,220,230,550,110,060,390,340,180,570,000,000,000,360,220,240,600,130,070,410,340,180,570,000,000,000,380,230,250,650,150,080,440,340,180,570,000,000,000,410,230,260,700,160,090,470,340,180,570,000,000,000,430,240,270,750,180,090,500,340,180,570,000,000,000,450,250,290,800,200,100,530,340,180,570,000,000,000,480,250,300,850,210,110,560,340,180,570,000,000,000,500,260,310,900,230,120,590,340,180,570,000,000,000,520,270,330,950,250,130,610,340,180,570,000,000,000,540,280,341,000,260,140,640,340,180,570,000,000,000,560,290,361,050,280,150,670,340,180,570,000,000,000,580,300,381,100,300,160,700,340,180,570,000,000,000,600,310,391,150,320,170,730,340,180,570,000,000,000,620,320,411,200,330,180,760,340,180,570,000,000,000,640,330,431,250,350,190,790,340,180,570,000,000,000,660,340,451,300,370,190,810,340,180,570,000,000,000,670,360,471,350,380,200,840,340,180,570,000,000,000,690,370,501,400,400,210,870,340,180,570,000,000,000,710,380,521,450,420,220,900,340,180,570,00