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

Кинематическое исследование механизма манипулятора, особенности управления. Определение необходимых перемещений звеньев, траектории, скоростей и ускорений. Траектория движения захвата, график пути первого звена. Программа, её содержание и текст.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 19.12.2011
Размер файла 343,1 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

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

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

Задание

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

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

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

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

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

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

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

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

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

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

Координаты xyz точек (метр)

Закон движения

Вывести на печать и построить графики движения звена

Плоскость движения

Угол движения детали

Начало движения A

Начало движения B

0,2 0,2 0,2

0,8 0,5 0,7

4

1

ZOX

60

Рис. 1

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

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

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

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

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

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

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

Введение

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

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

Рис. 2

L1=0.2; L2=0.2

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

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

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

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

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

f T<=T1 then

begin

q:=H*Sqr(T) / (2*T1*(Tau - T1));

q1:=H/(T1*(Tau-T1))*T;

q2:=H/(T1*(Tau-T1));

end else

if T<=(Tau-T1) then

begin

q:=H*(2*T-T1)/(2*(Tau-T1));

q1:=H/(Tau-T1);

q2:=0;

end

else

if T<=Tau then

begin

q:=H*(1-Sqr(Tau-T)/(2*T1*(Tau-T1)));

q1:=H/(T1*(Tau-T1))*(Tau-T);

q2:=-H/(T1*(Tau-T1)); +

end;

текст программы

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, ExtCtrls, Grids, ComOBJ;

type

TForm1 = class(TForm)

Button1: TButton;

Button2: TButton;

Timer1: TTimer;

StringGrid1: TStringGrid;

Image1: TImage;

Image2: TImage;

Image3: TImage;

Image4: TImage;

Image5: TImage;

Image6: TImage;

procedure FormCreate(Sender: TObject);

procedure Button1Click(Sender: TObject);

procedure Timer1Timer(Sender: TObject);

private public end;

var

Form1: TForm1;

implementation

{$R *.dfm}

const

ax=0.2; ay=0.2; az=0.2;

bx=0.8; by=0.5; bz=0.7;

L1=0.2; L2=0.2;

aFi=0.0; aPsi=0.0; aL3=0.2;

bFi=0.52955776771375359150; bPsi=0.27980931571248899761; bL3=1.0862780491200215724;

var

Tau,T1,dT,T,tx,ty,tz:Single;

HFi,HPsi,Hl3,qFi,qPsi,qL3,q1Fi,q1Psi,q1L3,q2Fi,q2Psi,q2L3:Single;

Step,Kol_Step:Integer;

procedure Low_2(H,Tau,T1,T:Single; var q,q1,q2:Single);

begin

if T<=T1 then

begin

q:=H*Sqr(T) / (2*T1*(Tau - T1));

q1:=H/(T1*(Tau-T1))*T;

q2:=H/(T1*(Tau-T1));

end else

if T<=(Tau-T1) then

begin

q:=H*(2*T-T1)/(2*(Tau-T1));

q1:=H/(Tau-T1);

q2:=0;

end

else

f T<=Tau then

begin

q:=H*(1-Sqr(Tau-T)/(2*T1*(Tau-T1)));

q1:=H/(T1*(Tau-T1))*(Tau-T);

q2:=-H/(T1*(Tau-T1));

end;

end;

function GetX(Fi,Psi,L3:Single):Single;

begin

// Result:=L3*cos(Fi)*cos(Psi)+L2*sin(Fi)+L1*sin(Fi);

Result:= Cos(fi)*Cos(Psi)*L3 - Sin(Fi)*L2;

end;

function GetY(Psi,L3:Single):Single;

begin

Result:= Sin(psi)*L3 + L1;

end;

function GetZ(Fi,Psi,L3:Single):Single;

begin

Result:= Sin(Fi) * Cos(Psi)*L3 + Cos(Fi)*L2;

end;

procedure TForm1.FormCreate(Sender: TObject);

begin

Tau:=2;

T1:=0.45;

Kol_Step:=40;

end;

procedure TForm1.Button1Click(Sender: TObject);

var i:integer;

begin

with StringGrid1 do begin

