Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

книги / Прототипирование сетевой системы управления. Разработка Windows-приложения удаленного контроллера прототипа робота-официанта на базе PROMOBOT V

.4.pdf
Скачиваний:
0
Добавлен:
12.11.2023
Размер:
1.49 Mб
Скачать

case 6: mm_p.x=D_X0_YN-abs(round((d0-d00+d)/(2*D_X0_YN))); mm_p.y=abs(round(sqrt(d00-pow((double)mm_p.x,2))));

if (IsPointInPolygon(p.x, p.y, Poligon,3)==1){ mm_p.x=abs(mm_p.x); mm_p.y=abs(mm_p.y);

}else if(IsPointInPolygon(p.x, p.y, Poligon1,4)==1){ mm_p.x=abs(mm_p.x); mm_p.y=-abs(mm_p.y);

}else if(IsPointInPolygon(p.x, p.y, Poligon2,3)==1){ mm_p.x=-abs(mm_p.x); mm_p.y=-abs(mm_p.y);

}

break; case 7:

mm_p.x=D_X0_YN-abs(round((d0-d00+d)/(2*D_X0_YN))); mm_p.y=abs(round(sqrt(d00-pow((double)mm_p.x,2))));

if (IsPointInPolygon(p.x, p.y, Poligon,3)==1){ mm_p.x=-abs(mm_p.x); mm_p.y=-abs(mm_p.y);

}else if(IsPointInPolygon(p.x, p.y, Poligon1,4)==1){ mm_p.x=-abs(mm_p.x); mm_p.y=abs(mm_p.y);

}else if(IsPointInPolygon(p.x, p.y, Poligon2,3)==1){ mm_p.x=abs(mm_p.x); mm_p.y=abs(mm_p.y);

}

break; case 8:

mm_p.x=D_X0_YN-abs(round((d0-d00+d)/(2*D_X0_YN))); mm_p.y=abs(round(sqrt(d00-pow((double)mm_p.x,2))));

if (IsPointInPolygon(p.x, p.y, Poligon,3)==1){ mm_p.x=-abs(mm_p.x); mm_p.y=abs(mm_p.y);

}else if(IsPointInPolygon(p.x, p.y, Poligon1,4)==1){ mm_p.x=-abs(mm_p.x); mm_p.y=-abs(mm_p.y);

}else if(IsPointInPolygon(p.x, p.y, Poligon2,3)==1){ mm_p.x=abs(mm_p.x); mm_p.y=-abs(mm_p.y);

}

break;

default:

break;

}

51

}

sprintf(Text,"x=%d(%d),y=%d(%d) [%d]", p.x,mm_p.x,p.y,mm_p.y,position);

SetDlgItemText(ghwndDlg,IDXY,Text); return mm_p;

}

8. Написать функцию потока MoveAlongTheTrackThread,

реализующую алгоритм движения по заданному маршруту от одной целевой точки до другой. В цикле for из массива Path выбирается очередная целевая точка маршрута. В цикле while реализуется алгоритм управления движением к цели.

