Огляд контролера Leap Motion. Паси руками

Огляд контролера Leap Motion. Паси руками

Для більшості завдань роботи на комп'ютері, ніщо не зрівняється зі старими добрими клавіатурою та мишею. Але контролер Leap Motion вже доступний і він змінить наше уявлення про навігацію в комп'ютерах.

Якщо ви шукаєте спосіб керування комп'ютером як у фільмі «Особлива думка», Leap Motion вже досить швидкий, щоб справити враження, ну чи хоча б розважити. З його допомогою ви можете грати в ігри, малювати, і навіть виконувати несподівані завдання, на кшталт розблокування вашого ПК, навіть не торкаючись миші. При цьому в пристрої є деякі проблеми, які можуть викликати деяке розчарування на початку експлуатації.

Якщо ви наважилися придбати цей гаджет, використовуйте ці поради для оптимізації продуктивності та придбайте досвід якомога безболіснішого.


1. Розміщення
За словами розробників Leap Motion, можна дійсно поставити контролер, куди ви хочете, праворуч, ліворуч, перед вашою клавіатурою, на голову або на коліна. Не переймайтеся вибором місця, контролер швидко адаптується до змін у розміщенні.

У ході тестування з'ясувалося, що найбільш ергономічне розміщення контролера перед клавіатурою в середині монітора. Коли він не використовується, помістіть його між клавіатурою та монітором (або осторонь ноутбука). Малоймовірно, що ви активно використовуватимете Leap Motion одночасно з клавіатурою і мишею, так що тримайте його перед собою в центрі, коли ви використовуєте програми.

Якими є наслідки далекого розміщення контролера? Втома рук.

2. Тримайте його у чистоті
Під темною пластиною контролера Leap Motion зі скла знаходяться дві камери та інфрачервоний датчик. Пил і бруд заважатимуть відстежувати рухи, особливо під час роботи, що потребує особливої ​​точності.

Щоб допомогти датчикам Leap Motion, тримайте його чистим, наскільки це можливо. Якщо є велика пляма, пристрій дасть вам знати повідомлення на панелі завдань (або меню на Маку). Але не чекайте попередження про забруднення. Гаджет постачається з тканиною з мікроволокна, так що використовуйте її для протирання скла якомога частіше.

3. Тонка настройка відстеження жестів
Хоча інженери Leap і наполягають, що більшості людей не потрібно налаштовувати будь-які параметри, але хочеться іноді відчути себе професіоналом у налаштуванні та використанні додатків, які вимагають особливої ​​точності. Є кілька корисних налаштувань, із якими варто пограти.

На панелі завдань у Windows або на панелі меню Mac, відкрийте меню контролера Leap Motion та увійдіть у налаштування.

У першій вкладці, праворуч, гляньте на налаштування висоти взаємодії. Ви побачите, що висота встановлена ​​на 20 сантиметрів від верхньої поверхні пристрою. Це добре за замовчуванням, але якщо ваші руки втомлюються або це занадто високо, ви можете підняти або опустити цю зону відповідно. Використовуйте повзунок, щоб спробувати різні варіанти.

Там також є функція автоматичного налаштування взаємодії, яка спонукає контролер Leap Motion постійно переміщати зону взаємодії, спираючись на рух користувача. Все це звучить добре теоретично, але на практиці працювало не дуже надійно. Краще все-таки натомість залишити статичну висоту.

У вкладці "Відстеження" зверніть увагу на пріоритет відстеження. За умовчанням він встановлений у збалансований, надаючи швидкості та точності рівну увагу. У більшості випадків це хороша установка, проте, якщо вам потрібна більш висока точність, виберіть акцент на точність у налаштуваннях. Або якщо ви граєте в гру, яка вимагає високої швидкості, акцентуйте налаштування на швидкості.

Просто майте на увазі, що якщо пристрій відстежує одну пріоритетну опцію, інша буде дещо зменшена. На більш потужних системах, це менш очевидно, але чекайте на деяку затримку з іншим елементом. Перевірте цифри внизу, щоб дізнатися, як зміни цих параметрів вплинуть на продуктивність.

4. Перекалібрування контролера Leap Motion
Падіння, тряска або навіть вм'ятина на Leap Motion контролері засмутить його. У найгіршому випадку, коли такі речі трапляються, контролер, швидше за все, попросить вас відкалібрувати пристрій.



Але, цікаві: вам не потрібно чекати такої нагоди, щоб спробувати самому відкалібрувати гаджет. Якщо ви помітите багато "мертвих зон", або помітите, що відстеження не є точним, виділіть кілька секунд для повторного калібрування.

Для цього можна перейти до панелі "Установки> Усунення несправностей>Повторне калібрування пристрою".

Саме тут трапляється щось дивне. Візьміть свій пристрій бічним склом перед екраном комп'ютера на відстані близько 1 або 2 сантиметрів, повільно переміщуйте його в різних напрямках, щоб пофарбувати екран у зелений колір, поки ви не отримаєте "Оцінку" 80. Повторне калібрування просте на глянцевих екранах, на матових екранах процес займає трохи більше часу.

Чому? У процесі калібрування програма відстежує інфрачервоний промінь контролера, що відображається від екрану назад на пристрій. (Чисте, чи не так?)

5. Специфікація комп'ютера.
Якщо ви експериментували з усіма цими варіантами оптимізації і досі не в захваті від продуктивності Leap Motion, є ймовірність, що в цьому винен комп'ютер. Хоча мінімальні вимоги не прописані, контролер може адаптуватися до різних систем. Отже, його продуктивність залежить від системи, де він запущений.

Звичайно, він буде функціонувати на ПК з 2 Гб оперативної пам'яті та процесором Core i3, але дайте йому 4 Гб ОЗУ та Core i7, і ви побачите різке покращення у швидкості та точності.