Cells[0,1]:='Fi'; Cells[0,2]:='Psi'; Cells[0,3]:='L3';

Cells[0,4]:='V(Fi)'; Cells[0,5]:='V(Psi)'; Cells[0,6]:='V(L3)';

Cells[0,7]:='a(Fi)'; Cells[0,8]:='a(Psi)'; Cells[0,9]:='a(L3)';

ColCount:=Kol_Step+2;

Cells[1,0]:='0';

For i:=2 to Kol_Step+1 do

Cells[i,0]:=FloatToStr(Tau/Kol_Step*(i-1));

end;

Step:=0;

tx:=ax; ty:=ay; tz:=az;

with Image4.Canvas do begin

Pen.Color:=clGreen;

MoveTo(10+Round(ax*200),300);

LineTo(10+Round(ax*200+0.7*ay*200),300-Round(0.7*ay*200));

MoveTo(10+Round(0.7*ay*200),300-Round(0.7*ay*200));

LineTo(10+Round(ax*200+0.7*ay*200),300-Round(0.7*ay*200));

ineTo(10+Round(ax*200+0.7*ay*200),300-Round(0.7*ay*200+az*200));

end;

T:=0;

HFi:=-aFi+bFi; HPsi:=ABS(-aPsi+bPsi); HL3:=ABS(-aL3+bL3);

qFi:=aFi; qPsi:=aPsi; qL3:=aL3;

q1Fi:=0; q1Psi:=0; q1L3:=0;

q2Fi:=0; q2Psi:=0; q2L3:=0;

with StringGrid1 do begin

Cells[Step+1,1]:=FloatToStr(qFi);

Cells[Step+1,2]:=FloatToStr(qPsi);

Cells[Step+1,3]:=FloatToStr(qL3);

Cells[Step+1,4]:=FloatToStr(q1Fi);

Cells[Step+1,5]:=FloatToStr(q1Psi);

Cells[Step+1,6]:=FloatToStr(q1L3);

Cells[Step+1,7]:=FloatToStr(q2Fi);

Cells[Step+1,8]:=FloatToStr(q2Psi);

Cells[Step+1,9]:=FloatToStr(q2L3);

end;

Image1.Canvas.MoveTo(20+Step*5,200-Round(qFi*200));

Image2.Canvas.MoveTo(20+Step*5,200-Round(q1Fi*300));

Image3.Canvas.MoveTo(20+Step*5,100-Round(q2Fi*80));

Image5.Canvas.MoveTo(20+Step*5,200-Round(q1L3*300));

Image6.Canvas.MoveTo(20+Step*5,100-Round(q2L3*80));

dT:=(Tau/Kol_Step);

Timer1.Interval:=round(dT*10);

Timer1.Enabled:=true;

end;

procedure TForm1.Timer1Timer(Sender: TObject);

var

x,y,z:Single;

begin

Inc(Step);

Timer1.Enabled:=False;

T:=T+dT;

Low_2(HFi,Tau,T1,T,qFi,q1Fi,q2Fi);

Low_2(HPsi,Tau,T1,T,qPsi,q1Psi,q2Psi);

Low_2(HL3,Tau,T1,T,qL3,q1L3,q2L3);

qFi:=qFi+aFi;

qPsi:=qPsi+aPsi;

qL3:=qL3+aL3;

x:=GetX(qFi,qPsi,qL3);

y:=GetY(qPsi,qL3);

z:=GetZ(qFi,qPsi,qL3);

with Image4.Canvas do begin

Pen.Color:=clBlack;

LineTo(10+Round(x*200+0.7*y*200),300-Round(0.7*y*200+z*200));

Pen.Color:=clGreen;

MoveTo(10+Round(x*200),300);

LineTo(10+Round(x*200+0.7*y*200),300-Round(0.7*y*200));

MoveTo(10+Round(0.7*y*200),300-Round(0.7*y*200));

LineTo(10+Round(x*200+0.7*y*200),300-Round(0.7*y*200));

LineTo(10+Round(x*200+0.7*y*200),300-Round(0.7*y*200+z*200));

end;

if Step=Kol_Step

then

begin

Fi:=bFi; qPsi:=bPsi; qL3:=bL3;

