Upload
keisuke-aono
View
952
Download
1
Tags:
Embed Size (px)
Citation preview
Kinect わくわくon BeagleBoard !?
2011年 5月 22日第六回 カーネル/VM探検隊
@kei_os
自己紹介•Twitter : @kei_os
• 組み込み系エンジニア
• SoC 開発、ドライバ開発 (ITRON 系)
•組み込み Linux/Android に軸足を移し中
• BeagleBoard で Android を動かして修行
LT の経緯
@syuu1228 さんから召喚
@syuu1228 さんから召喚
LT 決定
良い機会なので新しいことをやってみよう
Android フレームワークにKinect をポーティングしてBeagleBoard で動かす
Android の Camera API を使ってKinect の映像/深度データを
使えるようにする
やってみた結果ですが
すいません><USB 2.0 High Speed モードを
甘く見てました...
Android のフレームワークまでKinect のデータがあがってこない
BeagleBoard
※ BeagleBoard Revision C4 System Reference Manual から抜粋
今回使ったボードは BeagleBoard Rev.C4
Kinect センサー
Kinect センサー
•RGB カメラ
•深度センサー
•マルチアレイマイクロフォン
•専用ソフトウェアを動作させるプロセッサ
http://openkinect.org/wiki/Main_Page
BeagleBoard と Kinect を接続
デバイスが揃ったところで
Android Framework への Kinect ポーティング
Android Framework
※ http://developer.android.com/guide/basics/what-is-android.html から抜粋
Android Framework
HAL (Hardware Abstraction Layer)
※ http://developer.android.com/guide/basics/what-is-android.html から抜粋
Android Framework
HAL (Hardware Abstraction Layer)
※ http://developer.android.com/guide/basics/what-is-android.html から抜粋
カメラやセンサーは
ここに組み込む
Android Framework
HAL (Hardware Abstraction Layer)
※ http://developer.android.com/guide/basics/what-is-android.html から抜粋
ここをいじってKinect を組み込む
Android Framework
HAL (Hardware Abstraction Layer)
※ http://developer.android.com/guide/basics/what-is-android.html から抜粋
frameworks/base/services/camera/libcameraservice
今回使った Android ディストリビューション
• Gingerbread (sola さんメンテナンス版)
• https://github.com/sola-dolphin1/OHA-Android-2.3_r1.0
Android ディストリビューション (1)
• Donut (OESF メンテナンス版)
• https://github.com/OESF/Embedded-Master-ARM
Android ディストリビューション (2)
Kinect 制御ライブラリの組み込み
•組み込むライブラリ
•libfreenect•libusb
libfreenect
• https://github.com/OpenKinect/libfreenect
• RGB/深度カメラデータ取得
•チルト制御
•加速度センサー取得
• Audio は対応していない
libfreenect
├── libfreenect ├── include │ └── libfreenect.h ├── src ├── cameras.c ├── core.c ├── freenect_internal.h ├── tilt.c ├── usb_libusb10.c └── usb_libusb10.h
使用するソースファイル
libusb• http://sourceforge.net/projects/libusb/
• libusb-1.0.8
• マクロ定義を追加#define TIMESPEC_TO_TIMEVAL(tv, ts) do { ¥ (tv)->tv_sec = (ts)->tv_sec; ¥ (tv)->tv_usec = (ts)->tv_nsec / 1000; ¥} while (0)
libusb
•Android の init.rc に usbfs マウント処理追加mount usbfs none /proc/bus/usb -o devmode=0666
ここから、ハマった話><
RGB/深度カメラのストリームがすぐに出なくなる><
定期的にコントロール転送をする必要がある
• freenect_update_tilt_state() で実施するとよい
• 全く呼ばないと 300ms 程度で出力停止
• 呼び出し間隔を 10ms 以上空けると
USB パケットがおかしくなる
RGB/深度カメラストリームのUSB パケットを大量にロストする><
...
W/libfreenect( 1197): [Stream 70] Lost 21 packetsW/libfreenect( 1197): [Stream 70] Lost too many packets, resyncing...W/libfreenect( 1197): [Stream 70] Lost 50 packetsW/libfreenect( 1197): [Stream 70] Lost too many packets, resyncing...W/libfreenect( 1197): [Stream 70] Expected 1748 data bytes, but got 1132
W/libfreenect( 1197): [Stream 70] Lost 20 packetsW/libfreenect( 1197): [Stream 70] Lost too many packets, resyncing...W/libfreenect( 1197): [Stream 80] Lost 123 packetsW/libfreenect( 1197): [Stream 80] Lost too many packets, resyncing...W/libfreenect( 1197): [Stream 70] Lost 50 packets
W/libfreenect( 1197): [Stream 70] Lost too many packets, resyncing...W/libfreenect( 1197): [Stream 70] Lost 49 packetsW/libfreenect( 1197): [Stream 70] Lost too many packets, resyncing...W/libfreenect( 1197): [Stream 80] Lost 3 packetsW/libfreenect( 1197): [Stream 80] Lost 196 packets
W/libfreenect( 1197): [Stream 80] Lost too many packets, resyncing...W/libfreenect( 1197): [Stream 70] Lost 49 packetsW/libfreenect( 1197): [Stream 70] Lost too many packets, resyncing...W/libfreenect( 1197): [Stream 70] Lost 1 packetsW/libfreenect( 1197): [Stream 70] Lost 50 packets
W/libfreenect( 1197): [Stream 70] Lost too many packets, resyncing......
全滅...orz ><;
Gingerbread 動作時の logcat
...
W/libfreenect( 1122): [Stream 70] Lost too many packets, resyncing...D/libfreenect( 1122): Got depth frame of size 422400/422400, 242/242 packets arrived, TS 748d9df0D/libfreenect( 1122): Got video frame of size 614400/614400, 323/323 packets arrived, TS 7496228bD/libfreenect( 1122): Got depth frame of size 422400/422400, 242/242 packets arrived, TS 74ac2adbD/libfreenect( 1122): Got depth frame of size 422400/422400, 242/242 packets arrived, TS 74cab7c6
W/libfreenect( 1122): [Stream 80] Lost 1 packetsW/libfreenect( 1122): [Stream 80] Lost 4 packetsW/libfreenect( 1122): [Stream 80] Inconsistent flag 82 with 322 packets in buf (323 total), resyncing...W/libfreenect( 1122): [Stream 70] Lost 7 packetsW/libfreenect( 1122): [Stream 70] Lost too many packets, resyncing...
D/libfreenect( 1122): Got depth frame of size 422400/422400, 242/242 packets arrived, TS 7544eb72D/libfreenect( 1122): Got depth frame of size 422400/422400, 242/242 packets arrived, TS 7563785dD/libfreenect( 1122): Got video frame of size 614400/614400, 323/323 packets arrived, TS 754d1040D/libfreenect( 1122): Got depth frame of size 422400/422400, 242/242 packets arrived, TS 75820548D/libfreenect( 1122): Got depth frame of size 422400/422400, 242/242 packets arrived, TS 75a09233
W/libfreenect( 1122): [Stream 80] Lost 1 packetsW/libfreenect( 1122): [Stream 80] Lost 4 packetsW/libfreenect( 1122): [Stream 80] Inconsistent flag 82 with 322 packets in buf (323 total), resyncing...W/libfreenect( 1122): [Stream 70] Lost 6 packetsW/libfreenect( 1122): [Stream 70] Lost too many packets, resyncing...
D/libfreenect( 1122): Got depth frame of size 422400/422400, 242/242 packets arrived, TS 75fc38f4...
時々フレームデータが取れるけどまだフレームが抜ける
Donut 動作時の logcat
USB パケットの話
ご清聴ありがとうございました