Intel RealSenseシリーズはIntelが開発しているデプスカメラです。「プ」は半濁音です。いま流行りのバーチャルユーチューバーには、モーションキャプチャーするためにRealSenseのようなデプスカメラで撮影してる人もいます。今回はこのデプスカメラを使って、遠近感を得ることにしましょう。
4月16日追記:本記事には多くの事実誤認・誇張が含まれているとのご指摘を受けました。そこで誤っている部分に関して、注釈という形で修正情報を追記しました。誤った記述をしてしまい申し訳ございません。また一次情報も踏まえた詳細なご指摘ありがとうございました。
Kinect後継のIntel RealSense
デプスカメラとは視野にある物体の奥行き方向の位置関係を検知できるカメラです。
奥行きを検知できると物体の輪郭を把握できます。輪郭を把握できると物体の識別が可能になります。このためデプスカメラはモーションキャプチャーやジェスチャー入力、オブジェクトトラッキング、最近だと自動運転などに必要な要素となっているのです。
2010年ごろXbox 360の周辺機器として登場したKinectは、当時高価だったデプスカメラをコンシューマーレベルの価格で提供しただけにとどまらず、PCなどでも使えるようWindows SDKが提供されたこともあって、広く使われるヒット商品となりました。あのカメラの登場がモーションキャプチャー、ならびに昨今のVR/AR/MRのブームの先鞭になったとも言えるでしょう。
残念ながらKinectは2017年に販売を終了したことが公表されました。どうも心臓部であるセンサー系ICのメーカーPrimeSenseがAppleに買収されたことも理由のひとつのようです(4月16日追記①)。おもしろいことにKinectのサイトでは、後継として「Intel RealSenseデプスカメラの検討をお勧めします」と提案していたりします。
さてIntelのRealSenseは2015年ぐらいから発売されている、ジェスチャーベースのインターフェース技術とその製品群の総称です。本来はPCに組み込んで使用されることを想定してSDKなども含めて作っていたようですが、最近ではIntel EuclidのようにAtomとセットでスタンドアローンの製品として販売しているケースもありました。
今回紹介するD415/D435シリーズは今年1月に発売開始した最新モデルです。179ドルという価格にも関わらず十分実用に耐えるフルスペックの機能をもった製品ということで、発売と同時に売り切れ・入荷待ちになるほどの人気商品でした。今も入荷待ち状態のところが多いようです。D435の場合は以下のスペックになっています。
- Intel RealSense Vision Processor D4
- IRステレオカメラ(グローバルシャッター)
- 深度センサーの出力解像度:1280 x 720 @ 90fps
- 深度センサーの視野角:水平85.2度、鉛直58度
- 最大深度:約10m(キャリブレーション、環境光に依存)
- RGBカメラの出力解像度:1920 x 1080 @ 30fps
- RGBカメラの視野角:水平69.4度、鉛直42.5度
- カメラのサイズ:90mm x 25mm x 25mm
- カメラ側のコネクタ:USB Type-C
- PC側のコネクタ:USB 3.0 Type-A
- カメラ背面に2つのM3マウントポイントあり
- カメラ底面に1/4インチユニファイネジ穴あり
奥行き検出については、いくつかの方法が存在します。RealSenseはどうやら世代によって検出方法が若干異なるようです。D400シリーズの場合は、左右の赤外線カメラとVision Processorを使って視野を計測する方法と、中央からIRパターンを発光しその反射光を計測する方法のハイブリッド構成のようです(4月16日追記②)。
底面のネジ穴はいわゆる小ネジサイズの穴ですので、小型のカメラ三脚のネジに接続できます。なお、D435には小型の三脚がついてきました。
USBコネクタはカメラの端の半円になっているUSBカバーの部分を取り外すことで現れます。ただこの部分、銀のカバーの粘着力が弱く、USBカバーを取り外すつもりが銀色の部分だけ取れてしまいました。隙間になにか薄いものを差し込んでてこの原理で取り外しましょう。
このRealSence、実体はUSB Video device Classに対応したUSBカメラのようなものなので、Ubuntuでも比較的簡単に動きます。Intel自身がLinux版SDKのUbuntu用リポジトリを公開しているぐらいです。
あとカメラ側には「青い保護シート」が貼ってあります。これを剥がさないと正しく計測できないので注意してください。いや、製品画像見たら剥がすことは明らかなんですが、剥がさないといけないことに気がつくまでに数十分かかりました……。
Intel RealSense SDKのインストール
デプスカメラとして使うためには、Intel RealSense SDKをインストールする必要があります。幸い、64bit版のUbuntu 16.04 LTS向けのリポジトリが公開されていますので、インストールは非常に簡単です。
ただしDKMSでカーネルモジュールをインストールする都合上、SecureBootをオフにするかDKMSでの再構築時に署名を行うよう設定する必要があります。また16.04以外のリリースや64bit版以外のアーキテクチャーについては未確認です。SDKのソースコードは公開されていますので、自分でビルドする方法もあります。
GitHub上に記載されているインストール手順にしたがって、インストールをすすめていきましょう。
まずはリポジトリを登録し、パッケージリストを更新します。
次にRealSenseのパッケージをインストールします。依存関係でRealSenseのuvcvideoカーネルモジュールとudevのルール、デモツール、それにDKMSや開発パッケージ関連などがインストールされます。
ドキュメントではrealsense-uvcvideoパッケージをインストールしていますが、これは少し古い情報です。uvcvideoモジュールのDKMS関連は上記のようにlibrealsense2-dkmsパッケージに移行しました。古いパッケージの場合、Ubuntu 16.04 LTSの4.4カーネルや、HWEカーネルである4.13においてうまくモジュールをビルドできないことがありました。librealsense2-dkmsなら特に不具合はなかったので、こちらのパッケージを使うようにしましょう。もしlibrealsense2-dkmsをインストール済みなら「sudo apt autoremove librealsense2-dkms
」コマンドで古いパッケージを削除しておいてください。udevルールのパッケージも、新しいlibrealsense2-udev-rulesと古いrealsense-sdk-udev-rulesの新旧2種類あるので、古いほうのパッケージは削除してかまいません。
DKMSが正しく動けば、新しいモジュールが構築されロードされるはずです。
モジュールバージョンに「realsense」が入っていれば、正しい状態です。たとえば以下のように、realsenseがない場合は古いモジュールのままとなっています。変わらないようなら一度再起動してみてるといいかもしれません。
なお、最新のRealSenseライブラリはHaswell以降にサポートされたAVX2を使うようになりました。つまり、Ivy Bridge以前のアーキテクチャの場合、デモプログラムを動かすとIllegal instructionが発生しエラー終了してしまいます。もし、IvyBridgeで動かしたい場合は、少し前の2.10.1を使うといいでしょう。次のコマンドでパッケージをダウングレードできます。
ただしRealSenseのデモプログラムはそれなりにスペックを要求しますので、注意してください。少なくとも、筆者のメインマシンであるCPU Core i5-3427U(Ivy Bridge)、RAM 4GiBだとフレームの取得ミスが頻発し、警告だらけになりました。CPUの遅さが原因か、USB 3.0のバス性能が悪いのかは難しいところです。
もしRealSenseの開発関連のパッケージも必要であれば、次のようにインストールしてください。しかしながら今回は使用しません。
Intel RealSense SDKのアンインストール
Intel RealSense SDKのパッケージはすべて「librealsense2」で始まっているため、以下の方法でアンインストールできます。
必要に応じてリポジトリも削除しておきましょう。
デモプログラムを動かす
librealsense2-utilsにはいくつかのデモプログラムが含まれています。とりあえずいろいろ試せるのが「realsense-viewer」です。
まず最初にRealSense本体を接続します。なお、まともに動かすためにはそれなりに高速なPCとUSB 3.0のコネクタが必要です。特にUSB 3.0は、十分な速度が出ないとフレーム落ちして警告が大量に表示されます。このため仮想マシン上での動作はサポートされていません。さらにポートによって速度が変わる場合もあるので、必要に応じて接続する場所を調整してください。とは言え、付属のUSB Type-Cのケーブルは1mぐらいなので、デスクトップPCの場合は取り回しがいろいろと大変かもしれません。
RealSenseを接続すると以下のようなメッセージがdmesgに表示されます。
次にrealsense-viewerをデスクトップ環境で起動します。
無事に起動すると左上に製品名が表示されます。ちなみに「Intel RealSense USB2」と表示される場合、USB 2.0のポートを使っているか速度が出ないポートになっています。この状態ではまともに動作しませんので接続場所を変更してください。
「Streo Module」をONにするとデプスカメラが動作し、深度マップと赤外線マップが表示されます。また「RGB Camera」をONにすると、同時にRGBカメラで撮影した内容も表示します。
実際にカメラの前で物を動かすなどして、正しく深度情報を取得できていることを確認してみましょう。ちなみにあまりに近い物体の情報は取得できません。また、視野内の最深距離に応じて深度スケールは変わります。マウスホイールを動かすと個々のウィンドウを拡大縮小できます。
他にもいくつかのツールが用意されています。
- rs-multicam: 深度情報とRGBカメラの結果だけを表示するシンプルなツールです(4月16日追記③)。
- rs-measure: 画面上で指定した、二箇所の地点間の距離を計測します。直線距離ではなく、物体の形状に合わせた距離を計測するのがポイントです。
- rs-pointcloud: 撮影した情報から物体の位置情報をマップし、画面をドラッグすることで別の角度から「見る」ことが可能になります。
- rs-align: 指定した距離より遠い物体をマスクするツールです(4月16日追記④)。
- rs-enumerate-devices: デバイスの情報を表示します。
このように強力なデプスカメラであるRealSenseを使うと、Ubuntuでも簡単にモーションキャプチャーが可能になります(4月16日追記⑤)。SDKもGitHub上で公開されているので、自分用にソフトウェアを作ることも可能です。Ubuntu環境のみでバーチャルユーチューバーを目指している人はぜひ参考にしてください。