q1Fi:=0; q1Psi:=0; q1L3:=0;

q2Fi:=0; q2Psi:=0; q2L3:=0;

end;

with StringGrid1 do begin

Cells[Step+1,1]:=FloatToStr(qFi);

Cells[Step+1,2]:=FloatToStr(qPsi);

Cells[Step+1,3]:=FloatToStr(qL3);

Cells[Step+1,4]:=FloatToStr(q1Fi);

Cells[Step+1,5]:=FloatToStr(q1Psi);

Cells[Step+1,6]:=FloatToStr(q1L3);

Cells[Step+1,7]:=FloatToStr(q2Fi);

Cells[Step+1,8]:=FloatToStr(q2Psi);

Cells[Step+1,9]:=FloatToStr(q2L3);

end;

Image1.Canvas.LineTo(20+Step*5,200-Round(qFi*200));

Image2.Canvas.LineTo(20+Step*5,200-Round(q1Fi*200));

Image3.Canvas.LineTo(20+Step*5,100-Round(q2Fi*50));

Image5.Canvas.LineTo(20+Step*5,200-Round(q1L3*200));

Image6.Canvas.LineTo(20+Step*5,100-Round(q2L3*50));

tx:=x; ty:=y; tz:=z;

if Step<Kol_Step then Timer1.Enabled:=True;

end;

end.

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

Fi

Psi

L3

V(Fi)

V(Psi)

V(L3)

a(Fi)

a(Psi)

a(L3)

X

Y

Z

0,00

0,00

0,00

0,20

0,00

0,00

0,00

0,00

0,00

0,00

0,20

0,20

0,20

0,05

0,00

0,00

0,20

0,04

0,02

0,06

0,76

0,40

1,27

0,20

0,20

0,20

0,10

0,00

0,00

0,21

0,08

0,04

0,13

0,76

0,40

1,27

0,21

0,20

0,20

0,15

0,01

0,00

0,21

0,11

0,06

0,19

0,76

0,40

1,27

0,21

0,20

0,20

0,20

0,02

0,01

0,23

0,15

0,08

0,25

0,76

0,40

1,27

0,22

0,20

0,20

0,25

0,02

0,01

0,24

0,19

0,10

0,32

0,76

0,40

1,27

0,23

0,20

0,21

0,30

0,03

0,02

0,26

0,23

0,12

0,38

0,76

0,40

1,27

0,25

0,20

0,21

0,35

0,05

0,02

0,28

0,27

0,14

0,44

0,76

0,40

1,27

0,27

0,21

0,21

0,40

0,06

0,03

0,30

0,30

0,16

0,51

0,76

0,40

1,27

0,29

0,21

0,22

0,45

0,08

0,04

0,33

0,34

0,18

0,57

0,00

0,00

0,00

0,31

0,21

0,22

0,50

0,09

0,05

0,36

0,34

0,18

0,57

0,00

0,00

0,00

0,34

0,22

0,23

0,55

0,11

0,06

0,39

0,34

0,18

0,57

0,00

0,00

0,00

0,36

0,22

0,24

0,60

0,13

0,07

0,41

0,34

0,18

0,57

0,00

0,00

0,00

0,38

0,23

0,25

0,65

0,15

0,08

0,44

0,34

0,18

0,57

0,00

0,00

0,00

0,41

0,23

0,26

0,70

0,16

0,09

0,47

0,34

0,18

0,57

0,00

0,00

0,00

0,43

0,24

0,27

0,75

0,18

0,09

0,50

0,34

0,18

0,57

0,00

0,00

0,00

0,45

0,25

0,29

0,80

0,20

0,10

0,53

0,34

0,18

0,57

0,00

0,00

0,00

0,48

0,25

0,30

0,85

0,21

0,11

0,56

0,34

0,18

0,57

0,00

0,00

0,00

0,50

0,26

0,31

0,90

0,23

0,12

0,59

0,34

0,18

0,57

0,00

0,00

0,00

0,52

0,27

0,33

0,95

0,25

0,13

0,61

0,34

0,18

0,57

0,00

0,00

0,00

0,54

0,28

0,34

1,00

0,26

0,14

0,64

0,34

0,18

0,57

0,00

0,00

