コメントに同意します。「受け入れられる」答えが何であるかを想像するのは難しいです。このようなタスクは単純に見えるかもしれませんが、古典的な「感覚-計画-行動」サイクルを含む非常に複雑なプロセスです。
- センサーでオブジェクトを検出し、これを世界に関する知識に統合する
- 習得した知識を含めた進路計画
- 目標に向かって行動する
ここには多くの未知数があります。たとえば、ロボットが障害物の壁に囲まれている「縮退」の場合はどうでしょうか。ロボットは自分の向き (自分が向いている方向) を認識していますか? どのようにロボットを制御しますか? DifferentialPilotクラスを使用していますか? ロボットは、接近している 2 つの障害物を通過できるかどうかを検出できるように、センチメートル単位のサイズ(幅) を認識していますか? ロボットは「最短経路」をとろうとするべきですか、それともしばらくの間、世界を広範囲に探索しても問題ありませんか? 帽子の障害物は距離センサーで、駐車場はカラーセンサーで検知すると考えてよいでしょうか?カラーセンサーの範囲は数センチしかないというのは本当ですか? そしておそらく最も重要なこと:駐車位置はどこか分かりますか?
これらすべての質問を考慮すると、可能なアプローチについて一般的なヒントを与えることしかできません。答えが閉じられる前にこれをやろうとします。しかし、これは本当に深遠な段階的な解決策としてではなく、提案としてのみ考えるべきです。なぜなら、解決策がまったく機能するかどうかを判断する前に、上記のすべての質問に答えなければならないからです(そして、それが機能するかどうかは別の質問...)
「世界」の意図した表現について考える必要があります(または、すでに考えている場合は、この表現について説明してください!)。ここでは、ある種の「グリッド」で十分かもしれないと想像できます。しかし、世界の表現にLineMapを使用すると、NXT API の既存のインフラストラクチャを使用できるようになるため、おそらく有益です。
世界を表現したら、その中心を見つけなければなりません。繰り返しますが、障害物がある場合、これは不可能かもしれません (ここで洞窟の比喩について考えています)。しかし、障害物がない場合は、ロボットをその場で約 360°回転させることができます。これにより、すべての壁のポイントの距離情報が得られます。この情報があれば、世界の隅を検出できるはずです。これらは、正確に の境界矩形の隅になりLineMap
ます。これらの角の位置の平均を計算すると、中心が得られます。
センターに移動したら、駐車位置に移動する必要があります。セットアップを正しく理解していれば、この駐車位置がどこにあるのかさえわかりません。この場合、体系的な調査を開始する必要があります。中心から始めて、外側に向かって「らせん状」に移動することを試みることができます。障害物に遭遇するたびに、この「らせん」上の次の自由なポイントに移動しようとします。駐車位置がわかっている場合は、すべての障害物を避けて、この位置に直接移動しようとすることができます。
どちらの場合も、「現在の位置」と「目標位置」があります。後者は「スパイラル上の次のフリー ポイント」または「駐車位置」です。世界地図でこれらのポイント間のパスを見つけるには、A* 検索アルゴリズムを使用できます。幸いなことに、NXT API はすでにShortestPathFinderを提供しています。それにもかかわらず、これを統合してロボットを適切に制御するのは難しいかもしれません. しかし、たとえばDifferentialPilot
クラスを使用すると、おそらく、あなたがやろうとしていることとすでに似ているタスク用の無料/サンプルソースコードのリソースがたくさんあるでしょう。そこに「インスピレーション」を見つけることができるかもしれません。