Xbox 360 Kinect の腕トラッキング情報を Unity に渡すためのブリッジです。
- Windows で動作する .NET Framework 系の C# 実行環境
- Kinect for Xbox 360 本体
- Kinect for Windows SDK 1.8
Microsoft.Kinect.dllへの参照- UDP 送信先にアクセスできるネットワーク設定
- Unity を動かせる環境
- このリポジトリの
UnitySample/Assets/Tracking/配下のスクリプトを組み込める Unity プロジェクト - 受信モードに応じて
Udp/Keyboard/Replayを切り替えられること
- MSBuild または Visual Studio / Build Tools
Tracking.Common.Testsを起動できるコンソール実行環境
KinectBridge/- Kinect から関節座標を取得して UDP 送信する実行ファイルです。
Tracking.Common/- ワイヤ形式、検証、正規化、メトリクス、状態管理の共通ロジックです。
Tracking.Common.Tests/- 共通ロジックの簡易テストです。
UnitySample/Assets/Tracking/- Unity 側の受信アダプタと表示サンプルです。
Tracking.Runtimeは Unity 向けの薄いアダプタです。- UDP と Replay は
WirePacketDtoを厳密に検証してからArmTrackingPacketに変換します。 - Keyboard は内部入力ソースとして直接
ArmTrackingPacketを生成します。 IArmTrackingSourceからはStatusとLastReceiveErrorを参照できます。LastReceiveErrorは有効パケット受理時とライフサイクル切り替え時にクリアされます。
相手先には、1 UDP データグラムにつき 1 つの UTF-8 JSON を送ります。
受信側はこの JSON を WirePacketDto として読み取り、厳密な検証を通ったものだけを ArmTrackingPacket として扱います。
version: 現在は1sessionId: Bridge 起動ごとに一意な GUID 文字列frameId: 起動後に増える連番timestampMs: Bridge 起動からの経過ミリ秒tracked:trueなら人物追跡中、falseなら未追跡
trackingId: Kinect のトラッキング IDjoints: 肩、肘、手首、手の関節セット
trackingIdとjointsは省略します
各関節は次の形です。
x: 座標 Xy: 座標 Yz: 座標 Zstate:0=NotTracked,1=Inferred,2=Tracked
{
"version": 1,
"sessionId": "8d1f4f3c-0a24-4b22-8f0d-7d1d7d4d9b61",
"frameId": 12,
"timestampMs": 340,
"tracked": true,
"trackingId": 42,
"joints": {
"shoulderCenter": { "x": 0.0, "y": 1.4, "z": 2.0, "state": 2 },
"shoulderLeft": { "x": -0.2, "y": 1.4, "z": 2.0, "state": 2 },
"elbowLeft": { "x": -0.3, "y": 1.1, "z": 2.0, "state": 2 },
"wristLeft": { "x": -0.35, "y": 0.85, "z": 2.0, "state": 2 },
"handLeft": { "x": -0.4, "y": 0.8, "z": 2.0, "state": 2 },
"shoulderRight": { "x": 0.2, "y": 1.4, "z": 2.0, "state": 2 },
"elbowRight": { "x": 0.3, "y": 1.1, "z": 2.0, "state": 2 },
"wristRight": { "x": 0.35, "y": 0.85, "z": 2.0, "state": 2 },
"handRight": { "x": 0.4, "y": 0.8, "z": 2.0, "state": 2 }
}
}tracked:false の場合は次のようになります。
{
"version": 1,
"sessionId": "8d1f4f3c-0a24-4b22-8f0d-7d1d7d4d9b61",
"frameId": 13,
"timestampMs": 360,
"tracked": false
}- Kinect センサーを接続し、Windows 側で認識されていることを確認します。
- Kinect for Windows SDK 1.8 をインストールします。
Microsoft.Kinect.dllが参照できる状態にします。- Visual Studio または Build Tools を使える状態にします。
- このリポジトリをクローン、または作業フォルダとして開きます。
- Unity 側を使う場合は、
UnitySample/Assets/Tracking/の内容を Unity プロジェクトへ取り込みます。
KinectBridge.slnを開いてKinectBridgeをビルドします。- 必要なら
Tracking.Commonも一緒にビルドします。 Tracking.Common.Testsも同じソリューションまたは個別プロジェクトとしてビルドできます。
Tracking.Common.Testsを起動して、wire 検証や正規化の基本挙動を確認します。
KinectBridge.exeを起動します。- Unity 側で
ArmTrackingSourceHostを配置し、Udp/Keyboard/Replayのいずれかを選びます。 ArmTrackingDebugVisualizerを追加すると、状態に応じた可視化を確認できます。
このリポジトリは、KinectBridge と Tracking.Common.Tests をビルドできる .NET Framework 系の C# 環境を前提にしています。
MSBuild / Visual Studio / Build Tools のどれを使うかは、使っている環境に合わせてください。
Visual Studio の開発者向けコマンドプロンプトや PowerShell から、利用可能な MSBuild.exe を呼び出してビルドします。
下の例はパスを固定していますが、実際には自分の環境にある MSBuild.exe の場所へ置き換えてください。
& "MSBuild.exe" `
"path\to\kinect-bridge\KinectBridge.sln" `
/t:Build /p:Configuration=Debug /p:Platform="Any CPU"個別にビルドする場合は次の 2 つです。
& "MSBuild.exe" `
"path\to\kinect-bridge\KinectBridge\KinectBridge.csproj" `
/t:Build /p:Configuration=Debug /p:Platform=AnyCPU
& "MSBuild.exe" `
"path\to\kinect-bridge\Tracking.Common.Tests\Tracking.Common.Tests.csproj" `
/t:Build /p:Configuration=Debug /p:Platform=AnyCPUTracking.Common.Tests はコンソールアプリです。ビルド後に生成された実行ファイルを直接起動します。
出力先は構成や環境によって変わるので、bin/Debug や bin/Release など、自分のビルド先を確認してください。
& "path\to\kinect-bridge\Tracking.Common.Tests\bin\Debug\Tracking.Common.Tests.exe"ArmTrackingSourceHostで UDP / Keyboard / Replay を切り替えます。ArmTrackingDebugVisualizerはStatusに応じて表示色を変えます。- 正規化済み姿勢を使うかどうかは
useNormalizedPoseで切り替えられます。
- 送信側の JSON 形式は
Tracking.CommonのWirePacketDecoderで検証されます。 - 公開 API はできるだけ維持していますが、
IArmTrackingSourceにStatusとLastReceiveErrorが追加されています。 - この README では固定の絶対パスを避けています。必要に応じて、あなたの環境のパスに読み替えてください。