0,00

0,56

0,29

0,36

1,05

0,28

0,15

0,67

0,34

0,18

0,57

0,00

0,00

0,00

0,58

0,30

0,38

1,10

0,30

0,16

0,70

0,34

0,18

0,57

0,00

0,00

0,00

0,60

0,31

0,39

1,15

0,32

0,17

0,73

0,34

0,18

0,57

0,00

0,00

0,00

0,62

0,32

0,41

1,20

0,33

0,18

0,76

0,34

0,18

0,57

0,00

0,00

0,00

0,64

0,33

0,43

1,25

0,35

0,19

0,79

0,34

0,18

0,57

0,00

0,00

0,00

0,66

0,34

0,45

1,30

0,37

0,19

0,81

0,34

0,18

0,57

0,00

0,00

0,00

0,67

0,36

0,47

1,35

0,38

0,20

0,84

0,34

0,18

0,57

0,00

0,00

0,00

0,69

0,37

0,50

1,40

0,40

0,21

0,87

0,34

0,18

0,57

0,00

0,00

0,00

0,71

0,38

0,52

1,45

0,42

0,22

0,90

0,34

0,18

0,57

0,00

0,00

0,00

0,72

0,40

0,54

1,50

0,44

0,23

0,93

0,34

0,18

0,57

0,00

0,00

0,00

0,74

0,41

0,56

1,55

0,45

0,24

0,96

0,34

0,18

0,57

0,00

0,00

0,00

0,75

0,43

0,59

1,60

0,47

0,25

0,98

0,30

0,16

0,51

-0,76

-0,40

-1,27

0,76

0,44

0,61

1,65

0,48

0,26

1,01

0,27

0,14

0,44

-0,76

-0,40

-1,27

0,77

0,45

0,63

1,70

0,50

0,26

1,03

0,23

0,12

0,38

-0,76

-0,40

-1,27

0,78

0,47

0,65

1,75

0,51

0,27

1,05

0,19

0,10

0,32

-0,76

-0,40

-1,27

0,79

0,48

0,66

1,80

0,51

0,27

1,06

0,15

0,08

0,25

-0,76

-0,40

-1,27

0,79

0,48

0,68

1,85

0,52

0,28

1,07

0,11

0,06

0,19

-0,76

-0,40

-1,27

0,80

0,49

0,69

1,90

0,53

0,28

1,08

0,08

0,04

0,13

-0,76

-0,40

-1,27

0,80

0,50

0,69

1,95

0,53

0,28

1,08

0,04

0,02

0,06

-0,76

-0,40

-1,27

0,80

0,50

0,70

2,00

0,53

0,28

1,09

0,00

0,00

0,00

0,00

0,00

0,00

0,80

0,50

0,70

Траектория движения захвата и график пути первого звена (по заданию).

Размещено на http://www.allbest.ru/

Рис. 3

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

Рис. 4

Графики скорости и ускорения первого звена

Рис. 5

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

Постановка задачи

Во второй части курсовой работы манипулятор будет рассматриваться в плоскости ZOX. В этой плоскости под углом 60 деталь движется из заданной точки и имеет постоянную скорость. Задача заключается в отыскании законов, позволяющих изменяя размеры звеньев манипулятора за указанное время движения захватить эту деталь.

Вывод формул

Пользователем задаются:

Координаты и скорость движения детали в плоскости ZOX (Xd,Zd,Vd)

Длина руки робота (L3)

Построим проекцию робота в плоскости ZOX

В плоскости ZOX видно только L2 и L3

Законы:

Vdx=Vd*cos60 Vdz=Vd*sin60

Xd=Xd+Vdx*t

Zd=Zd+Vdz*t здесь t- шаг времени

Скорость в точке захвата:

Vcx=Vdx+(Xc-Xd)/T

Vcz=Vdz+(Zc-Zd)/T где T=-t/ln(0,001)

Xc:=L3*cos(Fi)-L2*sin(Fi);

Zc:=L3*sin(Fi)+L2*cos(Fi);

Берем производную от Xc, Zc. И в итоге, после домножения одного уравнения на sin(Fi) или cos(Fi), а затем преобразования уравнений, получаем следующие формулы:

