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


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


    Немного теории о захвате в MoveIt


    Захват предмета можно представить в виде конвейера, состоящего из нескольких этапов, в котором рассчитывается готовая к исполнению полная траектория: начиная от первоначального положения манипулятора и до непосредственного поднятия объекта. Эти расчеты производятся на основе следующих данных:
    • Планирования сцены, которое обеспечивает инструмент Planning Scene Monitor
    • Идентификатор объекта для захвата
    • Поза захвата кисти для данного объекта

    Последняя в свою очередь содержит следующие данные:
    • Положение и ориентация «кисти» манипулятора
    • Ожидаемая вероятность успешного захвата для этой позы
    • Предварительный подход манипулятора, который определяется как направление вектора — минимальное/желаемое расстояние подхода
    • Отступ манипулятора после захвата, который определяется как направление вектора — минимальное расстояние отступа
    • Максимальное усилие захвата

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


    Среди полученного множества возможных поз мы должны отсеять те позы, которые не удовлетворяют форме нашего захвата/кисти, после чего передать оставшиеся в конвейер для дальнейшего планирования траектории достижения этих поз.
    В конвейере поднятия предмета, можно выделить три основных момента:


    1- Начальное положение; 2- Позиция предзахвата; 3 – Позиция захвата;

    Во время выполнения конвейера отдельные траектории будут добавлены в окончательный план поднятия предмета. Если захват успешно прошел все этапы, то только тогда план может быть выполнен. Алгоритм конвейера в общем виде выглядит так:
    1. Планируется траектория от начального положения в точку предзахвата. Если провести аналогию с посадкой самолета на взлетную полосу, то это будет заход на посадку.
    2. Все объекты окружающей среды изначально включены в матрицу столкновений, об этом мы писали тут. Что бы наш захват увенчался успехом, проверка столкновений отключается. Затем открывается захват.
    3. Рассчитывается траектория подхода манипулятора к объекту от точки предзахвата к точке захвата.
    4. Закрывается захват.
    5. Захваченный объект по-прежнему представляется объектом столкновения столь лишь разницей, что теперь он является частью захвата и учитывается при планировании траектории.
    6. Затем генерируется траектория отступа из позиции захвата в точку предзахвата для отрыва предмета от поверхности и фиксации результата поднятия предмета.

    Построенный план, содержащий все необходимые траектории, теперь может быть выполнен.


    О том, что еще не сказали


    Входе наших экспериментов мы решили добавить нашей руке к первоначальным четырем степеням свободы еще две. На видео и фото они изображены красным цветом. Связано это с тем, что в случае использования захвата в виде вилки или антропоморфной кисти необходима хорошая гибкость манипулятора. Кстати, если использовать в качестве захвата вакуумную присоску, то все несколько упрощается и может быть достаточно 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 секунд.
    Ну и естественно, умея выделять и идентифицировать объекты из окружающей среды, теперь хочется брать и перемещать их. Следующим шагом будет объединение задач распознавания и управления манипулятором на реальном роботе.
    • +20
    • 13.4k
    • 5
    TOD
    29.40
    Компания
    Share post

    Comments 5

      0
      Внушает.
        0
        Внушать будет когда на реальном роботе все это сделаем) осталось еще чуть-чуть…
        +1
        А почему пачка мятая?
          0
          Думаю погрешности сенсоров.
            +1
            Да. Это погрешности, но у нас были и более интересные варианты при создании 3d моделей.

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

          Only users with full accounts can post comments. Log in, please.