MacBook Air with Kinect

発端: KinectってUSBでPCにつないでいじれるらしいよ…

OpenKinect / libfreenect というライブラリが公開されていた。
KinectのデータをUSB接続してPCで受信することができるとのこと。

それはそれとして、
Kinectはふつうにゲームやるために欲しかったので買ったんだけど、XboxとKinectがセットの製品を買ったらUSBケーブルがついてなくて(別売もしてなくて)泣くことになった(;_;)

というわけでわざわざKinectを単体でもうひとつ購入した。。。

Xbox 360 Kinect

これでKinectをPCにつないで遊べるはず。

環境

・このまえ買った MacBook Air. Mac OS X のバージョンは 10.6.5
・単体で購入した Kinect


$ uname -a
Darwin ho-ge-no-MacBook-Air.local 10.5.0 Darwin Kernel Version 10.5.0: Fri Nov 5 23:20:39 PDT 2010; root:xnu-1504.9.17~1/RELEASE_I386 i386

事前準備: MacPortsで必要なソフトをインストールしておく


$ sudo port selfupdate
$ sudo port upgrade installed

MacPorts base version 1.9.2 installed な感じ。

cmake が必要らしいのでインストール。


$ sudo port install cmake

git も必要。インストール済み。


$ port list git-core cmake
git-core                       @1.7.3.3        devel/git-core
cmake                          @2.8.3          devel/cmake

OpenKinect と libusb のソースコードをダウンロードする

作業用のディレクトリを作っておいて、そこにダウンロードする。


$ git clone git://git.libusb.org/libusb.git
$ git clone https://github.com/OpenKinect/libfreenect.git

libusbをインストールする

OpenKinect(libfreenect) のパッチをあてて libusb をインストールする。

コマンドだけ追うとこんな感じ。


$ cd ./libusb/
$ chmod +x autogen.sh
$ ./autogen.sh 
$ patch -p1 < ../libfreenect/platform/osx/libusb-osx-kinect.diff
$ ./configure
$ make
$ sudo make install | tee ./install.log

もうちょっとログを交えたもの。


$ cd ./libusb/
$ ls
AUTHORS			PORTING			configure.ac
COPYING			README			doc
INSTALL			THANKS			examples
Makefile.am		TODO			libusb
NEWS			autogen.sh		libusb-1.0.pc.in
$ chmod +x autogen.sh
$ ./autogen.sh 
$ patch -p1 < ../libfreenect/platform/osx/libusb-osx-kinect.diff
patching file libusb/libusbi.h
patching file libusb/os/darwin_usb.c
patching file libusb/os/darwin_usb.h
patch unexpectedly ends in middle of line
Hunk #2 succeeded at 147 with fuzz 1.
$ ./configure
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... ./install-sh -c -d
checking for gawk... no
checking for mawk... no
checking for nawk... no
checking for awk... awk
checking whether make sets $(MAKE)... yes
checking for gcc... gcc
(中略)
$ make
$ sudo make install | tee ./install.log
Password:
Making install in libusb
test -z "/usr/local/lib" || .././install-sh -c -d "/usr/local/lib"
 /bin/sh ../libtool --mode=install /usr/bin/install -c  'libusb-1.0.la' '/usr/local/lib/libusb-1.0.la'
libtool: install: /usr/bin/install -c .libs/libusb-1.0.0.dylib /usr/local/lib/libusb-1.0.0.dylib
libtool: install: (cd /usr/local/lib && { ln -s -f libusb-1.0.0.dylib libusb-1.0.dylib || { rm -f libusb-1.0.dylib && ln -s libusb-1.0.0.dylib libusb-1.0.dylib; }; })
libtool: install: (cd /usr/local/lib && { ln -s -f libusb-1.0.0.dylib libusb-1.0.0.1.0.dylib || { rm -f libusb-1.0.0.1.0.dylib && ln -s libusb-1.0.0.dylib libusb-1.0.0.1.0.dylib; }; })
libtool: install: /usr/bin/install -c .libs/libusb-1.0.lai /usr/local/lib/libusb-1.0.la
libtool: install: /usr/bin/install -c .libs/libusb-1.0.a /usr/local/lib/libusb-1.0.a
libtool: install: chmod 644 /usr/local/lib/libusb-1.0.a
libtool: install: ranlib /usr/local/lib/libusb-1.0.a
----------------------------------------------------------------------
Libraries have been installed in:
   /usr/local/lib
 
