Здесь я постараюсь ответить на вопросы по использованию библиотек навигации.
Итак, если Вы желаете управлять моделью, анализируя изображение с видеокамеры, вам понадобиться: радиоуправляемая модель, видеокамера с радиопередатчиком и приёмником, аккумулятор (для видеокамеры), USB TV тюнер (для оцифровки сигнала от видеокамеры) общей стоимостью всего 150$.
Проект состоит из трех частей: драйвер управления роботом, приложение распознавания образов (GUI), и динамической библиотеки «Навигатор». Для компиляции приложения распознавания образов понадобится wxWidgets-2.8.x и OpenCV_1.0. Если у кого-то нет желания разбираться с GUI, то в проекте уже есть скомпилированный EXE-шник распознавателя и вам будет достаточно скомпилировать Navigator.dll, которая содержит алгоритм навигации. Для компиляции Navigator.dll необходима только библиотека OpenCV_1.0. Сборка проекта возможна компилятором Microsoft Visual C++ 6.0 (папка vc6.prj) и компилятором Microsoft Visual Studio 2008 (папка vc9.prj).
После инсталляции (и компиляции) библиотек wxWidgets-2.8.x и OpenCV_1.0 необходимо указать дополнительные папки для компилятора:
Состав (на 21.09.09): Navigator_Tool_Kit\samples\LocationTree - пример нахождения траектории движения по визуальным ориентирам; Navigator_Tool_Kit\samples\LocationSearching - пример определения текущего местоположения по контрастным «пятнам»; Navigator_Tool_Kit\samples\BeaconsTest - пример использования AVM для поиска и прослеживания естественных маяков; Navigator_Tool_Kit\samples\RcgExample - пример использования AVM для распознавания образов; Navigator_Tool_Kit\samples\IdString - пример использования шаблонов «строк идентификаторов» из модуля «ListInterface.h».
Всё что касается программных пакетов «Navigator» и «Navigator Tool Kit» представлено исходными текстами программ, с примерами, и подробными комментариями на русском языке.
Исключением является только «закрытая» технология AVM, которая представлена в бинарном виде (библиотека). Но для любителей развивать свои собственные алгоритмы распознавания я предоставляю альтернативный «распознаватель образов» в исходниках.
Для начала инсталляции, нужно внизу найти "Visual C++ 2008 Express Edition", (выбрать язык Русский по желанию) и нажать Download. Скачается инсталлятор на пару метров, который продолжит инсталляцию через инет (вытянет еще около ~50-70m). Все это официальное и бесплатное.
====- 21.10.2009 -=== Для тех, кто пожелает подключиться к экспериментам по навигации, решил написать небольшую инструкцию по переделки драйвера «Navigator\src\RobotController»:
Всё просто: приложение Recognition.exe взаимодействует с «драйвером робота» через общий участок памяти (gpKeyArray). Всё что нужно сделать - это по таймеру (метод CMainWnd::OnTimer) отправлять команды из «gpKeyArray» вашему роботу.
Код:
// Коды команд робота enum { cmLEFT = 0, // Влево cmBACKWARDS, // Назад cmFORWARD, // Вперёд cmRIGHT, // Вправо cmTURRET_RIGHT, // Башня вправо cmFIRE, // Залп cmTURRET_LEFT, // Башня влево cmPOWER // Включить/выключить питание };
При запуске режима навигации передается цепочка команд на включение робота (cmFIRE, cmPOWER), соответственно при отключении режима навигации команда на отключение (cmPOWER).
Ну и самое главное: команды cmLEFT и cmRIGHT не должны сами по себе вызывать повороты корпуса робота а только в сочетании с командами «вперёд», «назад» (cmFORWARD, cmBACKWARDS).
Приложение Recognition.exe после старта устанавливает разрешение камеры 640x480, так что перед стартом режима навигации нужно переключить разрешение на 320x240 (главное меню: Настройки \ Формат захвата изображения). Ещё необходимо скачать архив Go.zip распечатать «Иди сюда.doc», и загрузить «Go.dat» и теперь можно включать режим навигации.
В общем последовательность такая: 1) стартуем Recognition.exe; 2) загружаем «Go.dat» (главное меню: Распознавание \ Загрузить данные с диска); 3) устанавливаем разрешение 320x240 (главное меню: Настройки \ Формат захвата изображения); 4) включаем запись демонстрационного ролика (по желанию, главное меню: Распознавание \ Записать демонстрацию в AVI файл); 5) ну и наконец, запуск режима навигации (главное меню: Распознавание \ Режим навигации); 6) дальше показываем маркер «Иди сюда» в кадре, и следим за управлением (индикатор команд в левом нижнем углу).
break; } } } */ // Послать массив нажатых кнопок в COM порт CP_WriteCOMPort(mhCOMPort, gpKeyArray->Key, sizeof(TKeyArray));
mpIndicator->SetKeyArray(gpKeyArray); }
====- 22.10.2009 -=== При записи демонстрационного ролика, видео кодируется кодеком "XviD". Если этот кодек у вас не установлен, скачать пакет с кодаками можно здесь:
Навигация из пункта «А» в пункт «Б» по визуальным ориентирам
Для навигации сначала указываются визуальные ориентиры «ворота», которые показывают, в каком направлении должен двигаться робот. Перед началом заезда, пользователю необходимо вдоль всей трассы расставить ворота, по которым робот будет продвигаться к конечному пункту назначения - цели. В качестве цели может быть использован любой образ, на который ранее был обучен «Навигатор».
Что бы расставить «ворота» выберите из главного меню: «Распознавание/Режим установки ворот». Далее управляя роботом клавишами «вперёд», «назад», «влево», «вправо» и нажимая кнопку «Поставить ворота» расставляем визуальные ориентиры для продвижения робота. Для создания цели, необходимо выполнить обучение (пункт меню «Распознавание/Изучить объект») хотя бы на один объект, которые и будет конечной целью навигации.
====- 05.01.2010 -===
Навигация по контрольным точкам (checkpoints)
Итак, что показано в ролике Устанавливаем робота в контрольной точке №2 и даём указание следовать в точку №1. Робот начинает осматриваться по сторонам, и когда видит ворота, которые соответствуют маршруту №1, начинает двигаться по коридору из «ворот» до контрольной точки №1. В контрольной точке №1 робот останавливается. Тогда роботу даётся указание следовать в контрольную точку №2, робот опять начинает осматриваться, находит ворота соответствующие маршруту №2 и возвращается обратно в точку №2.
Процедура обучения на маршрут Для обучения необходимо в режиме установки ворот выбрать маршрут, на который будет обучаться робот и медленно (местами катаясь назад - вперёд), управляя роботом вручную, показать маршрут (ворота устанавливаются автоматически). В конце маршрута необходимо нажать на кнопку «контрольная точка» и робот, вращаясь несколько раз на одном месте, пометит текущее местоположение как контрольную точку.
Похоже, эти ошибки связаны с особенностями компилятора «MS Visual C++ 2008 Express Edition». Давайте я попробую скачать эту версию компилятора и подправить под неё исходники. Дам знать, когда будет готово.
Ну или второй вариант: попробуйте внести изменения самостоятельно, а потом послать мне почтой модифицированные файлы (адрес почты указан в исходниках).
Компилятор у 2008х студий одинаковый, Экспресс эдишн отличается лишь набором заголовков - там не полный WinApi (без ATL и MFC). Других отличий нет.
А в приложении «RobotController» интерфейс на MFC.
Так что я попробую «RobotController» под wxWidgets переделать. Ну, или пока можно попробовать другой компилятор (в котором MFC библиотеки присутствуют).
Заголовок сообщения: Re: Использование Navigator Tool Kit
Добавлено: 30 сен 2009, 15:30
Зарегистрирован: 06 окт 2004, 18:01 Сообщения: 24218 Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов
Лучше переделать, думаю, т.к. я не один, а ставить хитрые компиляторы или тягать ворованные - только ради того, чтобы не переделывать интерфейс - ну его нафиг
_________________ Проект [[Open Robotics]] - Универсальные модули для построения роботов
Заголовок сообщения: Re: Использование Navigator Tool Kit
Добавлено: 01 окт 2009, 20:35
Зарегистрирован: 06 окт 2004, 18:01 Сообщения: 24218 Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов
Тем, что для меня это далеко не классика
Добавлено спустя 51 минуту 9 секунд: Хм, ТВ-тюнер на нашел что-ли... ?
Цитата:
"Recognition.exe": Загружено: "C:\Robot\Navigator\bin\Recognition.exe", Двоичный код не был построен с отладочной информацией. "Recognition.exe": Загружено "C:\WINDOWS\system32\ntdll.dll" "Recognition.exe": Загружено "C:\WINDOWS\system32\kernel32.dll" "Recognition.exe": Загружено "C:\WINDOWS\WinSxS\x86_Microsoft.Windows.Common-Controls_6595b64144ccf1df_6.0.2600.2180_x-ww_a84f1ff9\comctl32.dll" "Recognition.exe": Загружено "C:\WINDOWS\system32\msvcrt.dll" "Recognition.exe": Загружено "C:\WINDOWS\system32\advapi32.dll" "Recognition.exe": Загружено "C:\WINDOWS\system32\rpcrt4.dll" "Recognition.exe": Загружено "C:\WINDOWS\system32\secur32.dll" "Recognition.exe": Загружено "C:\WINDOWS\system32\gdi32.dll" "Recognition.exe": Загружено "C:\WINDOWS\system32\user32.dll" "Recognition.exe": Загружено "C:\WINDOWS\system32\shlwapi.dll" "Recognition.exe": Загружено "C:\Robot\Navigator\bin\cxcore100.dll" "Recognition.exe": Загружено: "C:\Robot\Navigator\bin\libguide40.dll", Двоичный код не был построен с отладочной информацией. "Recognition.exe": Загружено "C:\Robot\Navigator\bin\cv100.dll" "Recognition.exe": Загружено "C:\Robot\Navigator\bin\highgui100.dll" "Recognition.exe": Загружено "C:\WINDOWS\system32\avifil32.dll" "Recognition.exe": Загружено "C:\WINDOWS\system32\winmm.dll" "Recognition.exe": Загружено "C:\WINDOWS\system32\ole32.dll" "Recognition.exe": Загружено "C:\WINDOWS\system32\msacm32.dll" "Recognition.exe": Загружено "C:\WINDOWS\system32\msvfw32.dll" "Recognition.exe": Загружено "C:\WINDOWS\system32\shell32.dll" "Recognition.exe": Загружено "C:\WINDOWS\system32\avicap32.dll" "Recognition.exe": Загружено "C:\WINDOWS\system32\version.dll" "Recognition.exe": Загружено: "C:\Robot\Navigator\bin\cvcam100.dll", Двоичный код не был построен с отладочной информацией. "Recognition.exe": Загружено "C:\WINDOWS\system32\comdlg32.dll" "Recognition.exe": Загружено "C:\WINDOWS\system32\oleaut32.dll" "Recognition.exe": Загружено "C:\WINDOWS\system32\quartz.dll" "Recognition.exe": Загружено "C:\WINDOWS\system32\msvcp60.dll" "Recognition.exe": Загружено: "C:\Robot\Navigator\bin\Navigator.dll", Двоичный код не был построен с отладочной информацией. "Recognition.exe": Загружено "C:\WINDOWS\WinSxS\x86_Microsoft.VC90.CRT_1fc8b3b9a1e18e3b_9.0.30729.1_x-ww_6f74963e\msvcp90.dll" "Recognition.exe": Загружено "C:\WINDOWS\WinSxS\x86_Microsoft.VC90.CRT_1fc8b3b9a1e18e3b_9.0.30729.1_x-ww_6f74963e\msvcr90.dll" "Recognition.exe": Загружено "C:\Program Files\Agnitum\Outpost Security Suite Pro\wl_hook.dll" "Recognition.exe": Загружено "C:\WINDOWS\system32\MSCTF.dll" "Recognition.exe": Загружено "C:\WINDOWS\system32\uxtheme.dll" "Recognition.exe": Загружено "C:\WINDOWS\system32\clbcatq.dll" "Recognition.exe": Загружено "C:\WINDOWS\system32\comres.dll" "Recognition.exe": Загружено "C:\WINDOWS\system32\devenum.dll" "Recognition.exe": Загружено "C:\WINDOWS\system32\setupapi.dll" "Recognition.exe": Загружено "C:\WINDOWS\system32\wintrust.dll" "Recognition.exe": Загружено "C:\WINDOWS\system32\crypt32.dll" "Recognition.exe": Загружено "C:\WINDOWS\system32\msasn1.dll" "Recognition.exe": Загружено "C:\WINDOWS\system32\imagehlp.dll" "Recognition.exe": Загружено "C:\WINDOWS\system32\msdmo.dll" "Recognition.exe": Загружено "C:\WINDOWS\system32\qcap.dll" "Recognition.exe": Загружено "C:\WINDOWS\system32\ksproxy.ax" "Recognition.exe": Загружено "C:\WINDOWS\system32\ksuser.dll" "Recognition.exe": Загружено "C:\WINDOWS\system32\kswdmcap.ax" "Recognition.exe": Загружено "C:\WINDOWS\system32\mfc42.dll" "Recognition.exe": Загружено: "C:\WINDOWS\system32\mfc42loc.dll", Двоичный код не был построен с отладочной информацией. "Recognition.exe": Загружено: "C:\WINDOWS\system32\vpwdm.ax", Двоичный код не был построен с отладочной информацией. "Recognition.exe": Загружено "C:\WINDOWS\system32\ksxbar.ax" "Recognition.exe": Загружено: "C:\Program Files\K-Lite Codec Pack\filters\vsfilter.dll", Двоичный код не был построен с отладочной информацией. "Recognition.exe": Загружено "C:\WINDOWS\system32\winspool.drv" "Recognition.exe": Загружено "C:\WINDOWS\system32\wininet.dll" Первый этап обработки исключения в "0x7c812a6b" в "Recognition.exe": Исключение Microsoft C++: int по адресу 0x011aef68.. Поток 'Поток Win32' (0xa00) завершился с кодом 0 (0x0). "Recognition.exe": Загружено "C:\Program Files\Common Files\Nero\DSFilter\NeResize.ax" "Recognition.exe": Загружено "C:\WINDOWS\WinSxS\x86_Microsoft.VC80.CRT_1fc8b3b9a1e18e3b_8.0.50727.3053_x-ww_b80fa8ca\msvcp80.dll" "Recognition.exe": Загружено "C:\WINDOWS\WinSxS\x86_Microsoft.VC80.CRT_1fc8b3b9a1e18e3b_8.0.50727.3053_x-ww_b80fa8ca\msvcr80.dll" Первый этап обработки исключения в "0x7c812a6b" в "Recognition.exe": Исключение Microsoft C++: int по адресу 0x011afa94.. Поток 'Поток Win32' (0x9b0) завершился с кодом 0 (0x0). "Recognition.exe": Загружено "C:\WINDOWS\system32\kstvtune.ax" Первый этап обработки исключения в "0x7c812a6b" в "Recognition.exe": Исключение Microsoft C++: int по адресу 0x011afa94.. Поток 'Поток Win32' (0x454) завершился с кодом 0 (0x0). Первый этап обработки исключения в "0x7c812a6b" в "Recognition.exe": Исключение Microsoft C++: int по адресу 0x011afa94.. Поток 'Поток Win32' (0x104) завершился с кодом 0 (0x0). "Recognition.exe": Загружено: "C:\Program Files\K-Lite Codec Pack\ffdshow\ffdshow.ax", Двоичный код не был построен с отладочной информацией. "Recognition.exe": Загружено "C:\WINDOWS\system32\msvcr71.dll" "Recognition.exe": Загружено "C:\WINDOWS\system32\dinput.dll" TffdshowBase::Constructor TffdshowDecVideo::Constructor Join filter graph Removed from filter graph TffdshowDecVideo::Destructor "Recognition.exe": Загружено: "C:\Program Files\K-Lite Codec Pack\filters\xvid.ax", Двоичный код не был построен с отладочной информацией. "Recognition.exe": Загружено: "C:\WINDOWS\system32\xvidcore.dll", Двоичный код не был построен с отладочной информацией. "Recognition.exe": Выгружено: "C:\WINDOWS\system32\xvidcore.dll" "Recognition.exe": Загружено: "C:\Program Files\K-Lite Codec Pack\filters\divxdec.ax", Двоичный код не был построен с отладочной информацией. "Recognition.exe": Загружено "C:\WINDOWS\system32\olepro32.dll" "Recognition.exe": Загружено "C:\WINDOWS\system32\ddraw.dll" "Recognition.exe": Загружено "C:\WINDOWS\system32\dciman32.dll" "Recognition.exe": Выгружено: "C:\WINDOWS\system32\ddraw.dll" "Recognition.exe": Выгружено: "C:\WINDOWS\system32\dciman32.dll" "Recognition.exe": Загружено: "C:\Program Files\K-Lite Codec Pack\filters\ac3filter.ax", Двоичный код не был построен с отладочной информацией. TffdshowBase::Constructor TffdshowDecAudio::Constructor Join filter graph Removed from filter graph "Recognition.exe": Загружено: "C:\Program Files\K-Lite Codec Pack\filters\l3codecx.ax", Двоичный код не был построен с отладочной информацией. "Recognition.exe": Загружено "C:\WINDOWS\system32\qasf.dll" "Recognition.exe": Загружено "C:\WINDOWS\system32\wmadmod.dll" Первый этап обработки исключения в "0x7c812a6b" в "Recognition.exe": Исключение Microsoft C++: int по адресу 0x011afa94.. Поток 'Поток Win32' (0xcf0) завершился с кодом 0 (0x0). "Recognition.exe": Загружено "C:\WINDOWS\system32\wmvadvd.dll" "Recognition.exe": Загружено "C:\WINDOWS\system32\mp4sdmod.dll" "Recognition.exe": Загружено "C:\WINDOWS\system32\wmsdmod.dll" "Recognition.exe": Загружено "C:\WINDOWS\system32\wsock32.dll" "Recognition.exe": Загружено "C:\WINDOWS\system32\ws2_32.dll" "Recognition.exe": Загружено "C:\WINDOWS\system32\ws2help.dll" "Recognition.exe": Загружено "C:\WINDOWS\system32\wmvdmod.dll" "Recognition.exe": Загружено "C:\WINDOWS\system32\mp43dmod.dll" "Recognition.exe": Загружено "C:\WINDOWS\system32\mpg4dmod.dll" "Recognition.exe": Загружено "C:\WINDOWS\system32\msadds32.ax" "Recognition.exe": Загружено: "C:\WINDOWS\system32\acelpdec.ax", Двоичный код не был построен с отладочной информацией. "Recognition.exe": Загружено "C:\WINDOWS\system32\ddraw.dll" "Recognition.exe": Загружено "C:\WINDOWS\system32\dciman32.dll" "Recognition.exe": Выгружено: "C:\WINDOWS\system32\ddraw.dll" "Recognition.exe": Выгружено: "C:\WINDOWS\system32\dciman32.dll" "Recognition.exe": Загружено: "C:\Program Files\K-Lite Codec Pack\filters\vp6dec.ax", Двоичный код не был построен с отладочной информацией. "Recognition.exe": Загружено: "C:\Program Files\K-Lite Codec Pack\filters\CoreVorbis.ax", Двоичный код не был построен с отладочной информацией. CCoreVorbisDecoder::Clean"Recognition.exe": Загружено "C:\WINDOWS\system32\msscds32.ax" "Recognition.exe": Загружено "C:\WINDOWS\system32\wmvds32.ax" "Recognition.exe": Загружено "C:\WINDOWS\system32\wmv8ds32.ax" "Recognition.exe": Загружено "C:\WINDOWS\system32\mpg4ds32.ax" "Recognition.exe": Загружено "C:\WINDOWS\system32\qdv.dll" "Recognition.exe": Загружено: "C:\Program Files\K-Lite Codec Pack\filters\vp7dec.ax", Двоичный код не был построен с отладочной информацией. "Recognition.exe": Загружено: "C:\Program Files\VideoMate\ComproDTV 3\Filters\ComproADec.ax", Двоичный код не был построен с отладочной информацией. "Recognition.exe": Загружено "C:\WINDOWS\system32\oleacc.dll" "Recognition.exe": Загружено: "C:\Program Files\VideoMate\ComproDTV 3\Filters\CproDec.ax", Двоичный код не был построен с отладочной информацией. "Recognition.exe": Загружено: "C:\WINDOWS\system32\ir41_32.ax", Двоичный код не был построен с отладочной информацией. "Recognition.exe": Загружено: "C:\WINDOWS\system32\ir50_32.dll", Двоичный код не был построен с отладочной информацией. "Recognition.exe": Загружено "C:\WINDOWS\system32\wmspdmod.dll" "Recognition.exe": Загружено: "C:\Program Files\Common Files\Nero\DSFilter\NeVideo.ax", Двоичный код не был построен с отладочной информацией. Поток 'Поток Win32' (0x14c) завершился с кодом 0 (0x0). Поток 'Поток Win32' (0xdcc) завершился с кодом 0 (0x0). Поток 'Поток Win32' (0xc50) завершился с кодом 0 (0x0). Программа "[1304] Recognition.exe: Машинный код" завершилась с кодом 0 (0x0).
_________________ Проект [[Open Robotics]] - Универсальные модули для построения роботов
Первый этап обработки исключения в "0x7c812a6b" в "Recognition.exe": Исключение Microsoft C++: int по адресу 0x011aef68..
Попробуй скомпилировать проект «RecognitionApp» с отладочной информацией (установи «Select Active Configuration» в режим «Win32 Unicode Debug») и запусти под отладкой в среде разработки Visual Studio. Постарайся найти точку сбоя (там, где программа завершается аварийно).
Цитата:
"Recognition.exe": Загружено: "C:\Program Files\Common Files\Nero\DSFilter\NeVideo.ax", Двоичный код не был
Деинсталлируй «Nero», в его фильтры для «Direct Show» встроена защита от отладчика (он тебе отлаживаться не даст, выдаст предупреждение и завершит приложение).
=DeaD= писал(а):
Еще кстати можно описать как компилировать OpenCV (кстати, разве её надо?) и wxWidgets (с ней я чуток проплюхался )
Хорошо, займусь, сделаю описание в деталях.
По «OpenCV», для отладки тебе необходимо будет скомпилировать "<Install_Dir>OpenCV\_make\opencv.dsw".
Компилятор скажет, что это формат старой версии Visual Studio и предложит конвертировать в новый. Соглашайся, после этого всё компилируется без проблем.
Да, вот ещё, совсем забыл, нужно запустить "<Install_Dir>\Navigator\StartMe.bat" он зарегистрирует Direct Show filter: "proxytrans.ax". Я заметил, что у тебя его нету в списке загрузки.
Добавлено спустя 1 час 6 минут 41 секунду:
=DeaD= писал(а):
Компиляция успешна.
Вот ещё идея, попробуй распаковать Navigator_src.zip и запустить "<Install_Dir>\Navigator\StartMe.bat" без компиляции. Там Recognition.exe собран Microsoft Visual C++ 6.0 (папка vc6.prj). Возможно, по какой-то причине, у тебя после компиляции получился нерабочий код.
Заголовок сообщения: Re: Использование Navigator Tool Kit
Добавлено: 05 окт 2009, 22:42
Зарегистрирован: 06 окт 2004, 18:01 Сообщения: 24218 Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов
Через StartMe.bat нормально запустилось. Сейчас остальное проверю.
Добавлено спустя 21 минуту 46 секунд: Удалил Nero и всё замечательно заработало, реально он мешался. Теперь надо будет разобрать чего там понаписано в этом проекте, чтобы понять откуда начинать копать
_________________ Проект [[Open Robotics]] - Универсальные модули для построения роботов
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения