#はじめに
なんだか世知が激辛そうなタイトルですが、あくまでも物理的な意味であり社会的な話は登場しません🍀☕️
PepperはLocalizeAndMapアクションで、ExplorationMapを内部に配置します。つまりLocalizeAndMapアクションを使って周辺環境の地図を作成した後、Localizeで相対位置の情報を保持するのですね。(極局所的)土地勘ゲットだぜ🐭⚡️
ExplorationMapはLocalizeアクションのビルドに使用されます。Localizeアクションが実行されている間、相対的な位置の軌道は保持されたままです!消失したりそこからずれたり、転がったり煮られたりすることはないため安心してください🌷
コード上では以下のようになります↓
//探索マップを取得
ExplorationMap explorationMap = ...;
//アクションをビルド
Localize localize = LocalizeBuilder.with(qiContext)
.withMap(explorationMap)
.build();
//アクションを非同期に実行
localize.async().run();
LocalizeAndMapについては次回の記事で、ExplorationMapについても改めて特集しますので、ここでは聞き流しておいてください👂🍃
#Pepperの探し方🕳🔎
Localizeが実行されている間、Pepperは自分の相対位置を保持しています。アプリはrobotFrame.computeTransform(mapFrame)で地図上のPepperの相対位置を知ることができます。
LocalizeAndMapを実行した場所を座標で言うところの(0,0)として、Pepperの現在地を知ることが出来るのです。下にいるのはセーブポイントや黄金比、モノリスの中などさまざまな場所で観測されたPepperです。
ちなみにPepperはLocalizeとLocalizeAndMapを実行している時に走行距離の変動を計算して相対位置を割り出しているため、どちらも実行されていない時には相対位置が分かりません。
また、他のアクションが実行されていてLocalizeがアニメーションをスキャンできない場合には、LocalizeはAnimation failedエラーを投げます👻❌
#センサー(ざる)
Pepperの位置を計算して特定するためには、センサーの情報を使用します。主に数メートル先の障害物が見える程度のレーザセンサを使うのでPepperの得られる情報は少な目で、位置を特定しようとしても一貫性のない結果となります。Pepperがウォーリー状態です🦓つまるところ壁際や柱が適度にある場所でないとLocalizeの意味がないため、目印を設置するのがおすすめです🖼🎄📮🛋🛒🗿
なおLocalizeが実行されていない間、長時間前方に移動してその後バックで元の位置に戻ろうとするとホイールの誤差が生じます。
#あとがき
今回もPepperSDKforAndroidを参考に書かせていただきました。
さらに詳しい情報は、LocalizeのAPIドキュメントを参照してください!
次回のPepperSDK入門は、今回フライングでたくさん登場していたLocalizeAndMapです🕊それでは〜🧟🍥