До нас у кеддроофіс заскочив незвичайний гаджет - Leap Motion, який був представлений минулого року і навів чимало галасу. Його автори всерйоз націлені переосмислити управління інтерфейсами, головна мета - замінити мишку. Не впевнений, що так все і буде, все ж таки, тримати руки на столі зручніше, а постійно розмахуючи ними швидко втомлюєшся. Але деякі завдання точно зручніше виконуватиме за допомогою подібного сенсора. Наприклад, ігри, адже для різних аркад і таймкілерів, за допомогою яких можна розслабитися і забути про роботу хвилин на 20, Leap Motion підійде добре.

Як уся ця штука працює? У двох словах, перед пристроєм утворюється якийсь куб, зі стороною 60 см, в якому з великою точністю розпізнаються рухи ваших пальців. Вже зараз Leap Motion розпізнає всі 10 пальців, причому точність їхнього переміщення вловлюється до часток міліметра. Затримка також мінімальна. Але лаги трапляються і поки що досить часто. Наприклад, навіть у демо-додатку пропадають пальці, якщо ними рухати та обертати. А часом здається, що палець відривається. Тим не менш, вже зараз робота хороша і в додатках, на кшталт Cut The Rope, де задіюється лише один палець, лаги трапляються рідко. А ось Google Earth мені приручити так і не вдалося, земля панічно обертається в моїх руках, а потім я одразу опиняюся під водою. І так весь час.

Leap Motion - це не просто залізяка, це ціла екосистема. Було б безглуздо, якби Leap Motion міг похвалитися лише демками. Ні, розробники створили якийсь хаб для комп'ютерів (Mac та PC) - Airspace. Тут ви бачите все, що вже завантажили/придбали. Також є веб-магазин додатків - Airspace Store. Тут треба реєструватися, після чого можна приступати до покупок. В основному програми платні, є категорії, є розділи тільки для Mac і Windows. Після придбання програми або гри знайти покупку можна в хабі, звідти відбувається і завантаження. Якщо ви забудете на іншому комп'ютері, всі ваші покупки синхронізуються.

Сам Leap Motion є компактною коробочкою, розміром з 128-ГБ флешку. Корпус зроблений з алюмінію, скла та прогумованої нижньої частини, яка не дозволяє влаштуванню крутитися по столу. До комп'ютера Leap Motion підключається за допомогою USB-кабелю, схожого на такі для зовнішніх 2,5″ вінчестерів. У комплекті є 2 таких кабелі, один довжиною метр, інший вдвічі коротший. Після підключення LM до комп'ютера все, що залишиться зробити - встановити програму, яку можна завантажити на сайті, і зареєструвати свій пристрій.

Поки що це не більше ніж іграшка. Єдина корисна програма, яку мені вдалося знайти - Touchless for Mac, що перетворює LM на трекпад. Але користуватися ним, знову ж таки, дуже важко. Я навіть сказав би — нереально. Поки що Leap Motion це просто розвага для друзів, демонстрація можливостей за допомогою демо-додатків та ігор. Але водночас це перший крок у майбутнє. Думаю, роки за два ми зможемо побачити подібний пристрій не в одному ноутбуці.

Пристрій Leap Motion з'явився на ринку нещодавно, але вже встиг завоювати свою аудиторію користувачів, яка продовжує розширюватися. Область застосування цієї технології досить широка і може обмежуватися лише фантазією розробника. Найчастіше пристрій застосовують у ігровій промисловості та сфері реклами.

Мінімальні системні вимоги:

Windows® 7 або Windows® 8

AMD Phenom™ II або Intel® Core™ i3

2 GB RAM

USB 2.0 Port

Internet Connection

Leap Motion працює виключно на платформах Windows, MAC OS, Linux і, судячи з інформації офіційного форуму, розробники цього пристрою поки що не планують підтримувати мобільні платформи. Думаю це пов'язано з тим, що мобільні пристрої поки що мало потужні для роботи з технологією Leap Motion.

Область видимості пристрою становить 120 градусів завглибшки (по осі Z) і 150 градусів завширшки (по осі X).

Висота видимості (по осі Y), максимально 25 см, і її можна змінювати в налаштуваннях програмного забезпечення, що йде в комплекті.

(фото:leapmotion.com) Робоча область Leap Motion

Перш ніж розпочинати розробку під новий пристрій, завжди необхідно мати уявлення про те, як він працює. Чим докладніше ви зможете розібратися в технічних деталях, тим простіше проектуватиме інформаційні системи з використанням цих пристроїв. Ці знання дозволять Вам не тільки прогнозувати виняткові ситуації, при яких пристрій фізично неможливо використовувати, але також розширити область їх застосування шляхом апаратної адаптації під поставлені завдання.

Розглядається пристрій Leap Motion технічно не є чогось надскладного. Усередині знаходяться дві інфрачервоні камери та три потужні інфрачервоні світлодіоди.

Leap Motion inside

Принцип роботи пристрою просто інфрачервоні (ІЧ) діоди підсвічують руки, а інфрачервоні камери роблять їх захоплення передаючи зображення програмному обробнику Leap Motion. На програмному рівні в бій вступають математичні алгоритми, що виділяють контури рук, і відстежують координати пальців. Починаючи з версії SDK 2.0., Leap Motion навчився виділяти складові частини руки, алгоритм визначає кістки рук і зап'ястя, відстежує їх переміщення в просторі. Таким чином відкриваються нові горизонти для розширення бази жестів, що розпізнаються.

Принцип роботи Leap Motion

