2014年9月6日土曜日

Android Wear (LG G Watch) でカメラからの映像を見ながら三輪ロボットを操作してみた

はじめに

Android wear (LG G Watch) で、カメラからの映像を見ながら三輪オムニホイールロボットをラジコンのように操作してみました。動画はこちら。




経緯など

Android Wear (LG G Watch) で三輪ロボットを操作してみた」にて、Android wear搭載のLG G Watchで三輪ロボットを制御しました。

このロボットにはRaspberry Piとそのカメラモジュールが搭載されており映像を配信しているのですが、せっかくなのでLG G Watchでもその映像を表示してみよう、というのが今回のお話。

仕組みなど

動画の後半にも示されているように、LG G WatchだけではなくペアリングされたAndroid端末とその上で動くアプリが必要です。システム全体の模式図は下図のようになります。


スマートフォン側のアプリが三輪ロボット上のカメラからの映像を受け取り、それをWear側のアプリに送ります。カメラからの映像は640x480、15fpsで送られてきますが、Wear側へはそれを280x280、5fps程度に変換してから送っています。スマートフォンとWearはBLEで接続されていますので、データ量を極力減らさないとまともに動作しません。

アプリのスクリーンショットはこちら。

Wear側のアプリ



スマートフォン側のアプリ



ソース

操作命令送信のサンプルは「Android Wear (LG G Watch) で三輪ロボットを操作してみた」にあります。

映像受信のサンプルは neuralassembly/MjpegViewWear になります。Android Studio でインポートして、スマホとWearの両方にインストールしてください。

MjpegViewerWearを試すには、上の動画で行っているように、Raspberry Piで動画配信するという方法もありますが、より簡単に試すには、Androidスマートフォン(以下「別スマホ」と表記)を用意してその上でIPWebcamというアプリを動かすのが簡単です。以下、この方法を簡単に示します。

  1. 別スマホで、IPWebcamをインストールして起動します。設定は「Video preference / Video resolution を640x480」、「FPS Limit を15または10」程度に設定し、「Start server」。起動すると画面にIPアドレスとポート番号が表示されるのでメモします。FPS Limitが小さいほうがWear側のアプリは安定します
  2. WearとペアリングしたスマホでMjpegViewWearを起動。メニューの設定で、IPアドレスと番号をセットします。コマンドは「videofeed」。「画像スキップの頻度 n」は「n回に一回、Wearに画像を送る」の意味です。大きくすると安定しますが遅いです。小さくすると不安定になるので、nは3より小さくできなくしています。4か5程度にするとWear側のアプリが安定します
  3. ペアリングしたスマホで画像が表示されたら、メニューから「Wearアプリ起動」を実行します。Wearがスリープ状態のときは画面を一回タップしないと映像が表示されません。
注意
(2014.12追記) スマホとWear間の通信ですが、データを大量に送りすぎると、通信が切れてしまうことがあります。これは、Wear側の時計画面でクラウドアイコンに斜線が入ることでわかります。以前は、「通信が一度切れると、スマホ側かWear側の本体を再起動しないと通信が再開しない」ということがありましたが、Android Wearがアップデートされるにともない、その問題は起こりにくくなっているように思います。現在は「通信が一度切れたら、スマホ側とWear側のアプリを終了して通信が回復するのを待つ」で済むことが多いです。

展示

この内容を、2014年12月21日に東海大学高輪キャンパスで開催されたAndroid Bazaar and Conference 2014 Winterで展示しました(週アスPLUSさんTAPPLIさん、星影さんのブログにも写真があります)。


この時は下記の構成でデモしました。

  • 映像送信:Raspberry Pi + カメラモジュール (10fps)
  • ペアリングされたAndroid:Nexus 10 (画像スキップの頻度 5)
  • Android Wear:LG G Watch R

映像送信の頻度はかなり安全側に振って設定しましたが、その甲斐あってか10:00~17:00の展示時間中、かなり安定して動作しました。

たくさんの方にお越しいただき、ありがとうございました。

余談

今回実現したのは、2013年に「i'm Watch」というAndroidベースのスマートウォッチで実現したことの焼き直しです。下にリンクがあります。

それと比べると、Android Wearを搭載した、Googleにより正式に認証を受けた端末で実現した、というのが今回の違いです。

「i'm Watch」でのデモは「i'm Watch」という時計でしか実現できなかったのに対し、今回のデモは今後増えていくであろうAndroid Wear搭載の時計ならばどれでも動作する(はず)、というメリットがあります。

こちらもどうぞ

三輪オムニホイールロボットの操作について
Raspberry Piでの映像配信について
時計での模型操作について(i'm Watchという時計でのデモ)