If you ever happen to want to link against installed libraries
in a given directory, LIBDIR, you must either use libtool, and
specify the full pathname of the library, or use the `-LLIBDIR'
flag during linking and do at least one of the following:
   - add LIBDIR to the `DYLD_LIBRARY_PATH' environment variable
     during execution

See any operating system documentation about shared libraries for
more information, such as the ld(1) and ld.so(8) manual pages.
----------------------------------------------------------------------
(略)

OpenKinectをインストールする


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

ccmake を起動したらまず c キーを押して、こんな画面になるのを待つ。


 BUILD_AS3_SERVER                 ON                                           
 BUILD_C_SYNC                     ON                                           
 BUILD_EXAMPLES                   ON                                           
 BUILD_FAKENECT                   ON                                           
 CMAKE_BUILD_TYPE                                                              
 CMAKE_INSTALL_PREFIX             /usr/local                                   
 CMAKE_OSX_ARCHITECTURES                                                       
 CMAKE_OSX_DEPLOYMENT_TARGET                                                   
 CMAKE_OSX_SYSROOT                /Developer/SDKs/MacOSX10.6.sdk               
 LIBUSB_1_INCLUDE_DIR             /usr/local/include                           
 LIBUSB_1_LIBRARY                 /usr/local/lib/libusb-1.0.dylib              
 LIB_SUFFIX                                                                    
 
LIB_SUFFIX: Suffix for library installation directory                           
Press [enter] to edit option                                 CMake Version 2.8.3
Press [c] to configure     Press [g] to generate and exit
Press [h] for help         Press [q] to quit without generating
Press [t] to toggle advanced mode (Currently Off)

『BUILD_AS3_SERVER』は当初OFFになっていたけど、Flash (AS3 = ActionScript 3) も使いたいので「Enter」キーを押して BUILD_AS3_SERVER を ON にした。

で、 g キーを押して generate and exit.

次に cmake コマンドを実行する。


$ cmake ..
-- Operating system is Apple MacOS X
-- Got System Processor i386
-- libfreenect will be installed to /usr/local
-- Headers will be installed to /usr/local/include/libfreenect
-- Libraries will be installed to /usr/local/lib
-- Found libusb-1.0:
--  - Includes: /usr/local/include
--  - Libraries: /usr/local/lib/libusb-1.0.dylib
-- Configuring done
-- Generating done
-- Build files have been written to: /Users/hogehage/work/kinect/libfreenect/build

で、make してと。


$ make
Scanning dependencies of target freenect
[  6%] Building C object src/CMakeFiles/freenect.dir/core.c.o
[ 13%] Building C object src/CMakeFiles/freenect.dir/tilt.c.o
[ 20%] Building C object src/CMakeFiles/freenect.dir/cameras.c.o
[ 26%] Building C object src/CMakeFiles/freenect.dir/usb_libusb10.c.o
Linking C shared library ../lib/libfreenect.dylib
[ 26%] Built target freenect
Scanning dependencies of target freenectstatic
[ 33%] Building C object src/CMakeFiles/freenectstatic.dir/core.c.o
[ 40%] Building C object src/CMakeFiles/freenectstatic.dir/tilt.c.o
[ 46%] Building C object src/CMakeFiles/freenectstatic.dir/cameras.c.o
[ 53%] Building C object src/CMakeFiles/freenectstatic.dir/usb_libusb10.c.o
Linking C static library ../lib/libfreenect.a
[ 53%] Built target freenectstatic
Scanning dependencies of target cppview
[ 60%] Building CXX object examples/CMakeFiles/cppview.dir/cppview.cpp.o
Linking CXX executable ../bin/cppview
[ 60%] Built target cppview
Scanning dependencies of target freenect_sync
[ 66%] Building C object wrappers/c_sync/CMakeFiles/freenect_sync.dir/libfreenect_sync.c.o
Linking C shared library ../../lib/libfreenect_sync.dylib
[ 66%] Built target freenect_sync
Scanning dependencies of target glpclview
[ 73%] Building C object examples/CMakeFiles/glpclview.dir/glpclview.c.o
/Users/hogehage/work/kinect/libfreenect/examples/glpclview.c: In function ‘keyPressed’:
/Users/hogehage/work/kinect/libfreenect/examples/glpclview.c:179: warning: incompatible implicit declaration of built-in function ‘exit’
Linking C executable ../bin/glpclview
[ 73%] Built target glpclview
Scanning dependencies of target glview
[ 80%] Building C object examples/CMakeFiles/glview.dir/glview.c.o
Linking C executable ../bin/glview
[ 80%] Built target glview
Scanning dependencies of target fakenect
[ 86%] Building C object fakenect/CMakeFiles/fakenect.dir/fakenect.c.o
Linking C shared library ../lib/fakenect/libfreenect.dylib
[ 86%] Built target fakenect
Scanning dependencies of target record
[ 93%] Building C object fakenect/CMakeFiles/record.dir/record.c.o
Linking C executable ../utils/record
[ 93%] Built target record
Scanning dependencies of target as3-server
[100%] Building C object wrappers/actionscript/CMakeFiles/as3-server.dir/server/as3-server.c.o
Linking C executable ../../bin/as3-server
[100%] Built target as3-server

