概要
- 家に眠っていたXbox360用のKinectを、ゲーム機専用のAUX接続からバスパワー駆動のUSB2.0接続一本に改造してみた
- Kinect v1の構造、仕組みを知ることができた
- USB2.0信号ならなんとか取り扱える感触を持った
参考にしたHP
- How to turn old Kinect into a compact USB powered RGBD sensor
- ほとんどこの神サイトの受け売りです(汗
- Xbox 360 Kinect Teardown
- 定番サイトiFixitの解説記事
- OpenKinect / Hardware info
- おじいちゃんのパソコン教室 / USB端子の配線の構造と種類
- USB2.0ケーブルの信号線の色が載っているサイト(緑と白、どっちがD+D-かわからなかったので)
Kinect v1の分解
- iFixitの手順通りにすすめた
- T6とT10Hのトルクスドライバーが必要(ベッセルのドライバーがおすすめ)
- Step6の筐体下部にある穴あき金属シートは剥がすとぐにゃぐにゃになるので元には戻せないと思ってください
- 同じ下部のvoidシールも剥がさないと筐体を開けられません
- 上から前面、下部(サイドの通風孔は取り外せる)、上部(表裏ひっくり返している)
- 太いケーブルがマイクアレイ(青、白、赤、黒の4つ)との接続用
- 上からアルミフレームとカメラセンサー・画像処理専用基板(以下センサー基板)、USBオーディオ基板、メイン基板
- プラスチック筐体の中にこれらが入っている
- 入っている様子は上記参考サイトの 「Looking into Kinect 360」 2枚目の写真を参照
- 全体の処理の流れは以下と想像
- 緑の矢印と横方向の青矢印でカメラとマイクからの入力を受け付け
- マイクのオーディオ信号はUSBオーディオ化(縦方向の青矢印)
- 黒の端子からUSB信号としてゲーム機へ(赤の矢印)
カメラセンサーのUSBデバイス化
神サイトによるとセンサー基板だけでもUSBデバイスとして使えるとのこと
「Looking into Kinect 360」 最後の図に、センサー基板からの14ピン端子の説明がある
それを見るとUSB2.0に3.3Vと1.8Vが追加されているだけと解釈できる
つまり、緑の矢印部分をメイン基板ではなく、直接PCに繋いでもUSB2.0デバイスになるらしい
接続ボードの作製
※以下をご自身でされる際は自己責任でお願いします
必要なもの
- Kinect v1 Model1414
- 工具
- はんだごて(20Wを使用)・はんだ・吸い取り線
- アルミを削るor切る工具
- テスター
- ピンセットとかメンディングテープとか
- 接続ボード
- ミニブレッドボード
- SOP16基板(1.27mm-2.54mm変換)
- ピンヘッダー(オス-オス)
- SOP16基板をブレッドボードに接続する用
- 接続端子
- 自分はメイン基板のメス側端子を再利用
- 1.27mm 2x5のピンソケットを折り曲げてSOP16基板に接着でもいけそう(未確認)
- 端の3.3V/GND 2x1ピンはなくても残りの2x2ピンでどうにかなるかなと
- または2x10の2x4ピンを頑張って削るか…
- DC-DC降圧コンバータ x2
- 自分はLXDC55というモジュール搭載の可変タイプを使いました
- 参考サイトはLM2596というのを使っている模様(Amazonに似たのあり)
- ジャンパーワイヤー(これとか)
- ブレッドボード上の配線用
メインボードからメス側端子を剥がす
- 一番しんどかった…
- はんだを取り切れず、コンタクトがバリバリと基板側に残る惨事
- ピンセットで一個ずつソケットに埋め戻す羽目に…
- 一応使えている?(ノイズの原因かもしれん)
- 転生元(下)と転生先(上)
- 2x10のピンソケットを削ってオス側端子を90度曲げるでもいいかもしれん(試していません)
SOP16基板に接続端子をはんだ付けする
- めっちゃ目が疲れる
- 短絡してないか導通チェックしてなんとかOK
DC-DC降圧コンバータのキットを組み立てる
- ピンヘッダーと可変抵抗を基板にはんだ付け
- USBケーブルからの給電ができるようになったら可変抵抗をグリグリ回して出力が所定の電圧になるよう調整
ブレッドボードに配線する
- Fritzingというソフトでブレッドボード上の配線をシミュレートしてから実際の作業を行った
- 実作業の前に試行錯誤できる
- 各配線の導通具合を確認できるので安心
- ブレッドボードは右上の[パーツペイン]->[CORE]タブのブレッドボードビューにある「RSR 03MB102 Breadboard」
- size : mini に変えれば画像の見た目に
- ジャンパーワイヤーはブレッドボードか基板の端子部分からドラッグ&ドロップ
- 後から配線の色を変えられる
- ドラッグ中に接続先が見つかると青紫色になるのでそこで離す(吸着があまり上手くいかない…)
- DCDCコンバータは[Power]にある「voltage regulator 5v/3.3v」(1.8vがない…)
- ピンヘッダーは[Connection]にある「Generic female header」
- 基板は[虫眼鏡]タブで「sop16」で検索
- [Edit Pin Labels]で各端子に名前をつけられる
- USBコネクタは「usb connector」で検索
- 気になる端子(画像はGND)を左クリック押しっぱにすると導通する箇所が黄色でハイライト表示される
実際に配線した結果が以下の画像
左下にある青(Fritzingでは赤黒黄)の3本は太さ的に並べられなかったので真ん中の1本を横に通した
USBケーブルの改造
必要なもの
USBケーブルを切断し4つの信号線を取り出す
- ニッパーで完全に切って、先っちょだけ黒い被覆を取り、赤、黒、緑、白の信号線を取り出す
ピンヘッダーに各信号線をはんだ付けする
- 4連のピンヘッダーに各信号線の被覆を剥がしてはんだ付け
- 一応熱収縮チューブで絶縁した(できてない)
- 短絡してないか確認した
- やり直したい…
ブレッドボードと接続し、電圧が来ているかを確認する
- ジャンパーワイヤーでピンヘッダーとブレッドボードをつなげる
- Type-A側をPCに接続し、センサー基板との接続端子に所定の電圧が来ているかテスターで確認
アルミフレームを削る
- センサー基板と接続基板をつなげるとアルミフレームに干渉するので頑張って削った
- 細い糸鋸みたいので切っていくのがよいかと
動作確認
確認環境
- 改造Kinect v1(アルミフレーム・カメラセンサー・センサー基板)に接続基板をくっつけたもの
- シングルボードコンピュータ
USBデバイスの認識
- USBケーブルを電圧・電流チェッカーに接続する
- 最初、約4.5V 0.7Aのロードが10秒弱発生
- アイドル時は約4.75V 0.32Aのロード
- キャプチャ動作時は約4.55V 0.57Aのロード
- USB2.0規格では、5V 0.5Aまで供給できるとあるので規格外ですありがとうございました
- 機器によっては電圧降下でリセットがかかったり壊れたりするかも
lsusb
を実行してUSBデバイスとして認識していることを確認
libfreenectのインストール
- libfreenectは非公式のKinectのユーザ空間ドライバ
- 有志が開発、Apache 2.0 ライセンス
- 以下でソースビルド&インストールを行った
mkdir -p ~/kinect_ws/src mkdir -p ~/kinect_ws/libs cd ~/kinect_ws/libs git clone https://github.com/OpenKinect/libfreenect.git cd libfreenect sudo apt install freeglut3-dev libusb-1.0–0-dev mkdir build cd build cmake -L .. make sudo make install sudo ldconfig /usr/local/lib64 // 拙環境では必要だった
/usr/local/
以下にツール、ライブラリ、ヘッダーがインストールされる- また、ユーザ空間ドライバをroot以外で動作できるようにするためのおまじないがあるらしい
- これやってもダメだったのでsudo付きで実行した(再起動が必要?)
ツールの動作と修正
/usr/local/bin
にツールがあり、freenect-camtest
を実行してみるfakenect-record
を実行してみる- 指定したディレクトリ以下に
INDEX.txt device.json a-hoge.bin r-hoge.ppm d-hoge.pgm
がダンプされる 以下で実行
mkdir ~/session sudo ./fakenect-record ~/session
エラーが出る(原因は同じ理由)
/libfreenect/fakenect/record.c
のinit()
でFREENECT_DEVICE_MOTOR | FREENECT_DEVICE_CAMERA
の両方を指定しているため、チルトモーターが見つからずエラーになっていたFREENECT_DEVICE_CAMERA
だけ指定してリビルドしたところ動作した- リビルドしたのは
~/kinect_ws/libs/libfreenect/build/bin/
にある - PPM, PGMファイルはirfanviewなどの画像ビューアで見れる
- 指定したディレクトリ以下に
おわりに
- とりあえずハードの改造からシングルボードコンピュータで動作するところまで確認した
- 接触具合によって電流チェッカーに低すぎる値が出たり、キャプチャできなかったりするケースがままあった
- また、キャプチャし続けていると画像にノイズが入る場合があり、ハード的な問題がありそう
- コネクタを変えたバージョンなどもう少し試してみたい気持ち