私は現在、パス プランニング用の D* Lite アルゴリズムを実装して (こちらも参照)、それを把握しようとしています。どちらも C/C++ 用の 2 つの実装を Web で見つけましたが、ホワイトペーパーの疑似コードとは予想以上に異なっているように見えるため、アイデアを完全には追うことができませんでした。私は特に次の 2 つの論文を使用します: Koening, S.; Likhachev, M. - D* Lite、2002 年 Koenig & Likkachev、未知の地形でのナビゲーションのための高速再計画、ロボティクスに関する IEEE トランザクション、Vol. 21、No.3、2005 年 6 月
最初のホワイトペーパー (p.5、図 4) の最適化されたバージョンの D* Lite を実装してみました。「デバッグ」には、2 番目のホワイトペーパー (p.6、図 6、図 6) で示され説明されている例を使用します。 。7)。すべての作業は MatLab で行われます (他のユーザーとコードを交換するのが簡単です)。
これまでのところ、computeShortestPath() を 1 回実行することで、最初の最短パスを見つけるコードを実行しました。しかし今、私は疑似コードの {36''} 行目と {37''} 行目で立ち往生しています:
{36”} Scan graph for changed edge costs;
{37”} if any edge costs changed
これらの変更を検出するにはどうすればよいですか? これがどのように検出されているのか、どういうわけか把握していないようですか?これまでの実装では、主に 3 つの行列を使用しました。すべての rhs 値を含むグリッド マップと同じサイズの 1 つのマトリックス。同様にすべての g 値を含む同じサイズの 1 つの行列。そして、最初の 2 列が優先キーで、3 番目と 4 番目の行が x 座標と y 座標である、優先キューの可変行数を持つ 1 つのマトリックス。
私の結果を比較すると、Step5 の computeShortestPath() の最初の実行で、2 番目のホワイトペーパーの p.6 図 6 に見られるのと同じ結果が得られます。ロボットを 1 歩動かすことも問題ありません。しかし、変更されたエッジ コストをスキャンする次のステップをどのように実装すればよいか、まったくわかりません。
ヒント、アドバイス、および/またはヘルプをありがとう!!!