make install でインストールする。


$ sudo make install | tee ./install.log
Password:
[ 26%] Built target freenect
[ 53%] Built target freenectstatic
[ 60%] Built target cppview
[ 66%] Built target freenect_sync
[ 73%] Built target glpclview
[ 80%] Built target glview
[ 86%] Built target fakenect
[ 93%] Built target record
[100%] Built target as3-server
Install the project...
-- Install configuration: ""
-- Installing: /usr/local/lib/libfreenect.0.0.1.dylib
-- Installing: /usr/local/lib/libfreenect.0.0.dylib
-- Installing: /usr/local/lib/libfreenect.dylib
-- Installing: /usr/local/lib/libfreenect.a
-- Installing: /usr/local/include/libfreenect/libfreenect.h
-- Installing: /usr/local/include/libfreenect/libfreenect.hpp
-- Installing: /usr/local/bin/glview
-- Installing: /usr/local/bin/glpclview
-- Installing: /usr/local/bin/cppview
-- Installing: /usr/local/lib/fakenect/libfreenect.0.0.1.dylib
-- Installing: /usr/local/lib/fakenect/libfreenect.0.0.dylib
-- Installing: /usr/local/lib/fakenect/libfreenect.dylib
-- Installing: /usr/local/lib/libfreenect_sync.0.0.1.dylib
-- Installing: /usr/local/lib/libfreenect_sync.0.0.dylib
-- Installing: /usr/local/lib/libfreenect_sync.dylib
-- Installing: /usr/local/include/libfreenect/libfreenect_sync.h

OpenKinectに付属しているサンプルプログラムglviewをビルドする


$ cd ./libfreenect/examples/
$ cp ../include/* .
$ cmake .
$ make

これでサンプルプログラムの glview という実行ファイルが出来上がる。

最初 make したときは「libfreenect/examples/libfreenect.hpp:29:25: error: libfreenect.h: No such file or directory」というエラーが出て困った。
No such file or directory なのでシステムのインクルードパスを設定すればいいんだろうと思ったがどうすればいいか忘れたので、とりあえずカレントディレクトリにコピーした libfreenect.hpp の中に記述されている「#include 」を「#include "libfreenect.h"」にして対処した。

KinectをMacBook AirにUSB接続する

こんな感じで。

MacBook Air with Kinect

どんな順番でもいいと思うけど、
MacBook Airの電源がONの状態で
1. Kinectの電源を入れる
2. KinectとMacBooc AirをUSBケーブルで接続する
ってやった。

サンプルプログラム glview を実行する


$ ./glview

MacBook Air with Kinect

OpenKinect のサンプルだと近すぎるのは黒色で、近いほうから遠いほうへ向かって赤・緑・青って色が変化してるっぽい。

MacBook Air with Kinect

MacBook Air with Kinect

glviewを終了するときは上部に出ているglviewのメニューから終了させる。[x]ボタンは使えない。

参考

Ref.
-Kinect - Xbox.com
-OpenKinect
-Compiling OpenKinect on a stubborn OSX 10.6.5 (Updated 21/Nov)
-試験管のなかのコード :: MacOS X で Kinect にチャレンジ < 今回はほとんどここの内容をなぞっただけ。すごく参考になる。

あれ?・・・

いまログ見てたら OpenKinect をインストールしたところで、サンプルプログラムの glview が /usr/local/bin/glview にインストールされてるぽいよ。。。試しに実行してみたら起動したし orz

tags: zlashdot Hardware Kinect

Posted by NI-Lab. (@nilab)