V:=(Vcx*sin(Fi))-(Vcz*cos(Fi));

W:=((Vcx*cos(Fi))+(Vcz*sin(Fi)))/L3;

Координаты в точке захвата:

Xc=Xc+Vcx*t

Zc=Zc+Vcz*t

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

Входные параметры: координаты детали (0,700), скорость детали 0,2 м/с, длина руки робота 1 м, угол наклона руки 100 градусов, время движения равно 4.

 

V

W

Xd

Yd

Xr

Yr

0,00

0,00

0,00

0,00

700,00

720,00

707,00

0,20

-0,48

0,34

20,00

734,60

742,20

707,30

0,40

-0,28

0,42

60,00

803,90

637,00

750,00

0,60

-0,09

0,47

100,00

873,20

553,50

798,00

0,80

0,07

0,47

140,00

942,50

489,60

851,00

1,00

0,20

0,44

180,00

1012,00

444,70

909,30

1,20

0,31

0,37

220,00

1081,00

418,30

973,00

1,40

0,38

0,31

260,00

1150,00

408,60

1042,00

1,60

0,42

0,24

300,00

1220,00

412,60

1116,00

1,80

0,45

0,19

340,00

1289,00

427,20

1193,00

2,00

0,46

0,15

380,00

1358,00

449,50

1272,00

2,20

0,47

0,12

420,00

1427,00

477,20

1352,00

2,40

0,47

0,09

460,00

1497,00

508,70

1432,00

2,60

0,47

0,08

500,00

1566,00

542,80

1512,00

2,80

0,46

0,06

540,00

1635,00

578,80

1591,00

3,00

0,46

0,05

580,00

1705,00

615,90

1670,00

3,20

0,45

0,04

620,00

1774,00

654,00

1747,00

3,40

0,44

0,04

660,00

1843,00

692,60

1824,00

3,60

0,44

0,03

700,00

1912,00

730,60

1897,00

3,80

0,44

0,03

740,00

1982,00

740,00

1982,00

Рис. 6

Рис. 7

Рис. 8

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

Текст программы

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, Grids, StdCtrls, ExtCtrls, ComOBJ;

type

TForm1 = class(TForm)

StringGrid1: TStringGrid;

Timer1: TTimer;

Button1: TButton;

Image1: TImage;

Image2: TImage;

Image3: TImage;

Label1: TLabel;

Button2: TButton;

procedure FormCreate(Sender: TObject);

procedure Timer1Timer(Sender: TObject);

procedure Button1Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

private public end;

var

Form1: TForm1;

implementation

{$R *.dfm}

var

VDX,VDY,Vd,Alpha,T,Tau,TCatch,d,dT:Single;

Xd,Yd,Xd0,Yd0,L,L3,Fi,Fi0:Single;

Old_CX,Cur_CX,Old_CY,Cur_CY,Old_DX,Cur_DX,

Old_DY,Cur_DY,Old_V,Cur_V,Old_W,Cur_W,X_c,Y_c:Single;

H,LF,Takt:Integer;

Fail:Boolean;

procedure InitManipul;

begin

VDX:=Vd*1000*cos(Alpha*pi/180);

VDY:=Vd*1000*sin(Alpha*pi/180);

T:=(Tau/1.7)/ln(10);

TCatch:=0; Fail:=False;

Xd:=Xd0; Yd:=Yd0;

L:=L3; Fi:=Fi0;

end;

procedure InitStrGr(T:word;V,W:Single);

var i:word;

begin

with Form1.StringGrid1 do

begin

Cells[0,1]:='V';

Cells[0,2]:='W';

ColCount:=T+2;

for i:=0 to T do

Cells[i+1,0]:=FloatToStrF(i*dT,ffGeneral,4,2);

Cells[T+1,1]:=FloatToStrF(V/1000,ffGeneral,4,2);

Cells[T+1,2]:=FloatToStrF(W,ffGeneral,4,2);

end;

end;

procedure DrawGraf;

var MT,MV,MW:Single;

const Cx=15; Cy=100; dH=10;

begin

with Form1 do begin

image1.Canvas.Pen.Color:=clBlue;