Багато хто на форумах і при особистій бесіді ставлять питання, чи можна використовувати Leap Motion або Kinect як тепловізор? Більшість впевнені, що ІЧ камера необхідна для теплового виділення людини і це величезна помилка. Справа в тому, що ІЧ камера і тепловізор-це абсолютно різні пристрої. Обидва ці пристрої побудовані на принципі сприйняття невидимого інфрачервоного випромінювання, але спектр сприйманого випромінювання у них різний. Для виробництва матриці тепловізорів використовуються інші матеріали, які більш чутливі і дозволяють сприймати ІЧ хвилі, що випромінюються навіть при мінімальних температурах. Саме з цієї причини тепловізори є досить дорогими.

Якщо ви хочете використовувати цей пристрій як тепловізор, тоді справедливо поставити питання, який діапазон температур ви хочете відстежувати?
Маючи фізичний закон Вина, ми можемо розрахувати максимуми випромінювальної здатності тел. Оскільки ця стаття відноситься до іншої теми, то розрахунки наводити не буду, просто наведу кілька розрахованих значень довжин хвиль:

- Людське тіло: 9300 нм

- Вогонь: 3000 нм

Температуру людського тіла інфрачервона камера Leap Motion та Microsoft Kinect не визначить, проте полум'я від запальнички або нитка лампи розжарювання можна побачити.

Проведемо досвід. Візьмемо сенсор Microsoft Kinect і щільно закриємо інфрачервоний випромінювач металевою заглушкою. Далі запускаємо програму, яка просто відображатиме на екран зображення з інфрачервоної камери. Екран чорний, тому що в кімнаті немає інфрачервоного випромінювання. Однак варто запалити вогонь запальнички, як на екрані з'являється зображення інфрачервоного випромінювання від вогню.

Закриємо інфрачервоний випромінювач металевою заглушкою

На екрані нічого не відображається

Візьмемо запальничку

Інфрачервоне випромінювання від запальнички відображається на екрані

Аналогічно, якщо спрямувати інфрачервону камеру на настільну лампу. Видно як світиться лампа, проте світло від лампи не відбивається на руці та предметах навколо.

На екрані інфрачервоне випромінювання від енергозберігаючої лампи

Світло від енергозберігаючої лампи чітко потрапляє на руку, але на екрані відображення від руки немає

Спектр оптичного випромінювання

Матриця будь-якої цифрової камери чутлива до ІЧ-випромінювання. Для того, щоб звузити спектр ІЧ сприйняття, застосовують спеціальні ІЧ фільтри, які є в будь-якій цифровій камері.
На доказ моїх слів, візьміть пульт від телевізора, направте на нього веб-камеру або камеру на своєму мобільному телефоні, натисніть кнопку пульта і в цей момент на екрані свого пристрою побачите світіння інфрачервоного діода, хоча насправді випромінювання діода знаходиться за областю сприйняття людським оком. Оскільки в камері встановлено фільтр ІЧ випромінювання - ви спостерігаєте не таке яскраве світіння діода. Але якщо видалити фільтр, то світло буквально засліплюватиме матрицю камери.

Інфрачервоне підсвічування Leap Motion

Інфрачервоні фільтри поділяють на кілька типів:

— обрізає лише інфрачервоне випромінювання. Такі фільтри можна зустріти у більшості сучасної фототехніки. Веб-камери, фотоапарати, камери мобільних телефонів та інше. Встановлюється фільтр між матрицею камери та об'єктивом. Візуально його можна відрізнити за кольоровим виконанням. Фільтр може бути блакитного, рожевого та інших кольорів, а на світлі може переливатись усіма кольорами веселки. Ці параметри залежать від того, який діапазон хвиль потрібно обрізати.

- Пропускає тільки інфрачервоне випромінювання, а інші хвилі видимого спектра обрізає. Цей фільтр, як правило, чорного кольору. Застосовуються такі фільтри при виробництві тепловізорів, так само широко використовують фотографи для техніки зйомки «інфрачервона фотографія», а в побуті даний тип фільтра відомий нам, як сонцезахисні окуляри. Цей фільтр застосовується у пристрої Leap Motion, який ми розглядаємо. Чорна, глянсова поверхня даного пристрою є IR passing filter.

Таким чином, інфрачервона камера спільно з passing filter у LeapMotion необхідна для того, щоб сприймати лише вузький інфрачервоний спектр.

Захоплення кадру із камер Leap Motion

Але незважаючи на те, що застосування інфрачервоного підсвічування та фізичної фільтрації дозволяють найбільш якісно підготувати зображення для подальшої програмної обробки, цей пристрій неможливо використовувати при прямих сонячних променях або додатковому інфрачервоному освітленні. Якщо LeapMotion буде розташовано біля вікна, через яке прямі промені сонця будуть потрапляти на пристрій, то пристрій повідомить Вас про те, що зображення не може розпізнати.

Розпізнавання рук відбувається досить швидко, але швидкість залежить від потужності комп'ютера на якому власне відбувається обробка даних, отриманих з двох камер.

До недоліків можна віднести неможливість розпізнавати жести, які вимагають повернути руку рубом до пристрою.

Leap Motion не якісно розпізнає жест

В даному випадку координати руки збиватимуться і смикатимуться на екрані, що викликає труднощі при необхідності вчинення якихось точних дій. Упевнений, використовувати Leap Motion для управління роботом-сапером я не став би 😉

Також Leap Motion не розпізнає жести у яких дві руки з'єднуються разом.

(фото: anijoin.by) Жести, які не розпізнає Leap Motion

Приємно вразило оновлення бібліотек Leap Motion до другої версії. Помітно відчувається, що алгоритми розпізнавання стали точнішими.

Якщо ви потрапили на цю статтю у пошуках відповіді на запитання: -«А чи варто витрачати час на технологію Leap Motion?», моя вам відповідь: - «Впевнено варто!».
На сьогоднішній день Leap Motion є відмінним та доступним інструментом для безконтактного керування програмним забезпеченням або пристроями, в яких керування базується на найпростіших жестах рук. Leap Motion відкриває нові обрії для розробників програмного забезпечення. Немає сумнівів, що в майбутньому цей пристрій буде розвиватися і в нових версіях буде враховано та виправлено всі поточні помилки та недоліки.

