roboforum.ru

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


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

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

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

Сообщение EDV » 27 май 2009, 09:44

И снова здравствуйте!

У меня возникло огромное желание прояснить вот какой вопрос:

Возможно ли что бы робот, использующий в качестве сенсорной информации только изображение с видеокамеры, был способен самостоятельно проехать из одной комнаты (пункт А) в другую (пункт Б)?

Вот мы и попытаемся ответить на этот вопрос в рамках этой темы.

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

Если кто-то не знает, как подключить радиоуправление моделью к компьютеру, тогда вот подробное описание:
Как из дешевого китайского танчика (радиоуправляемая модель) сделать робоплатформу для проекта "Автономная навигация робота"

Я подготовил первый вариант исходных текстов программы «Навигатор». Проект состоит из трех частей: драйвер управления роботом, приложение распознавания образов (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).

Исходные тексты «Навигатора» можно скачать здесь:
http://edv-detail.narod.ru/Navigator_src.zip

Тема по использованию библиотек навигации «Использование Navigator Tool Kit»

А вот что эти «исходные тексты» могут делать на практике:

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




Вот такие вот у нас с вами стартовые условия.

Дальнейшее развитие алгоритма навигации теперь зависит только от нас :)
Последний раз редактировалось EDV 27 окт 2009, 15:36, всего редактировалось 1 раз.
Аватара пользователя
EDV
 
Сообщения: 1016
Зарегистрирован: 06 июн 2007, 15:19
Откуда: Украина, Лисичанск
ФИО: Дмитрий Еремеев

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

Сообщение =DeaD= » 27 май 2009, 09:59

А что поменялось с прошлого раза? :)

Любая навигация из А в Б состоит из 2 важных компонент:

1. Global navigation - умение определить свои глобальные координаты на некоторой карте (возможно это не обычные декартовы координаты, а № локации в сети локаций или что-то типа того) + умение находить пути в этой карте из А в Б;

2. Obstacle avoidance - умение обнаруживать и объезжать препятствия на пути из пункта 1, а также заносить в пункт 1 информацию о закрытых проходах между локациями.

Если пункт 1 мне более менее понятен - определяем какие-то образы, составляем карту локаций по ним и перемещаемся, то с пунктом 2 пока вообще мутно, как будет определять препятствия?

Добавлено спустя 56 секунд:
PS: Повторю предложение - стандартизировать интерфейсы и сделать общие библиотеки для навигации.

Добавлено спустя 53 секунды:
В рамках моего предложения готов активно участвовать в разработке этих самых библиотек, имею тестовую платформу для обкатки технологий.
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

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

Сообщение EDV » 27 май 2009, 10:08

Можно попробовать обучать распознаватель на прямоугольную область в центральной части экрана, размером в половину меньшим от размера экрана. И потом если распознаваемое изображение в центре быстро начинает увеличиваться в размерах при движении робота, значит мы подъезжаем в плотную к препятствию.

Добавлено спустя 2 минуты 49 секунд:
=DeaD= писал(а):В рамках моего предложения готов активно участвовать в разработке этих самых библиотек, имею тестовую платформу для обкатки технологий.


Замечательно, давайте сотрудничать, я готов адоптировать библиотеку распознавания к любым удобным для вас интерфейсам. Предлагайте свой вариант интерфейса, и будем работать.
Аватара пользователя
EDV
 
Сообщения: 1016
Зарегистрирован: 06 июн 2007, 15:19
Откуда: Украина, Лисичанск
ФИО: Дмитрий Еремеев

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

Сообщение D1mcon » 27 май 2009, 10:30

Задумка интересна. Но вот что меня интересует.
Надо не только робота научит куда-то ехать да и что-то объезжать но и запоминать это. Ведь проще раз составив карту местности потом ее неоднократно использовать. А для этого необходимо определение его (робота) координат. Я считаю что система координат должна походить на Декартову, ее начало - первоначальное положение робота, остальное выщитывать относительного этого положения. Также было бы неплохо для определения координат использовать что-то типа компаса. Определение перемещения на основе энкодеров имеет склонность к большому накоплению ошибки. На мой взгляд этот компонент также важен, как и умение распознавать объекты. Предлагая это также пообсуждать

