Я начал разработку программы «Навигатор» и у меня готовы первые результаты.
Кто сказал, что управлять «зрячим» роботом очень сложно?
Посмотрите, на что способен мизерный кусочек кода (алгоритм управления роботом) плюс технология AVM.
- Код: Выделить всё • Развернуть
if(gpCmdArray) {
bool MvFrw = gpCmdArray->Cmd[cmFORWARD];
bool MvBkw = gpCmdArray->Cmd[cmBACKWARDS];
bool MvLft = gpCmdArray->Cmd[cmLEFT];
bool MvRht = gpCmdArray->Cmd[cmRIGHT];
bool TrLft = gpCmdArray->Cmd[cmTURRET_LEFT];
bool TrRht = gpCmdArray->Cmd[cmTURRET_RIGHT];
memset(gpCmdArray, 0, sizeof(TCmdArray));
if(d.ObjTotal) {
double ScrBase = MIN(apImage->width, apImage->height);
double ObjBase = MAX(d.ObjRect->width, d.ObjRect->height);
double ObjZoom = ObjBaseScrBase;
int cXs = apImage->width>>1;
int cXo = d.ObjRect->x + (d.ObjRect->width>>1);
int cXd = cXs - cXo;
if(ObjZoom > 0.6 || (ObjZoom > 0.57 && MvBkw)) { gpCmdArray->Cmd[cmBACKWARDS] = true; }
if(ObjZoom < 0.30 || (ObjZoom < 0.33 && MvFrw)) { gpCmdArray->Cmd[cmFORWARD] = true; }
if(cXd > 40) {
if(!MvLft && gNvg.TurretBalance > 0) { gpCmdArray->Cmd[cmLEFT] = true; }
if(!TrLft) {
gpCmdArray->Cmd[cmTURRET_LEFT] = true;
gNvg.TurretBalance++;
}
}
if(cXd < -40) {
if(!MvRht && gNvg.TurretBalance < 0) { gpCmdArray->Cmd[cmRIGHT] = true; }
if(!TrRht) {
gpCmdArray->Cmd[cmTURRET_RIGHT] = true;
gNvg.TurretBalance--;
}
}
} else {
// Выравнивание башни
if(gNvg.TurretBalance) {
if(gNvg.TurretBalance > 0) {
gpCmdArray->Cmd[cmTURRET_RIGHT] = true;
gNvg.TurretBalance--;
} else {
gpCmdArray->Cmd[cmTURRET_LEFT] = true;
gNvg.TurretBalance++;
}
}
}
}
В двух словах, алгоритм управления пытается выровнять положение башни и корпуса робота на центр самого первого распознанного объекта в списке трекинга и если объект находится далеко, то приблизится, а если слишком близко, то откатится назад.
Я добавил два видеоролика, демонстрирующих процесс навигации:
http://rapidshare.de/files/47125315/Navigate1.avi.htmlhttp://rapidshare.de/files/47125331/Navigate2.avi.htmlЭкран разделён на две части, слева то, что видит робот, а справа запечатлен общий план. В левом нижнем углу, расположен индикатор команд, которые выдаёт алгоритм управления. Расположение индикаторов соответствую расположению кнопок в диалоговом окне драйвера управления роботом.
В ближайшее время я планирую подготовить и опубликовать на «Робофоруме» исходные тексты программы «Recognition.exe», в которой будет реализован режим навигации робота.