image1.Canvas.MoveTo(Round(Old_CX/10),250-Round(Old_CY/10));

image1.Canvas.LineTo(Round(Cur_CX/10),250-Round(Cur_CY/10));

image1.Canvas.Pen.Color:=clRed;

image1.Canvas.MoveTo(Round(Old_DX/10),250-Round(Old_DY/10));

image1.Canvas.LineTo(Round(Cur_DX/10),250-Round(Cur_DY/10));

MT:=(image2.Width-2*Cx)/(Tau/dt);

MV:=(image2.Height-2*dH)/(2*Vd*3*1000);

image2.Canvas.MoveTo(Round((CX+(Takt-1)*MT)),220-Round((CY-Old_V*MV)));

image2.Canvas.LineTo(Round((CX+Takt*MT)),220-Round((CY-Cur_V*MV)));

MT:=(Image3.Width-2*Cx)/(Tau/dT);

MW:=(Image3.Height-2*dH)/2;

image3.Canvas.MoveTo(Round((CX+(Takt-1)*MT)),250-Round((CY-Old_W*MW)*2));

image3.Canvas.LineTo(Round((CX+Takt*MT)),250-Round((CY-Cur_W*MW)*2));

Old_CX:=Cur_CX; Old_CY:=Cur_CY;

Old_DX:=Cur_DX; Old_DY:=Cur_DY;

Old_V:=Cur_V; Old_W:=Cur_W;

end;

end;

procedure TForm1.FormCreate(Sender: TObject);

begin

Xd0:=0; Yd0:=700; Vd:=0.2;

Alpha:=60; L3:=1000; Fi0:=100;

Tau:=4; d:=1; dT:=0.2;

H:=500; LF:=20000; Takt:=0;

InitStrGr(Takt,0,0);

end;

procedure TForm1.Button1Click(Sender: TObject);

begin

InitManipul;

Timer1.Enabled:=true;

Timer1.Interval:=round(dt*500);

Takt:=0;

Old_CX:=H*cos(Fi0*pi/180)+L3*Sin(Fi0*pi/180);

Old_CY:=H*sin(Fi0*pi/180)-L3*cos(Fi0*pi/180);

X_c:=Old_CX; Y_c:=Old_CY;

Old_DX:=Xd0; Old_DY:=Yd0;

Old_V:=0; Old_W:=0;

end;

procedure TForm1.Timer1Timer(Sender: TObject);

var RFi,V,W,VCx,VCy:Single;

begin

Inc(Takt);

RFi:=Fi*pi/180;

X_c:=H*cos(RFi)+L*Sin(RFi); Y_c:=H*sin(RFi)-L*cos(RFi);

VCx:=VDX+((Xd-X_c)/T); VCy:=VDY+((Yd-Y_c)/T);

X_c:=X_c+VCx*dT; Y_c:=Y_c+VCy*dT;

Xd:=Xd+VDX*dT; Yd:=Yd+VDY*dT;

TCatch:=TCatch+dT;

if L<=0 then L:=1;

V:=(VCx*sin(RFi))-(VCy*cos(RFi))+H/2;

W:=((VCx*cos(RFi))+(VCy*sin(RFi)))/L;

InitStrGr(Takt,V,W);

Xd:=Xd+(VDX*dT); Yd:=Yd+(VDY*dT);

L:=L+(V*dT);

Fi:=Fi+(W*dT*180/pi);

Cur_CX:=X_c; Cur_CY:=Y_c;

Cur_DX:=Xd; Cur_DY:=Yd;

Cur_V:=V; Cur_W:=W;

DrawGraf;

if (abs(X_c-Xd)<=d) and (abs(Y_c-Yd)<=d) then begin

Label1.Caption:='Goal';

Timer1.Enabled:=false;

end;

if TCatch>Tau then begin

Timer1.Enabled:=false;

Label1.Caption:='Out of time';

end;

if L>LF then begin

Timer1.Enabled:=false;

Label1.Caption:='Out of Speed';

end;

end;

Procedure StrGridToExcel(SG:TStringGrid; InverceRows:Boolean);

Var

ExcelApp, Workbook: OLEVariant;

EndRow, EndCol, BeginCol, BeginRow, i, j: integer;

