目次
はじめに
先日、RRT*とReed Sheppパスを使った
パスプランニングアルゴリズムを紹介しましたが、
このアルゴリズムには一つ問題があります。
それはReed Sheppパスが
実際の車両のモデルを忠実に表現していないことです。
Reed Sheppパスは、最大曲率(旋回半径)の条件は満たしたパスは作ってくれますが、
円弧と直線を繋ぐだけなので、曲率の不連続点があり、
ステアリングの切り角に制限があるロボットでは、
正確にトラッキングできません。
加えて、前後進の運動モデルを考慮していないため、
アクセルやブレーキの応答性が悪い車両では、
生成されたパスに追従できなくなります。
そこで今回はこの問題を解決するために
Closed Loop RRT*という
アルゴリズムを紹介したいと思います。
Closed Loop RRTとは
Closed Loop RRT(CLRRT)はMITの研究者が提案した、
RRTとローレベルコントローラを組み合わせた
モーションプランニングアルゴリズムです。
Motion Planning in Complex Environments using Closed-loop Prediction
Real-time Motion Planning with Applications to Autonomous Urban Driving
[1601.06326] Sampling-based Algorithms for Optimal Motion Planning Using Closed-loop Prediction
このCLRRTは、
DARPA Urban Challenge MITチームの
Talosという自動運転車両の
モーションプランニングアルゴリズムとして利用されました。
アルゴリズムとしてはシンプルで、
RRT(RRT*でも良い)で生成された参照コースに対して、
実際に制御で使用するローレベルコントローラと、
ロボットのモデルを使って、
実際に参照コースを追従するシミュレーションを実施し、
追従したコースが制約条件をみたせば、
そのコースを最終コースとして採用するというアルゴリズムです。
実際の制御でも使用される
ローレベルコントローラを
パス生成のためのシミュレーションにも使用するため、
実際の車両の動きに近いパスを生成することができます。
また、車両モデルが精密であれば、
すべての車両の制約条件を満たすコースと
入力プロファイルを計算することが可能です。
従って、Reeds Sheppパスよりも、
より実現可能なパスを生成することができます。
PythonによるClosed Loop RRT*パスプランニングサンプルプログラム
下記のGithubリポジトリに
CLRRT*のPythonサンプルプログラムを公開しました。
https://github.com/AtsushiSakai/PythonRobotics/tree/master/PathPlanning/CRRRTStargithub.com
このアルゴリズムでは、RRT*+Reed shepp pathで初期コースを生成し、
そのコースをローレベルコントローラとして、
PIDとpure pursuitアルゴリズム + Kinematic Modelを使って
Closed Loopシミュレーションで
コースを生成しています。
また、ステアリングの切り角度と、
アクセルブレーキ量の制約条件も追加しています。
下記が駐車オペレーションを模擬した、
シミュレーション結果です。
下記の結果を見ると分かる通り、
障害物に衝突せずにゴールに向かい、
かつ、入力の制約条件と車両モデル条件を
満たしたパスが生成できていることがわかります。
参考資料
MyEnigma Supporters
もしこの記事が参考になり、
ブログをサポートしたいと思われた方は、
こちらからよろしくお願いします。