Игры для кинект на пк. Кинект на ПК Windows – окно в будущее (опыт использования на ПК)

Попал мне в руки сенсор Kinect, и захотелось мне поработать с ним на ПК. Что может быть проще: вставить USB в порт компьютера, установить драйвера и начать разбираться в этой чудо-технике?
Не тут-то было. Невиданный ранее оранжевый разъем наотрез отказался залезать куда-либо без молотка, а адаптера питания с переходником на USB в комплекте не было предусмотрено (данный экземпляр сенсора шел в бандле с консолью).
Достать оригинальй адаптер оказалось не так просто: отдельно он продается лишь в США за 35$, не считая доставки, к тому же БП рассчитан только на 110В. Невостребованного адаптера у купивших полный комплект сенсора так же не нашлось: желающих купить его оказалось на порядок больше.
Выход остался один: сделать переходник самостоятельно.

Что потребуется

Прежде всего я нашел распиновку разъема:

Не сложно разобрать, что +5V, D-, D+, Gnd - относятся к USB, а остальные четыре, +12V и Gnd - к питанию. В качестве источника питания решено было использовать компьютерный БП, который по странному стечению обстоятельств умел выдавать +12V и имел запас в 1А, так необходимый кинекту.

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

Список необходимого:
USB-A вилка, 2 шт.
любой резистор 0,5-1 Ватт
USB разъем любого типа, для подключения к пк
разъем MOLEX (или FDD, PW11-4M)
провода (шлейф на 6-8 проводников)
напильник
паяльник и сопутствующие приспособления
суперклей

Собираем

Извиняюсь за низкое качество фото, на мобильный телефон лучше снять очень сложно.

Вскрываем два разъема:



Напильником уменьшаем толщину пластмассы, пока обе части спиной к спине не влезут в разъем кинекта:



Подпиливаем один край разъема, дабы контактные площадки 6-9 совпали:

Склеиваем две половинки, совмещая по подпиленному краю:

Осталось добавить контакт для пин 5, берем ножку от резистора и вплавляем на соответсвующее место:


Разъем готов. Если получилось так, что он свободно болтается и нет надежного контакта - можно напаять олова на контактные площадки до нужной толщины.

Соединяем проводами соотвествующие контакты свежесозданного разъема, разъема питания и USB :

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

Подключаем разъем питания вместо давно неиспользуемого флоппи, подключаем адаптер к кинекту, вставляем USB в ПК…

Работает!

Система радостно сообщает о подключении новых устройств. Можно работать!
Для теста скачал набор для Windows , драйвера установились, демо запускается. Картинка передается, данные обрабатываются.

Что можно добавить?
Данный адаптер можно использовать так же и для подключения сенсора к старым версиям Xbox 360. Что бы постоянно не переставлять usb из компьютера в консоль и наоборот, можно установить переключатель.

Сенсор Kinect разработан для Xbox 360 и позволяет играть в игры без всяких приспособлений в руках. Появившись в ноябре 2010 года, он стал самым продаваемым электронным устройством в мире: за первые 2 месяца было продано более 10 млн штук. Изначально сенсор работает лишь с консолью, но при помощи ловких движений рук ты сможешь заставить его работать с PC, а он поможет тебе поддерживать физическую форму!

Прежде чем втыкать Kinect в компьютер, разберемся с его внутренностями. Наш экземпляр, который дали помучить ребята из xbox-zone.ru , разбирать мы не решились, да и незачем - на сайте ifixit.com опубликовано подробное пошаговое руководство о том, как разобрать его до винтика. Итак, внутри у Kinect’a находятся:

  1. Камера видимого диапазона - обычная RGB-камера, похожа на среднестатистическую веб-камеру: 640x480 и 30 кадров в секунду.
  2. Инфракрасный лазерный проектор, который создает в пространстве сетку из точек.
  3. Камера, снимающая в инфракрасном спектре, которая регистрирует изображение этой сетки.
  4. Стереомикрофон с продвинутой системой шумопонижения - для правильного голосового управления.
  5. Мотор, регулирующий положение датчика.
  6. Чип PrimeSensor - творит главную часть магии, обрабатывая картинку с ИК-камеры, дает на выходе - 3D-картинку.

Подключение

