自動走行軌道計画コントローラーのシミュレーション
お久しぶりです。学生プログラムを担当している飯島です。
本日のブログの記事は、MathWorksの海外版のブログにも掲載され、人気だった”自動走行軌道計画コントローラーのシミュレーション”に関する記事を和訳させていただきました。こちらの記事は自動車業界で車両設計を行っている方々にヒットする内容になっていますのでぜひ最後までお楽しみください。(オリジナル記事)
以下和訳 (*一部日本人向けに動画シリーズの差し替えをしています。)
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
このブログでは、軌道追跡コントローラーを MATLAB および Simulink に実装して、事前定義された軌道に車両を追従させる方法について説明します。 始める前に、このブログのコンテンツを作成するために尽力してくれた素晴らしい同僚の David Barnesと Munish RajとRoshan Hingnekar に感謝します。.
モチベーション
MathWorks の学生プログラムチームの一員として、定期的に学生と交流しています。 これらのやり取りの中で、学生が、他のRacing Lounge videosと同様に、パストラッキングアプリケーションができる自転車モデルに関するコンテンツを作成する必要があると提案をしてくれました。また、それによって、Simulink のラップタイム シミュレーション モデルがさらに活用できるとも述べてくれました。
そこで学生と 2 つの強力なツールボックス、Vehicle dynamics blockset、および Automated Driving Toolbox に触発されて、簡単に実装できるワークフローを示す一連のビデオを作成することにしました。
そこで学生と 2 つの強力なツールボックス、Vehicle dynamics blockset、および Automated Driving Toolbox に触発されて、簡単に実装できるワークフローを示す一連のビデオを作成することにしました。
それが、学生たちからのモチベーションでした。では、技術的なモチベーションを確認してみましょう!
軌道追従は自律走行に欠かせない要素のひとつで、車両の横方向と縦方向の動きを制御して、あらかじめ設定された軌道をたどることが目標になります。例えば、フォーミュラ・スチューデント・ドライバーレス競技では、車両は最初の1周で進路の計画と追跡を同時に行う必要があります。
さらに、その後の周回では、車両は最適化された軌道をより高速で追跡します。そのため、軌道からの大きな逸脱を避けるために、コントローラーの追従精度を高くする必要があります。
現在、
軌道追従問題に対処するための複数の制御戦略が存在しますが、このブログでは、以下の3つの軌道追従コントローラに焦点を当てます:
- 純粋追跡コントローラー
- スタンレーコントローラー
- モデル予測コントローラ(MPC)
これからのセクションを要約すると、まず参照軌道を生成します。次に、車両モデルを構築します。最後に、車両の縦方向と横方向の動きを制御するために、上記の3つの制御戦略をいかに簡単に実装できるかを紹介します。
参照軌跡
車両の姿勢データが既に記録されている場合は、この手順を省略できます。 ただし、参照軌跡を生成する場合は、Driving Scenario Designerアプリを使用できます。 このアプリを使用すると、自動運転システムをテストするための合成運転シナリオを設計できます。 この場合、事前に作成されたシナリオに存在する米国の高速道路シーンのセクションを利用しました。 次に、車両とその軌跡を指定し、軌跡データを MAT fileに出力しました。

車両モデル
軌道追跡問題の精度は、ビークル ダイナミクス モデルに依存します。 ビークル ダイナミクス モデルの忠実度に基づいて、さまざまな運転条件に最適なコントローラーを決定できます。 Vehicle dynamics blockset は、車両モデルを提供するだけでなく車両の動きを計算するためのさまざまな車体ブロックを提供します。 このモデルでは、vehicle body 3DOF dual track ブロックを使用しました。ここで、タイヤの力は、combined slip wheel 2DOF ブロックから得られます。 さらに、ベクトル化されたタイヤ サブシステムは、単純化されたパワートレイン サブシステムからの入力を受け入れます。

以降のセクションでは、すべてのコントローラー モデルに同じビークル ダイナミクス モデルを使用しました。これらのコントローラーは、必要なステアリング角度、加速、減速コマンドを生成することを目的としています。
基本的な縦方向および横方向のビークル ダイナミクス モデルから始めるには、次のビデオ チュートリアルをご覧ください。
コントローラー
単純追跡コントローラー(Pure Pursuit Controller)
制御ストラテジーを実装する最初の選択肢として、私たちは単純追跡コントローラを進めました。簡単に言うと、ある地点から別の地点に車両を移動させるために軌道の曲率を計算する軌道追跡アルゴリズムです。定式化の通り、基準軌道をたどるために車両の車輪の舵角を計算することができます。