Begin

ExcelApp:= CreateOleObject('Excel.Application');

ExcelApp.Application.EnableEvents:= false;

Workbook:= ExcelApp.WorkBooks.Add;

BeginCol:=0;

BeginRow:=0;

EndCol:=SG.ColCount+1;

EndRow:=SG.RowCount+1;

If InverceRows then

begin

For i:=BeginCol to EndCol do

For j:=BeginRow to EndRow do

Try

ExcelApp.WorkSheets[1].Cells[i+1,j+1]:=StrToFloat(SG.Cells[i,j]);

Except

ExcelApp.WorkSheets[1].Cells[i+1,j+1]:=SG.Cells[i,j];

End;

end

Else

begin

For i:=BeginCol to EndCol do

For j:=BeginRow to EndRow do

Try

ExcelApp.WorkSheets[1].Cells[i+1,j+1]:=StrToFloat(SG.Cells[j,i]);

Except

ExcelApp.WorkSheets[1].Cells[i+1,j+1]:=SG.Cells[j,i];

End;

end;

ExcelApp.Visible:= true;

End;

procedure TForm1.Button2Click(Sender: TObject);

begin

StrGridToExcel(StringGrid1,True);

end;

end.

Размещено на Allbest.ru


Подобные документы

  • Составление программы для построения траектории движения захвата манипулятора робота: запись системы линейных алгебраических уравнений, получение коэффициентов. Анимация движения манипулятора. Схема направления движения точки соединения звеньев робота.

    лабораторная работа [274,4 K], добавлен 01.12.2013

  • Групповое взаимодействие роботов. Парадокс критерия эффективности. Задача группового управления роботами. Алгоритмы коллективного распределения целей в группах роботов. Анализ возможности улучшения плана методом попарного обмена целями между роботами.

    курсовая работа [229,4 K], добавлен 14.01.2012

  • Определение основных параметров пропорционального звена первого порядка. Влияние параметров звена на его статические и динамические свойства. Влияние коэффициента демпфирования на вид переходных характеристик пропорционального звена второго порядка.

    лабораторная работа [2,4 M], добавлен 28.12.2012

  • Моделирование траектории движения космического аппарата, запускаемого с борта космической станции, относительно Земли. Запуск осуществляется в направлении, противоположном движению станции, по касательной к её орбите. Текст программы в среде Matlab.

    контрольная работа [138,8 K], добавлен 31.05.2010

  • Проект оболочки моделирования кривошипно-шатунного механизма в среде MS Visual Studio. Разработка его математической модели. Исследование кинематики точек В, С, М. Алгоритм и код программы. Анимация движения механизма и график движения основных точек.

    курсовая работа [422,2 K], добавлен 13.03.2016

  • Основные методы и уровни дистанционного управления манипуляционными роботами. Разработка программного обеспечения системы терминального управления техническим объектом. Численное моделирование и анализ исполнительной системы робота манипулятора.

    дипломная работа [1,2 M], добавлен 09.06.2009

  • Изучение баллистикой процессов, протекающих внутри канала ствола при выстреле. Совокупность влияний на полет снаряда, исследование траектории пули в воздухе. Проверка корректности расчетов и обработка в Matlab. Построение графиков и листинг программы.

    курсовая работа [1,6 M], добавлен 02.03.2011

  • Назначение и область применения промышленных роботов. Разработка программы "Кинематическое движение" в среде Delphi для определения основных параметров кинематического движения. Описание работы и листинг программы. Руководство программиста и оператора.

    курсовая работа [499,1 K], добавлен 17.11.2014

  • Динамика движения материальной точки. Разработка программы, моделирующей траектории полета снаряда при стрельбе из пушки под заданным углом к горизонту. Ее структурная схема, системные требования к ней. Создание приложения в среде Borland C++Builder.

    курсовая работа [3,2 M], добавлен 10.06.2014

  • Исследование систем управления в пакете Vissim. Частотный анализ типовых звеньев. Изучение устойчивости и качества переходных процессов системы управления при гибкой отрицательной обратной связи в Matlab. Cоздание передаточных функций звеньев и систем.

    курсовая работа [4,4 M], добавлен 25.12.2014

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.