Управление роборукой при помощи leap motion





В прошлом году я собрал роборуку, написал для неё «драйвер» для linux, научил держать разные предметы. И как-то забыл про неё. Но вчера мне доставили leap motion и придумалась новая идея — научиться управлять роборукой по средством движений своих рук.

Чем нужно управлять


У роборуки есть:
  • база — может крутиться по и против часовой стрелки;
  • плечо — двигаться вверх и вниз;
  • локоть — двигаться вверх и вниз;
  • запястье — двигаться вверх и вниз;
  • клешни — открываться и закрываться.
Для всего этого «драйвер» предоставляет простое api:
<code class="python">from roboarm import Arm  arm = Arm() arm.base.rotate_clock(3) arm.elbow.up(1) arm.grips.open(2) </code>


Первая реализация




Leap motion умеет определять руки, пальцы и их направление.
Поэтому я решил привязать движения к пальцам:
Часть роборуки Моя рука Количество пальцев Ось
База Правая 4 или 5 X
Плечо Левая 4 или 5 Y
Локоть Правая 2 или 3 Y
Запястье Любая 1 Y
Клешни Левая 2 или 3 X
Ничего не вышло. Leap motion правильно определял, когда на руке 1-2 пальца, но когда больше — случайное значение от 1 до 5.

Вторая реализация



Leap motion отдаёт координаты рук в определённых границах, у меня примерно от -200 до 200 по X и от 0 до 400 по Y. Эту область я разбил на десять равных частей и привязал к ним действия:
Основа по часовой Плечо вверх Локоть вверх Запястье вверх Открыть клешни
Основа против часовой Плечо вниз Локоть вниз Запястье ввниз Закрыть клешни
Эта реализация оказалась рабочей =)

Что получилось


Видео с результатом, где роборука пытается поднять коробочку:



Видео, где движения руки видно лучше:



Ссылки


Роборука owi robotic arm.
Leap motion.
«Драйвер».
Исходный код реализации.

Источник: habrahabr.ru/post/214613/