книги / Прототипирование сетевой системы управления. Разработка Windows-приложения удаленного контроллера прототипа робота-официанта на базе PROMOBOT V
.4.pdfcase 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