Сподіваюся, інформація виявилася для Вас корисною.

Leap Motion Controller увійшов до десятки найкращих пристроїв року за версією журналу Time. Цей девайс відноситься до славної сімейки бездротових контролерів нового покоління, таких як Wii Remote, PlayStation Move, проте найближчим його родичем є Xbox Kinect. На відміну від останнього, Leap Motion реагує на рухи виключно рук, він у 200 разів точніше визначає навіть найшвидші рухи кистей та пальців. Цей пристрій ще щільніше наближає нас до справжньої віртуальної реальності – до створення природного інтерфейсу між людиною та машиною. УРА товариші!

Leap Motion Controller

Після виходу сенсора Kinect на хвилі його успіху стали з'являтися інші безконтактні пристрої управління. Kinect послужив основою для зростання та розвитку ринку подібних пристроїв: інвестори побачили перспективу та зрозуміли сенс вкладення коштів у пристрої жестового управління. Однак найбільш значущим та успішним став контролер Leap Motion Controller. Як і прабатько, останній ґрунтується на технології захоплення руху. Цей пристрій під'єднується до порту USB і не перевищує пари складених флешок. З технічної сторони для захоплення проекції рук в просторі пристрій Leap використовує два оптичних сенсори (камери) і інфрачервоне джерело світла (розробники не виключають, що в майбутніх версіях пристрою кількість камер може бути змінена). Девайс розміщується робочою поверхнею вгору поруч із екраном, щоб створити відчуття, ніби об'єктами на екрані керують за допомогою рук. Після підключення пристрою над ним утворюється перевірена віртуальна піраміда з центральною вершиною у пристрої. Найбільш ефективний діапазон поширюється від 25 до 600 мм над контролером із областю видимості 150 градусів. В області цієї піраміди Leap Motion «бачить» всі рухи та пересилає їхню софту, який перетворює дані та сигнали в координати та повідомлення. Софт здатний розпізнати як прості жести (віртуальні дотики, натискання), і складні тривалі руху: масштабування, переміщення, обертання, малювання різних геометричних фігур. Таким чином, сам пристрій не виконує жодних обчислень та перетворень, віддаючи все на відкуп софту хоста, який, видаляючи шуми зображення, будує моделі рук та пальців – вказівників. Маючи початок координат у центрі пристрою, Leap Device інтерпретує осі координат наступним чином: негативна X розташована ліворуч від пристрою, відповідно, позитивна справа. Координата Y зростає вгору і не має негативних значень, тому що Leap «бачить» об'єкти, починаючи з 25 мм вище за себе. Позитивна Z розташовується у бік користувача, тоді як негативна - до екрану.

Leap Motion SDK

Leap Motion SDK розвивається напрочуд бурхливо, а нові версії виходять із завидною регулярністю: за порівняно недовгу історію свого існування вже з'явилася повноцінна друга версія тулз, а також її модифікації. Точніше, моди знаходяться ще на стадії бети, і ми будемо використовувати найостаннішу на момент написання статті версію SDK, оскільки кожна нова версія надає видимі покращення - додаткові можливості стеження за скелетом ("кістками" рук). Як і слід очікувати, Leap Motion SDK працює на всіх поширених платформах: Windows NT, OS X, Linux. Так як останнім часом мені більше доводиться працювати на Маку (а я ось редагую цю статтю на EEE PC з Win XP, і мені норм. - Прим. ред.), то надалі моя розповідь (з деякими застереженнями) стосуватиметься саме цієї операційна система. Якщо ти з нею не товаришуєш, не впадай у відчай, адже Leap Motion SDK крос-платформний, і ти легко зможеш адаптувати отримані з цієї статті відомості для будь-якої операційної системи, що підтримується.

Готовий працювати!

Для початку роботи з контролером Leap Motion, попередньо зареєструвавшись на сайті виробника пристрою, з розділу Downloads завантажуй архів LeapDeveloperKit_2.1.1+21671_mac.tar. Розпакувавши його, ти виявиш папку, всередині якої буде бандл Leap_Motion_Installer_skeleton-release_public_mac_x64_2.1.1+21671_ah1704.dmg (образ диска для OS X), що містить драйвери для роботи пристрою, а також демоаплік. Поряд з бандлом буде директорія LeapSDK, що включає всі необхідні бібліотеки та API для розробки додатків, що працюють з пристроєм Leap Motion. До того ж у цій папці знаходиться документація та семпли. Крім демопрограм, бандл містить Airspace Home, свого роду клієнт для магазину програм Leap Motion - в нього можна завантажувати свої програми і продавати їх, як на інших майданчиках цифрової дистрибуції. Основна відмінність другої версії SDK від першої – це нова система стеження за «скелетом» верхніх кінцівок. У неї включена обробка додаткової інформації про кістки рук і пальців, можливість передбачення розташування невидимих ​​для влаштування кісток і побудова моделей рук в умовах, коли кінцівки не видно.

Спочатку встанови вміст бандла (впевнений, під Windows він має таку саму назву, тільки з розширенням exe). Сама програма інсталяції, що знаходиться всередині образу, називається Leap Motion.pkg, вона запускає процес інсталяції всього перерахованого вище.


Рис. 2. Встановлення програми

