Программа, вычисляющая все конфигурации манипуляционного робота, в которых схват захватывает объект

Курсовой проект - Компьютеры, программирование

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

об использовании результатов

 

Анализ полученных данных позволяет сделать вывод о том, что программное обеспечение работает правильно.

Выводы

 

В процессе выполнения курсового проекта мы ознакомились с математическими методами и моделями обработки данных, систематизировали, закрепили и расширили теоретические знания по специальности, изучили алгоритмы анализа данных, программирования приложений для интеллектуальной обработки данных.

В процессе выполнения курсового проекта было разработано и протестировано программное обеспечение для расчета всех конфигураций манипуляционного робота, в которых схват захватывает объект.

Библиографический список

 

1.Вукобратович М., Стокич Д., Кирчански Н. Неадаптивное и адаптивное управление манипуляционными роботами. - М.: Мир, 1989.

2.Попов Е.П. Управление роботами-манипуляторами. Изв.АН СССР, Техн. киберн., 1974, N 6, с.51-56.

.Попов Е.П., Верещагин А.Ф., Зенкевич С.Л. Манипуляционные роботы: динамика и алгоритмы.- М.: Наука, 1980.

.Зенкевич С.Л., Ющенко А.С. Основы управления манипуляционными роботами.- М.: Изд-во МГТУ им. Н.Э. Баумана, 2004.- 480 с.

."Специальный справочник С++" Борис Карпов, Татьяна Баранова (издательство Питер).

.Borland C++ Builder 5. Энциклопедия программиста. Калверт Ч., Рейсдорф К., "ДиаСофт" - 2001, 944 с.

Приложение

 

Листинг программного продукта с комментариями

 

. Unit_handler.h

//---------------------------------------------------------------------------

#ifndef Unit_handlerH

#define Unit_handlerH

//---------------------------------------------------------------------------

">#include

">#include

">#include

">#include

#include "CSPIN.h"

">#include

#include "CGAUGES.h"

//---------------------------------------------------------------------------TForm1 : public TForm

{

__published:// IDE-managed Components*Label1;*CSpinEdit1;*Label2;*CSpinEdit2;*CSpinEdit3;*Label3;*Label4;*Edit1;*Label5;*Memo1;*Label6;*Label8;*Label9;*Label10;*CSpinEdit5;*CSpinEdit6;*Label11;*Label12;*Label13;*Label15;*Label16;*Button1;*Label7;*Label14;*CSpinEdit4;*Image1;*Label17;*CGauge1;*Label18;*CSpinEdit7;*Label19;__fastcall Button1Click(TObject *Sender);__fastcall Edit1KeyPress(TObject *Sender, char &Key);__fastcall recalc (void);__fastcall barrier (int link);__fastcall paint (void);:// User declarations:// User declarations

__fastcall TForm1(TComponent* Owner);

};

//---------------------------------------------------------------------------PACKAGE TForm1 *Form1;

//---------------------------------------------------------------------------

#endif

. Unit_handler.cpp

//---------------------------------------------------------------------------

#include

#pragma hdrstop

#include "Unit_handler.h"

#include

#include

#include

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma link "CSPIN"

#pragma link "CGAUGES"

#pragma resource "*.dfm"

#define Ei 25.0

#define M 2

#define PI 3.1415936535897932384626433832795

// определяем сложное препятствие

#define Ex -40

#define Ey 30

#define Fx -40

#define Fy 130

#define Gx -20

#define Gy 130

#define Hx 20

#define Hy 130

#define Kx 40

#define Ky 130

#define Lx 40

#define Ly 30

#define Px 20

#define Py 30

#define Rx 20

#define Ry 70

// определяем простое препятствие

#define N1x -60

#define N1y -1

#define N2x 60

#define N2y -1

#define N3x -60

#define N3y -10

#define N4x 60

#define N4y -10n; /* количество звеньев */corner[100]={0}; /* углы звеньев манипулятора */link_x[100]={0}, link_y[100]={0}; /* координаты вершин манипулятора */number = 0; /* количество нвайденных ситуаций */x,y; /* координаты объекта */

/* линии, составляющие препятствие */lines[12][5]= {{N1x,N1y,N2x,N2y,1},

{N2x,N2y,N3x,N3y,0},

{N3x,N3y,N4x,N4y,1},

{N4x,N4y,N1x,N1y,0},

{Ex,Gy,Lx,Gy,1},

{Lx,Gy,Lx,Ly,0},

{Lx,Ly,Hx,Ly,1},

{Hx,Ly,Rx,Ry,0},

{Rx,Ry,Gx,Ry,1},

{Gx,Ry,Gx,Ey,0},

{Gx,Ey,Ex,Ey,1},

{Ex,Ey,Ex,Gy,0}};*Form1;

