2013年4月30日火曜日

簡単MJPEGビューア(SimpleMjpegView)をGoogle Playに公開してみた

Trek Ai-BallやIP Webcam (Google Play)のようにMJPEGストリーミングを行うネットワークカメラをandroidで表示するためのサンプルアプリのソースを以前から公開していました(詳細)。

何人かの方が使ってくださっているようなのですが、カメラのIPアドレスがソースに直書きされているので使いにくいという意見がありました。

サンプルだからシンプルな方が良いだろう、と思ってIPアドレス変更用のインターフェイスをつけていなかったのですが、せっかくなので必要な機能を追加した上でGoogle Playに公開してみました。ソースもこれまで通り公開しています。

以下、リンクなど

<実行ファイル>
簡単MJPEGビューア(Google Play)

<ソース>
SimpleMjpegView (bitbucket)

<解説>
AndroidでWifiカメラからのMJPEGストリームを表示する

<画像処理の方法>
AndroidでWifiカメラから受け取った動画を画像処理する(1)ピクセルを直接操作する方法
AndroidでWifiカメラから受け取った動画を画像処理する(2)OpenCVを用いる方法

以前との違いは下記の通りです。

  • カメラのIPアドレスを設定するインターフェイスをつけた(デフォルトは http://192.168.2.1:80/?action=stream になっており、Trek Ai-Ballにつながる)
  • 解像度を可変にした(デフォルトは640x480だが、任意の解像度を指定可能)
ロボットなどに搭載して遊ぶのに良いと思います。

注意点としては、映像を受信する端末によって映像の滑らかさに差が出ることが挙げられます。これは以前の解説ページに書いた通りですが、Nexus 4 は特に遅い印象がありました。快適なのは以前も書いた通りXperia Arcなどです。




2013年4月22日月曜日

スマートウォッチi'm WatchでタミヤのRCモデルを操作してみた

スマートウォッチI'm WatchでタミヤのRCモデルを操作してみました。
動画はこちら


経緯


卒業生がTAMIYAのRCモデル「初音ミク Studie GLAD BMW Z4」を遺産として残してくれました。塗装もデカール貼りも気合いが入っています。


androidからbluetooth経由で操作できるよう改造されているのですが、スマートフォンでのラジコン操作は2010年の時点で既にいわたんさんによるすごい動画があるのでどう使おうか迷いどころでした。

しかしこのまま眠らせるのも惜しいと思い、手持ちのスマートウォッチi'm Watchで操作してみることにしました。ものを動かすためにi'm watchを利用するのは下記のプラレール操作に引き続き2つ目ということになります。
i'm Watchは血迷って2つ購入してしまったので、無理にでも積極的に活用しないと損をした気になってしまうのです。



i'm Watchと回路を連携するためには、母艦となるスマートフォンに中継してもらう方法を用いており、これは上記のプラレールと本質的には変わりません。

ただし、そのままではつまづくポイントがあったので、以下ではそれらをメモします。

技術的なこと


実現したいことは以下の通りです。

  • i'm WatchでRCモデルを操作できること
  • RCモデルにカメラを搭載し、i'm Watchから閲覧できること
プラレールの時に用いた方法を用いるなら、こんな感じになるでしょう。



なお、Xperia RayでBluetoothテザリングを行うには、カスタムロムをインストールする必要があります(ここではCM10-basedなJCROM)。が、実際に試してみると、i'm Watchのbluetoothは2、3m程度しか飛ばないことがわかり、RCモデルの操作には適していないことがわかります(プラレールの場合はi'm Watchを常にプラレールの近くに置いて操作していたので問題なかったのですが)。

そこで、実際に採用したのは以下の第2案です。


…なんというか、必要以上に複雑なシステムになってしまいました。実用性よりも「i'm Watchを無理にでも使うこと」が目的になってしまっている感がありますが、とにかくこうなっています(という自分用のメモ)。なお、Xperia ArcでBluetoothテザリングを行ってi'm watchの母艦とするために、カスタムロムをインストールして用いています(ここではCM10-basedなJCROM)。このXperia Arcは動画ではシャツの胸ポケットに入っています。

なお、RCモデル上のカメラを省略すれば、Xperia Rayは不要になって若干シンプルになります。