Після завершення встановлення софту для Leap Motion автоматично запуститься драйвер, який у вигляді демона «поселиться» у рядку меню (справа зверху). У «Програмах» з'являться три нові програми: сам драйвер, демопрограма Leap Motion Orientation (рекомендую почати з неї) та Airspace. Якщо раніше контролер не було підключено, саме час зробити це. Значок (у рядку меню) підсвічується зеленим. В результаті натискання на ньому відкриється меню, що містить п'ять пунктів. Перший пункт Launch Airspace запускає однойменний віконний клієнт. За замовчуванням в ньому присутні сім демо-додатків і два посилання, що ведуть в Airspace Store і ком'юніті розробників. Кожна демонстрація розкриває можливості Leap Motion.

Наступний пункт меню – Settings відкриває вікно для налаштування пристрою. Це вікно включає чотири вкладки. На сторінці Generals виконуються основні налаштування: дозволити або заборонити пристрою взаємодіяти з веб-додатками, які підтримують Leap Motion (забігаючи вперед, зазначу, що така можливість є, і для цього використовується HTML5 + JavaScript), включити або вимкнути можливість отримувати сигнали від пристрою додатків , що працюють у фоні, автоматично передавати статистику пристрою, включити (за необхідності) перехід в енергозберігаючий режим; налаштувати найменшу висоту над пристроєм, коли він «бачить» руки і пальці (покажчики); погодитись на автоматичне оновлення. На сторінці Tracking є два параметри, що стосуються налаштування можливості «стеження» пристроєм. Наступна вкладка присвячена діагностування та усунення неполадок, тут присутні функції перегляду лога ПЗ, діагностичний візуалізатор, повторне калібрування пристрою та повернення до налаштувань за замовчуванням. Остання ж вкладка просто повідомляє інфу про пристрій та обслуговуючий його софт. Клацанням по пункту Visualiser відкривається демонстратор, у ньому можна подивитися, як пристрій бачить кінцівки. Тобто, якщо перемістити руки над активною областю пристрою, програма відобразить їх у віртуальному просторі. Кнопка Pause Tracking припиняє стеження, Quite – вирубує демон.


Коли програмне забезпечення для Leap Motion буде встановлено, можна ставити інструменти розробника. При цьому я вважаю, що в тебе встановлені найновіші версії операційної системи та тулзи для розробки (Xcode). Як я говорив вище, після розпакування архіву папка з SDK знаходиться поруч із бандлом установки. Ця папка містить документацію, приклади, заголовки та об'єктні файли для всіх мов, що офіційно підтримуються. Спочатку Leap Motion SDK написаний на C++, але, завдяки SWIG, має підтримку багатьох поширених мов, що компилуються і інтерпретуються, серед яких C# (разом з фреймворками.NET і Mono плюс движком Unity 3D), Objective-C, Java, Python, JavaScript. SWIG, будучи вільним інструментом з відкритим вихідним кодом, грає роль генератора сполучного коду між C++ та іншими мовами. Для своїх розробок ми візьмемо C++, як найрідніший. Клієнтський комп'ютер і контролер взаємодіють через TCP-з'єднання, при якому відкриваються порти 6437, 6438, 6439 - для коректної роботи пристрою необхідно простежити, щоб вони не блокувалися файрволом. Leap Motion SDK дозволяє розробляти додатки двох видів: що підтримують нативний інтерфейс (клієнтські додатки) та інтерфейс WebSockets (веб-програми, що працюють у середовищі браузера). Перші для роботи (отримання даних від контролера) використовують динамічну бібліотеку - конкретну для певної операційної системи, вона підключається до пристрою та надає сервіс верхньому рівню. Тоді як другі отримують дані через сервер WebSockets локального хоста у вигляді повідомлень формату JSON. У цьому випадку використовується JavaScript + open source надбудова LeapJS, і для керування пристроєм програма може передавати конфігураційні повідомлення через сервер WebSockets назад до девайсу.

Кодинг для Leap Motion

Сьогодні ми сконцентруємося на нативних додатках для OS X, але завдяки крос-платформності інструментів ти легко зможеш переробити наші проги для іншої операційної системи, що підтримується. Ми не розроблятимемо консольну програму, яка показує координати, що передаються контролером, це нудно. Ми відразу ж зануримо голову в серйозний код і напишемо програму, що виводить графічну виставу.

Візуалізація

Leap Motion SDK надає чудові засоби для отримання даних від контролера, але в ньому нічого немає для виведення графіки. Тому наш шлях лежить через додаткові тулзи. Щоб вивести графіку з нативної програми під OS X, потрібно скористатися OpenGL. Від цієї ідеї віє смутком: надто низький рівень, жодної статті не вистачить, і взагалі заснути можна. Тому ми скористаємось налаштуванням над OpenGL. З усього найширшого ряду подібних бібліотек я вибрав Cinder. Cinder є набором бібліотек з відкритим вихідним кодом для обробки зображень, роботи з графікою, звуком, обчислювальною геометрією. Як я вже сказав вище, Cinder крос-платформна, і той самий код буде працювати не тільки на десктопних платформах, але також на смартфонах і планшетах від Apple. У майбутньому розробники збираються розширити коло апаратних і програмних платформ, що підтримуються. До того ж для генерації заготівлі нового проекту в поставку Cinder входить утиліта TinderBox, з її допомогою можна створити проект з підтримкою OpenGL, DirectX, CocoaView (OpenGL), кожна з цих заготовок може містити в собі підтримку фізичного двигуна Box 2D, бібліотеку рендерингу Cairo, ау , бібліотеку комп'ютерного зору OpenCV Для Apple-пристроїв можна згенерувати заготівлю, де використовуватимуться менеджери геолокації і руху, за допомогою стандартних фреймворків (Core Location, Core Motion). Все це легко можна включити в проект на етапі його створення за допомогою GUI-інтерфейсу. Крім того, проект можна згенерувати під певне середовище програмування та операційне оточення: Xcode (Mac), Xcode (iOS), VC 12/13 (WinRT). Наслідок: ми маємо більш ніж бібліотеку API, все це нагадує крос-платформний ігровий двигун! Також можна одразу створити локальний Git-репозиторій. На мою скромну думку, Cinder незабаром стане найкращим крос-платформним рішенням, навіть у порівнянні з Qt. Оскільки Cinder активно використовується boost, його непогано оновити до останньої версії. Відкриваємо улюблену консоль і спочатку поставимо систему управління застарілими (на суворий погляд Apple) пакетами Homebrew:

