roboforum.ru

Технический форум по робототехнике.

Использование Navigator Tool Kit

Re: Использование Navigator Tool Kit

EDV » 22 окт 2009, 09:41

=DeaD= писал(а):Ну вот и первый успех с адаптацией навигатора под другое шасси, правда пока коряво ездит, но уже ездит.

А вот как демку записать я не понял - вроде должен класть файл в каталог с .dat-файлом, но там его нету :pardon:

Поэтому пока только фотка :)


Поздравляю! Вот только, хотелось бы видео поглядеть :)

Насчёт видео:
При записи демонстрационного ролика, видео кодируется кодеком "XviD". Если этот кодек у тебя не установлен, скачать пакет с кодаками можно здесь:

K-Lite Codec Pack Full 5.2.0

После активизации опции "Главное меню/Распознавание/Записать демонстрацию в AVI файл" приложение Recognition.exe стартует запись видео и отображает путь к файлу видео в окне «Информационное окно». Там будет напечатано приблизительно следующее: «Стартовал процесс записи демонстрации (файл: D:\Document and Settings\EDV\AVM\avm_demo.avi).», соответственно ролик нужно там и поискать.

Если что-то надумаете менять в записи демонстрационного ролика, тогда можно попробовать модифицировать метод «CMainWnd::OnWriteAVIdemo» (файл: Navigator\src\RecognitionApp\RecognitionApp.cpp):

Код: Выделить всёРазвернуть
// Обработчик "Запись демонстрационного фильма"
void CMainWnd::OnWriteAVIdemo(wxCommandEvent& event)
{
   wxString FileName = mDataDir + _T("avm_demo.avi");
   if(event.IsChecked() && gStopWriteDemo) {
      CvSize plImgSize = gpRcgPipeline->GetImgSize();
      CvSize ImgSize;
      ImgSize.width  = 320;
      ImgSize.height = (ImgSize.width*plImgSize.height)/plImgSize.width;
      
      wxRemoveFile(FileName);

      gOutAVI = cvCreateVideoWriter(FileName.ToAscii(), CV_FOURCC('x','v','i','d'), 25.0, ImgSize, 1 );
      if(!gOutAVI) {
         gOutAVI = cvCreateVideoWriter(FileName.ToAscii(), -1, 25.0, ImgSize, 1 );
      }
      gOutImg = cvCreateImage( ImgSize, 8, 3 );
      
      gpRcgPipeline->Comment(wxString::Format(_T("Resolution: %ux%u"),
                           plImgSize.width, plImgSize.height));
      gStopWriteDemo = false;
      wxLogMessage(wxString::Format(_MST("\nDemo writing process is started (file: %s)."),FileName));
   } else {
      gStopWriteDemo = true;
      m_Timer.Start(3000, true);
   }
}


Опять таки, если ролик по-прежнему не удаётся записать, тогда можно попробовать скомпилировать Recognition.exe с отладочной информацией, и по шагам поглядеть куда происходить (не происходит) запись ролика, постараться выяснить причину (потому как у меня ролики пишутся).


Если сразу нужно, что бы разрешение захвата было 320x240 (а не 640x480 как сейчас), тогда нужно модифицировать вот это место в программе (файл: Navigator\src\RecognitionApp\RecognitionApp.cpp):

Код: Выделить всёРазвернуть
// Инициализация захвата
wxSize CRecognitionPipeline::InitCapture(int aCamIdx, TCaptureSettings aCaptSet)
{
  ...
         static VidFormat vidFmt = { 640, 480, 30.0};
         // Установка настроек видео захвата по умолчанию
         cvcamSetProperty(mCamIdx, CVCAM_PROP_SETFORMAT, &vidFmt);
  ...
}

Re: Использование Navigator Tool Kit

Vorral » 22 окт 2009, 10:46

=DeaD= писал(а):Ну вот и первый успех с адаптацией навигатора под другое шасси, правда пока коряво ездит, но уже ездит.

А вот как демку записать я не понял - вроде должен класть файл в каталог с .dat-файлом, но там его нету :pardon:

