スキップしてメイン コンテンツに移動

Pepper SDK入門(11) Robot ViewerとRobot Browser

Robot emulatorについては「Pepper SDK入門(3) はじめてのロボアプリ開発②」でも触れましたが、もう少し詳しく見ていきたいと思います。

Robot emulatorは、下記のモジュールから構成されています。
モジュール名 概要
NAOqi Robot emulatorエンジン。実機での操作をエミュレートする。
Robot Viewer Pepperの挙動のシミュレーションを表示する。
AVD Android仮想デバイス。Pepperのタブレットと同じ形状をしており、アプリはここで実行される。
以上の3つは同じライフサイクルを持っているため同時に起動し、一つでも停止すればすべてが停止します。

1.Robot Viewer

Robot viewerにはpluginが接続しているPepperをモニタリングするツールがまとまっており、以下のような機能が利用できます。
  • Robot viewによる、Pepperの3Dモデル表示
  • Motion Viewによる、Pepperの関節の角度設定
  • Dialog viewによる、音声認識の結果や発話内容の表示
  • Log viewによる、Pepper本体側のログの表示
pluginがPepperに接続するタイミングで、Robot Viewerは自動で起動します。

<手順>
Android StudioのToolsメニューのPepper SDKからEmulatorを選択するか、ツールバーのエミュレータボタンをクリックしてください。robotsdk.xmlに設定されているAPIレベルに応じたエミュレータが起動します。

1-1.Robot view

Robot viewは接続しているPepperの状態を表示します。
  • エミュレータに接続している場合、Pepperは青い背景で表示されます。
  • 実機に接続している場合、Pepperは緑の背景で表示されます。
Robot viewのツールバーで、表示内容を設定できます。
ボタン 説明
    3Dを表示する。
    衝突を表示する。
     オブジェクトを非表示にする。
  立ち位置のアップデートを行わないようにする。
モーターの位置のアップデートを行わないようにする。
エンゲージメントゾーンを非表示にする。
  人検知を非表示にする。

1-2.Motion View

Motion Viewは関節の角度の閲覧と設定ができます。

インデックス 名前 説明
A スライダー 関節の角度が設定可能。
B 現在のジョイントの値 インジケーターが緑の場合、Pepperはアニメーションの指定通りに動けていることを意味する。インジケーターが青い場合は、現在の関節の角度がアニメーションの指定する角度まで動けていないことを意味し、原因としては以下が考えられる。
  • アニメーションがまだ継続している。
  • セーフティーなどの機能によって、アニメーションが指定する角度がとれない。
D 関節のロックの切り替え
  • 緑:関節がロックされていない。手動で角度を変更することが可能。
  • 赤:関節がロックされている。手動で角度を変更することは出来ない。
E ミラーリングオプション 選択されている場合、関節の角度の変更等のアクションが左右対称に実行される(右腕を挙げると左腕も同様に挙がるなど)。
Cの記録ボタンについては、コレグラフでは確認できましたがAndroidStudioでは動作していないようです。

1-3.Log view

Log viewにはアプリのデバッグに利用できるPepper側のログが表示されます。表示するログの種類は選択可能です。

1-4.Dialog view


Dialog viewは、Pepperが認識した音声の内容、認識制度、及びPepperの発話内容を表示します。

1-5.Robot viewer表示中に有効となるpluginのボタンについて

pluginで追加されたTool barのボタンの内、右側2つは、Robot viewerが表示されている時にのみ使用できます。
ボタン 説明
  接続しているPepperのレスト、及びレスト解除が可能。
  アニメーションモードのon/offを設定。
オートノマスライフによって呼吸するような動きを行っているが、モーションを制作する際などにはこの動きが邪魔になることがあります。このボタンでアニメーションモードをonにすることでオートノマスライフの動きを止めることが出来ます。

 

2.Robots Browser

