LoginSignup
4
2

More than 5 years have passed since last update.

QiMessaging JavaScriptを使ってみた

Last updated at Posted at 2017-08-08

はじめに

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

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2