Поэтому пока только фотка :)

Нужно же сделать деинтерлейс. На фотке содержится два кадра, в чётных строках кадр А в нечётных кадр Б. А вот в веб камерах прогрессивная развёртка.

Re: Использование Navigator Tool Kit

=DeaD= » 22 окт 2009, 11:07

Вечером попробую видео записать.

Деинтерлейс не понял - попробую найти где выключается, я его явно не включал :pardon:

Re: Использование Navigator Tool Kit

=DeaD= » 22 окт 2009, 21:12

А вот и видео:


Добавлено спустя 8 минут 21 секунду:
Для адаптации потребовалось выставить нужный СОМ-порт и скорость:
Код: Выделить всёРазвернуть
mhCOMPort = CP_OpenCOMPort(11, CBR_115200, ODDPARITY, 8, 1);


И заполнить функцию драйвера шасси:
Код: Выделить всёРазвернуть
void CMainWnd::OnTimer(wxTimerEvent& WXUNUSED(event))
{
   // Коды команд робота
   enum {
      cmLEFT = 0,     // Влево
      cmBACKWARDS,    // Назад
      cmFORWARD,      // Вперёд
      cmRIGHT,        // Вправо
      cmTURRET_RIGHT, // Башня вправо
      cmFIRE,         // Залп
      cmTURRET_LEFT,  // Башня влево
      cmPOWER         // Включить/выключить питание
   };

   char* cmd="\n";
   int cmdsize=1;

   cmdsize=25;
   cmd="S40 0D 01 05E4 11 05DC P\n";

   int dir=0;
   int acc=0;
   int tur=0;

   for(int i=0; i<cKeyTotal; i++) {
      if(gpKeyArray->Key[i]) {
         switch(i) {
            case cmFORWARD:

               acc=1;

               break;

            case cmLEFT:

               dir=-1;

               break;

            case cmRIGHT:

               dir=1;

               break;

            case cmBACKWARDS:

               acc=-1;

               break;

            case cmTURRET_LEFT:

               tur=-1;

               break;

            case cmTURRET_RIGHT:

               tur=1;

               break;

            case cmFIRE:

               break;

            case cmPOWER:

               break;
         }
      }
   }

   if(tur==1){
      cmdsize=25;
      cmd="S40 0D 01 05FF 11 05FF P\n";
   };

   if(tur==-1){
      cmdsize=25;
      cmd="S40 0D 01 05BF 11 05BF P\n";
   };

   if(acc==1){
      cmdsize=25;
      cmd="S40 0D 01 060F 11 05AC P\n";
      if(dir==-1) cmd="S40 0D 01 05DF 11 05BC P\n";
      if(dir==1) cmd="S40 0D 01 05FF 11 05DC P\n";
   };

   if(acc==-1){
      cmdsize=25;
      cmd="S40 0D 01 05AF 11 060C P\n";
      if(dir==-1) cmd="S40 0D 01 05DF 11 05FC P\n";
      if(dir==1) cmd="S40 0D 01 05BF 11 05DC P\n";
   };

   // Послать команду сервоконтроллеру в COM порт
   CP_WriteCOMPort(mhCOMPort, cmd, cmdsize);

   mpIndicator->SetKeyArray(gpKeyArray);
}

Re: Использование Navigator Tool Kit

Vooon » 22 окт 2009, 21:27

Вот не хочешь использовать готовую либу! :)

Добавлено спустя 33 секунды:
Магические строки пишешь.

Re: Использование Navigator Tool Kit

=DeaD= » 22 окт 2009, 21:47

"Magic people, voodoo people" :D

Re: Использование Navigator Tool Kit

EDV » 23 окт 2009, 09:54

