#はじめに
LookAtは特定の物や人を見たり、頭部とホイールでそれをトラッキングしたりするのに用いられます。魑魅魍魎や未確認生物の類は見えないはずですが、逢魔時とか丑三つ時とかに試してみるといいかもしれません👻👽
下はLookAtアクションをPepperに実行してもらう場合のサンプルコードです↓
//LookAtのためのターゲットフレームを取得
Frame targetFrame = ...;
//アクションをビルド
LookAt lookAt = LookAtBuilder.with(qiContext)
.withFrame(targetFrame)
.build();
//非同期にアクションを実行
Future<Void> lookAtFuture = lookAt.async().run();
//実行キャンセルのリクエスト
lookAtFuture.requestCancellation();
#見て見てPepper
Pepperに何かを見てもらうにはFrameを使用します。
Frameを取得し、LookAtをビルドしましょう。Frameについては前回の記事に詳しい記述がありますので、適宜振り返ってください↩️
アクションの実行中、Pepperはターゲットフレームをトラッキングします。
例えばヨカナーンの首1がターゲットフレームである場合、ヨカナーンの首が動くとPepperは自動で向きを変更します。
#MovementPolicyをセットする
LookAtMovementPolicyで、Pepperの頭部のみを動かすのかホイールも動かすのかを設定しましょう。
HEAD_AND_BASEがデフォルトになっていますが、HEAD_ONLYにすることも可能です。
HEAD_ONLYだと頭部だけが特定のFrameに向きますが、HEAD_AND_BASEにするとホイールも動くのでやや懐いてくれた感が伴います🐥
MovementPolicyをHEAD_AND_BASEに設定した場合のサンプルコードは以下の通りです↓
LookAt lookAt = ...;
lookAt.setPolicy(LookAtMovementPolicy.HEAD_AND_BASE);
lookAt.async().run();
HEAD_AND_BASEなのにホイールが有効でない場合(=電源フラップが空いている時)は、例外エラーで実行は失敗します。
~~金縛られPepper…~~ HEAD_ONLYにセットし直してから、もう一度LookAtを実行してください。LookAtアクションはキャンセルするまで実行を継続するため、使用時はキャンセルのタイミングについても検討が必要です🚨
また、RobotFrameで1m先を見ると俯いてしまいます。これはRobotFrameのZ座標が地表0mのため、1m先の地面を見てしまうためです。Z座標を1.2m程度の位置に変更するか、1k先の地平線を見るように調整しましょう📏
#あとがき
今回もPepperSDKforAndroidを参考に書かせていただきました。
さらに詳しい情報はLookAtのAPIリファレンスを参照してみてください!
次回はトラベルしないタイプのGoToです🌺🎫それでは!
-
オスカー・ワイルド作の戯曲『サロメ』で、サロメが踊りの褒美に欲したもの。ヨカナーンのことが好きだったらしいです ↩