Kinect’ы, продающиеся в коробках, уже имеют все необходимое для работы, их можно подключить к компьютеру напрямую. Если же сенсор из комплекта с новым xbox’ом, то к нему потребуется специальный адаптер, так как разъем USB там нестандартный, с дополнительным питанием 12 В (сенсору слабенького тока от порта недостаточно). Оригинальный блок питания можешь купить в магазине Microsoft за $34,99, а сэкономить получится, заказав китайский клон в три раза дешевле. Теперь можешь подтыкать к компьютеру и начинать возиться с программной частью.

Драйвера

Как только Кинект появился, компания Adafruit объявила конкурс с призом в $3000 тому, кто создаст открытый драйвер для сенсора. Не прошло и недели, и денежки уже лежали на счету у победителя - Гектора Мартина, а первый работоспособный драйвер - в репозитории на github.com/OpenKinect/libfreenect . Многого он еще не умел, но главное - выводить карту глубин в окне OpenGL у него уже получалось. Драйвер продолжает развиваться, и у него есть преимущества - он распространяется под лицензией apache 2.0, которая позволяет использовать его в коммерческих проектах, и у него есть обертки для целой кучи языков (java, matlab, python, ruby).

Но тебе лучше взять другой драйвер. Сердце Kinect’а разработано не великой и могучей Microsoft, а молодой компанией PrimeSence. Для них Kinect - всего лишь один продукт, использующий их технологию NUI (natural user interface) - естественного пользовательского интерфейса, который позволяет человеку взаимодействовать с системой визуально, при помощи жестов, а также при помощи голосовых команд. Они желают повсеместного распространения своего детища и активно помогают open source-сообществу. В их репозитории на гитхабе лежит драйвер для референсного сенсора. Напрямую с кинектом он не работает, но его допиленная версия справляется с этой задачей отлично!

Скачать его можно, например, с сайта проекта . После установки загляни в диспетчер устройств - в разделе PrimeSensor должно быть три устройства: Kinect Camera, Kinect Motor и Kinect Audio. Но кроме самого драйвера, тебе потребуются библиотеки OpenNI и PrimeSense NITE.

OpenNI - это некоммерческая организация, которая стремится создать открытый стандарт для "Естественных взаимодействий" (Natural Interactions). Также она разработала OpenNI - одноименный фреймворк с открытым исходным кодом, созданный, чтобы взаимодействовать с одной стороны - с оборудованием, и с более высокоуровневыми программными прослойками - с другой стороны. Развивается он бурно, и тебе потребуется последняя нестабильная его версия, загрузить которую можно .

NITE - это промежуточное ПО, которое решает задачи определения жестов для управления компьютером и играми и работает в связке с OpenNI. Хотя это и коммерческий продукт, но его разработчик, PrimeSence, распространяет бесплатный ключ, которым может пользоваться кто угодно. Вот этот ключ - 0KOIk2JeIBYClPWVnMoRKn5cdY4=. Его надо ввести при установке. Загрузить NITE можно по ссылке .

После нужно изменить конфигурационные xml-файлы.

Правильные версии можно загрузить по адресу .

Отличаются они от тех, что уже предустановленны, только указанием серийного ключа. Распакуй архив и скопируй файл SampleConfig.xml из папки KinectXMLsOpenNI в папку Data внутри каталога OpenNI (вероятнее всего, он внутри папки C:Program Files), а файлы из папки KinectXMLsNITE - в C:Program FilesPrime SenseNITEData.

Руки вверх, в позу Пси!

Все готово, теперь можно пробовать кинект в деле. Для начала посмотри, какими готовыми программами ты можешь воспользоваться. Faast (Flexible Action and Articulated Skeleton Toolkit) - это инструментарий, который позволяет завязать движения пользователя на различные нажатия кнопок, перемещения мыши или действия джойстика. Таким образом можно подобрать набор действий, чтобы весьма правдоподобно играться в любую игру на PC. Загрузить его можно с projects.ict.usc.edu/mxr/faast/ .Пользоваться программой нетрудно. Первым делом нужно загрузить файл конфигурации, написать который ты сможешь сам.

Например, так он будет выглядеть для World of Warcraft:

# связь входного и выходного действия

Формат:

названиевходного действия порог типвыходного действия действие

left_arm_out 10 key a
left_arm_across 10 key d
lean_forwards 15 key w
lean_backwards 10 key s
left_arm_forwards 20 key tab
right_arm_forwards 20 key 1
right_arm_up 12 key 4
right_arm_across 15 key 2
right_arm_out 15 key 3

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

