roboforum.ru

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

Автономная навигация робота

Правила форума
В этом форуме новые темы не создаются, однако обсуждение допустимо.
Ответить

Re: Автономная навигация робота

EDV » 28 май 2009, 17:39

Для тех, кому хочется померяться алгоритмами распознавания:
AVM ROC curves, построены по первым 64-рём объектам из "Amsterdam Library of Object Images"(красный график).

Кто не знает, что такое ROC curves, может поглядеть здесь:
Логистическая регрессия и ROC-анализ - математический аппарат

На рисунке изображон:
Special kind of ROC graph called Decision Error Tradeoff (DET) graph:
On X axis we have False Acceptance Rate (FAR) or False Positive Rate (FPR)
On Y axis we have False Recjection Rate (FRR) or False Negative Rate (FNR)

По оси X (в процентах) не должно было сработать, но сработало;
по оси Y должно было сработать (распознать) но не сработало.

Ложных срабатываний меньше 0.1 % (призраков), так что явный прогресс.

На графике видно, что версия AVM v0.5 гораздо лучше работает чем версия 0.4 (красный график заметно ближе к началу координат).

Только убедительная просьба, пожалуйста, по всем вопросам, касающимся функционирования алгоритма AVM, писать в тему: Recognition (Yeremeyev method)

2=DeaD=:
Задача навигации достаточно сложна, и похоже нам предстоит долгий путь к её решению. Давайте не будем спешить. Я тоже выступаю за стандартизацию интерфейсов, что бы подготовить какую-то базу, от которой можно будет двигаться дальше.

Ну вот, пожалуй, с этого и начнем. Я попробую реализовать предлагаемый интерфейс, если у меня появятся вопросы, напишу.

Re: Автономная навигация робота

=DeaD= » 28 май 2009, 18:12

Ок, смотри как тебе удобней двигаться, я то в это время "курю", так что если кто еще конструктивно присоединится к беседе - можно было бы подготовить уже следующие ходы, для того чтобы когда ты закончишь - сразу их применить :)

Re: Автономная навигация робота

EDV » 29 май 2009, 08:46

Первый вариант интерфейса PatternRecognition.h готов, посмотреть можно здесь:
http://edv-detail.narod.ru/Navigator_Tool_Kit.zip

2=DeaD=:
Хочу уточнить значение полей структуры iPatternFound. Что они означают?
Код: Выделить всёРазвернуть
int vect1_x,  vect1_y;  // Первый опорный вектор образа (если не обрабатываем повороты, тогда это vect1_x>0, vect1_y=0);
int vect2_x,  vect2_y;  // Второй опорный вектор образа (если не обрабатываем повороты, тогда это vect2_x=0, vect2_y>0);


Антон, постарайся пожалуйста, сегодня до конца дня сделать набросок остальной части интерфейса в деталях (типы данных, название идентификаторов, подробные комментарии), что бы мне было чем заняться на выходных. Что бы ни засорять тему, можно послать документ с эскизом интерфейса почтой, мой e-mail указан во всех файлах проекта (*.h; *.cpp файлы).

Re: Автономная навигация робота

=DeaD= » 29 май 2009, 11:57

EDV писал(а):Хочу уточнить значение полей структуры iPatternFound. Что они означают?
Код: Выделить всёРазвернуть
int vect1_x,  vect1_y;  // Первый опорный вектор образа (если не обрабатываем повороты, тогда это vect1_x>0, vect1_y=0);
int vect2_x,  vect2_y;  // Второй опорный вектор образа (если не обрабатываем повороты, тогда это vect2_x=0, vect2_y>0);

Если система распознавания образов отрабатывала бы повороты - эти 2 вектора задавали бы положение распознанного объекта. А сейчас они просто задают длину\высоту распознанного образа.

EDV писал(а):Антон, постарайся пожалуйста, сегодня до конца дня сделать набросок остальной части интерфейса в деталях (типы данных, название идентификаторов, подробные комментарии), что бы мне было чем заняться на выходных. Что бы ни засорять тему, можно послать документ с эскизом интерфейса почтой, мой e-mail указан во всех файлах проекта (*.h; *.cpp файлы).

Погоди :) остальной части - это какой? Их же полно. Надо сначала определиться с алгоритмами остальной части, а потом под них структуру писать, я не на 100% уверен в предложенных мной алгоритмах и по возможности бы их сначала перетер, или ты не готов в этом участвовать или предложенные мной алгоритмы кажутся очевидно верными?

Re: Автономная навигация робота

EDV » 29 май 2009, 12:14

=DeaD=:
> я не на 100% уверен в предложенных мной алгоритмах и по возможности бы их сначала перетер, или ты не готов
> в этом участвовать или предложенные мной алгоритмы кажутся очевидно верными?

Напротив, готов участвовать, и полагаю, что эти исследования могут занять не один месяц (и даже не один год), но надо же с чего-то начинать? На данном этапе важна генерация идей (в данном случае по интерфейсам «Набор инструментов навигатора») и у тебя получается достаточно эффективно (на мой взгляд) эти идеи генерировать. Естественно этот интерфейс будет претерпевать ещё массу изменений, но вначале нужно наработать хотя бы грубый набросок функций, которые понадобятся нам в будущем (по данному проекту).

