Механика и алгоритмы управления роботами
Кинематическое исследование механизма манипулятора, особенности управления. Определение необходимых перемещений звеньев, траектории, скоростей и ускорений. Траектория движения захвата, график пути первого звена. Программа, её содержание и текст.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 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