Побачив - Переміг. Як влаштований захоплення предметів у робота Tod Bot

    
Привіт Хабр! А ось і знову ми! На перекір множинам скептиків, які нерідко зустрічалися на нашому шляху, ми продовжуємо розвивати проект «Робот Tod Bot». Даний пост є продовженням знайомства з модулем MoveIt як інструментом управління маніпулятором.
Насамперед хочеться сказати, що нам вдалося досягти значних результатів в задачі захоплення і переміщення предметів за допомогою маніпулятора, а також в розпізнаванні об'єктів, але про все по порядку.
 
 
 

Трохи теорії про захоплення в MoveIt

Захоплення предмета можна представити у вигляді конвеєра, що складається з декількох етапів, в якому розраховується готова до виконання повна траєкторія: починаючи від первинного положення маніпулятора і до безпосереднього підняття об'єкта. Ці розрахунки проводяться на основі наступних даних:
 
     
  • Планування сцени, яке забезпечує інструмент Planning Scene Monitor
  •  
  • Ідентифікатор об'єкта для захоплення
  •  
  • Поза захоплення кисті для даного об'єкта
  •  
Остання в свою чергу містить наступні дані:
 
     
  • Положення і орієнтація «кисті» маніпулятора
  •  
  • Очікувана ймовірність успішного захоплення для цієї пози
  •  
  • Попередній підхід маніпулятора, який визначається як напрям вектора — мінімальне / бажане відстань підходу
  •  
  • Відступ маніпулятора після захоплення, який визначається як напрям вектора — мінімальна відстань відступу
  •  
  • Максимальне зусилля захоплення
  •  
Перш ніж система запустить конвеєр, необхідно згенерувати можливі варіанти позиції кисті для захоплення нашого об'єкта. У нашому випадку ми робимо припущення, що всі захоплювані об'єкти мають прямокутну форму. Відповідно, при захопленні у вигляді двох пальців, у нас є тільки дві парних площині для надійного захоплення предмета, не рахуючи верхньої і нижньої, на якій стоїть предмет. Згідно з цим, позиції захоплення генеруються у вигляді півсфер для однієї пари площин і інший.
 
 
Серед отриманого безлічі можливих поз ми повинні відсіяти ті пози, які не задовольняють формі нашого захоплення / кисті, після чого передати залишилися в конвеєр для подальшого планування траєкторії досягнення цих поз.
У конвеєрі підняття предмета, можна виділити три основні моменти:
 
 
1 — Початкове положення; 2 — Позиція предзахвата; 3 — Позиція захоплення;
 
Під час виконання конвеєра окремі траєкторії будуть додані в остаточний план підняття предмета. Якщо захоплення успішно пройшов всі етапи, то тільки тоді план може бути виконаний. Алгоритм конвеєра в загальному вигляді виглядає так:
 
     
  1. Планується траєкторія від початкового положення в точку предзахвата. Якщо провести аналогію з посадкою літака на злітну смугу, то це буде захід на посадку.
  2.  
  3. Всі об'єкти довкілля спочатку включені в матрицю зіткнень, про це ми писали тут . Що б наш захоплення увінчався успіхом, перевірка зіткнень відключається. Потім відкривається захоплення.
  4.  
  5. Розраховується траєкторія підходу маніпулятора до об'єкта від точки предзахвата до точки захоплення.
  6.  
  7. Закривається захоплення.
  8.  
  9. Захоплений об'єкт раніше представляється об'єктом зіткнення настільки лише різницею, що тепер він є частиною захоплення і враховується при плануванні траєкторії.
  10.  
  11. Потім генерується траєкторія відступу з позиції захоплення в точку предзахвата для відриву предмета від поверхні і фіксації результату підняття предмета.
  12.  
Побудований план, що містить всі необхідні траєкторії, тепер може бути виконаний.
  
 

Про те, що ще не сказали

Вході наших експериментів ми вирішили додати нашій руці до первинних чотирма ступенями свободи ще дві. На відео і фото вони зображені червоним кольором. Пов'язано це з тим, що у разі використання захоплення у вигляді вилки або антропоморфної кисті необхідна хороша гнучкість маніпулятора. До речі, якщо використовувати як захоплення вакуумну присоску, то все дещо спрощується і може бути досить 4 ступенів свободи, тому що для захоплення використовується тільки одна площина.
Насправді, можливість виконання захоплення в чому впирається в генерування позицій захоплення: чим більше і різноманітніше будуть генеруватися позиції, тим простіше буде підібрати оптимальну. Хоча у всього цього є і зворотна сторона медалі: чим більше позицій, тим більше часу буде потрібно на їх обробку. У нашому випадку ми генерували спершу 10, 34 позиції, потім 68, а потім 136. Кращим варіантом, який влаштував нас — 34 позиції. При мінімальній кількості позицій маніпулятору досить складно стати в сгенерированную позу, як правило маніпулятор просто фізично не може її досягти: не в змозі саме так вивернутися, занадто короткий, занадто довгий і т.д. При 34 присутні від 2 до 5 позицій задовольняють всім умовам.
 
 

Розпізнавання об'єктів

Для цих цілей ми вирішили використати вузол ROS tabletop_object_detector. Він був реалізований вченими Університету Британської Колумбії і вже встиг себе зарекомендувати. Хоча, на мій погляд, вибір системи повинен залежати безпосередньо від тих умов, в яких ви збираєтеся застосовувати розпізнавання і тих об'єктів, які потрібно ідентифікувати. У нашому випадку розпізнавання здійснюється за формою об'єктів, і якщо вам потрібно розрізнити банку огірків від банки помідорів, то цей метод не підійде. Для ідентифікації об'єктів використовуються дані камери глибини, одержувані з Kinect.
Перш ніж розпізнавати, спершу необхідно навчити систему — створити 3D модель шуканого об'єкта.
 
 
3D модель пачки Pringles
 
Після чого система порівнює одержувані дані з наявними в базі моделями.
Результат розпізнавання виглядає так:
 
 
 
Як і слід було очікувати, швидкість пошуку об'єктів на пряму залежить від потужності машини, на якій здійснюється обробка даних. Ми використовували ноутбук з intel core 2 duo 1.8ghz і 3Gb RAM. При цьому на ідентифікацію об'єктів йшло близько 1,5 — 2 секунд.
Ну і природно, вміючи виділяти та ідентифікувати об'єкти з навколишнього середовища, тепер хочеться брати і переміщати їх. Наступним кроком буде об'єднання задач розпізнавання і управління маніпулятором на реальному роботе.
    
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.