pluginで追加されたTool barのボタンの真ん中のボタンを押すとRobot Browserが起動します。Robots Browserには接続可能なロボットが一覧で表示されます。
基本的には、Pepper本体のIPアドレスを[User fixed IP/hostname]に入力し、Selectボタンを押下して接続します。



 
項目 説明
Pepperをお気に入りに登録することが出来る。
アイコン 説明
お気に入りに登録されているロボット。次にRobots Browserを開いた際、一覧の先頭に表示される。
お気に入りに登録されていないロボット。
Status Pepperのタイプと状態を表示
アイコン 説明
接続できないロボット。
ロボットがシャットダウンされていたり、接続が許可されていないなど。
接続できるロボット。
コンテキストメニューに以下のオプションがある。
  • [Copy Host:Port]
  • ホスト名とポート番号をコピーする。
  • [Copy name]
  • ロボットの名前をコピーする。
Name ロボットの名前
Port ロボットへの接続に使用するポート番号
Host ロボットのホスト名

コメント

このブログの人気の投稿

Pepper SDK入門(3) はじめてのロボアプリ開発②

Androidプロジェクトの作成及びロボアプリの初期設定を行った前回に引き続き、Pepperのエミュレータと実機でアプリを実行するために必要な手順を確認していきます。 1.Pepperのエミュレータ  まずは、Pepperのエミュレータで動作確認するための方法についてです。 <手順> エミュレータボタン をクリックしてください。すると、ロボットエミュレータが表示されます。 プロジェクトにおける実行の構成でappが選択されているか を確認し、 選択されていない場合はそれを選択してください。 実行ボタン をクリックしてください。すると、Select Deployment Targetダイアログが表示されます。 ダイアログからPepperのエミュレータを選択してください。アプリがエミュレータにインストールされ、Robot Viewer上のバーチャルロボットで動作確認することが出来ます。 2.Pepperの実機  次に、Pepperの実機で動作確認するための方法を見ていきます。 <手順> Pepperのタブレットの設定を確認します。タブレットのホームにある設定アイコンをタップし、以下の設定を確認してください。 開発者モードが有効になっていること 開発者向けオプション、デバッグ、ADBも有効になっていること Android studioで、接続ボタン をクリックし、Robots Browserを表示してください。 Use fix portとUse fixed IP/hostnameにチェックを入れ、接続先のPepperのIPアドレスを入力してください。PepperのIPアドレスはタブレットの通知バーか、胸部ボタンを一回押すことで確認できます。 Selectボタンをクリックしてください。すると、セキュリティの警告が表示されます。 Pepperのパスワードを入力してください。初期パスワードはnaoです。変更している場合は管理者に確認して下さい。パスワード入力後にOKボタンをクリックすると、Robot Viewerが表示されます。 Pepperの実機に接続すると、同時にタブレットにもADB経由で接続されます。 プロジェクトにおける実行の構成でa...

Pepper SDK入門(7) UIスレッドとワーカースレッド

前回、アクションについて解説するなかで同期と非同期の区別が登場しました。今回はその同期と非同期について、UIスレッドとワーカースレッドの二つを主軸に見ていきます。 同期と非同期 Pepperではタブレットと本体でそれぞれ異なるプロセスが動いており、二つのCPU間にはUSBを経由したTCP/IPによる通信があります。 同期と非同期のどちらでアクションを実行するかは、実際に動かしてみた上での選択をお勧めします。 1.UIスレッド  Androidシステムからのコールバック(onCreateやOnClickListenerなど)はUIスレッド上で動作します。 @Override protected void onCreate(Bundle savedInstanceState) { } @Override protected void onResume() { } タブレットからPepperに指示を出した場合、Pepperとタブレット間での通信が発生します。しかしUIスレッド上でのネットワーク通信は出来ないため、NetworkOnMainThreadExceptionがスローされてしまいます。そのため、UIスレッドからPepperに指示を出す際は非同期を使用するようにしてください。 実践:同期と非同期 同期:UIスレッドで呼ぶことができない // UIスレッド Say say = SayBuilder.with(qiContext) .withText("こんにちは") .build(); // NetworkOnMainThreadExceptionがスローされる // UIスレッド goTo.run(); // NetworkOnMainThreadExceptionがスローされる 非同期:UIスレッドで呼ぶことができる // UIスレッド Future<say> sayBuilding = SayBuilder.with(qiContext) .withText("こんにちは") .buildAsync(); // UIスレッド goTo.async().run(); 2.ワーカースレッド 続いて、ワーカースレッド...