Кроме того, для упрощения задачи распознавания изображений - камеру нужно стабилизировать. Не всегда же кататься по линолеуму и паркету :) . Хотя камеру на робота еще не установил, могу и ошибиться в этом плане.

P.S. Где-то после 20.06.09 я постараюсь к вам присоединиться (если конечно возьмете :oops: ), опыт программирования, роботостроения есть. Камеру мне привезут на следующей недели.
Последний раз редактировалось D1mcon 27 май 2009, 10:32, всего редактировалось 1 раз.
Язык Ада - официально был признан министерством обороны США для создания ПО военной техники
Аватара пользователя
D1mcon
 
Сообщения: 700
Зарегистрирован: 08 фев 2009, 10:13
Откуда: Воротынск
прог. языки: C,C++,C#,Java
ФИО: Дмитрий

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

Сообщение =DeaD= » 27 май 2009, 10:33

Ок, тогда движемся дальше, есть 2 темы:
1. Избегание препятствий: тут надо понять что именно может делать распознавалка и с какой скоростью. Например, можно ли из неё сделать простейший Optical-Flow запросив распознать с предыдущего кадра фрагаменты на текущем кадре?

2. Унифицированный интерфейс распознавалки образов: Я себе представлю это так, есть эта самая распознавалка, которая имеет внутри себя банк данных в котором хранит освоенные образы и какую-то подготовленную информацию.
К ней есть несколько процедур:
1. Обучить систему новому образу (тупо передаём туда ID образа и картинку);
2. Распознать на картинке образы из тех, которые уже знаем (передаём картинку, возращаются координаты центров, опорные вектора и ID найденных образов).
3. Убрать образ из памяти (передаём ID который очистить);

Так? Есть какие-то хитрые процедуры обучения на серии картинок и т.п.?

Добавлено спустя 1 минуту 12 секунд:
D1mcon писал(а):Я считаю что система координат должна походить на Декартову, ее начало - первоначальное положение робота, остальное выщитывать относительного этого положения.

Это может и не присутствовать, человек в помещении мыслит в терминах локаций, а не абсолютных координат, точно также можно делать с роботом.

Добавлено спустя 59 секунд:
По глобальной карте еще вопрос есть - как будем делать? Картой локаций или полноценными координатами? Я бы конечно и тот и тот вариант попробовал сделать, а потом посмотрел, хотя по карте локаций у меня нету пока наработок...
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

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

Сообщение D1mcon » 27 май 2009, 10:41

Я считаю Obstacle avoidance лучше поручить не камере, а, например у-з сонару, не проще ли получится?
А камера пусть ищет только нужный объект. Тогда камера - намечает цель, сонар - прокладывает путь.
А чтобы не сложилось впечатления что камера мало чем будет занимать, пусть она ищет кошку, а робот гоняет ее по все квартире. :D

Добавлено спустя 1 минуту 12 секунд:
Повторюсь я за декартову систему координат.

Добавлено спустя 3 минуты 47 секунд:
2=DeaD=
Банк образов это интересно, но я вот о чем задумался. Например есть куб его мы запомним как КУБ, а если он чрезмерно освещен,то куб будет интепретирован как другой объект, возможно, что одному реальному объекту будут соответствовать 2 образа, причем один из них - ложный. Наверное, это еще одна проблема, потребующая решения.
Последний раз редактировалось D1mcon 27 май 2009, 10:43, всего редактировалось 1 раз.
Язык Ада - официально был признан министерством обороны США для создания ПО военной техники
Аватара пользователя
D1mcon
 
Сообщения: 700
Зарегистрирован: 08 фев 2009, 10:13
Откуда: Воротынск
прог. языки: C,C++,C#,Java
ФИО: Дмитрий

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

Сообщение =DeaD= » 27 май 2009, 10:42

D1mcon писал(а):Я считаю Obstacle avoidance лучше поручить не камере, а, например у-з сонару, не проще ли получится?

Проще, но EDV то хочет чисто на камере :) не вижу причин не попробовать, хотя-бы с целью убедиться, что это не будет работать пока, как минимум без стереозрения :)
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

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

Сообщение D1mcon » 27 май 2009, 10:46