Re: Автономная навигация робота

=DeaD= » 29 май 2009, 12:17

Всё понял! А конец дня у тебя во сколько по Москве? А то я планировал сегодня много чего по работе сделать, как бы всё успеть... :roll:

Re: Автономная навигация робота

EDV » 29 май 2009, 12:21

Ну, если по московскому то в 18:12. Только сегодня пятница, и у нас сокращённый день, так что закончим в 17:12.

Re: Автономная навигация робота

=DeaD= » 29 май 2009, 13:27

Дальше надо процедуры выбора маяков. Я предлагаю следующую схему:

1. Передаём в специальную процедуру подряд N>2 снимков с экрана и количество маяков, которые нам хотелось бы получить.
2. Она возвращает выбранные ей маяки.

На первом этапе проверка по снимкам должна быть только в том, что маяки есть на всех снимках и не развалились. В дальнейшем можно сделать проверку, что маяки хотя-бы в это время самостоятельно не перемещались. Это можно будет сделать по отличию траекторий их движений относительно робота отличных от траекторий других маяков.

Информация о найденных маяках:
iBeaconInfo:
  • int base_x,base_y;
  • int vect1_x, vect1_y; // Первый опорный вектор образа (если не обрабатываем повороты, тогда это vect1_x>0, vect1_y=0);
  • int vect2_x, vect2_y; // Второй опорный вектор образа (если не обрабатываем повороты, тогда это vect2_x=0, vect2_y>0);
  • iBeaconInfo* nextBeacon;

Формат вызова функции поиска маяков:
iBeaconInfo* selectBeaconsFromEnviroment(int imagesCount,IplImage** images);

Добавлено спустя 9 минут 10 секунд:
Методы класса Optical-Flow (внутри содержить информацию о предыдущем изображении, или может быть не одном):

Конструктор с параметрами (int sizeReduction, int width, int height) - во сколько раз меньше исходного изображения вернуть векторное поле, размеры исходных изображений, инициализация структур данных.

void reset(); - сбросим класс, следующее изображение не выдаст векторное поле.

void processOpticalFlow(IplImage* nextImage);

VectorField* getLastVectorField();

Вот как-то примерно так.

Добавлено спустя 25 секунд:
Этого пока хватит? :)

Re: Автономная навигация робота

EDV » 29 май 2009, 13:43

Да, пока хватит, пожалуй. Постараюсь на выходных обмозговать этот вопрос.

Re: Автономная навигация робота

=DeaD= » 29 май 2009, 13:51

Еще я пока не влезал в то какие структуры в OpenCV для векторного поля используются, надо посмотреть как там стереозрение или Optical-Flow сделано и оттуда украсть идеи :) так что моё VectorField надо будет заменить на эти структуры.

Добавлено спустя 5 минут 27 секунд:
Поправка - может иметь смысл информация о найденных маяках по их нахождению на каждом из кадров, так что окончательная структура такая:

iBeaconInfo:
* int* base_x,base_y;
* int* vect1_x, vect1_y; // Первый опорный вектор образа (если не обрабатываем повороты, тогда это vect1_x>0, vect1_y=0);
* int* vect2_x, vect2_y; // Второй опорный вектор образа (если не обрабатываем повороты, тогда это vect2_x=0, vect2_y>0);
* iBeaconInfo* nextBeacon;

Т.е. все эти величины - массивы длиной N, в них должны быть координаты маяка на каждом из N кадров. Чтобы потом второй раз не искать и сразу локальные координаты маяков определить.

Re: Автономная навигация робота

EDV » 29 май 2009, 13:53

На моём щиту уже два алгоритма «Optical-Flow» и оба они выдают карту скоростей по каждому пикселю изображения (тип данных CV_32FC1), аналогичную алгоритмам OpenCV. Правда, до совершенства этим алгоритмам далеко...

Re: Автономная навигация робота

=DeaD= » 29 май 2009, 14:11

Совершенство нам и не нужно :) нам бы не шашечки, нам бы доехать до точки Б с вероятностью больше 95-99% :)))

Re: Автономная навигация робота

EDV » 05 июн 2009, 10:10

А пока я пытаюсь улучшить характеристики алгоритма AVM (что позволило бы распознавать естественные маяки в больших количествах), хочу продемонстрировать вот это видео:



Указываем роботу изображение, к которому нужно двигаться, и таким вот интересным способом управляем роботом.

Re: Автономная навигация робота

=DeaD= » 05 июн 2009, 10:15

А что так долго учится?

Re: Автономная навигация робота

EDV » 05 июн 2009, 10:25

Ну, так у него в программе прописано (50 входных изображений – пауза, и 100 изображений - обучение), если кому интересно, могут свои значения подставить и перекомпилировать (http://edv-detail.narod.ru/Navigator_src.zip).

Файл: RecognitionApp.cpp
Код: Выделить всёРазвернуть
#define cPauseLoopMax    50  // Количество циклов паузы перед обучением
#define cTrainingLoopMax 100 // Количество циклов обучения


Rambler\'s Top100 Mail.ru counter