Який алгоритм я повинен реалізувати, щоб запрограмувати робота з прибирання кімнати?


25

Для цього питання припустимо, що такі речі невідомі:

  • Розмір і форма приміщення
  • Розташування робота
  • Наявність будь-яких перешкод

Припустимо також, що такі речі є постійними:

  • Розмір і форма приміщення
  • Кількість, форма та розташування всіх (якщо такі є) перешкод

І припустимо, що робот має такі властивості:

  • Він може рухатися вперед лише з кроком абсолютних одиниць і повертатися в градусах. Також операція, що рухається, повернеться істиною, якщо вона була успішною або помилковою, якщо її не вдалося перемістити через перешкоду
  • Досить необмежене джерело живлення (скажімо, це робот, що працює на сонячних батареях, розміщений на космічній станції, яка весь час стикається з сонцем без стелі)
  • Кожен рух і обертання здійснюються з абсолютною точністю кожен раз (не хвилюйтеся за недостовірні дані)

Нарешті, будь ласка, врахуйте наступні властивості середовища роботи:

  • Перебуваючи на космічній станції без стелі, кімната - це безпечна, але неприємно близька відстань до комет, що проходять, тому пил (і лід) постійно засмічують навколишнє середовище.

Мені було запропоновано набагато простішу версію цього питання (кімната - це прямокутник, і немає ніяких перешкод, як би ти перемістився над цим, гарантуючи, що ти зможеш хоч раз один раз перейти), і після того, як я почав цікавитись, як би ти підійшов до цього, якщо не зміг би не гарантую форму або наявність перешкод. Я почав розглядати це за алгоритмом Діккстри , але мені захоплено почути, як інші підходять до цього (або якщо на це добре прийнята відповідь? (Як це робить Roomba?)


такі теги, як + алгоритм та + теорія, допомогли б подібному питанню, але я ще не маю репутації додавати їх
Jason Sperske

напевно щось краще, ніж Roomba
Восьминіг,

Цікаво. У мене бобсвіт і він запрограмований просто ідеально momblogsociety.com/meet-newest-addition-family-bobsweep Я пропоную це всім. Привітання!

1
Це реклама? Якщо ні, то, можливо, ви захочете розмістити інформацію, а не просто посилання, пояснивши, як веде себе робот і чому це просто ідеально.
Шахбаз

Відповіді:


18

Наскільки мені відомо, ця проблема не була "вирішена".

Формально це проблема висвітлення в Інтернеті. Покриття, тому що ми повинні охоплювати кожну точку на підлозі, і в Інтернеті, тому що ми не маємо доступу в автономному режимі до карти. Якщо вас цікавлять останні результати, я пропоную вам знайти " роботизовані алгоритми висвітлення в Інтернеті ", можливо, в науковця google (є багато і багато чудових результатів). На додаток до дуже барвистої (повторної) публікації @ embedded.kyle я додам деякі деталі (я також спробую швидко знайти кілька простих результатів):

  • Dijkstra отримає вам шлях, але не обов’язково покриття. Наприклад, як ви вказуєте Dijkstra, що ви повинні відвідати кожну точку графіка, а не відвідувати одну точку якомога швидше? Ви можете прокласти всі пари найкоротшими шляхами, але які точки? У вас немає карти.

  • Такі алгоритми в Інтернеті часто називають алгоритмами «помилок», оскільки вони, як правило, виглядають як помилка, яка блукає по території, натрапляє на щось, потім трохи блукає навколо нього.

  • Без перешкод і прямокутної кімнати, і якщо припустити, що ви починаєте на кордоні, бустрофедон (шлях бика) є оптимальним. введіть тут опис зображення

Смішно, що фермери роблять це назавжди, правда? http://en.wikipedia.org/wiki/Boustrophedon . Це можна поширити на приміщення з перешкодами, знайшовши грубо прямокутну зону, яка не має перешкод. Хауї Шозет трохи працював над цим .

  • πг2г межі, правда?). Це корисно: тепер ви гарантовано знайдете найближчу межу та зможете простежити її.
  • Це величезна, захоплююча область. Вибачте, що не можу надати кращого резюме!

