Увидел – Победил. Как устроен захват предметов у робота Tod Bot

cfb689f0053918055cd9b91eb0e3b33d.jpgПривет Хабр! А вот и снова мы! На перекор множествам скептиков, которые нередко встречались на нашем пути, мы продолжаем развивать проект «Робот Tod Bot». Данный пост является продолжением знакомства с модулем MoveIt как инструментом управления манипулятором.Прежде всего хочется сказать, что нам удалось достигнуть значительных результатов в задаче захвата и перемещение предметов посредством манипулятора, а также в распознавании объектов, но обо всем по порядку.Немного теории о захвате в MoveItЗахват предмета можно представить в виде конвейера, состоящего из нескольких этапов, в котором рассчитывается готовая к исполнению полная траектория: начиная от первоначального положения манипулятора и до непосредственного поднятия объекта. Эти расчеты производятся на основе следующих данных: Планирования сцены, которое обеспечивает инструмент Planning Scene Monitor Идентификатор объекта для захвата Поза захвата кисти для данного объекта Последняя в свою очередь содержит следующие данные: Положение и ориентация «кисти» манипулятора Ожидаемая вероятность успешного захвата для этой позы Предварительный подход манипулятора, который определяется как направление вектора — минимальное/желаемое расстояние подхода Отступ манипулятора после захвата, который определяется как направление вектора — минимальное расстояние отступа Максимальное усилие захвата Прежде чем система запустит конвейер, необходимо сгенерировать возможные варианты позиции кисти для захвата нашего объекта. В нашем случае мы делаем предположение, что все захватываемые объекты имеют прямоугольную форму. Соответственно, при захвате в виде двух пальцев, у нас есть только две парных плоскости для надежного захвата предмета, не считая верхней и нижней, на которой стоит предмет. Согласно этому, позиции захвата генерируются в виде полусфер для одной пары плоскостей и другой.5e120841da16e5da5acab83c84e89ca3.jpgСреди полученного множества возможных поз мы должны отсеять те позы, которые не удовлетворяют форме нашего захвата/кисти, после чего передать оставшиеся в конвейер для дальнейшего планирования траектории достижения этих поз.В конвейере поднятия предмета, можно выделить три основных момента:

0c37f604e05cff19ba75b1a5825deebb.jpg1- Начальное положение; 2- Позиция предзахвата; 3 — Позиция захвата;

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

Планируется траектория от начального положения в точку предзахвата. Если провести аналогию с посадкой самолета на взлетную полосу, то это будет заход на посадку. Все объекты окружающей среды изначально включены в матрицу столкновений, об этом мы писали <тут>. Что бы наш захват увенчался успехом, проверка столкновений отключается. Затем открывается захват. Рассчитывается траектория подхода манипулятора к объекту от точки предзахвата к точке захвата. Закрывается захват. Захваченный объект по-прежнему представляется объектом столкновения столь лишь разницей, что теперь он является частью захвата и учитывается при планировании траектории. Затем генерируется траектория отступа из позиции захвата в точку предзахвата для отрыва предмета от поверхности и фиксации результата поднятия предмета. Построенный план, содержащий все необходимые траектории, теперь может быть выполнен.[embedded content]О том, что еще не сказали Входе наших экспериментов мы решили добавить нашей руке к первоначальным четырем степеням свободы еще две. На видео и фото они изображены красным цветом. Связано это с тем, что в случае использования захвата в виде вилки или антропоморфной кисти необходима хорошая гибкость манипулятора. Кстати, если использовать в качестве захвата вакуумную присоску, то все несколько упрощается и может быть достаточно 4 степеней свободы, т.к. для захвата используется только одна плоскость.На самом деле, возможность выполнения захвата во многом упирается в генерирование позиций захвата: чем больше и разнообразней будут генерироваться позиции, тем проще будет подобрать оптимальную. Хотя у всего этого есть и обратная сторона медали: чем больше позиций, тем больше времени потребуется на их обработку. В нашем случае мы генерировали сперва 10, 34 позиции, потом 68, а потом 136. Лучшим вариантом, который устроил нас — 34 позиции. При минимальном количестве позиций манипулятору достаточно сложно стать в сгенерированную позу, как правило манипулятор просто физически не может ее достигнуть: не в состоянии именно так вывернуться, слишком короткий, слишком длинный и т.д. При 34 присутствуют от 2 до 5 позиций удовлетворяющих всем условиям.Распознавание объектов Для этих целей мы решили использовать узел ROS tabletop_object_detector. Он был реализован учеными Университета Британской Колумбии и уже успел себя зарекомендовать. Хотя, на мой взгляд, выбор системы должен зависеть непосредственно от тех условий, в которых вы собираетесь применять распознавание и тех объектов, которые нужно идентифицировать. В нашем случае распознавание осуществляется по форме объектов, и если вам нужно различить банку огурцов от банки помидоров, то этот метод не подойдет. Для идентификации объектов используются данные камеры глубины, получаемые с Kinect.Прежде чем распознавать, сперва необходимо обучить систему — создать 3D модель искомого объекта.ce9983d0b109e429b311d5b0ecf43538.png3D модель пачки Pringles

После чего система сравнивает получаемые данные с имеющимися в базе моделями.Результат распознавания выглядит так:

79b1f057541c1667e835d7384c0dac46.jpg

Как и следовало ожидать, скорость поиска объектов на прямую зависит от мощности машины, на которой осуществляется обработка данных. Мы использовали ноутбук с intel core 2 duo 1.8ghz и 3Gb RAM. При этом на идентификацию объектов уходило порядка 1,5 — 2 секунд.Ну и естественно, умея выделять и идентифицировать объекты из окружающей среды, теперь хочется брать и перемещать их. Следующим шагом будет объединение задач распознавания и управления манипулятором на реальном роботе.

© Habrahabr.ru