Kinect. Нужно с чего-то начать...

Kinect или Prime Sensor - что это такое и как его использовать? Этот вопрос уместен, если вы не видели многочисленных видео-роликов в интернете с использованием этих устройств.. Поэтому, неверное, стоит начать с просмотра или с поиска информации о kinect, если для вас эти слова не знакомы... Хотя можно ничего не искать и не смотреть, а прочитать моё супер информативное определение этого девайса: Kinect — это круть...

Теперь, когда мы знаем уже всё о том, что такое кинект, предлагаю начать понемногу разбираться в нём. Чтобы прикрутить его к openwrt, конечно, понадобится некоторое время. Время, чтобы разобраться в софте.

Предлагаю для начала запустить kinect под linux (в моём случае Ubuntu) на персональном компьютере, а потом, возможно, и доберемся до адаптации kinect для openwrt.

Начнём...

Скачиваем драйвера, обеспечивающие аппаратную поддержку камеры и сенсоров kinect. Насколько я понимаю, существует два варианта драйверов: это проект OpenNi и libfreenect. Предлагаю попробовать собрать проект OpenNi.

Скачиваем:

git clone https://github.com/OpenNI/OpenNI.git

Есть два способа сборки этого проекта. Первый - это запустить скрипт: OpenNI/Platform/Linux-x86/CreateRedist/RedistMaker. Второй - более привычный для нас - это запустить make. Предлагаю пойти вторым путем.

Заходим в директорию OpenNI/Platform/Linux-x86/Build и запускаем make. Должны увидеть примерно следующее:

OpenNI/Platform/Linux-x86/Build$ make make -C OpenNI make[1]: Вход в каталог `/home/dima/MyWork/h-wrt/kinect/OpenNI/Platform/Linux-x86/Build/OpenNI' mkdir -p Release g++ -MD -MP -MT "./Release/openNI.d Release/openNI.o" -c -O2 -DNDEBUG -I../../../../Include -I../../../../Source -I../../../../Source/External/TinyXml -DXN_EXPORTS -fPIC -fvisibility=hidden -o Release/openNI.o ../../../../Source/OpenNI/openNI.cpp g++ -MD -MP -MT "./Release/XnBaseNode.d Release/XnBaseNode.o" -c -O2 -DNDEBUG -I../../../../Include -I../../../../Source -I../../../../Source/External/TinyXml -DXN_EXPORTS -fPIC -fvisibility=hidden -o Release/XnBaseNode.o ../../../../Source/OpenNI/XnBaseNode.cpp

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

OpenNI/Platform/Linux-x86/Build$ sudo make install

Если видим вот такую ошибку:

Kinect/OpenNI/Platform/Linux/Build
cd ../Redist; ./install.sh; cd -
/bin/sh: ./install.sh: not found

То заходим в директрию:

/Kinect/OpenNI/Platform/Linux/Redist/OpenNI-Bin-Dev-Linux-x86-v1.5.2.23$

И запускаем скрипт - install.sh

Драйвера проекта OpenNi, видимо, поддерживают только PrimeSensor. Для поддержки Kinect существует «fork from PrimeSense to support the Kinect» с именем boilerbots https://github.com/boilerbots.

Скачиваем boilerbots:

git clone https://github.com/boilerbots/Sensor.git

Переходим в ветку kinect, собираем и устанавливаем:

Sensor$ git checkout kinect 
Branch kinect set up to track remote branch kinect from origin. 
Switched to a new branch 'kinect' 

Sensor/Platform/Linux-x86/Build$ make

Sensor/Platform/Linux-x86/Build$ sudo make install

Далее скачиваем последнюю версию OpenNi Middleware Binaries вот отсюда.

Также на этой странице нужно обратить внимание на free key:
0KOIk2JeIBYClPWVnMoRKn5cdY4=

Разархивируем и заходим в директорию Nite/Data. Там располагаются 3 файла с расширением xml. В них нужно вставить вместо строчки «insert key here» вот тот free key. Примерно выглядеть должно вот так:

<OpenNI>
        <Licenses> 
                <License vendor="PrimeSense" key="0KOIk2JeIBYClPWVnMoRKn5cdY4="/> 
        </Licenses> 

Далее выполняем скрипт install.sh и вводим еще раз ключ при запросе:

Nite$ sudo ./install.sh Package exported to: /usr/lib/mono/2.0/XnVNite.net.dll -> ../gac/XnVNite.net/1.4.0.5__399870656fc6c787/XnVNite.net.dll Installed Bin/XnVNite.net.dll into the gac (/usr/lib/mono/gac) Please enter your PrimeSense license key:0KOIk2JeIBYClPWVnMoRKn5cdY4=

Подключаем kinect и посмотрим на вывод dmesg:

usb 1-3: new high speed USB device using ehci_hcd and address 5
hub 1-3:1.0: USB hub found
hub 1-3:1.0: 3 ports detected
usb 1-3.2: new full speed USB device using ehci_hcd and address 6
usb 1-3.1: new high speed USB device using ehci_hcd and address 7
usb 1-3.3: new high speed USB device using ehci_hcd and address 8

Теперь можно перейти в директорию OpenNI/Platform/Linux-x86/Bin/Release или в директорию Nite/Samples/Bin/Release и запускать рабочие примеры.

Пример работы программы /Nite/Samples/Bin/Release$ Sample-Players

С проектом OpenNi закончили. Не то, чтобы мы теперь всё понимаем, но, по крайне мере, получили рабочие примеры и исходные коды к ним. Поэтому дальше будет проще...

Чтобы понять, чем проект OpenNi отличается от проекта «OpenKinect project- libfreenect», предлагаю собрать и libfreenect.

Страница проекта libfreenect: http://openkinect.org/wiki/Main_Page

Страница с описанием процесса сборки:
http://openkinect.org/wiki/Getting_Started

Скачиваем исходные коды:

git clone https://github.com/OpenKinect/libfreenect.git

Создаём директорию build, переходим в неё и запускаем ccmake:

$ cd libfreenect
$ mkdir build
$ cd build
$ ccmake ..

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

CMAKE_INSTALL_PREFIX /usr/local LIBUSB_1_INCLUDE_DIR /usr/include/libusb-1.0 LIBUSB_1_LIBRARY /usr/lib/libusb-1.0.so

Нажимаем «g» для генерации файла и выхода.

Выполняем сборку:

$ cmake ..
$ make
$ sudo make install

Рабочие примеры располагаются здесь kinect/libfreenect/build/bin.

Подведем некий итог... Думаю, что с «первым маааленьким шажком по освоению kinect» мы успешно справились. Дальше будет одновременно и легче и труднее ))... В целом, возможности kinect очень впечатляют, теперь бы выделить свободное время и попытаться уже подцепить его к какой-нибудь железке... к нашему любимому роутеру с openwrt)))

Купить кинект у нас:

кинект