Найбільша проблема - у вас немає карти. Без карти ви обмежуєтесь простими діями, такими як периметр, який слід, і переміщення по контуру (на зразок зазначеної спіралі). Отже, існують деякі роботи, які фактично створюють карту під час чищення, розкладають накреслену область на форми, а потім покривають кожну фігуру, щоб забезпечити покриття. Дивіться: http://mintcleaner.com/


9

Roomba починається по спіралі, поки щось не вдариться, потім зробить периметр. Тоді він просто відскакує. Roomba - фактичний стандарт у побутових робототехнічних пилососах, я думаю, ви могли б назвати це "прийнятим рішенням". Але з особистого досвіду (у мене є два), безумовно, є можливість для вдосконалення.

З того, як працюють речі :

алгоритм

З інтерв'ю з Нансі Дюссо Сміт, віце-президент з маркетингових комунікацій в iRobot:

Коли він запускається, ви помітите спіральний візерунок, він буде виходити на більшу і більшу площу, поки не потрапить на об'єкт. Коли він знайде об’єкт, він буде проходити по краю цього об'єкта протягом певного періоду часу, і тоді він почне перехрестя, намагаючись визначити найбільшу відстань, яку він може пройти, не вдарившись про інший об’єкт, і це допомагає йому зрозуміти Визначте, наскільки великий простір, але якщо він пройде занадто довгий проміжок часу, не вдарившись про стіну, він знову почне спіраль, тому що він вважає, що він знаходиться у широкому відкритому просторі, і він постійно обчислює і з'ясовує це.

Це схоже на датчики бруду, що знаходяться внизу, коли один із цих датчиків спрацьовує, він змінює свою поведінку, щоб охопити цю область. Потім він вирушить у пошуках чергової брудної ділянки по прямому шляху. Те, як ці різні візерунки стикуються один з одним, коли вони йдуть, ми знаємо, що це найефективніший спосіб покриття кімнати.

Вибрані нами схеми та те, як алгоритм був спочатку розроблений, ґрунтувалися на алгоритмах, що базуються на поведінці, народжених з MIT, що вивчають тварин, і про те, як вони шукають ділянки для пошуку їжі. Коли ви дивитеся на те, як мурахи та бджоли виходять на вулицю, і вони шукають райони, ці види охоплення та з'ясування всього цього походить від цього дослідження. Очевидно, це не точно, я не кажу, що ми медоносні бджоли, але саме розуміння того, як шукати територію в природі, є основою розвитку наших адаптивних технологій.

Деякі фотографії довгих експозицій Roombas із світлодіодами на них ілюструють, як це працює на практиці:

введіть тут опис зображення введіть тут опис зображення введіть тут опис зображення


Це вміст копіювання та вставки з посилання?
Джош Вандер Хук

@Josh Відповідний матеріал для відповіді на питання було скопійовано із пов’язаних сайтів та розміщено у блок-котирування, щоб запобігти гниттю посилань.
embedded.kyle

7

Неато використовує організований підхід. Використовуючи SLAM та бампери, він спочатку відображає «поточну» кімнату, периметр, а потім застосовує алгоритм очищення максимально ефективно. Я ніколи не володів Roomba, але з огляду на те, що я читав про його алгоритм, я ніколи не перейшов би з neato.

Лазерний далекомір у неато часто каналізується для робототехніки, оскільки це економічно ефективний датчик для алгоритмів SLAM.

Якби я отримав ваше завдання, спочатку я знайшов би відповідну реалізацію SLAM , виходячи з обладнання, яке я мав.

Тоді я б застосував алгоритм планування руху ЧПУ ISLAND . Мій досвід полягає в тому, що вони, як правило, дуже ефективні при покритті довільної області з найменшою кількістю руху.


SLAM не зовсім підходить для цієї проблеми, оскільки це моделювання, в якому немає невизначеності в позиціонуванні. Що стосується справжнього робота, то ви абсолютно праві.
Ян

Я пропустив це (якщо його є). Насправді сказано, що невідоме: розташування робота.
Spiked3

