И дали роботу руку, и научили пользоваться ею



    Всякий раз когда речь заходит о роботах, то люди представляют машину, умеющую делать что-то полезное в нашем материальном мире, а не только вести диалоги и перемещаться. Благодаря развитию нынешних технологий стало гораздо легче использовать манипуляторы в собственных проектах. В данной статье речь пойдет о таком замечательном ПО для управления манипулятором как MoveIt и некотором функционале, реализованном на его базе в нашем проекте сервисного робота Tod.

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

    А теперь к делу.
    Хотя добавить руку это относительно простая задача, намного сложнее, чтобы робот сделал что-нибудь полезное ею. При использовании наших собственных рук и кистей кажется простым достигнуть объекта в пространстве, даже когда тот ограничен близлежащими предметами (например, нужно дотянуться до масла за обеденным столом, не пролив бокал рядом с вашим локтем). Тем не менее, когда мы пытаемся запрограммировать робота на выполнение подобных действий, это оказывается сложной математической задачей. К счастью, Willow Garage опубликовала новое ПО планирования движения под названием MoveIt, которое направлено на решение задач управления устройствами со сложной кинематикой (например, манипуляторов), проверки столкновений, захвата и восприятия. Это программное обеспечение действительно заслуживает внимания. Для более глубокого понимания мы разбирали его в течение последних нескольких недель. Одна из приятных особенностей MoveIt в том, что ему без разницы чем управлять, будь то реальный или виртуальный робот. Так что мы можем сэкономить время, проверяя работу в симуляторе перед использованием в реальности.

    Что необходимо знать о MoveIt


    В первую очередь, для успешного использования Moveit ему необходимо знать с чем он будет работать. Для этого понадобится URDF модель робота или же просто манипулятора. На основе этой модели генерируется self-collision матрица. Она предназначена для поиска пар связей на роботе. Данные связи могут быть безопасно отключены от проверки столкновений, уменьшая время обработки планирования движения. Эти пары звеньев отключаются в нескольких случаях:
    • при постоянном нахождении в столкновении
    • при постоянном отсутствии столкновений
    • когда связи являются смежными друг с другом на кинематической цепи

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

    Что на входе


    Для того что бы «магия» MoveIt пришла в действие, ему необходимо, в первую очередь, знать текущее состояния манипулятора. Под текущим состоянием подразумевается то, в каком положении робот сейчас находится, заведена ли его рука за спину или вытянута вперед.
    Помимо текущего состояния понадобится представления об окружающей среде, дабы знать что находится вокруг робота, и ненароком чего-нибудь не сбить. Для этих целей мы будем использовать всеми любимый Kinect. Информация об окружающем мире в MoveIt представлена в виде collision матрицы, но это не та матрица о которой говорилось ранее, поэтому попрошу не путать. Вообще визуализация данной матрицы в Rviz показалась, на мой взгляд, очень занятной вещицей и даже в какой-то момент завораживающей. Я от нее долго не мог оторваться, как, собственно, и другие кому демонстрировал ее работу в действии. На видео ниже показан мир глазами робота в MoveIt.



    Расстояние построения collision матрицы может быть определено любым (ограничением является диапазон измерений Kinect), мы же установили ее величину 2,5 метра. При задании максимального расстояния можно построить целую комнату.
    И нам конечно же понадобится цель, собственно ради чего все это затевалось. Целью могут являться координаты в пространстве, заданные пользователем вручную через Rviz, или же программно, указанные в коде или сгенерированные другими узлами ROS, например, узлом распознавания предметов. Важное примечание: целевое местоположение не должно противоречить self-collision матрице, т. е. у нас не получится заставить робота поместить руку себе в корпус или в голову.

    Что на выходе


    Первым что мы увидим это будет вычисленный план движения манипулятора, изображенного в Rviz посредством moveit_msgs::DisplayTrajectory сообщения. Данное сообщение используется только лишь для визуализации планирования.
    Если не брать во внимание визуализацию, она ведь нам не всегда будет нужна, то основным информационным выходом будет служить сообщение moveit_msgs :: RobotTrajectory. Т.е. в случаи достижения целевого положения манипулятора, мы получим просто последовательность moveit_msgs :: RobotTrajectory сообщений, адресованных контроллеру (контроллер отвечает за управление активными суставами манипулятора).
    Так что же такое moveit_msgs :: RobotTrajectory? Это просто последовательность точек с временными метками, скоростями (по желанию), ускорениями (по желанию). Это сообщение, задающее значения суставам группы (о группах упоминалось чуть выше, группа — правая рука, левая рука и т.д.) вызванной в соответствие с планированием движения.
    Так как все мы живем в мире, где с течением времени окружающая среда способна меняться, то есть необходимость в ее мониторинге. Если во время выполнения контроллером траектории произойдут изменения в окружающей среде, которые могут привести в будущем к столкновениям, то система останавливает выполнение траектории и приступает к повторному планированию.
    В качестве демонстрации будем использовать задачу достижения целевого местоположения, при этом не позволяя любой части руки робота столкнуться со столом или предметами на нем. Видео ниже показывает, как хорошо MoveIt способен справиться с этой задачей.



    Для повышения скорости отслеживания траектории движения можно прибегнуть к помощи настраиваемого IKFast решателя, основанном на OpenRAVE, что мы и намереваемся реализовать в ближайшее время.

    В следующем посте мы покажем реализацию телеприсутствия робота Tod. Следите за обновлениями в нашем блоге.
    TOD
    29,00
    Компания
    Поделиться публикацией

    Похожие публикации

    Комментарии 11

      +1
      Т.е. за пивом в холодильник пока не бегает? Подождем еще немного…
      А если серьезно, то очень интересно, жду продолжения
        +4
        Кстати, основная идея, которой мы руководствовались, заключалась в создании робота который бы смог привезти хозяину стакан воды, а там где вода, там и все остальное )
        Вопрос только в том, кто сколько готов ждать этот стакан?!
          0
          Проще хозяина привезти к воде.
            +7
            К воде-то проще, но тут говорили про пиво.
          +1
          Эта задача уже несколько лет решена: www.willowgarage.com/blog/2010/07/06/beer-me-robot :-)
            0
            Я думаю тут имелось ввиду доступность решения, т.к. глядя на того же АСИМО кажется что вообще все задачи решены.ИМХО, однако, что-то не видно бегающих по квартирам антропоморфных роботов.
          0
          Спасибо! Очередной раз порадовали! :)
            0
            Офигенно. Раз за разом удивляете. Так держать! =)
              0
              image
                0
                Это какой эпизод? что-то подзабыл уже)
                  –1
                  вроде бы s04ep1

              Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

              Самое читаемое