ショーロボット向け屋内測位システム
自律型ロボットのごく典型的なケースを簡単に振り返ってみましょう。今回はショーロボットです:
- お客様が犯した間違い
- 当社のアドバイスと修正
このケースをもとにしたヒントは、お客様ご自身のケースにも役立つはずです。
プロジェクトでお困りの場合やお時間がない場合は、いつでもお問い合わせください。当社がシステムを完全にリモートで導入します:完全リモートでのネットワーク計画と導入(今回のケースをはじめ、多くの事例でそうしてきました)。
タスク
約10台の車輪付きロボットがステージに登場して踊ります。数分間の振り付けを披露し、その後ステージから退場します。とてもシンプルです。
ロボット
これらのロボットは、笑顔の表情、手を振る腕、発話機能など、エンターテインメント向けに設計されていますが、ステージ環境で十分に自律的に動く能力(いわゆる自己位置推定)はありません。そのような用途向けに設計されていないためです。一方、当社のシステムはまさにこのタスク、つまりロボットに高精度な屋内測位とナビゲーションを提供するために設計されています。
セットアップ
当社に連絡があった時点で、ショーまで残り約1週間しかなく、お客様は行き詰まっていました。
ケース自体は比較的シンプルでした:
- 直径12メートル程度の、広く開けたステージがあるだけ
- 固定 Super-Beacon をステージの10メートル上方に設置
- ロボットは約10台のみ
- ロボットはゆっくり移動する(つまりドローンではない)
お客様の初期構成
お客様にはプロのエンジニアがいて、当社に連絡があった時点で、すでにかなり複雑なマップが構築されていました:
間違いと修正
構成にはいくつかの間違いがありました。一つずつ見ていきましょう。
1) サブマップが多すぎる
直径12メートルのステージを2D(XY)でカバーするには、固定ビーコンは2台あれば十分です。部分的または完全に重なり合う複数のサブマップは有効な解決策ですが、それは次のような特殊なケースに限られます:
- 遮蔽が予測できない:ロボットの周囲にいる背の高い人、他のロボット、その他の移動体
- マップが30メートルより大きい
- 高い更新レートが強く求められる(つまり、サブマップを小さくする必要がある)
- 外部ノイズが非常に強く、十分なS/N比を確保するために最大距離を短くする必要がある
今回のケースでは、いずれも差し迫った問題ではありませんでした。
そこで、まずお客様の初期マップを保存したうえで、ごく基本的な2Dマップを構築しました。使用した固定ビーコンは、わずか2台の Super-Beaconです。以下をご覧ください:
2) 誤ったツールでの問題解決
お客様のロボットには頭部があり、その頭部が、固定ビーコンからロボットの肩に取り付けたモバイルビーコンへの経路を遮っていました。つまり、最も重要な要件である直接の見通し(超音波が直接届く経路)が確保されていませんでした。トラッキングは不安定で、方向の推定はさらに悪い状態でした。
お客様の考え方は明確でした。固定ビーコンを増やし、あるサブマップで見通しが失われても、別のサブマップで機能するようにする、というものです。確かに、頭部がロボットのモバイルビーコンの一つを遮っても別のサブマップが補うように、重なり合うサブマップを作ることは可能です。しかし、これほど多くのサブマップと、同じ問題に対する他の対策を組み合わせると、マップの複雑さが急激に増すわりに成功の見込みは低く、最適な方法でないことは明らかでした。
はるかにシンプルで、ずっと堅牢であり、可能な限り推奨される解決策は、モバイルビーコンをまったく遮られない位置、つまり今回のケースではロボットの胴体や頭部に遮られない位置に取り付けることです:
- 小型の Omni-Microphone を頭部の周囲と頭上に配置する(小さなアンテナのように)
3) ハンドオーバーゾーンを作っていない
もっとも、アドバイス1)に従えば、この問題はそもそも発生しません。しかし、複数のサブマップを作る必要がある場合は、ハンドオーバーゾーン、つまり隣接するサブマップのサービスゾーン同士の重なりが必要です。今回のケースでは、その幅がゼロでした。ゆっくり移動するロボットの場合、50〜100 cm程度が必要です。スムーズな切り替え(ソフトハンドオーバー)のためには、ハンドオーバーゾーン内で少なくとも3〜4回の位置更新が行われる必要があります。
4) ステップを飛ばす
最終構成を急ぐことは、屋内測位システムでつまずく最も多い原因でしょう。これについては、いくつかの動画も公開しています。
メッセージはごく基本的なものです:ステップを飛ばそうとしないでください。まず可能な限りシンプルな構成を構築し、そこで完璧なトラッキングに成功してから、一度に1ステップずつ複雑さを増やしてください。
このようなシンプルな段階的アプローチなら、どれほど複雑な屋内測位システムでも、速く確実に構築できます。
自律型屋内ドローンの例でも、同じことを説明しています:開梱から自律走行・飛行までの8つの基本ステップ。
したがって、このケースでの正しいステップは次のとおりです:
- 三脚に取り付けたモバイルビーコン1台と、1つのサブマップだけで構成される基本的な2D(XY)IAマップを構築する
- 小さくても十分なサービスゾーンを構築して、性能を最適化します。これにより、次が向上します:更新レート
- トラッキングに成功したら、もう1台のモバイルビーコンを三脚に、ロボットと同じベース(ビーコン間の距離)で取り付けます。最初のビーコンとは別にトラッキングします。最初のビーコンはスリープさせます
- 両方のモバイルビーコン(hedge)を、ペアにせずに同時にトラッキングする
- ビーコンをペアにして、位置+方向を取得する
- その後で初めて、モバイルビーコン(hedge)をロボットに取り付け、同じトラッキングを実現する
- そして、その後で初めて、次のロボットを追加する
結果
上記のステップに従い、必要なトラッキング品質を短期間で達成しました。お客様と過ごした時間の大半は、システムをリモートで導入するための適切なモバイルインターネット接続の手配に費やされました。
2台のモバイルビーコンを同時にトラッキング
ペアモードで2台のモバイルビーコンをトラッキングし、位置+方向を取得
独立した2台のモバイルビーコンのトラッキングに成功して初めて、ペアにして位置+方向を取得する段階に進みます。「ノーズ」に注目してください。ロボットが向いている方向を正確に示しています。
ロボットに移る前に三脚を使う
自律型ロボットを走らせる前に、三脚で完璧なトラッキングを実現してください。その際、高さとビーコン間のベースは、実際のロボットに近い値にします。
無線干渉
ご覧のとおり、トラッキングにはいくつか途切れがあります。このケースでは時間がなく、またロボットの走行能力にはほとんど影響しなかったため、正確な原因の特定には時間をかけませんでした。当社システムのバグや、セットアップ固有の問題(リモート環境で、詳細不明のPCで詳細不明のLinuxが動作し、他のアプリも実行されていた、など)の可能性は常にあります。しかし、ビーコンからモデム、モデムからビーコンへのRSSIは-50 dBm〜-80 dBm程度と良好だったため、現場の無線干渉が原因だった可能性が高いと考えられます。
手早い解決策としては、すべてを別のチャンネルに移す、あるいは一部だけを別のチャンネルに移して、何か変わるかどうかを確認する方法があります。無線干渉は定常的で、周波数的には比較的狭帯域だったのかもしれません。
しかも、問題はそれほど単純ではありません。おそらく次のような状況です:
- 何らかの理由で、ビーコンn6が無線接続を失う
- 固定ビーコンが2台しかないため、エリア内のすべてのモバイルビーコンのトラッキングに影響する
- したがって、たとえば完全に重なり合うサブマップは良い解決策になり得ます。理論上は、です。実際には、問題の本当の原因によっては、別のサブマップのビーコンも無線干渉の影響を受ける可能性が高いからです。さらに、各モバイルビーコンが2つではなく4つの異なる周波数を受信してフィルタリングする必要があるため、更新レートがわずかに低下します。更新レートが下がると、たとえば高速なフォークリフトやドローンなどで別の問題につながる可能性があります。このように、一つの小さな問題が、いくつもの別の問題を引き起こすことがあります
前述の「誤ったツールでの問題解決」の章で説明したとおり、完全に重なり合うサブマップでこの問題を解決することも理論上は可能です。しかし推奨される方法は、重なり合うサブマップなどの対症療法で問題を覆い隠すのではなく、より深くデバッグして根本原因(おそらく外部の無線干渉)を解決することです。
ロボットの最終的な様子
残念ながら、このケースは通常どおりNDAの対象であるため、ロボットの最終的な様子はお見せできません。
まとめ
複数のショーロボットに自律的な屋内ナビゲーションを提供する高精度屋内測位システムの導入は、基本的なガイダンスに従えばまったく難しくありません。一方で、推奨される段階的アプローチに従わないと、比較的単純なケースでも簡単に行き詰まってしまいます。
| 月 | 火 | 水 | 木 | 金 | 土 | 日 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 | 31 | |