Интернет. Железо. Программы. Обзоры. Операционные системы
Поиск по сайту

Делаем адаптер питания Kinect из подручных средств. Игру для Kinect, от нечего делать В здоровом теле - здоровый дух

Попал мне в руки сенсор 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 из компьютера в консоль и наоборот, можно установить переключатель.

Песочница

Наташа 7 марта 2011 в 02:49

Установка Kinect в Windows 7

  • Чулан *
Введение
Данная статья родилась в процессе создания простенькой программы на C#, которая получает изображение с обычной USB камеры и сохраняет картинку раз в 5 секунд на жесткий диск. Так получилось, что у меня есть только встроенная камера моего ноутбука, а для решения поставленной задачи камера должна смотреть через окно на улицу, покупать новую совсем не хотелось, поэтому мой взгляд обратился к стоящему на телевизоре Kinect`у. Соответственно первоочередная задача - подключить устройство к компьютеру, с ней и будем сейчас разбираться.

Забегая вперед скажу, что использовать Kinect вместо камеры я еще не пробовал, т.к. нашлась обычная usb веб-камера, но эту затею я не оставлю, т.к. обертки kinect`а для c# уже есть.

Необходимые условия
Сразу хочу оговориться, что все операции проводились в Windows 7 Ultimate, установленной на MacBook через BootCamp, уверен на 99.9% что это значения не имеет, но упомянуть будет не лишним.

Итак, что же нам понадобится:

  • Kinect
  • Компьютер
  • ОС Windows 7
  • Visual Studio 2010 (с установленной поддержкой C++)
  • Интернет (для загрузки необходимых библиотек)
Подготовительный этап
Возможно, готовые драйверы для работы Kinect можно найти где-то на просторах интернета, но согласитесь, что созданное своими руками приятнее, понятнее и за ошибки ругать кроме себя некого. Поэтому мы начнем с загрузки всех необходимых программ и библиотек.

Для удобства я создам папку C:\OpenKinect, в которой будут происходить все работы.

libusb-win32
Это порт библиотеки libusb, которая позволяет получать доступ к различным USB устройствам из клиентских приложений.
Скачиваем файл с именем вида libusb-win32-bin-x.x.x.x.zip из последнего билда, в моем случае это был билд с номером 1.2.2.0 и распаковываем его в C:\OpenKinect\Libusb-win32 (имя папки не принципиально, я назвал для удобства, это верно для всех папок, которые мы будем создавать).

pthreads-win32
Pthreads является набором библиотек, реализующих простую работу с потоками по стандарту POSIX. Проект очень древний, обновлений не было с 2006 года, поэтому даю прямую ссылку на необходимый файл, который необходимо будет разархивировать в папку C:\OpenKinect\Pthreads-win32.

Также необходимо будет скопировать файл C:\OpenKinect\Pthreads-win32\Pre-built.2\lib\phtreadVC2.dll в папку \Windows\System32\

Glut
Это библиотека для работы с OpenGL. Еще один старый проект, и еще одна просто ссылка на файл, который необходимо распаковать в папку C:\OpenKinect\Glut
glut-3.7.6-bin.zip

Копируем файл C:\OpenKinect\Glut\glut32.dll в \Windows\System либо в любую папку, которая упомянута у нас в переменных среды (PATH)
Кроме этого необходимо скопировать файл C:\OpenKinect\Glut\glut.h в папку VC\include\GL вашей VS2010, если папки GL нет, то нужно ее создать. Файл C:\OpenKinect\Glut\glut32.lib в папку VC\lib. В моем случае пути выглядят следующим образом:

  • C:\Program Files\Microsoft Visual Studio 10.0\VC\include\GL
  • C:\Program Files\Microsoft Visual Studio 10.0\VC\lib
Сборка проекта
Git
Естественно мы не сможем обойтись без исходных файлов проекта libfreenect, поэтому качаем Git, устанавливаем его, во время установки выбираем опции «Run Git from the Windows Command Promt» и «Check-out Windows-style, commit Unix-style line endings» .
Git-1.7.4-preview20110204.exe

Следующим шагом открываем командную строку и последовательно вводим следующее (парсер преобразует адрес в ссылку, поэтому я добавил лишний пробел между https:// и github.com, его нужно убрать):
cd c:\OpenKinect
git clone https:// github.com/OpenKinect/libfreenect.git
cd libfreenect
git branch --track unstable origin/unstable
git checkout master
git pull
В результате мы получим папку с исходниками C:\OpenKinect\libfreenect

CMake
Утилита, которая поможет нам собрать все наши библиотеки в один проект. Загружаем программу с сайта, на данный момент последняя версия 2.8.4, устанавливаем, во время установки выбираем опцию «Add CMake to the system PATH for all users»

После установки запускаем файл cmake-gui.exe. В первой строке выбираем путь к папке с исходниками, у нас это C:/OpenKinect/libfreenect, вторая строка - папка, где будет собранный проект C:/OpenKinect/Drivers. Ставим галочки на Grouped и Advanced, нажимаем кнопку Configure, в открывшемся окне выбираем Visual Studio 10 и нажимаем кнопку Finish. Программа отработает с ошибкой, т.к. не указаны пути к нашим библиотекам, укажем так, как показано на скриншоте и дважды нажмем кнопку Configure.

Теперь у нас не должно быть ошибок и можно смело нажимать кнопку Generate, в результате в папке C:\OpenKinect\Drivers у нас окажется проект, который нам необходимо будет построить в VS2010.

Visual Studio 2010
Открываем в VS2010 наш свежеиспеченный проект из папки C:\OpenKinect\Drivers (файл libfreenect.sln) и построим его (у меня почему-то проект строился только со второго раза). Если все прошло без ошибок, то мы должны получить папки C:\OpenKinect\Drivers\lib\Debug и C:\OpenKinect\Drivers\bin\Debug, первую из которых нужно добавить в PATH.

На этом этап сборки завершен и переходим непосредственно к подключению Kinect`a

Подключение Kinect
Здесь достаточно все просто. Подключаем Kinect, система его определит как Xbox NUI Motor и не сможет найти драйверы, поможем ей в этом. Через диспетчер устройств находим нашего страдальца, выбираем опцию «Обновить драйвер» и указываем папку C:\OpenKinect\libfreenect\platform\windows\inf, система запросит подтверждение на установку неподписанного драйвера, даем свое согласие, после этого на Kinect`е должен замигать зеленый диод и в списке устройств должны появится еще два неопознанных устройства «Xbox NUI Camera» и «Xbox NUI Audio» , устанавливаем для них драйвера из папки C:\OpenKinect\libfreenect\platform\windows\inf.

На этом все наши работы закончены, осталось только проверить как все работает.

Тестирование
Для проверки дееспособности Kinect мы воспользуемся тремя утилитами из папки
  • C:\OpenKinect\Drivers\bin\Debug:
  • glpclview.exe - Показывает возможности 3D камеры Kinect
  • glview.exe - Показывает работу обычной камеры
  • tiltdemo.exe - Задействует моторы Kinect
Вот и результат:

P.S. Если вы захотите написать свою программу для работы с Kinect, то в папке C:\OpenKinect\libfreenect\wrappers есть обертки под множество языков.

При написании статьи использовалась информация с сайта

От 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.

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

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