WebSocket サーバーを NAO 上で稼働させる
Android や iPhone と NAO を連携させたい。方法はいくつもありますが、NAO 本体で WebSocket サーバーを立ち上げてしまうというのはその中の一つ、比較的簡単に実現できるので、サンプルプログラムを作ってみました。
(なお、サンプルプログラムは NAO でしか動作確認をしていませんが、Pepper でも同様に動くと思います)
WebSocket サーバーを NAO 本体内で立ち上げるサンプルプログラム:
サンプルプログラムでは WebSocket サーバーが 9091 番ポートでリクエストを待っています。
サンプルプログラムの使い方
ChoregrapheProject 内のアプリ、NAOWebSocketServerSample を NAO で実行(これで WebSocketサーバーが立ち上がります)
↓
sample.html をPC のブラウザーなどから開く
↓
ロボットの IP アドレス:9091 を NAO IP Address に入力
↓
[Connect] ボタンを押す。
↓
Say にテキストを入力して [Say] ボタンを押すと、NAO が発話、また NAOの接触センサーを触ると、それに応じて From NAO テキストボックスにメッセージが表示さる。
sample.html のスクリーンショット:
サンプルプログラムの実装のについて
WebSocket サーバーは SRNAOWebSocketService というカスタムサービスで稼働させています。 実装コードはコレグラフプロジェクトの services/SRNAOWebSocketSerivce.py にあります。サービスは クライアントからのメッセージを ALMemory のキー SRNAOWebSocket/from で通知、また SRNAOWebSocket/to にイベントを投げることでクライアントにメッセージを伝播します。
カスタムサービスとして実装する利点は、専用のプロセスが立ち上げるので、何か不具合が発生した場合も NAOqi 本体へ致命的な影響を与えないことです。Choregrapheで普通に作ったプログラムは NAOqi 本体内で実行されるため、特定の処理が致命的な障害を起こすと NAOqi 自体が止まってしまいます。 常駐処理系はカスタムサービス化するのがオススメです。
カスタムサービスの起動、停止はサンプルプロジェクト内「Start Service」ボックスで行っています。
( カスタムサービスについては次も参考:
qiita.com )
まとめ
クライアント連携の手法としてはこれ以外にも qimessaging を使う方法などありますが、普通に使う場合 NAO 本体のパスワードで basic 認証を通す必要があったりと使い勝手が良くない場面もあるかと思います。サンプルでは認証系の処理は入れませんでしたが、NAO に接続するために独自の認証手順を取らせたい場合などに今回の手法、使えるのではと思います。
参考になれば幸いです!