Ruby -e "$(curl -fsSL https://raw.github.com/Homebrew/homebrew/go/install)"

Після чого із цієї системи встановимо boost 1.55: brew install boost. Для роботи безпосередньо з Cinder її достатньо завантажити та розпакувати, а для генерації проекту – використовувати розміщену у підпапці tools утиліту TinderBox.

Руки, пальці, керування простором

Отже, для розминки створимо програму, яка виводить у вікно те, що бачить сенсор. Якщо ти читав мої статті про Kinect, то можеш пам'ятати, що там ми починали так само, вважатимемо це традицією. Заготівля з TinderBox для OpenGL нам чудово підійде, треба тільки додати до неї підтримку Leap Motion. Для цього з підкаталогу include раніше розпакованої папки LeapSDK (про це див. вище) в дерево каталогів проекту середовища Xcode перетягніть два файли: Leap.h і LeapMath.h. Коли перенесення буде завершено, з'явиться діалогове вікно, де треба вказати спосіб вставки/зв'язування файлів із проектом; постав прапорець Destination -> Copy items in destination group’s folder (if needed), познач галкою Folders -> Create groups for any added folders і нижче познач проект, якого відбувається додавання файлів. Крім того, ще потрібна динамічна бібліотека. Оскільки компілятор мови C++ (LLVM), який входить у Xcode, слід стандарту C++11, необхідно використовувати бібліотеку, скомпільовану з його втручанням. Така ліба є, вона називається (версія для OS X) libLeap.dylib і знаходиться в підкаталозі libc++ підпапки lib каталогу LeapSDK. Лібу теж треба перемістити в систему Xcode, з таким самим подальшим проходженням діалогу. Тепер потрібно вказати середовищі Xcode використовувати додану в проект лібу. У дереві файлів/каталогів проекту натисніть на ім'я проекту (верхній пункт), відкриється меню конфігурування проекту. Перейдіть на вкладку Build Phases. У лівому верхньому кутку вкладки, клацнувши на знаку «плюс», з контекстного меню, що з'явилося, вибери пункт New cope files build phase. У нижній частині вкладки з'явиться панель Copy Files. Розгорнувши її, зі спадного списку Destination вибери Executables, а в порожній список файлів (нижче) з дерева проекту перетягніть динамічну лібу, при цьому прапорець Copy only when installing повинен бути знятий. Тепер вона підключена до проекту. Наступна дія потрібна, щоб сенсор передавав «сирі» дані зображення того, що він бачить; у налаштуваннях Leap Motion (пункт Settings контекстного меню значка девайса в рядку меню) на закладці General треба відзначити прапорець Allow Images. Заготовка, що згенерована TinderBox'ом, включає кілька папок, файлів і необхідних фреймворків. Оскільки я назвав проект RawImagesApp, я додав заголовний файл RawImages.h. У нього я помістив підключення заголовних файлів Cinder'а та Leap'а, включення простору імен Leap та оголошення об'єкта контролера Leap Motion, власне він є центральним предметом дискусії. До того ж TinderBox згенерував вихідний код для нашого проекту, він стане хорошою відправною точкою для розвитку. У cpp-файлі міститься основний клас (в моєму випадку RawImagesApp) програми, що відповідає імені проекту та успадкований від базового класу Cindera – AppNative. Вікно створюється макросом CINDER_APP_NATIVE. У класі RawImagesApp оголошено та реалізовано віртуальні функції базового класу. Функція setup викликається при старті програми, сюди міститься код для його ініціалізації: для виведення «сирих» графічних даних у цьому методі необхідно встановити спеціальний прапор політик сенсора, для чого треба викликати метод setPolicyFlag, який передати значення POLICY_IMAGES контролера. Функція update викликається у кожному кадрі оновлення; draw викликається для перемальовування контенту; mouseDown – при натисканні клавіші миші. За замовчуванням включені не всі можливі функції, наприклад, можна додати prepareSettings - функцію, яка викликається до створення вікна і дозволяє передати йому параметри. Додамо цю функцію, щоб при створенні вікно було більшого розміру, також встановимо для нього частоту оновлення. Оголошення всередині класу RawImagesApp виглядає так:

Void prepareSettings(ci::app::AppBasic::Settings* settings);

а реалізація так:

Void RawImagesApp::prepareSettings(Settings* settings) ( settings->setWindowSize(1024, 768); settings->setFrameRate(60.0f); )