操舵角の定式化でわかるように、変数の1つはルックアヘッドディスタンスです。一般的には、角速度指令を計算するために、車両が現在地から軌道に沿ってどの程度の距離を見るべきかを表します。これは、コントローラのトラッキング精度を確保するための重要な調整要因の1つです。ルックアヘッドディスタンスが小さいと、振動的な軌道になり、正確なトラッキングができません。一方、ルックアヘッドディスタンスが大きいと、振動的な軌道は少なくなりますが、トラッキングがうまくいかないことがあります。

さて、単純追跡型コントローラについて簡単に紹介しましたが、下の画像はSimulinkでの実装を示したものです。

実装には、
姿勢(Pose)と参照軌道(Waypoints)の2つの入力ポートから目標方向角度(TargetDir)を計算するPure Pursuitブロックを使用しました。このブロックでは、ルックアヘッドディスタンスを設定することで、コントローラを調整することができます。さらに、上記の式に基づき、必要な車輪の操舵角を求めることで、下図のような軌道に車両を追従させることができます。

参考チュートリアル動画: https://youtu.be/zMdoLO4kRKg
スタンレーコントローラー(Stanley Controller)
次に、スタンフォードレーシングチームがDARPAグランドチャレンジで実装したスタンレーコントローラーを紹介します。スタンレーコントローラは、DARPAグランドチャレンジでスタンフォードレーシングチームが実装したもので、基準軌道に対する前輪の交差軌道誤差と方位角を最小化する
非線形制御則を用いています。これにより、車両の現在の姿勢を基準姿勢に合わせる操舵角コマンドを計算します。

Simulink でコントローラーをモデル化するために、Lateral Controller Stanley ブロックを使用しました。 ブロックは、上記の式に基づいてステアリング角度を計算します。 興味深いのは、コントローラーの設定を使用して車両モデルのタイプを選択できることです。 たとえば、駐車場などの低速追跡にはkinematic bicycle modelを使用できますが、レース カーなどの高速追跡にはdynamic bicycle modelを使用することをお勧めします。 さらに、位置、ヨー レート、およびステアリング ゲインを調整して、コントローラーの精度を向上させることができます。

単純追跡コントローラーモデルと同様に、スタンレーコントローラーを使用して車両軌道追跡モデルを構築しました。 車両モデルと参照軌道は同じままです。 モデルをシミュレーションすると、高速環境で車両が目的の軌道をうまく追跡し、最大速度 30 m/s を達成していることが分かります。

参考チュートリアル動画: https://youtu.be/FHQFya0-JBs
モデル予測コントローラ (Model Predictive Controller (MPC))
最後に、Simulink でのパス トラッキング アプリケーション用の MPC の実装を確認しましょう。 MPC はオンライン最適化アルゴリズムを解いて、予測出力を基準に導く最適な制御アクションを見つけます。これにより、入力と出力の間に相互作用がある可能性のある多入力多出力システムと 入力と出力の制約も処理できますが、計算コストが高いというデメリットがあります。

日本人向けには「モデル予測制御(MPC)」のタイトルで MATLABビデオ シリーズが既にあるため、このセクションでは詳しく説明しません。 ビデオを見て、MPC がどのように機能するかを学び、この多変数制御技術の利点も発見できます。
MPC コントローラーを実装するために、最初は汎用の MPC Controllerブロックから始めました。 ただし、Path Following Control System ブロックは、軌道を追跡するためのより優れた代替手段です。 一般に、ブロックは、設定された速度を追跡し、先行車両からの安全な距離を維持しながら、自車両が直線または曲線道路の中心に沿って走行し続けることを目的としています。 ただし、設定速度をビークルの基準速度に設定し、距離ベースの曲率を曲率ポートに設定することで、軌跡をたどるように実装しました。 さらに、ブロックの出力は縦方向の加速度であるため、ペダル マップを接続して、必要な加速と減速のコマンドを取得しました。

最後に、予測範囲、制御範囲などの適切な設計パラメーターを選択した後、モデルをシミュレートし、車両が軌道を完全に追跡していることを確認できます。
参考チュートリアル動画: https://youtu.be/SzEg_C-XJ14
独自のモデルを構築する時が来ました
このブログでは、上記のコントローラーの技術的な詳細をすべて取り上げているわけではありませんが、これらのコントローラーを MATLAB および Simulink に実装する方法の概要を説明しています。 軌道追跡モデルを使い始めるのに十分な背景とリソースを提供できれば幸いです。これらのリソースを参考に、次はより困難な軌道に対して車を走らせてみませんか?
また、このブログに関するご質問は、racinglounge@mathworks.comまでお気軽にお問い合わせください。
コメント
コメントを残すには、ここ をクリックして MathWorks アカウントにサインインするか新しい MathWorks アカウントを作成します。