//---------------------------------------------------------------------------

__fastcall TForm1::TForm1(TComponent* Owner)

: TForm(Owner)

{

}

//---------------------------------------------------------------------------

/* перерасчет координат звеньев */__fastcall TForm1::recalc (void)

{ int i, j;sum_e_cos[100]={0.0}, sum_e_sin[100]={0.0};sum_corner=0.0;buf[256];(i=0; i<n; i++)

{_corner = 0.0;(j=0; j<=i; j++)

{sum_corner += corner[j];_e_cos[i] = Ei*cos(sum_corner*(PI/180.0));_e_sin[i] = Ei*sin(sum_corner*(PI/180.0));(buf,"%.3f",sum_e_cos[i]);(buf,"%f", &(sum_e_cos[i]));(buf,"%.3f",sum_e_sin[i]);(buf,"%f", &(sum_e_sin[i]));

}_x[i] = 0.0;_y[i] = 0.0;(j=0; j<=i; j++)

{link_x[i] += sum_e_cos[j];_y[i] += sum_e_sin[j];

}

}

}

//---------------------------------------------------------------------------

/* функция проверки попадания звена манипулятора в преграду */__fastcall TForm1::barrier (int link)

{int status = 1, i;A1,B1,C1, A2,B2,C2, xx, yy;=link_y[link]-link_y[link+1];=link_x[link+1]-link_x[link];=link_x[link]*link_y[link+1]-link_x[link+1]*link_y[link];(i=0; i<12; i++)

{A2=lines[i][1]-lines[i][3];=lines[i][2]-lines[i][0];=lines[i][0]*lines[i][3]-lines[i][2]*lines[i][1];(A1*B2-A2*B1 == 0.0 || B1 == 0.0 || B2 == 0.0)

{status++; status--;}

{= (C2*B1-C1*B2)/(A1*B2-A2*B1);= -((A1*xx+C1)/B1);= -((A2*xx+C2)/B2);((lines[i][4] == 0) && (xx == lines[i][0]) &&

((yy >= lines[i][1] && yy <= lines[i][3]) ||

(yy >= lines[i][3] && yy <= lines[i][1])) &&

((yy >= link_y[link] && yy <= link_y[link+1])||

(yy >= link_y[link+1] && yy <= link_y[link]))

) {status = 0;}((lines[i][4] == 1) && (yy == lines[i][1]) &&

((xx >= lines[i][0] && xx <= lines[i][2]) ||

(xx >= lines[i][2] && xx <= lines[i][0])) &&

((xx >= link_x[link] && xx <= link_x[link+1])||

(xx >= link_x[link+1] && xx <= link_x[link]))

) {status = 0;}

}

}status;

}

//---------------------------------------------------------------------------

/* прорисовка ситуации */__fastcall TForm1::paint (void)

{ int i, px,py;buf[256];

/* очистка холста для рисования */->Canvas->Brush->Color = clWhite;->Canvas->FillRect(Image1->Canvas->ClipRect);

/* препятствия */->Canvas->Brush->Color = clGray;->Canvas->Pen->Color = clGray;->Canvas->Rectangle(N1x*M+320,240-N1y*M,N4x*M+320,240-N4y*M);->Canvas->Rectangle(Ex*M+320, 240-Gy*M, Gx*M+320, 240-Ey*M);->Canvas->Rectangle(Gx*M+320, 240-Gy*M, Rx*M+320, 240-Ry*M);->Canvas->Rectangle(Hx*M+320, 240-Hy*M, Lx*M+320, 240-Ly*M);

/* оси постороения */->Canvas->Brush->Color = clBlack;->Canvas->Pen->Color = clBlack;->Canvas->MoveTo(0,240);->Canvas->LineTo(640,240);->Canvas->LineTo(630,238);->Canvas->LineTo(630,242);->Canvas->LineTo(640,240);->Canvas->MoveTo(320,480);->Canvas->LineTo(320,0);->Canvas->LineTo(318,10);->Canvas->LineTo(322,10);->Canvas->LineTo(320,0);

/* построение положений манипулятора */->Canvas->MoveTo(320,240);->Canvas->Brush->Color = clBlue;->Canvas->Pen->Color = clBlue;(i=0; i<n; i++)

{=(int)(link_x[i]*M+320.0);=(i