図では省略していますが、RCモデルの操作はオリジナルの操作系をそのまま活用するため、プロポの基板+ESCをそのまま車体内に搭載し、プロポ基板に対してPIC24F+DA変換チップ(MAX525)からアナログ電圧を与えることで操作しています。

Xperia ArcとPIC24FとのBluetooth通信には、いつも通りhrdakinoriさんのBT_DROIDを活用させて頂いております。

おしまい


i'm WatchでRCモデルを操作してみましたが、スマートウォッチとしての本来の目的(メール、スケジュール管理、SNS連携など)はどうかというと、何をやるにしてもスマホの使い勝手には敵わないというのが現実です。そのあたりの事情はWiredの「Smartwatchは本当に革新的なのだろうか?」という記事が参考になります。

そうはいっても、腕時計で通信をしたりものを動かしたりというのは「古き良き未来」を感じさせてワクワクさせるものがあります。個人的にはウルトラセブンのモロボシダンがキリシマ隊長とビデオシーバーを使ってテレビ電話をしていたのを良く覚えています。また、この作業をしているときにたまたま読んでいた「ファイブスター物語リブート1」でザ・ナイト・オブ・ゴールドの外部からの操作にやはりこの手のスマートウォッチ風のデバイスを用いていたのもイイ感じでした(1986年頃の作品です)。

今後数年でスマートウォッチがより進化して、我々の生活に浸透してくると面白いですね。

2013年1月24日木曜日

スマートウォッチi'm WatchでMJPEGストリームを表示してみた

前回のエントリでi'm Watchを用いてプラレールを操作する方法を紹介しました。今回は、MJPEGをストリーミングするタイプのWifiカメラの映像をi'm Watchで受け取って表示してみます。

いつものプラレールですが、使用例の動画が下記になります。


今回のポイントは、プラレール上のXperia Rayからの映像がMJPEGストリームとして送信され、i'm Watchがそれをデコードして表示している点です。以下で解説するように、動画はBluetoothテザリングで送られてきますので高速にはできず、毎秒5フレーム程度です。

なお、同時にプラレールの操作もi'm Watchで行っていますが、これは前回のエントリに基づいています。

仕組みとサンプルソース

システムの大まかな流れは下の図のようになります。

動画を送信するXperia Rayでは、Google PlayからインストールできるIP Webcamというソフトウェアを導入して実行しています。IPWebcamはサービスとしてバックグラウンドで実行できますので、他のアプリ(ここではBluetoothでPICマイコンに命令を送信するもの)を同時に実行できます。IP Webcamの設定の注意点は以下の通りです。上図で分かるようにデータはBluetoothで送られますので、データ量を減らすことが重要です。
  • Resolution: 320x240に。データ量削減のため
  • Quality: 30~50程度。低いほど画質が下がるが、データ量は減るので有効
  • Orientation: Landscape
  • FPS limit: 5以下に。一秒間に送られる画像の枚数
i'm Watch用の受信アプリですが、MJPEGのデコードに特化したサンプルのソースを
に置きました。このアプリをi'm Watchにインストールして利用します。注意点は以下の通りです。
  • i'm Watchを母艦(上の図ではXperia Ray)と接続し、Xperia Ray側でBluetoothテザリングを有効にします。なお、今回はXperia Rayにはカスタムロムをインストールしています(CM10-based JCROM)。
  • i'm Watch側のアプリから母艦のIPアドレスを指定する必要があります。GUIによる設定画面を用意しましたので、そちらで設定を行います(追記2013.4.30)。なお、androidでBluetoothテザリングを行うと母艦側は192.168.44.1になるようなので、その値を初期値としてあります。
このサンプルを使用しているイメージは下図のようになります。いい感じです。この図では母艦はCM10-based JCROMをインストールしたGalaxy S3です。


おわりに

届いた当初は何に使ったらよいのか途方に暮れたi'm Watchでしたが、adbが入ったファームウェアが公開され、自作アプリを試せるようになると俄然愛着がわきますね。時計としてはまあちょっと残念ですが(毎日充電しなきゃいけないし)。

expansysには色によって在庫があるようなので、気になる人は試してみては?

こちらもどうぞ