Kinemote

Другая программка для универсального управления. Из коробки позволяет управлять мультимедиа-центром XBMC и просто курсором мыши. Приятна она тем, что не требует калибровки и переводится в активный режим заранее выбранным жестом. Новые версии периодически выкладываются на сайте kinemote.net . А после последнего обновления в комплекте появилась еще и программа, позволяющая управлять не всем телом, а пальцами рук, правда, несмотря на все попытки, у меня она так и не заработала.

Ultraseven

Ультра Севен - это японский супергерой из конца шестидесятых, который бы мог и потеряться в памяти поколений, если бы не кинект и программка Ultraseven. Благодаря этой маленькой игрушке каждый может предстать в облике этого персонажа. Чтобы одеть его костюм, нужно встать в позу Пси. А уже оказавшись в красном облачении, можешь прикладывать руки к ушам, чтобы стрелять из смертоносного лазера и запускать бумеранг, торчащий из головы в виде ирокеза. Кроме тебя самого, отслеживаются и другие объекты в комнате - лучи будут пролетать за ближе лежащими предметами. Да, важное замечание - игрушка требует достаточно серьезной видеокарты, а на слабом железе работать будет очень нестабильно. Сайт проекта: code.google.com/p/kinect-ultra/ .

В здоровом теле - здоровый дух

