Программа, вычисляющая все конфигурации манипуляционного робота, в которых схват захватывает объект
Курсовой проект - Компьютеры, программирование
Другие курсовые по предмету Компьютеры, программирование
об использовании результатов
Анализ полученных данных позволяет сделать вывод о том, что программное обеспечение работает правильно.
Выводы
В процессе выполнения курсового проекта мы ознакомились с математическими методами и моделями обработки данных, систематизировали, закрепили и расширили теоретические знания по специальности, изучили алгоритмы анализа данных, программирования приложений для интеллектуальной обработки данных.
В процессе выполнения курсового проекта было разработано и протестировано программное обеспечение для расчета всех конфигураций манипуляционного робота, в которых схват захватывает объект.
Библиографический список
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