Плохо распознаёт :(
Я ещё вчера заметил, что у тебя в AVM выставлен ключевой размер 160x80 – это не очень хорошо для распознавания. Алгоритм AVM начинает искать образ начиная 75% от начального ключевого размера. Всё что меньше, найти не сможет. Нужно в начале (когда задаёшь ключевой размер для AVM) обучать на размер окна по умолчанию 80x80 (примерно как у меня в готовом файле с обученными данными Go.dat), а потом, следующие обучения можно и на других размерах делать, как показано в примере:



У меня то видал, как танчик гонял за мной по всем комнатам, как реактивный :) Его даже помехи с радиокамеры не сбивали с толку. А у тебя робот едва видит маркер, так что нужно переучить, или использовать мои обученные данные.

А вот что в твоей деме:
Вложения
avm_info1.gif
avm_info1.gif (9.18 КиБ) Просмотров: 2629

Re: Использование Navigator Tool Kit

=DeaD= » 23 окт 2009, 10:14

А как можно этот размер ключевой менять? В настройках или просто окно захвата образа меньше рисовать?
При обучении образ желательно двигать или держать неподвижным?

Re: Использование Navigator Tool Kit

EDV » 23 окт 2009, 10:29

>>А как можно этот размер ключевой менять?

Ключевой размер для AVM выставляется в начале работы с приложением Recognition.exe (когда сохранённых данных ещё нет) или по вызову пункта меню «Распознавание/Установить ключевой размер (создать)». Затем выбираем (визуально, двигая курсором) ключевой размер окна для AVM.

Желательно для начала размер окна не менять, а так и оставить его 80x80 (просто переместить его в нужную позицию для последующего обучения на первый объект).

>>При обучении образ желательно двигать или держать неподвижным?

Желательно, что бы в кадре было видно как можно больше объекта и как можно меньше фона (для AVM всё, что попало в кадр, всё и есть объект, и фон тоже).

Так как AVM неинвариантна к повороту, то в процессе обучения необходимо показать объект под разными углами (под которыми потенциально потом может видеть объект камера уже после обучения).

Если с первого раза не успели показать объект под всеми нужными углами, то можно повторно выбрать пункт «Изучить объект», после чего выбрать тот же самый объект из списка и продолжить обучение AVM на него.
Последний раз редактировалось EDV 23 окт 2009, 10:38, всего редактировалось 1 раз.

Re: Использование Navigator Tool Kit

=DeaD= » 23 окт 2009, 10:38

Ок, понял, вечером устрою еще один пробный заезд.

Re: Использование Navigator Tool Kit

EDV » 23 окт 2009, 11:42

Желательно, использовать входное изображение (с камеры) разрешением 320x240. На таком изображении можно получить максимальное быстродействие AVM.

Чтобы переключиться на 320x240, нужно выбрать пункт меню «Настройки\ Формат захвата изображения» или поменять в исходниках программы (файл: Navigator\src\RecognitionApp\RecognitionApp.cpp):

Код: Выделить всёРазвернуть
// Инициализация захвата
wxSize CRecognitionPipeline::InitCapture(int aCamIdx, TCaptureSettings aCaptSet)
{
  ...
         static VidFormat vidFmt = { 640, 480, 30.0};
         // Установка настроек видео захвата по умолчанию
         cvcamSetProperty(mCamIdx, CVCAM_PROP_SETFORMAT, &vidFmt);
  ...
}

Re: Использование Navigator Tool Kit

=DeaD= » 23 окт 2009, 11:54

Ок, понял, переключу на 320х240.

Re: Использование Navigator Tool Kit

=DeaD= » 23 окт 2009, 19:56

На порядок лучше :Yahoo!: - сделал 320х240 разрешение и 80х80 размер образа:

Re: Использование Navigator Tool Kit

galex1981 » 23 окт 2009, 20:35

А почему такая разница в работе аглоритма по разрешению экрана? На 320*240 можно сказать идеально работает...

Re: Использование Navigator Tool Kit

=DeaD= » 23 окт 2009, 20:38

Неее, разница не из-за разрешения экрана, а из-за правильной настройки распознавалки - сделали ей окно 80х80 вместо 160х80 + обучил на большей дистанции, а то там ограничение по уменьшению масштаба при поиске и вроде всё ок.


Rambler\'s Top100 Mail.ru counter