static DWORD WINAPI MoveAlongTheTrackThread(LPVOID lpParam){ char Text[64];

int i; POINT p;

float Distance=0; HANDLE Handles[2]; Handles[1]=heventEscape; EnMoveAlongTheTrack=1;

GetDlgItemText(ghwndDlg, IDFLOORAZIM,Text,17); SetDlgItemText(ghwndDlg,IDGO,"Stop Bot");

for (i=0;i<(PathLenth-1) && EnMoveAlongTheTrack;i++){ p.x=Path[i+1].x;

p.y=Path[i+1].y;

p=RoomCoordinateTransform(p);

TargetX=p.x;

TargetY=p.y;

sprintf(Text," X/Y Target: %d/%d ",TargetX,TargetY); SetDlgItemText(ghwndDlg,IDX,Text); EscapeTrackPiece=0; Sleep(GPS_POLLING_PERIOD); sprintf(Text,"_______Start Piece=%d ______",i); SendMessageList(Text);

ResetEvent(TurnOK);

ResetEvent(heventEscape);

Handles[0]=TurnOK; SetTimer(ghwndDlg, 8,40000,NULL); TurnTargetOverGPS();

if((WAIT_OBJECT_0+1)==WaitForMultipleObjects(2,(CONST

52

HANDLE*)&Handles,FALSE,INFINITE) ) StopBot();

KillTimer(ghwndDlg, 8); Sleep(GPS_POLLING_PERIOD); ResetEvent(hStartBypassOK); ResetEvent(hStopBypassOK); ForwardBot();

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

while(EscapeTrackPiece==0&&EnMoveAlongTheTrack){

Distance=MarvelmindTargetDistance;

///BYPASS--------------------------------------------------------------------------------------

if (WaitForSingleObject(hStartBypassOK,GPS_POLLING_PERIOD*5)

==WAIT_OBJECT_0){

 

SendMessageList("-----------

START BYPASS");

Handles[0]=hStopBypassOK; SetTimer(ghwndDlg, 8,80000,NULL);

if((WAIT_OBJECT_0+1)==WaitForMultipleObjects(2,(CONST HANDLE*)&Handles,FALSE,INFINITE) ){

StopBot();

EnBypassThread=0; WaitForSingleObject(hStopBypassOK,GPS_POLLING_PERIOD);

}

 

ResetEvent(hStopBypassOK);

KillTimer(ghwndDlg, 8);

 

SendMessageList("----------

STOP BYPASS and Correct Orientation");

ResetEvent(TurnOK);

 

ResetEvent(heventEscape);

Handles[0]=TurnOK;

 

SetTimer(ghwndDlg, 8,40000,NULL);

TurnTargetOverGPS();

 

if((WAIT_OBJECT_0+1)==WaitForMultipleObjects(2,(CONST

HANDLE*)&Handles,FALSE,INFINITE) )

 

StopBot();

 

ForwardBot();

 

}else

 

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

BYPASS

if ((MarvelmindTargetDistance<=20)||EscapeTrackPiece){

StopBot();

 

SendMessageList("********** PATH PIECE OK ****************");

break;

 

}else{

 

sprintf(Text,"-----PrevDist=%d,CurrentDist=%d---

",(INT16)Distance,

53

(INT16)MarvelmindTargetDistance);

SendMessageList(Text);

if( ((INT16)MarvelmindTargetDistance-(INT16)Distance)>2){ StopBot();

Sleep(GPS_POLLING_PERIOD);

SendMessageList("Remove from Target: Correct Orientation"); ResetEvent(TurnOK);

ResetEvent(heventEscape);

Handles[0]=TurnOK; SetTimer(ghwndDlg, 8,40000,NULL); TurnTargetOverGPS();

if((WAIT_OBJECT_0+1)==WaitForMultipleObjects(2,(CONST HANDLE*)&Handles,FALSE,INFINITE) )

StopBot();

KillTimer(ghwndDlg, 8); Sleep(GPS_POLLING_PERIOD); ForwardBot();

 

}

}

 

}//--------------------------------------------------------------------------

while

}//--------------------------------------------------------------------------------------

for

SendMessageList("============= PATH OK ===============");

StopBot();

EnMoveAlongTheTrack=0;

EscapeTrackPiece=1;

CloseHandle(hMoveAlongTheTrack);

hMoveAlongTheTrack=NULL; SetDlgItemText(ghwndDlg,IDGO,"Go Bot"); return 0;

}

4.7. Отчет о выполнении лабораторной работы № 8

Студент в отчете по лабораторной работе № 8 должен представить описание приложения удаленного контроллера прототипа робота-официанта на базе PROMOBOT V.4. В приложении А приведен образец титульного листа, а в приложении Б – оглавление отчета.

54

СПИСОК ЛИТЕРАТУРЫ

1.Shuang-Hua Yang. Internet Based Control Systems. Design and Applications. – Springer-Verlag London Limited, 2011. – P. 197.

2.RTST-технология программирования встроенных систем реального времени / сост. А.Н. Терехов; Санкт-Петерб. гос. ун-т, ГП

«Терком». – URL: https://www.google.ru/url?sa=t&rct=j&q=&esrc=s& source=web&cd=1&ved=0CBsQFjAAahUKEwiIpevYsuzIAhWmj3IKH TcHDjo&url=http%3A%2F%2Fwww.math.spbu.ru%2Fuser%2Fant%2F all_articles%2F049_Terekhov_RTST.pdf&usg=AFQjCNG3fFzz4X997P k9e40f66YTl0urSg&bvm=bv.106130839,bs.1,d.bGQ

55

ПРИЛОЖЕНИЕ А

Титульный лист отчета по лабораторной работе № 8

Лабораторный практикум

Прототипирование сетевой системы управления

Отчет о выполнении лабораторной работы № 8

Разработка windows-приложения удаленного контроллера прототипа робота-официанта на базе PROMOBOT V.4

Исполнитель – студент группы ________ _____________________

(индекс группы)

(ФИО)

Проверил _______________________________________________

(должность, уч. степень, ФИО)

2018

56

ПРИЛОЖЕНИЕ Б

Страница отчета с оглавлением лабораторной работы № 8

ОГЛАВЛЕНИЕ

Введение................................................................................................

1. Разработка программы построения маршрута движения .............

2. Разработка программы управления движением

самоходной тележки по заданному маршруту...................................

Заключение............................................................................................

Список литературы...............................................................................

Приложение ..........................................................................................

57

Учебное издание

ПРОТОТИПИРОВАНИЕ СЕТЕВОЙ СИСТЕМЫ УПРАВЛЕНИЯ. РАЗРАБОТКА WINDOWS-ПРИЛОЖЕНИЯ УДАЛЕННОГО КОНТРОЛЛЕРА ПРОТОТИПА РОБОТА-ОФИЦИАНТА НА БАЗЕ PROMOBOT V.4

Методические указания к лабораторной работе № 8

Составитель Гончаровский Олег Владленович

Редактор и корректор И.Н. Жеганина

Подписано в печать 18.01.2019. Формат 60×90/16. Усл. печ. л. 3,75. Тираж 10 экз. Заказ № 7/2019.

Издательство Пермского национального исследовательского

политехнического университета.

Адрес: 614990, г. Пермь, Комсомольский пр., 29, к. 113.

Тел.: (342) 219-80-33.

58

Соседние файлы в папке книги