Давайте попробуем.
Блин руки чешутся начать этим заниматься. Вот только еще и диплом надо оформить :( . Поэтому займусь вплотную этими проблемами позже. :cry:
Вот на эту платформу буду ставить камеру.
Вложения
IMG_0256.JPG
IMG_0256.JPG (110.97 КиБ) Просмотров: 39027
Язык Ада - официально был признан министерством обороны США для создания ПО военной техники
Аватара пользователя
D1mcon
 
Сообщения: 700
Зарегистрирован: 08 фев 2009, 10:13
Откуда: Воротынск
прог. языки: C,C++,C#,Java
ФИО: Дмитрий

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

Сообщение EDV » 27 май 2009, 10:52

=DeaD= писал(а):... тут надо понять что именно может делать распознавалка и с какой скоростью. Например, можно ли из неё сделать простейший Optical-Flow запросив распознать с предыдущего кадра фрагаменты на текущем кадре?


Да, такой опыт уже есть:
Navigator\include\OpticalFlow.h

Пункты меню распознователя:
Главное меню\
Распознавание\Показать векторное поле движения Ctrl-F
Распознавание\Показать движение в цвете Ctrl-C


Обучить систему новому образу (тупо передаём туда ID образа и картинку)

Модуль: AssociativeMemory.h
Код: Выделить всёРазвернуть
// Writing to associative memory cell
void Write(CvRect aInterestArea, long* apData, bool aDeepLearning = true);



Распознать на картинке образы из тех, которые уже знаем (передаём картинку, возращаются координаты центров, опорные вектора и ID найденных образов)

Код: Выделить всёРазвернуть
// Object recognition
void ObjectRecognition(CvRcgAMFunc32S RcgAMFunc, void *args = NULL);
void ObjectTracking(CvRcgAMFunc32S RcgAMFunc, void *args = NULL,
              bool   aTrainingDuringTracking = true,
              double aSimilarityUpTrd = cAM_SimilarityUpTrd,
         double aSimilarityDnTrd = cAM_SimilarityDnTrd);


Убрать образ из памяти (передаём ID который очистить)

Такого пока что нет, но есть возможность создания нескольких ассоциативных деревьев:
Код: Выделить всёРазвернуть
//        aTreeTotal  - total number of independent associative trees.
//        aClustering - flag of using cluster tree
void Create(CvSize aKeyImgSize, short aLevelMax = 0,
            int aTreeTotal = 1, bool aClustering = true);

// Set the active associative tree
void SetActiveTree(int aTreeIdx);
// Removing all data out from associative tree
void ClearTreeData();


Извиняюсь за комментарии на английском, пока ещё руки не дошли их там попереводить на русский (в будущем переведу).
Аватара пользователя
EDV
 
Сообщения: 1016
Зарегистрирован: 06 июн 2007, 15:19
Откуда: Украина, Лисичанск
ФИО: Дмитрий Еремеев

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

Сообщение D1mcon » 27 май 2009, 10:59

Комментарии можно и не переводить и так понятно. А этот код собственная разработка или какая-то библиотека?

Добавлено спустя 1 минуту 59 секунд:
Также предлагаю определится с языком программирования. Я за C# ,но и С++ меня вполне устроит, а Вы?
Язык Ада - официально был признан министерством обороны США для создания ПО военной техники
Аватара пользователя
D1mcon
 
Сообщения: 700
Зарегистрирован: 08 фев 2009, 10:13
Откуда: Воротынск
прог. языки: C,C++,C#,Java
ФИО: Дмитрий

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

Сообщение =DeaD= » 27 май 2009, 11:09

2EDV: В функции распознавания образов не понял где картинка и какой формат распознанных образов? И еще - надо наверное функцию распознавания подмножества образов или конкретного образа.

В функции трекинга - обучение во время трекинга понятно, хотя не ясно, какая там защита от всяких шалостей, например, если плавно вращать объект перед роботом - чего у него в обучении отложится?

Добавлено спустя 2 минуты 52 секунды:
Про несколько ассоциативных деревьев не понял, это твоя специальная разработка для ведения набора образов - это то ясно, а вот зачем их может быть нужно несколько? Чтобы распознавало только из набора образов этого дерева? А насколько менее эффективно будет распознавать 100 образов, если их разбить на 5 деревьев по 20 образов, чем если все 100 в одном дереве?

Добавлено спустя 51 секунду:
По языку - я за C++, чтобы на линух можно было адаптировать.

Добавлено спустя 48 секунд:
2EDV: Еще не понял что такое double aSimilarityUpTrd = cAM_SimilarityUpTrd, double aSimilarityDnTrd = cAM_SimilarityDnTrd :(
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

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

Сообщение EDV » 27 май 2009, 11:23

D1mcon писал(а):Комментарии можно и не переводить и так понятно. А этот код собственная разработка или какая-то библиотека?

Associative Video Memory (AVM) – это моя собственная разработка, которой я занимаюсь уже второй год подряд. Бросать разработку пока не собираюсь, потому что не могу себе доказать, что развитие идеи AVM дальше уже не возможно. Алгоритм AVM похож на живой организм, и порой мне кажется, что не я его разрабатываю, а что но развивается сам по себе (эволюция), а я всего лишь среда для развития (многие решения, которые потом легли в его основу, я нашел абсолютно случайно).
Также предлагаю определится с языком программирования. Я за C# ,но и С++ меня вполне устроит, а Вы?

Библиотека написана на C++. К сожалению, у меня нету опыта работы с C# (но в будущем можно попробовать).
=DeaD= писал(а):В функции распознавания образов не понял где картинка и какой формат распознанных образов?

Код: Выделить всёРазвернуть
// Set an image for processing
void SetImage(const void* apSrcImg, const void* apObjMaskImg = NULL);


Результаты распознавания возвращаются в call-back функции:
Код: Выделить всёРазвернуть
// Parameters structure for recognition function
struct CvAM_Parameters {
   CvRect   ObjRect;            // Rectangle where object found
   double   Similarity;         // Similarity of the interest area to an object (0 ... 1)
   long     TotalABases;        // Total number of associative bases
   void**   ppUserTrackingInfo; // Pointer to the tracking info data written by user
};

// Definition of object recognition function
typedef void (*TYPE_RcgAMFunc32S)(CvAM_State aState, long* apData, CvAM_Parameters* apParam, void* args);
typedef TYPE_RcgAMFunc32S CvRcgAMFunc32S;

И еще - надо наверное функцию распознавания подмножества образов или конкретного образа.

Ну это наверное несколько ассоциативных деревьев (SetActiveTree)
В функции трекинга - обучение во время трекинга понятно, хотя не ясно, какая там защита от всяких шалостей, например, если плавно вращать объект перед роботом - чего у него в обучении отложится?

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

Добавлено спустя 4 минуты 45 секунд:
=DeaD= писал(а): Еще не понял что такое double aSimilarityUpTrd = cAM_SimilarityUpTrd, double aSimilarityDnTrd = cAM_SimilarityDnTrd :(

Это та самая защита от «лишнего» при дополнительном обучении.
cAM_SimilarityUpTrd – верхний порог подобия (объект распознаётся но плохо);
cAM_SimilarityDnTrd – нижний порог подобия (объект не распознаётся, но сходство всё ещё допустимое для дополнительного обучения).
Последний раз редактировалось EDV 27 май 2009, 11:30, всего редактировалось 1 раз.
Аватара пользователя
EDV
 
Сообщения: 1016
Зарегистрирован: 06 июн 2007, 15:19
Откуда: Украина, Лисичанск
ФИО: Дмитрий Еремеев

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

Сообщение =DeaD= » 27 май 2009, 11:30

Порог подобия отмеряется от последнего обученного или от первого обученного образа?

Добавлено спустя 41 секунду:
И какой формат данных сейчас возвращает функция распознавания?
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

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

Сообщение Vorral » 27 май 2009, 11:38

Очень интересно как система распознавания отнесётся, например к монотонно чёрной кружке? На которой будут ходить разного рода блики? Т.е. фрагменты одного объекта будут делится в разных пропорциях(разные блики), но всё же в сумме всегда будет получаться форма кружки?
Vorral
 
Сообщения: 873
Зарегистрирован: 11 сен 2008, 17:18
Откуда: Москва
прог. языки: Delphi
ФИО: Владислав

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

Сообщение =DeaD= » 27 май 2009, 11:39

2Vorral: А может подробности работы системы распознавания в другой ветке? :)

Добавлено спустя 20 секунд:
2EDV: Дай линк людям, куда такие вопросы задавать, плиз?
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

След.

Вернуться в Золотой фонд

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4