Упевнений, коментарі тут зайві. Додамо до основного класу програми текстуру OpenGL: gl::Texture tex; Вона знадобиться нам для виведення. У функції update ми по кадрах отримуватимемо зображення від сенсора, потім їх оброблятимемо і відображатимемо на текстурі (див. вихідник). На кожному кадрі ми отримуємо кадр контролера: Frame frame = controller.frame(); Об'єкт класу Frame містить у собі інші об'єкти, інформацію про які генерує контролер. Нам треба просто витягти їх із нього. До речі, отримання кадру в такий спосіб - самостійно його брати у контролера (послідовне опитування пристрою) - найпростіше і найчастіше використовується. Будь-які проміжні моменти вирішені наперед: якщо при наступному опитуванні новий кадр ще не готовий, то повертається старий; якщо за подальшому опитуванні готові вже кілька кадрів, всі вони містяться у історію. Є ще один спосіб отримання кадрів, але поки що він нам не потрібен, і ми перенесемо його розгляд на наступний розділ. Отримавши кадр, витягуємо з нього зняті сенсором зображення: ImageList images = frame.images();. Усього їх два, оскільки в сенсорі дві камери, тому кожен момент два зображення. Далі ми послідовно обробляємо обидва. Спочатку в рядку: const unsigned char *image_buffer=image.data(); отримуємо дані картинки; У певний час від контролера ми можемо отримати різні зображення - як за вмістом, а й у розмірі. У наступному рядку створюється об'єкт графічної поверхні (Surface), що входить до Cinder API. Його конструктору передаються чотири параметри: ширина і висота поверхні, використання альфа-каналу, послідовність колірних каналів (константа SurfaceChannelOrder::RGBA відповідає стандарту: червоний, зелений, синій, альфа, проте є ряд інших, наприклад, GDI або Quartz використовуються інші колірні послідовності). Потім за допомогою ітератора обходяться всі пікселі (поки що порожньої) поверхні. Всередині цього циклу встановлюється колір пікселів. Я вирішив надати зображенню, що виводиться, червонуватий відтінок (як у DOOM:)). Тому для червоного каналу кожного пікселя встановлюється значення, що відповідає значенню даних зображення. Інші канали обнуляються. Після обходу всього зображення ми конструюємо об'єкт – текстуру за допомогою методу gl::Texture на основі переданої у параметрі поверхні. Якщо зараз вивести текстуру на екран, вона буде надто маленькою. Тому попередньо відмасштабуємо її: glScalef(2.0, 3.0, 0.0); Відобразимо: gl::draw(tex);.

Рис. 5. Що бачить Leap Motion Controller

Кістки

У наступному прикладі ми відобразимо наші руки у машинному контексті, тобто намалюємо їх у відповідних координатах. Це завдання буде складніше, ніж попередня, а LeapSDK все ж таки надає досить низькорівневий інтерфейс, тому для спрощення нашого завдання ми скористаємося готовими напрацюваннями. Американський програміст Стівен Шейберл (Stephen Schieberl), під ніком Ban ​​the Rewind, розробив пару класів (Listener успадковується від Leap::Listener і Device), що виконують усю типову роботу, пов'язану з обробкою та поверненням станів пристрою. Крім того, Стівен помістив у файл функції, які виконують підрахунки координат і матриць, що дозволить нам сконцентруватися на більш високорівневій роботі. Насамперед ці обчислення пов'язані з тим, що на відміну від координат робочого столу операційної системи, де вісь Y росте зверху вниз, початок координат для Leap Motion (0, 0, 0) починається в лівому нижньому кутку (Y росте знизу вгору), отже, при використанні значень координати їх треба інвертувати. Додаткові обчислення проводяться над векторами та матрицями, як зазначено вище. Отже, створимо новий проект так само, як минулий. Додатково додай файли Cinder-LeapMotion.h і Cinder-LeapMotion.cpp (див. матеріали до статті). У головному класі програми кількість змінних-членів поповнилася, були додані: mDevice - посилання на пристрій - об'єкт самописного класу, mFrame - класу Frame (ми вже розглядали цей клас у минулому розділі), mCamera - об'єкт класу CameraPersp або Cindera, також був доданий метод onFrame (функція зворотного виклику класу-предка), який, приймаючи об'єкт класу Frame, робить його поточним - надає його змінній-члену mFrame. У методі Setup включаються режими малювання, згладжування ліній та полігонів; ініціалізація камери: завдання області видимості (у параметрах конструктора); встановлення точки огляду (у методі lookAt); потім створюється об'єкт самописного класу Device, що включає три необхідні об'єкти класів: Controller, Device (з простору імен Leap) і Listener, крім того, без м'ютексу не обійтися. Ось ми і підійшли до другого способу отримання кадрів від пристрою – прослуховування. Наш клас пристрою успадкований від класу Listener, який дозволяє реалізувати цю можливість, тобто ми отримуємо кадри від контролера з періодичністю, що відповідає його роботі. Коли контролер готовий передати кадр, клас Listener викликає перевизначений нами метод onFrame і передає йому кадр (у параметрі), вище згадували цей метод. До речі, навіщо нам знадобився м'ютекс? Справа в тому, що при використанні прослуховування – функції зворотного виклику – onFrame викликається в багатопотоковому режимі. Тобто кожен її виклик здійснюється у незалежному потоці. Тому нам необхідно подбати про потоко-безпеку в момент отримання кадру від девайсу, чому є м'ютекс. При прослуховуванні також можна ігнорувати прихід нового кадру (наприклад, якщо кадр, який минув, ще не оброблений) і додати його в історію (для подальшої обробки). Повернімося до нашого коду, до місця створення об'єкта нашого класу Device. Після створення для нього встановлюється функція зворотного дзвінка.

Перемальовка

Але найцікавіше відбувається у методі перемальовки. Спочатку виконуються підготовчі дії: очищення екрану, встановлення поточних матриць для камери, включення альфа-змішування, можливості читання та запису в буфер глибини, встановлення кольору для малювання. Потім починається безпосереднє малювання: ми отримуємо від пристрою тривимірні вектори положення ліктя та зап'ястя та методом gl::drawLine малюємо між цими точками лінію. Далі отримуємо кількість пальців і в циклі за допомогою ітератора пробігаємо по контейнеру, що їх містить. У Leap Motion кожен палець складається з чотирьох частин (фаланг): периферичної, проміжної, проксимальної та п'ястної. Хоча на великому пальці справжньої людської руки остання фаланга відсутня, вона є, але має нульове значення. У вкладеному циклі, обходячи всі фаланги, отримуємо координати різних частин: початок, центр, кінець, напрям. Координати представлені як векторів (Vec3f). Також усередині підциклу здійснюється малювання фаланг за допомогою методу drawLine, якому передаються знайдені координати. Додатково з перших фаланг утворюється контейнер суглобів (knuckles). Коли відбувається вихід із зовнішнього циклу, малюються лінії, що з'єднують пальці та утворюють кисті рук. На цій веселощі перемальовки закінчується. Відкомпіль і запусти прогу, затримай руки над сенсором, і у вікні відобразяться контури твоїх кінцівок.

