Raspberry PiとNode.jsで作る独立稼働モバイルサーバ
応用編:サーバpush型のカーナビのプロトタイプを作ってみた
これまでの経緯を踏まえ、プロトタイプを作成してみました。せっかくのモバイルサーバですから、走るサーバ「push型配信のカーナビゲーションシステム」をプロトタイピングしてみました。構成は以下のようになります。
図4: カーナビプロトタイプの全体システム構成概要
前述で説明したシリアル通信の部分に、USBタイプのGPSモジュールを接続するようにします。これで、GPS情報をRaspberry Piに取り込んで位置情報を取得できるようになります。サーバとしては取得した位置情報をGoogle Maps上に表示するだけで、アクセスしてきたブラウザ等では自車の位置が表示されるようになります。サーバアプリはGPSからの位置情報を受信すると、そのままクライアントに対してJSON形式の位置データをpush送信するようにしています。500msくらいの間隔で1回の更新が行われます。クライアント側では、位置情報が更新される際に前の位置からラインを引くようにしておき、軌跡が表示されるようにします。
せっかくなのでAndroidアプリも作ってみた
基本的にはAndroidやiPhoneでもChromeなどのブラウザからサーバのURLにアクセスすることで位置が表示されますが、せっかくなのでAndroidアプリを作成してみました。著者が作成したWebSocket用クライアントを利用して改良しました。サーバからJSON形式の位置情報がpushで送信されて来るので、端末のGPSを使うことなくMaps上に位置を表示するだけの非常に簡単なアプリになります。電池の消費量も抑えられますね。完成したプロトタイプを車に乗せるとこんな感じになりました(写真3)。GPSはUSBを延長してダッシュボードの上に貼り付けています。Android端末のケーブルはシガーソケットからの電源供給用です。
写真3: 車載サーバとしての走行試験環境
実走行試験をしてみた結果
さて、準備が整ったので実走行試験してみました。AndroidアプリとPCブラウザでのスクリーンショットと、実走行試験を動画撮影もしてみました。
図5: Androidアプリでの軌跡表示
図6: PCブラウザでの軌跡表示
実際に運転していても比較的安定して更新されますが、さすがに少しの遅延はあります。LTE(Xi)ではあまり接続できず3G通信(FOMA)となっていたようです。走行試験中は2回ほどネットワークが切断されたのか、サーバの反応が無くなってしまいました(リカバリは入れていません)。また、走行試験中にTwitterなどでURLを公開し、第3者にサーバにアクセスしてもらい、どこからでもリアルタイムに位置がバレる(笑)ことも確認できました。
このシステムのメリットは、以下のようなものが考えられます。
- あくまでサーバが位置情報をpushするので、クライアントアプリとしてのマッシュアップの要素が大きい
- 位置をキックに周辺情報やルート探索なども実装できる。
- Android端末の場合はGPSを使用しないので電池消費量を抑えられる
- 車のように何人かで移動する時でも情報やコンテンツのシェアが可能
このシステムを利用すると、車1台1台にURLが付くという面白いシステムができます。車載サーバとして発展させれば、様々な車両データを記録保存したり、配信したりできるようになります。
まとめ
記事の集大成として、Raspberry Piを使ったモバイルサーバを構築してみました。またそれを使った製品プロトタイプの作成を行いました。
いわゆる通常のPCレベルの性能が小型化することで、汎用技術を使った応用が比較的簡単に行えます。また今回の要素技術にNode.jsがありますが、これはHTML5の広義規格であるWebScoketを用いたpushサーバの実装になります。HTML5というとブラウザ依存がなくなり、Webの世界が広がるイメージがありますが、WebSocketのようなプロトコルを取り出して考えると、組込み機器などへの応用も幅広く考えることができます。特に今回のシステムは、クライアントではなく、サーバにGPSを接続し、サーバ自体が移動体センサーサーバになることで、情報をpush配信する。というところが面白いところです。その他にも3G通信網でのIPv6によるネットワーク・リーチャビリティを確保することで、M2Mとしての応用も考えられます。
クラウドが当たり前になりサーバがデータセンターにある時代から、手元に乗るクラウドサーバが実現できるようになりました。HTML5時代のシステムアーキテクチャを描き直すことで、Webだけではなくデバイスなどの機器も含めた広がりを考えてみることもできます。Raspberry Piはその可能性を十分に示してくれる魅力的なデバイスと言っていいでしょう。
連載バックナンバー
Think ITメルマガ会員登録受付中
全文検索エンジンによるおすすめ記事
- expressで開発したWebアプリをeXcaleで動かす
- Socket.IOを使ってNode.jsでリアルタイムWebアプリを開発する
- リアルタイム通信で活用!注目の技術「Node.js」とは【初心者向け】
- 簡単なリアルタイムチャットアプリを作成する
- 2017年に見ておきたい12のJavaScriptライブラリ
- クロスドキュメントメッセージングやWebSocketを使ってみる
- Arduino vs. Raspberry Pi:あなたにぴったりのDIYプラットフォームはどっち?
- 123d CircuitsとArduino実機で電子工作(1)
- ミニ四駆の遠隔操作を実現しよう!- Arduino Pro Mini組み立て編
- Arduinoを用意して簡単なプログラミングをはじめよう