2012年5月14日月曜日

UnityとKinectとOpenNIを組み合わせる

UnityOpenNIKinectXtion Proを使って、Unity内のオブジェクト操作する環境を構築する方法についてまとめておこうと思う。

前提条件: OpenNI一式とUnityが動作していること。
検証した環境: Mac OSX Lion、Unity 3.5、Xtion ProまたはKinect


  1. OpenNIのダウンロードページから"PrimeSene Unity Wrapper Unstable Build v0.9.7.4"(2012.5.14時点の最新)をダウンロードする
  2. ダウンロードしたopenni_unity_toolkit-0.9.7.4.zipを展開するとOpenNI_Unity_Toolkit-0.9.7.4.unitypackageが出来る。
  3. UnityのProjectにOpenNI_Unity_Toolkit-0.9.7.4.unitypackageをインポートする。方法はメニューから"Assets"->"Import Package"->"Custom Package ..."でOpenNI_Unity_Toolkit-0.9.7.4.unitypackageを選択。
  4. Unity 3.5を使っている場合、3でインポートしたパッケージ内のNIInput.csにエラーが起こるのでここを参考に次の通り修正する。295行目の"return Input.GetRotation(deviceID);"を"return Quaternion.Euler(Vector3.zero);"。306行目の"return Input.GetPosition(deviceID);"を"return Vector3.zero;"にそれぞれ書き換える。
  5. "OpenNI"->"Prefabs"->"Sample Prefabs" "OpenNI"->"Sample Scenes"にある各種サンプルをHierarchyに追加して動かしてみる。
以上だが、Cheetah3Dで自作したキャラクターにリグを組んでインポートしたら、回転と前後左右が逆になった。右手系と左手系の変換が上手くいっていないようで、久しぶりにBlenderを使おうかと。

参考
[Unity][Blender] BlenderからUnityへキャラクターをインポートする

2012.5.14 手順の5番目の記述が間違えていたので修正


2012年2月29日水曜日

GitoliteをMac OS X Lion Serverにインストールする

クライアントからgitolite-adminがclone出来ずに非常に悩んだのだが、最終的には次のサイトを見て分かった。
gitolite で Git リポジトリへの SSH アクセスを制御する
Gitolite git clone error

ポイント
  1. ssh-keygenで生成するファイルは、普段利用しているid_rsa.pubでは無く、別のものにする。
  2. Appleの提供するGitを使うならサーバーにXcodeをインストールする。
  3. 2でインストールされたGitを使うなら、サーバーのgitユーザーのホームフォルダにある.gitolite.rcに下記の一行を追加する。
  4. $ENV{GIT_EXEC_PATH} = "/usr/libexec/git-core";

以上の全てを満たしておかないと、クライアントからgitolite-adminをcloneしようとした時に下記のエラーが出る。
$ git clone GITUSER@SERVERNAME:gitolite-admin
Cloning into 'gitolite-admin'...
Warning: No xauth data; using fake authentication data for X11 forwarding.
Assertion failed: (argv0_path), function system_path, file exec_cmd.c, line 30.
error: git-shell died of signal 6
fatal: The remote end hung up unexpectedly

特に上記ポイントの3番目は忘れがちなので注意が必要だ。

2012年2月25日土曜日

AndroidとMacをBluetoothのSPPで接続してデータ送受信

AndroidのサンプルコードにBluetoothChatというものがある。
これを改造してMacと繋いで文字列を送受信したので手順を書いておく。

EclipseでBluetoothChatのプロジェクトを作り、BluetoothChatからサンプルコード一式を取ってきて追加する。

BluetoothChatService.javaのUUIDを次のように変更する。
private static final UUID   MY_UUID_SECURE = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");

今回、BluetoothChatService.javaのInsecureと書いてある部分は使わないので、メンバ変数から、MY_UUID_INSECUREとmInsecureAcceptThreadを削除する。この状態でビルドするとエラーが出るので、そのエラーに関連する部分もまとめて削除する。
さらにBluetoothChat.javaやリソースXMLの方も、insecureと書いてある部分は使わないので削除してよい。

この状態でビルドしたものをインストールして起動後、メニューボタンを押してMake discoverableを選んでMacから接続しておく。

接続が出来ていれば、Mac側に/dev/tty.NexusOne-BluetoothChatのようなデバイスファイルが出来ているはずだ。
ここまで出来たら、シリアルコンソールで接続する。
例えばscreenを使うなら以下のようにする。
sudo screen /dev/tty.NexusOne-BluetoothChat 9600

双方から文字列をやり取り出来れば完了だ。

Tips
図1のエラーが出る場合は、Mac側から設定を削除した後にもう一度最初から接続設定をするとうまくいくかもしれない。または図2および図3のようにBluetoothの設定画面を開いて、プロトコルを現在RS-232Cが設定されていたらモデムに、モデムならRS-232Cに設定して適用するとうまくいくかもしれない。


図1

図2

図3

参考にしたサイト
BluetoothChatでシリアル接続(SPP)を行う
Androidアプリ開発 ~Bluetooth SPP による無線通信~

2011年12月31日土曜日

phpのデバッグ

php.iniでエラー表示がOff(下記)になっている環境でデバッグする場合。
display_errors = Off
スクリプトに、ini_set( 'display_errors', 1 ); と書く。
<?
ini_set( 'display_errors', 1 );
...何らかの処理....
?>
そうしておいてテストすると、こんな風にエラーが表示される。
php -f foo.php

Fatal error: Call to undefined function bar() in /home/como/foo.php on line 15
リリース版では元に戻すのを忘れずに。

2011年12月29日木曜日

Lion ServerでのApache設定

Mac OSX Lion ServerのWebサーバのDocumentRootは、
/Library/Server/Web/Data/Sites/Default/
設定ファイルは、
/etc/apache2/sites/0000_any_80_.conf
システム環境設定→共有→Web共有→コンピュータのWebサイトフォルダを開く... からだと、
/Library/WebServer/Documents
が開かれてしまうので注意する。

2011年12月27日火曜日

NodeでWebSocket

2011/12/27現在NodeでWebSocketを使うなら、WebSocket-Nodeがベストなようだ。
ブラウザサポートが幅広い。

proxy環境内からnpm

npmnodeにパッケージを追加しようとしたらエラー発生。
対策はこちら。
npm config set registry http://registry.npmjs.org/

先人の知恵に感謝。 proxy環境でnpm使おうとしたら、Error: socket hang up