はじめに
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のドキュメントを参考にしてください。
[プロキシ].setOutputVolume([音量]).done(function(){
//OK
}).fail(function(error){
//NG
});
[プロキシ].setOutputVolume([音量]); //done以下は書かなくても動作します
[プロキシ].getOutputVolume().done(function(volume){
//OK('volume'に音量が返ってきます)
}).fail(function(error){
//NG
});
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のドキュメントを参考にしてください。
[プロキシ].setOutputVolume([音量]).then(function(){
//OK
}, function(error){
//NG
});
[プロキシ].setOutputVolume([音量]); //then〜以下を書かなくても動作します。
[プロキシ].getOutputVolume().then(function(volume){
//OK('volume'に音量が返ってきます)
}, function(error){
//NG
});
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