たるこすの日記

たるこすの日記

リアルからバーチャルへ、バーチャルからリアルへ

ホロルンバ ~HoloLens とルンバで作る自律移動ロボット~

はじめに

こんにちは、たるこすです。

ついに HoloLens とルンバ(Roomba)を組み合わせた HoloRoomba が動くようになりました! くまちゃんを乗せることにより見た目もかわいくなっています。

まずは動画をご覧ください。

HoloRoomba で何ができるのか?

Roomba(とラズベリーパイ)だけでも移動はできますが、部屋の中のある場所に自動で移動するというのは難しいです。そこで、HoloLens を使います。HoloLens は空間の 3D マップを作成しその中で自分がどこにいるのかというのを把握できるため、現在地と目的地の差分から移動方向を決めてルンバに指令を送り、目的地に移動することができます。というわけで、約 40 万円で自律移動ロボットを作ることができます。

また、HoloLens の映像を見ながら人が操縦できるようにすれば、遠隔地から操縦して部屋の中を動き回ったり AR 戦車ゲームのようなこともできそうです!

HoloRoomba の仕組み

Raspberry Pi とルンバの接続

ルンバは通常の掃除用のものを使っています(ルンバ 622)。カバーを外し、ジャンパワイヤと USB シリアル変換アダプター を使って Raspberry Pi に接続することで、コマンドを送って動作させられるようになります。

詳しくは以下のブログ記事に書いています。 tarukosu.hatenablog.com

Raspberry Pi に Web サーバを立てる

次に、Raspberry Pi 上に Web サーバを立て、WebSocket を使って移動の指示を受け取れるようにします。

詳しくは以下のブログ記事に書いています。 tarukosu.hatenablog.com

HoloLens アプリの作成

Unity で HoloLens アプリを作成しました。

以下の動画のように、空間をタップすることで目的地を設置します。

アプリ内のメニューで "Start" ボタンをタップすると移動が開始されるので、素早く HoloLens をルンバの上に置きます。

ルンバの移動方向は、HoloLens の現在位置と目的地の差分から決定します。HoloLens の前方向と、現在位置から目的地への方向の間の角度を算出し、角度が大きければ目的地が正面を向くように回転させます。角度が小さくなれば、前方への移動と回転を同時に指令します。スクリプトでは以下のようになっています。

上のスクリプトに出てくる RoombaWebSocketController は WebSocket を使って Raspberry Pi に指示を送るためのクラスです。HoloLens で WebSocket を使う方法は以下の記事に書いているので、気になる方はご覧ください。

tarukosu.hatenablog.com

くまちゃんを喋らせる

「ヒミツのくまちゃん」というぬいぐるみのようなおもちゃが売られています。イヤフォンジャックから音を流すことで、くまちゃんが体と口を動かしながら音を出してくれます。

こどもクラブ ヒミツのくまちゃん シャーベットピンク 2930012 85827

こどもクラブ ヒミツのくまちゃん シャーベットピンク 2930012 85827

流す音声は Raspberry Pi で Open JTalk を動かして音声合成しました。

おわりに

次は、Microsoft の Immersive Device (VR ヘッドセット) を使って、遠隔地から HoloRoomba を操縦できるようにしたいと思っています。