QiMessaging JavaScriptを使ってみた


はじめに

SwiftからPepperの音量を変更するでqimessagingを使用したので、使い方について個別にまとめました。

qimessagingとは

JavaScriptからNAOqi APIを呼んでPepper等を操作するためのライブラリです。
Aldebaranのgithubアカウントで公開されております。
qimessagingとはなんぞや?というところの詳しい説明が知りたい場合は、Qiita内で検索すれば見つかると思いますので、検索してみてください。

version1.0について

現在非推奨となっているため、これから使用する予定ならばversion2を使用することをおすすめします。
(ただし、PepperではなくNAOに使用したい場合は、version1.0でないと動かない可能性があります。私が検証していた環境ではそのような現象が発生していました。)
参考:QiMessaging JavaScript1.0

1.ヘッダ

qimessagingのJavaScriptファイルを読み込みます。

<script src="libs/qi/qi.js"></script>      

2.初期化

初期化
var qiSession;
qiSession = new QiSession("xxx.xxx.xxx.xxx");
qiSession.socket().on('connect', function(){
    //connected
}).on('disconnect', function () {
    //disconnected
});

new QiSession([ホスト名 or IPアドレス])で対象のロボットへ接続するためのQiSessionを生成します。
qiSession.socket().on('connect', function(){})のfunction内は接続が成功した際に実行されます。
.on('disconnect', function(){})内はセッションが切断された際に実行されます。

3.サービスの取得

セッションを確立できたら、サービスの取得を行います。

サービスの取得
qiSession.service([サービス名]).done(function(service){
    //OK
}).fail(function(error){
    //NG 
});

[サービス名]は操作したい内容に合わせて設定してください。(参考:NAOqi API
.done(function(service){})内はサービスが取得できた際に実行されます。serviceにサービスへのプロキシが渡されます。
.fail(function(){})内はエラーが発生した際に実行されます。

4.サービスの使用

サービスを使用してPepperを操作します。APIの仕様についてはNAOqi APIのドキュメントを参考にしてください。

音量を設定する①(set)
[プロキシ].setOutputVolume([音量]).done(function(){
    //OK
}).fail(function(error){
    //NG
});
音量を設定する②(set)
[プロキシ].setOutputVolume([音量]);           //done以下は書かなくても動作します
音量を取得する(get)
[プロキシ].getOutputVolume().done(function(volume){
    //OK('volume'に音量が返ってきます)
}).fail(function(error){
    //NG
});
ALMemoryイベント
qiSession.service("ALMemory").done(function(am){
    am.subscriber([イベント名]).done(function(subscriber){
        subscriber.signal.connect(function(state){
            //イベント発生時に行う処理
                });
        });
});

qimessaging2について

version1.0の説明に書いた通りなのですが、基本的にはversion2を使用するのが良いかと思います。別記事で説明しているアプリでもversion2を使用しています。

1.ヘッダ

qimessagingのJavaScriptファイルを読み込みます。今回はqimessaging2を使用するので、以下のように記述してください。

<script src="libs/qi/qi.js"></script>      

2.初期化

初期化
QiSession(function(session){
    //connected
},function (){
    //disconnected
}
, data)

function(session){}内はセッションが確立できた際に実行されます。sessionにQiSessionオブジェクトが渡されます。
function(){}内はセッションが切断された際に実行されます。
dataには接続先のホスト名もしくはIPアドレスを設定します。

3.サービスの取得

セッションを確立できたら、サービスの取得を行います。

サービスの取得
[取得したセッション].service([サービス名]).then(function(service){
    //OK
}, function(error){
    //NG
});

[サービス名]は操作したい内容に合わせて設定してください。(参考:NAOqi API
function(service){}内はサービスが取得できた際に実行されます。serviceにサービスへのプロキシが渡されます。
function(){}内はエラーが発生した際に実行されます。

4.サービスの使用

サービスを使用してPepperを操作します。下記は音量を変更する際の例です。APIの仕様についてはNAOqi APIのドキュメントを参考にしてください。

音量を設定する①(set)
[プロキシ].setOutputVolume([音量]).then(function(){
    //OK
}, function(error){
    //NG
});
音量を設定する②(set)
[プロキシ].setOutputVolume([音量]);     //then〜以下を書かなくても動作します。
音量を取得する(get)
[プロキシ].getOutputVolume().then(function(volume){
    //OK('volume'に音量が返ってきます)
}, function(error){
    //NG
});
ALMemoryイベント
qiSession.service("ALMemory").then(function(am){
    am.subscriber([イベント名]).then(function(subscriber){
        subscriber.signal.connect(function(state){
            //イベント発生時に行う処理
                });
        });
});

おわりに

近年JavaScriptは書くどころか読むこともしていなかったので、qimessagingを使おうと調べ始めた時は今以上にわからないことだらけでした。
正直、付け焼き刃程度の知識でやっておりますので、至らないところが多々あるのではないかと思いますが、何かご指摘あればコメント等していただけると幸いです。

補足

qimessagingを使用していると、Promiseの話が出てくるので気になって調べてはみたのですが、現状説明ができるほど深く理解できていないため、説明は省かせていただきます。
参考までに、調べた時に見たサイトのリンクを載せておきます。
今更だけどPromise入門
[Javascript] Promise/A+仕様を、チュートリアル形式で詳しく解説します - YoheiM .NET