В поисках путей для робота, чтобы найти себя в доме - PullRequest
47 голосов
/ 29 июня 2011

Я взламываю робота пылесоса , чтобы управлять им с помощью микроконтроллера (Arduino).Я хочу сделать это более эффективным при уборке комнаты .На данный момент, он просто идет прямо и поворачивается, когда сталкивается с чем-то.

Но у меня возникают проблемы с поиском лучшего алгоритма или метода , чтобы использовать, чтобы знал его положение в комнате .Я ищу идею, которая стоит дешево (менее 100 долларов) и не является сложной (та, которая не требует докторской диссертации в области компьютерного зрения).При необходимости я могу добавить несколько отдельных маркеров в комнате.

Прямо сейчас мой робот имеет:

  • Одна веб-камера
  • Три датчика приближения (около 1 метра))
  • Компас (на данный момент не используется)
  • Wi-Fi
  • Его скорость может варьироваться, если батарея полностью заряжена или почти разряжена
  • Нетбук Eee PC встроен в робота

У вас есть идеи для этого?Существует ли какой-либо стандартный метод для решения подобных проблем?

Примечание: если этот вопрос относится к другому веб-сайту, переместите его, я не смог найти лучшего места, чем Переполнение стека.

Ответы [ 11 ]

32 голосов
/ 29 июня 2011

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

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

  1. Вы отслеживаете группу частиц , каждая из которых представляет одно возможное местоположение в окружающей среде.
  2. С каждой частицей также связана вероятность , которая говорит вам, насколько вы уверены, что частица действительно представляет ваше истинное местоположение в окружающей среде.
  3. Когда вы начинаете, все эти частицы могут быть равномерно распределены по вашей среде и иметь равные вероятности. Здесь робот серый, а частицы зеленые. initial particle filter
  4. Когда ваш робот движется, вы перемещаете каждую частицу . Вы также можете снизить вероятность каждой частицы, чтобы представить неопределенность в том, как двигатели фактически двигают робота. particles after movement
  5. Когда ваш робот наблюдает что-либо (например, ориентир, видимый с помощью веб-камеры, сигнал Wi-Fi и т. Д.), Вы можете увеличить вероятность того, что частицы согласуются с этим наблюдением . particles after observation
  6. Вы также можете периодически заменять частицы с наименьшей вероятностью новыми, основываясь на наблюдениях.
  7. Чтобы решить, где в действительности находится робот, вы можете использовать частицу с наибольшей вероятностью, кластер с наибольшей вероятностью, средневзвешенное значение всех частиц и т. Д.

Если немного поискать, вы найдете множество примеров: например, видео робота, использующего фильтрацию частиц, чтобы определить его местоположение в маленькой комнате .

Фильтрация частиц хороша, потому что она довольно проста для понимания. Это делает реализацию и настройку немного менее сложной. Существуют и другие аналогичные приемы (например, фильтры Калмана ), которые, возможно, более теоретически обоснованы, но могут быть сложнее разобраться.

8 голосов
/ 29 июня 2011

QR Code

Постер с QR-кодом в каждой комнате не только сделает интересное произведение современного искусства, но и сравнительно легко заметить с помощью камеры!

6 голосов
/ 29 июня 2011

Если вы можете поместить некоторые маркеры в комнате, использование камеры может быть вариантом. Если 2 известных маркера имеют угловое смещение (слева направо), то камера и маркеры лежат на окружности, радиус которой связан с измеренным углом между маркерами. Я не помню формулу сразу, но сегмент дуги (на этом круге) между маркерами будет в два раза больше угла, который вы видите. Если у вас есть маркеры на известной высоте, а камера находится под фиксированным углом наклона, вы можете вычислить расстояние до маркеров. Любой из этих методов сам по себе может зафиксировать ваше положение, если достаточно маркеров. Использование обоих поможет сделать это с меньшим количеством маркеров.

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

Как только вы сможете определить свою позицию, вы можете покрыть комнату любым рисунком, который вам нравится. Продолжайте использовать датчик удара, чтобы составить карту препятствий, и тогда вам нужно будет разработать способ сканирования, включающий препятствия.

Не уверен, что у вас есть математическое образование, но вот книга : http://books.google.com/books/about/Applied_optimal_estimation.html?id=KlFrn8lpPP0C

4 голосов
/ 30 июня 2011

Это не заменяет принятый ответ (что здорово, спасибо!), Но я мог бы рекомендовать получить Kinect и использовать его вместо веб-камеры, либо через недавно выпущенные официальные драйверы Microsoft, либо с помощью взломанных драйверов, если ваш EeePC неWindows 7 (предположительно, нет).

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


Несмотря на это, принятый ответ на самом деле не касается того, как выбрать ориентирыв поле зрения, и просто предполагает, что вы можете.Хотя драйверы Kinect уже могут включать функцию обнаружения функций (я не уверен), вы также можете использовать OpenCV для обнаружения функций в изображении.

3 голосов
/ 29 июня 2011

Предполагая, что вы не ищете обобщенного решения, вы можете знать форму комнаты, ее размеры, расположение потенциальных препятствий и т. Д. Когда бот существует, фабрика не имеет информации о его будущей операционной среде что заставляет его быть неэффективным с самого начала. Если это ваш случай, вы можете жестко закодировать эту информацию, а затем использовать базовые измерения (т. Е. Вращающиеся энкодеры на колесах + компас), чтобы точно определить его местоположение в комнате / доме. На мой взгляд, нет необходимости в триангуляции Wi-Fi или сумасшедших настройках сенсора. По крайней мере, для начала.

3 голосов
/ 29 июня 2011

Одним из решений будет использование стратегии, аналогичной «заливке» ( wikipedia ).Чтобы контроллер точно выполнял развертки, ему нужно ощущение расстояния.Вы можете откалибровать своего бота, используя датчики приближения: например, запустить двигатель на 1 сек = хх изменение близости.Имея эту информацию, вы можете переместить своего бота на точное расстояние и продолжить уборку комнаты, используя заливку.

1 голос
/ 12 января 2015

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

Это потребует некоторой обработки изображений, но для эффективной очистки пылесос, движущийся медленно, будет иметь достаточно времени для вычисления.

Удачи!

1 голос
/ 30 октября 2014

Используйте Ultra Sonic Sensor HC-SR04 или аналогичный.Как было сказано выше, ощущайте расстояние от робота с датчиками до стены и части комнаты с QR-кодом.

Когда вы находитесь рядом со стеной, поверните на 90 градусов и переместитесь на ширину вашего робота и снова поверните на 90 градусов (то есть на 90 градусов влево)поверните) и снова двигайте своего робота, я думаю, это поможет:)

1 голос
/ 22 мая 2013

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

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

1 голос
/ 01 июля 2011

Вы когда-нибудь рассматривали GPS?Каждая точка на земле имеет уникальные GPS-координаты - с разрешением от 1 до 3 метров, и с помощью дифференциального GPS вы можете перейти на расстояние менее 10 см - более подробная информация здесь:

http://en.wikipedia.org/wiki/Global_Positioning_System

А у Arduino есть много вариантов GPS-модулей:

http://www.arduino.cc/playground/Tutorials/GPS

После того, как вы собрали все ключевые точки координат дома, вы можете написать процедуру дляArduino для перемещения робота из точки в точку (как собрано выше) - при условии, что он будет делать все эти вещи по предотвращению препятствий.

Более подробную информацию можно найти здесь:

http://www.google.com/search?q=GPS+localization+robots&num=100

И внутри списка я нашел это - специально для вашего случая: Arduino + GPS + локализация:

http://www.youtube.com/watch?v=u7evnfTAVyM

...