Теперь - самое главное! О том, как написать свою программу, которая будет использовать возможности чудо-сенсора, а заодно и поддерживать бодрость тела: после часа работы за компьютером она заблокирует клавиатуру и мышь и не позволит пользоваться вновь, пока не сделаешь десять приседаний. В уже установленном тобой пакете OpenNI есть примеры проектов (как на C++, так и на C#) для Microsoft Visual Studio 2010, которые можно дописать для своих задач. Но эти примеры несколько запутаны, и будет проще воспользоваться оберткой, которую написал греческий студент Вангос Птернеас. Найти его библиотеку - Nui.Vision.dll - можно на его сайте . С ней строчек кода понадобится гораздо меньше.

Сначала создай в Visual Studio проект WPF Application и добавь в него ссылки на библиотеки OpenNi.net.dll (она находится в той папке, куда установлен OpenNI) и Nui.Vision.dll (ее можно положить в папку проекта).

Теперь разберемся с работой сенсора. В описании формы MainWindow.xaml выстави размер 662x520 и добавь к ней изображение, в которое будет выводиться картинка с сенсора, и холст, на который будет выводиться дополнительная информация:


using System.ComponentModel; // нужен для обработки в фоне
using Nui.Vision; // работа с кинектом

Затем объяви новый объект NuiUserTracker и инициализируй его в конструкторе. Да, нужно не забыть скопировать файл SamplesConfig.xml из директории OpenNI в папки Debug и Release твоего проекта.

В классе формы объяви все переменные:

NuiUserTracker _skeleton; // объявление объекта трекера
BackgroundWorker _worker = new BackgroundWorker(); // фоновый обработчик
double topY = 0; // верхнее положение приседания
double bottomY = 0; // нижнее положение приседания
int numOfBobs = 0; // счетчик полуприседаний
bool bottomPosition, topPosition; // биты, в которых фиксируется пересечение линий
Ellipse ellipse = new Ellipse // кружочек на груди
{ Fill = new SolidColorBrush(Colors.AliceBlue), Width = 20, Height = 20 };

В конструкторе инициализируй обработчик событий:

// инициализируем объект и подгружаем конфиги кинекта
_skeleton = new NuiUserTracker("SamplesConfi g.xml");
// объявляем функцию, которая будет обрабатывать
// событие перемещения пользователя
_skeleton.UsersUpdated += new NuiUserTracker.UserListUpdatedHandler(Skeleton_UsersUpdated);

Теперь в переменной NuiUserListEventArgs.Users представлены все обнаруженные пользователи и набор координат всех распознанных частей их тел. Далее напиши обработчик события смены координат пользователя. Как только у тебя появляется ненулевое значение вертикальной координаты шеи пользователя - считай, что он готов приседать. Потом добавь две линии. Одна чуть ниже шеи, а другая - чуть выше пояса. Одним приседанием будет считаться двойное пересечение обеих линий: сначала - сверху вниз, а потом - снизу вверх. Отслеживается пересечение линий шеи (хотя визуально она где-то на груди). Такой вариант не идеальный - можно схалтурить, нагибаясь, или подойдя поближе к сенсору.

// проделываем все манипуляции для каждого пользователя
// (хотя приседать они будут под одну гребенку)

foreach (var user in e.Users) {
// если впервые нашлась шея
if ((topY == 0) && (user.Neck.Y !=0))
{
// определяем положение верхней линии
topY = user.Neck.Y+20;
Line topLine = new Line { // определяем верхнюю линию
Y1 = topY,X1 = 0, Y2 = topY, X2 = 662,
Stroke = new SolidColorBrush(Colors.Red),
StrokeThickness = 4 };
// рисуем верхнюю линию на холсте
LayoutRoot.Children.Add(topLine);
// определяем положение нижней линии
bottomY = user.Torso.Y + 20;
Line bottomLine = new Line { // определяем нижнюю линию
Y1 = bottomY, X1 = 0, Y2 = bottomY, X2 = 662,
Stroke = new SolidColorBrush(Colors.Blue),
StrokeThickness = 4 };
// рисуем нижнюю линию на холсте
LayoutRoot.Children.Add(bottomLine);
// рисуем шею на холсте
LayoutRoot.Children.Add(ellipse);
}

При каждом изменении координат нужно проверять, не произошло ли приседания:

ellipse.Margin= new Thickness(user.Neck.X, user.Neck.Y, 0, 0); //перемещаем кружочек вслед за шеей
// ставим флажок верхнего положения
if (user.Neck.Y+5 < topY) topPosition = true;
// ставим флажок нижнего положения
if (user.Neck.Y + 25 > bottomY) bottomPosition = true;
if (topPosition && bottomPosition)
{ // если оба флага есть
numOfBobs++; // половину приседания в копилку
topPosition = false; // сбрасываем флажки
bottomPosition = false;
}
// если полуприседаний набралось двадцать штук - значит все,
// выключаем программу
if (numOfBobs >= 20)
{
Application.Current.Shutdown(); // выходим из программы
}

Осталось разобраться с таймером и блокировкой клавиатуры и мыши. Сперва в App.xaml.cs нужно добавить еще одно пространство имен:

// работа с неуправляемым кодом, понадобится для
// блокировки клавиатуры
using System.Runtime.InteropServices;

Потом объявить метод блокировки клавиатуры и мыши. Удобно воспользоваться функцией Windows API BlockInput:

public partial class NativeMethods
{

public static extern bool BlockInput(
bool fBlockIt);
}

Для таймера можно создать отдельную форму и указать ее в App.xaml в качестве точки входа в программу. В код этой формы нужно добавить нэймспэйс работы с таймерами:

using System.Timers;

Объявить таймер:

private static System.Timers.Timer TheTimer;

private void button1_Click(object sender, RoutedEventArgs e)
{
// ставим таймер на час
TheTimer = new System.Timers.Timer(3600000);
// как пройдет - блокируем комп
TheTimer.Elapsed += new ElapsedEventHandler(BlockPC);
TheTimer.Enabled = true;
}

А при срабатывании таймера будет блокироваться пользовательский ввод и открываться окошко с видео с кинекта:

void BlockPC(object source, ElapsedEventArgs e)
{
App.NativeMethods.BlockInput(true); // блокируем ввод
// создаем экземпляр формы с картинкой от сенсора
MainWindow w = new MainWindow();
w.Show();

}// и показываем ее

Осталось не забыть добавить отмену блокировки перед выходом из программы:

// возвращаем пользователю клавиатуру и мышь
App.NativeMethods.BlockInput(false);

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

Одного кинекта мало

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

Но не все только людям! Еще Kinect придется по вкусу и роботам - еще бы, раньше трехмерные лазерные дальномеры стоили несколько тысяч долларов, а это устройство реализует те же возможности всего за две сотни. Таким образом, можно собрать мощного робота на недорогих серийных компонентах. Например: iRobot Create в качестве шасси, обычный нетбук с установленной Ubuntu и ROS - в роли мозга системы, а Kinect - в качестве датчиков. Именно так и выглядит Willow Garage Turtlebot . Да похожим образом устроен и Bilibot , к которому прикреплена еще и миловидная красная клешня. Плюс уже доступен для заказа за $1200.

Вообще кинект - первый представитель нового класса устройств. Уже готов и его конкурент, изначально нацеленный на работу с PC, - Asus WAVI Xtion. Вероятно, пройдет еще немного времени, и к этой гонке подключатся новые производители, библиотеки обзаведутся обертками для множества языков, и готовые решения войдут в повседневную жизнь, а вид человека, машущего руками перед компьютером, станет обычным делом.

От Microsoft. Но, к счастью или нет, новость о чудо-сенсоре меня не «зацепила». Вспомнил, а точнее напомнили мне о нём спустя год, когда появилась мысль о приобретении, как оказалось, стильного пыле сборника – Xbox 360 Slim. Хоть и включается консоль только во время пьяных вечеринок, положительных эмоций и весёлых видео оставляет после себя не мало. Но наигравшись в стандартные Adventures и Joy Ride , в голову взбрела идея о создании собственной игры для Kinect-а, как оказалось, всё довольно просто…

Идея

Не претендуя на лавры Rovio , Halfbrick и им подобных, решено было создать простую (как тогда ещё думали, для узкого круга знакомых) игру. Идея игры родилась сама собой, после того, как было озвучено слово «простая», тут же вспомнились портативные электронные игры - «Электроника». Да, да…. те самые PSP – 80-х.

Как нельзя лучше, под наши задумки, подошла самая популярная игра из серии - «Ну, погоди!». Определившись с игрой и затарившись пивом, началась работа.

Реализация

Из мягкого использовали:

  • Visual Studio C# 2010
  • Microsoft XNA 4.0
  • Kinect SDK (в начале это была beta, позже пересели на версию 1.5)
  • CorelDRAW
Твёрдого и жидкого:
  • Kinect
  • Пиво, сухарики

В первой версии игры, за основу была взята оригинальная графика классической «Ну, погоди!», управление производилось с клавиатуры. Этого было достаточно для тестирования и настройки всех компонентов. Убедившись, что всё работает, началась работа над взаимодействием игры с Kinect-ом.

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

Для определения позиции занимаемое игроком, нам потребовалось всего 6 отслеживаемых сенсором точек:

Rh = skeleton.Joints; lh = skeleton.Joints; rs = skeleton.Joints; ls = skeleton.Joints; rk = skeleton.Joints; lk = skeleton.Joints;

  • rh – правая рука/кисть
  • lh – левая рука/кисть
  • rs – правое плечо
  • ls – левое плечо
  • rk – правое колено
  • lk – левое колено
Собственно реализация:

If (rh.Position.Y > rs.Position.Y && (rh.Position.Y - lh.Position.Y) <= 0.1 && (rh.Position.X - lh.Position.X) <= 0.1 && (rh.Position.X - rs.Position.X) >= 0.3) { state = 1; } else if (lh.Position.Y > ls.Position.Y && (rh.Position.Y - lh.Position.Y) <= 0.1 && (rh.Position.X - lh.Position.X) <= 0.1 && (lh.Position.X - ls.Position.X) <= -0.3) { state = 0; } else if (lh.Position.Y < lk.Position.Y && (rh.Position.Y - lh.Position.Y) <= 0.1 && (rh.Position.X - lh.Position.X) <= 0.1 && (lh.Position.X - lk.Position.X) <= 0) { state = 2; } else if (rh.Position.Y < rk.Position.Y && (rh.Position.Y - lh.Position.Y) <= 0.1 && (rh.Position.X - lh.Position.X) <= 0.1 && (rh.Position.X - rk.Position.X) >= 0) { state = 3;

Код проверяет позиции суставов, сопоставляя их друг с другом, и принимает решение о позиции волка, если игрок правильно проделал движения. A именно, для того чтобы поймать яйца с верхних ярусов, придётся поднять кисти рук выше своих плеч. А для яиц с нижних ярусов, кисти рук должны находиться ниже, относительно колен игрока.

Доработка игры

Ура всё заработало! Поигравшись пару дней, как это зачастую и происходит, захотелось чего-то большего от игрушки. Не столько в функциональном плане, сколько в её интерфейсе, уж слишком серо, без году 30 летняя игра, смотрится на большом экране.

Решено было её перекрасить, и не просто перекрасить, а заново всё нарисовать. Но так как среди нас ни художников, ни других «карандашей» не нашлось, пришлось прибегнуть к помощи фрилансеров.

карандаши* - так мы ласково называем графических дизайнеров

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

Таким получился главный герой:

Но как дело дошло до яиц, всплыл вопрос, который интересовал меня ещё будучи совсем юным. А зачем волку яйца…!? Вроде хищник, так не проще ли ему, вместо ловли яиц, вскарабкаться по жёлобу, да и не прихватить с собой пару кур?
Но так как кардинально переписывать игру не хотелось, нужно было придумать что-то такое, что также бы скатывалось (как и яйца) волку в мешок, но при этом выглядело более логичным, учитывая потребности волка в мясе/дичи.

И на замену яйцам, пришли…
Да! Как вы уже догадались - поросята!


не ищите аналогий с упомянутыми выше играми, поросят придумали сами

В виде бонуса в игру были также добавлены три уровня сложности (отличающиеся между собой начальной скоростью скатывания поросят) и таблица рекордов. Так и появилась игра, с вполне логичным названием, Hungry Wolf.

Пара скришотов:

Ну вот собственно и всё. Спасибо тем, кто дочитал или проскролил до конца, если есть вопросы о технической реализации или какие другие – задавайте, отвечу.

Недавно я купил xbox 360 kinect, чтобы поиграться с построением карт местности у робота. Купить, то купил, только вот разъём меня разочаровал, оказывается для PC есть специальная версия с переходником, и она дороже, но инженера не проведёшь, если она как-то работает в x-box, с usb интерфейсом, то и на компьютере должно всё работать. Почитав форумы, всё стало понятно через пару минут — достаточно порезать кабель и к нужным проводам подать 12В, остальные кинуть на обычный USB. Резать было жалко, но ждать переходник с ALI Долго, покупать в Ростове — нецелесообразно, а приставка у меня плейстешн, и подключить это чудо всё равно некуда. Вообще распиновка специального разъёма такая.Понятно, что все эти контакты не содержат отдельных проводов, и разрезав кабель я увидел такую картину. Итого у нас 5 проводов — 4 стандартные для USB, один для подачи 12В.
Припаиваем разъём FW типа «мама», как раз вы найдёте много блоков 12в, с таким разъёмом типа «папа», остальные разъёмы спаиваем согласно стандартным цветам USB.

Землю (чёрный провод) объединяем и с кабелем USB, который идёт к компьютеру, и с разъёмом для 12В. В результате получаем такую картину

Сначала я захотел проверить работоспособность с системой Windows, потратил много сил на установку родной SDK с сайта майкрософт, убедился что вроде бы работает, но что с этим всем делать ничего не придумал.

Потом перегрузился в Linux, и выяснил, что есть такой открытый проект — OpenKinect . Следуя всем инструкциям с github, установил его на компьютер. Моя цель была проверить работоспособность устройства и убедиться, что я порезал кабель правильно. Для этого я использовал утилиту RtabMAP

На странице подробно описано как её установить для всех типов unix систем. После всех этих мучений, наконец таки я увидел заветную картинку построения 3д модели моей комнаты

Проверил потом ещё и в офисе. Работает! После построения можно карту повращать — для человека, который это видит первый раз всё выглядит фантастически)

В 2010 году компания PrimeSense , занимающаяся в проекте 3D визуализацией, выпустила собственные драйвера и фреймворк для Kinect под названием OpenNI . Вскоре после этого, она объявила о партнерстве с ASUS в производстве нового Kinect -подобного устройства Xtion .

В 2011 году Microsoft выпустила некоммерческий комплект разработчика ПО под названием Kinect SDK . В феврале 2012 года свет увидела коммерческая версия, сопровождающая сенсор Kinect в версии для Windows .

В ноябре 2013 года Apple приобрела израильскую компанию PrimeSense .

Устройство Kinect

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

Инфракрасный CMOS -датчик (complementary metal-oxide semiconductor , комплементарная структура металл-оксид-полупроводник ) представляет собой интегральную схему, содержащую матрицу фотодетекторов, действующую как инфракрасный датчик изображения. Это устройство также в разных литературных источниках называют ИК-камерой, ИК-датчиком, CMOS глубины изображения, или CMOS -датчиком.

RGB -камера представляет из себя VGA -камеру (640 х 480 пикселей) с 8-битным разрешением. Это звучит не впечатляюще, но дело в том, что волшебство происходит в датчике удаленности, который полностью независим от RGB -камеры.

Два элемента датчика удаленности, ИК-проектор и ИК-камера, расположены на передней панели Kinect . Они работают совместно, используя чип от PrimeSense для воссоздания 3D -захвата движения. Для этого используется метод, называемый 3D-сканирование со структурированным светом . ИК-камера также имеет разрешение VGA (640 х 480 пикселей) с глубиной цвета 11-бит, обеспечивая 2048 уровней чувствительности.

Слева-направо: ИК-камера, RGB-камера, светодиод и ИК-проектор

Практический диапазон работы Kinect составляет от 1,2 м до 3,5 м. Если объекты находятся слишком близко к датчику, они не будут отсканированы и будут просто появляться в виде черных пятен. Если же они находятся слишком далеко, то точность сканирования будет слишком низкой, что делает их выглядящими как плоские предметы. Для версии Kinect под ОС Windows , диапазон камеры составляет от 40 см до 3 м.

Различия между версиями сенсора Kinect

Kinect можно приобрести тремя различными способами:

  • Kinect для Windows - отдельное устройство, поставляемое с драйверами под ОС Windows (стоимость порядка 11 тыс рублей)
  • Kinect для Xbox 360 в виде отдельного перифирийного устройства для использования с Xbox 360 (цена гораздо ниже первого варианта, около 5 тыс. рублей)
  • Kinect для Xbox 360 в комплекте с Xbox 360 (цены на комплект начинаются примерно с 9 тыс.рублей) . Для игроманов — это лучший вариант покупки.

В настоящий момент в продаже начинают появляться приставки в комплекте которых идет уже вторая версия сенсора — Kinect 2. Он обладает бóльшим разрешением, и, конечно это более продвинутое устройство. Но в виде отдельного устройства в продаже его пока нет, а цена новых приставок со вторым Kinect это уже минимум 20 тыс. рублей. К тому же, я планирую использовать этот сенсор совместно с , а на уровне драйверов в ней поддерживатеся пока только первая версия сенсора. Так что для разработчиков — первый Kinect для Xbox 360 является оптимальным выбором на сегодняшний день.

Есть один очень важный момент, который необходимо учитывать при приобретении устройства.

Если вы покупаете Kinect в версии для Windows , или Kinect для Xbox 360 в качестве автономного периферийного устройства, то в этом случае у вас будет все необходимое для подключения к компьютеру.

Но, возможно, у вас уже имеется Kinect , который вы используете с игровой консолью Xbox 360 или же вы планируете купить его вместе с приставкой, то в этом случае, вам потребуется отдельно специальный адаптер с блоком питания, который достаточно проблематично найти.

В последних версиях Xbox 360 , консоль использует специальный USB -порт, обеспечивающий достаточный ток для питания сенсора и для таких приставок не требуется дополнительный блок питания. Плюс ко всему, USB -разъем сенсора отличается от стандартного USB . Проблемы дополнительного питания и совместимости со стандартным раъемом USB как раз и решаются использованием специального адаптера.

Модель Kinect

Чтобы выяснить какая именно модель сенсора Kinect находится у вас в руках, вам необходимо взглянуть на основание подставки. У меня модель 1414.

Возможности Kinect

Так что же мы можем получить от Kinect"а и всех этих высокотехнологичных вещей, скрытых внутри него? После того, как Kinect правильно установлен и подключен к компьютеру, мы можем получить доступ к потоку сырых данных и других возможностей, предоставляемых конкретным промежуточным ПО. Мы можем воспользоваться драйверами OpenNI и NITE в качестве промежуточного ПО, а также использовать этот сенсор совместно с ROS .

RGB-изображение

Мы можем использовать Kinect в качестве веб-камеры с разрешением 640×480 пикселей. Получить доступ к RGB -изображению можно при помощи библиотеки OpenNI .

ИК-изображение

Kinect имеет инфракрасный CMOS , и мы опять же можем получить доступ к инфракрасному CMOS -изображению с разрешением 640×480 точек, воспользовавшись OpenNI .

Карта глубины

Карта глубины является результатом операций, выполняемых чипом PS1080 компании PrimeSense над ИК-изображением, полученным Kinect с ИК-CMOS . Это VGA -изображение имеет 11-битное разрешение. Это 2048 различных значений, представленных графически уровней серого цвета от белого (2048) до черного (0).

Есть одна деталь, которую нужно учитывать: измереное датчиком глубины сцены имеет логарифмический масштаб, а не линейный.

Отслеживание рук и скелета

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

Похожие статьи