Я думав, що розташування починається як невідоме, але як створена топологія приміщення, це може стати відомим.
Джейсон Сперський

Це одна з тих дивних академічних проблем, де спрощення дають дивні наслідки. Оскільки у вас немає ні карти, ні початкового місця розташування, ідеального позиціонування та жодних зовнішніх об'єктів, з якими слід координувати, абсолютна позиція не має значення. Ви довільно вирішите, що (0,0) - ваше початкове місце, потім складіть свою карту відносно цієї точки. Це не реально в реальному світі, але дає певну практику з алгоритмами покриття.
Ян

Ваша відповідь хороша з системної точки зору. Однак я вважаю, що це питання є кращим питанням теорії / алгоритмів.
Josh Vander Hook

6

Перше, що вам потрібно встановити - це мета робота - не зовсім зрозуміло з вашого питання. Вашому роботові необхідно виконати дві основні задачі: виявити форму зони, яка може бути очищена, а потім очистити її.

Але чи кількість бруду є постійною? Чи постійно додається бруд? Це ваша мета мінімізувати середній час, коли бруд залишається на підлозі, або середній час? Чи є мета зберегти підлогу однаково чистою? Або просто чистити один раз, як можна швидше? Чи існують закономірності накопичення бруду, які ви можете виміряти та використати на вашу користь для досягнення своєї мети?

Відповідь на ці запитання допоможе орієнтуватися, який алгоритм ви обрали. У випадку з роботом Roomba, можливо, немає сенсу дізнатися точне розташування кімнати, оскільки меблі (як стільці навколо столу), люди та інші перешкоди пересуваються дуже часто. Однак у вашому випадку може бути краще вивчити простір, щоб скласти повну карту (деяка комбінація візерунка газонокосарки з знаходженням ребер), а потім скористатися цією картою для обчислення найкоротшого шляху через простір (термін "покриття", і існує декілька способів зробити це, наприклад, алгоритм, що охоплює дерево ).

Ще одна річ, про яку вам потрібно буде потурбуватися, - це як дискретизувати простір, в якому ви перебуваєте. Оскільки ви можете рухатися в будь-якому напрямку - навіть з цілим ступенем суми та цілими одиницями відстані - ваші позиції X і Y можуть мати дробові значення. Вам потрібно буде вирішити, як зобразити перешкоди на цій карті, не зростаючи до нескінченної кількості точок даних.


Отже, оскільки я садистично ускладнюю собі питання інтерв'ю, я гадаю, що я міг би отримати ще трохи інформації. Мені подобаються бали, які ви
набираєте

2

Я не впевнений, чи все-таки вам це потрібно, але для тих, хто трапився в Google за цією ниткою, я створив одну просту версію алгоритму.

В основному, він намагається скласти карту місцевості, поки вона чистить, і використовує карту, щоб знайти найближчий невідомий вузол (частину кімнати). Якщо він не може знайти жодного, це означає, що приміщення прибирається (або робота, що не очищається, недоступна).

Це може бути повільніше, ніж інший алгоритм, але він може гарантувати охоплення незалежно від вихідного положення, напрямку та перешкод.

https://github.com/dungba88/cleaner_robot

ОНОВЛЕННЯ: Тут я створив демонстрацію і порівняв її з DFS, що відкликав назад. Отже, хоча мій алгоритм є O (N ^ 2), він значно оптимізований за кількістю ходів і поворотів.

http://jenova.dungba.org/cleaner/showdown


Цікаво, що він розбиває кімнату на 2D сітку, я все ще читаю ваш код, який підхід до пошуку шляхів ви використовуєте, щоб дістатися до ваших неочищених регіонів? Dijkstra?
Jason Sperske

Я використовував BFS, щоб знайти найближчу незачищену позицію.
Anh Dũng Bùi

-1

Дивлячись на більш просту проблему, яку вам поставили - прямокутна кімната, без перешкод і прибирайте кожну частину хоча б один раз.

Рішення - знайти куточок кімнати, і знайти куточок не буде великою проблемою. Як тільки це було досягнуто, тоді просто слідуйте по спіральній доріжці до центру кімнати.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.