Підсумки

Leap Motion – революційний контролер, він не лише замінив сенсорний екран, але й подарував нам управління простором, зробивши ще більш прозорим кордон між реальним світом та віртуальною реальністю. На рівні розробника програмного забезпечення ми отримуємо зручний програмний інтерфейс, що дозволяє керувати всіма можливостями сенсора. Крос-платформні інструменти розробника дають останньому доступ до пристрою на безлічі мов програмування, як компілюваних, так і інтерпретованих (поки що серед останніх тільки два - Python і JavaScript). Крім того, API має струнку і зрозумілу структуру: у кожний момент часу контролер знімає зображення, формує на основі його кадр і посилає на верхній рівень – у прикладну програму, де програміст, розпаривши кадр, працює з такими сутностями, як руки, пальці, покажчики (Інструменти) та інше. Через наявність у пристрої двох камер воно часто монтується на окуляри віртуальної реальності для створення ефекту доповненої реальності, що досягається завдяки наявності у зображеннях, що знімаються камерами, виміряних значень яскравості інфрачервоного випромінювача, а також калібрувальних даних, необхідних корекції складного об'єктива. У сьогоднішній статті ми торкнулися теми створення прикладних рішень, що взаємодіють із пристроєм за допомогою API. Тема ця дуже велика, і розглянути вдалося далеко не все - за бортом залишилися жестикуляція, спеціальні рухи, емуляція дотику та багато чого ще. Все це, а також багато іншого, наприклад використання контролера в Windows і Web, інтеграція з ігровими/графічними двигунами, може стати темою для розмови в найближчих статтях. Все залежить від тебе – пиши нам, вимагай продовження:). А поки що - удачі у всіх справах і до зустрічі на сторінках «Хакера»!

Ціна запитання- 4990 руб.

Комплект поставки- сам пристрій, 2 USB шнури.

Зовнішній вигляд.

Коли я вперше взяла в руки коробку з подарованим мені Leap Motion, У голові крутилася одна-єдина думка - що це, чорт забирай, взагалі таке? Так як діалог піврічної давності з обговоренням даної новинки електронного ринку вивітрився з пам'яті начисто, а інструкції російською не докладалося, то довелося лізти по допомогу в гугл, який видав приблизно таке. :)

У теорії. На практиці, звичайно, дещо інакше. :)

Сам пристрій виглядає приблизно так, як на картинці, хоча габарити трохи більше: 8 см завдовжки і 3 завширшки. За рахунок прогумованої підкладки має стійко стояти на столі, хоча особисто у мене його завжди дещо перекошує:) До комп'ютера підключається через кабель USB-USB 3.0, встановлюється між монітором та клавіатурою та спокійно працює на Windows 7.

Багато хто пише про якісь особливі тести при підключенні девайсу, однак у мене нічого такого не було, крім реєстрації в Leap Motion Airspace, але про це трохи нижче.

Leap Motion – програмне забезпечення.

Після того як система впізнала сторонній пристрій і радісно сповістила про те, що воно готове до роботи, я урочисто змахнула рукою перед монітором, і дива не сталося. :)

Довелося лізти на сайт https://airspace.leapmotion.com/ і завантажувати звідти Leap Motion Airspace - програму, що представляє собою типовий сервіс розповсюдження ігор та іншого програмного забезпечення створених для цього девайсу.

Завантажила, поставила, пройшла реєстрацію, встановила софт, почала тестувати. Перша програма – Orientation, демонструє найефектніші можливості Leap Motion. Досить незвично було бачити власні верхні кінцівки у такому вигляді:

Далі на вибір - в Airspace Store є ігри, програми для створення різних об'єктів, малювальні, творці музики та інші, не менш цікаві речі. Зрозуміло, багато платних, але й серед безкоштовних є що погратися.

Мабуть, найнеприємнішим відкриттям тут стало поділ софту для Mac і Windows, так що на деякі програми власникам "неправильної" системи доведеться лише облизуватися.

Для цього йдемо в розділ Computer Controlsі завантажуємо там Touchless- для маку та вінди відповідно.

Leap Motion – налаштовуємо для нормальної роботи.

Далі починається найцікавіше. :) Спочатку, щоб хоча б потрапити по значку на робочому столі мені знадобилося хвилин 5. Це було схоже на те відчуття, яке виникало під час першого використання комп'ютера - все страшно, клацає і нічого не працює. :) Так що на певному етапі тикання по екрану подив почав змінюватися розчаруванням.

А потім прийшло розуміння того, що непогано б залізти в налаштування, якщо такі є. Налаштування виявилися в області повідомлень і являли собою компактний значок "Жести". Клацаємо по ньому правою кнопкою миші (про, яке це блаженство, коли все працює відразу і як треба) і вибираємо Відкрити панель керування "Жести".

У вікні, що відкрилося Жестивиставляємо точну чутливість пера та торкання.Потім переходимо на вкладку Параметри пера. Вибираємо рядок Подвійне торкання Подвійне клацаннята натискаємо Параметри.

У новому вікні повзунки Швидкістьі Відстаньрухаємо до упору убік більшеі тестуємо результат у маленькому вікні з дверима. Якщо все зроблено правильно і ви вже пристосувалися до подвійного торкання – двері відчиняться. Таку ж процедуру виконуємо і на вкладці Торкання.

 

 

Це цікаво: