United Statesからアクセスのようです。言語設定をEnglishに切り替えますか?
Switch to English site
Skip to main content

火星探査ローバー用の走行制御を自作ロボに搭載(その1)

ロボット、特にホイール付きのロボットは、障害物を検知して回避することのみによって進むものと、内部の電子マップを使用して予定された経路に沿って移動するものの2つに分類できます。ほとんどの「趣味」のモバイルロボットは、障害物検知のみで移動する傾向にあります。このことは、物を回避して動き回る方が、あらかじめ決められたコースを正確に動くようにするよりも、ずっと楽しく、簡単にプログラムできるというアイディアに基づく、幾分単純な考えを示しています。

走行制御

実際に火星で探査車として運用されている「キュリオシティ号」のような専門的なロボットは、岩石や小さなクレーターを避けながら正確に走行させる必要があります。

Mars_rover1_6cf614bb787b064157b411df30c3f60a33383cde.jpg

どの程度複雑なアルゴリズムで走行させているのかを探るため、キュリオシティの前身のロボット用の走行制御システムに関する論文、「Mars Exploration Rovers Opportunity and Spirit (火星探査車オポチュニティとスピリット)」にアクセスしてみた。この論文の3ページに掲載されているブロック図(図2)では、基本のナビゲーションシステムの説明を行っています。この記事と次回の記事で、MOTと記されたブロックで何が起こっているのかについて説明し、そのPIDアルゴリズムをベースとした機能を、私の自作ロボットに加える方法(及び理由)を紹介します。

PID制御

PID制御の基本原理はとてもわかりやすく、設定速度で走行するか、又は正確な位置まで移動する必要のある電気機械アクチュエータ(モータなど)を含むあらゆるシステムに適用できます。その他の必要なハードウェアは、アクチュエータの実際の速度又は位置に関するデータを提供するセンサと、制御アルゴリズムを実行するためのプロセッサユニットです。プロセッサは目的の機械出力(設定点)を感知した実際の値と比較し、変更された制御信号を生成することで、違い(誤差)を相殺します。しかしながら、このアルゴリズムは移動システムに限定されず、ある工業化学プロセスが正確な温度で保持されること、又はタンク内の液体が一定レベルに保たれることを保証することにおいても同様に有効であると考えられます。ここでは、モータ制御に焦点を当てます。

私の小型ロボットに走行制御が必要な理由とは?

趣味のロボットは、多くの場合、シャーシの両側に1つずつ、独立駆動の2つのホイール及び片方又は両方の端にキャスターホイールを備えた「バギー」形式です。この最も基本的な要件、すなわち完全な直線で指定距離を走行するこのようなロボットの必要性を考えてみましょう。非常に簡単であるように思えるのではないでしょうか?残念ながら簡単ではありません。これを実現するためには、次の2つの条件が揃っている必要があります。

  1. 両方のホイールがまったく同じ速度で回転しなければならない
  2. 走行距離情報を提供するため、両方のホイールにセンサが装備されている必要がある

要件(1)を満たすことは簡単ではありません。これは、同一の入力を与えられ、同じように見える2つモータはわずかに異なる速度で回転している可能性があるためです。このような場合、ロボットは直進するのではなく、緩やかな弧を描いて移動します。これが、閉制御ループで動作する車両回転センサからのフィードバックが必要である理由です。私たちのバギーについては、各ホイールに別々のループが必要です。幸いなことに、ホイール搭載センサは、各ホイールの移動距離を計算できる情報も提供できるため、要件(2)をカバーできます。

理論上のPID制御

PIDは、比例積分微分の略で、閉ループ制御システムで誤差フィードバック信号に適用される3つの数学的プロセスを指し、その誤差の補正を目的とする因子を生成します。では、比例/微積分学が誇るアルゴリズムの概要を見ていきましょう。

PID_blog_2_b76b5cf1bf8d4f3fe24b3cf187f54756dadf95e0.png

ここでは第1項が比例フィードバック成分、第2項が積分、第3項が微分です。e(t)は、目的の出力(設定点)と実際の出力との差です。c(t)は更新されたアクチュエータ制御出力です。

3つの項をすべて活用する閉ループ制御システムは、次のようになります(1)。

PID_blog_11_32080f6d05e05ec5ab9d7d53fe229585b8fe0934.png

私のモバイルロボットの例では、アクチュエータが連続回転サーボモータ、センサが赤外線反射ユニットで、ロードホイールに組み入れられたスロットで動作します。タコメータとして広く知られているこのタイプのセンサは、実際のホイール回転速度データを可変レートパルス列としてフィードバックします。速度が速ければ速いほど、パルス列も高速になります。制御プログラムコードは、この実際の速度を目的の値又は「設定点」の値と比較します。また、その差はPIDアルゴリズムに対する誤差入力e(t)です。結果は、その誤差をゼロに(最終的に)減少させる値でモータを駆動する制御出力c(t)です。3つの定数KP、KI、KDには、通常、まず推定(推測)された値が与えられ、その後、シミュレーションプログラム又は実際のシステムハードウェアで最適化されます(「チューニング」と呼ばれるプロセス)。

実際のPID制御

私がリアルタイムオペレーションのための比例と積分のコーディングを行うことを皆さんが期待されていないことは間違いないでしょう。慌てる必要はありません。上の式は連続時間のための式ですが、これが「デジタル」アプリケーションであるということは、離散間隔で測定されたサンプリングデータを処理することを意味します。さらに良いことに、必要な制御の「緊密さ」に応じて、I項とD項の一方又は両方を省略することもできます。特定のタスクにどの程度フルPIDアルゴリズムが必要であるかを決定するには、各項の寄与について理解する必要があります。

比例(ゲイン)の項

P項は必須であり、理解と実装が最も簡単です。制御信号への寄与は割合であり、これは、感知された誤差のKPによって設定されます。よって、KP< 1が成り立ちます。KP= 1が成り立たず、全体の誤差が一度に相殺される理由とは何でしょうか?この問題は、電子機器が、機械システムが変化に反応できる速度よりもはるかに迅速に、誤差信号を改変された制御信号に変えることができるためです。その結果、連続的な振動が発生し、モータは設定点を超えるまで加速してから、設定点を下回るまで減速します。そのため、各間隔で誤差の一部がフィードバックされ、ゆっくりと速度が設定値に戻ります。一方、フィードバックが少なすぎると、スイッチオンから必要な速度に達するまでに非常に長い待機時間があります。したがって、離散時間システムでは次の式が成り立ちます。

CP(n) = KP x E(n)

なお、制御信号は、誤差と同時にゼロまで減少します。これは若干自滅的です。これには2つの回避方法があります。1つ目の方法は、制御入力が目的の設定速度のために必要である内容を見つけることです。このためには、ハードウェアの「開ループ」を実行し、この「基準」値を定数として上の式に加えます。2つ目の方法は、以下に説明する積分項を加える方法です。これにより、自動的に目標値に照準を合わせることができます。

積分(リセット)の項

誤差信号の積分により、間隔tにわたる累積誤差の値を提供します。上記のような制御基準入力がない場合、始動からその値は設定点で安定するまで上昇する必要があります。通常、その機能はセンサ測定における固定誤差(オフセット)を相殺することです。KIが大き過ぎると、不安定になる可能性があります。離散時間システムでは、計算が単純な加算(より正確な表現をすれば累積)まで縮小します。

A(n) = A(n-1) + E(n)    ここで、A(n) = 累積誤差

CI(n) = KI x A(n)

微分(レート)の項

この場合は、KPやKIに大きな値が使用されるときに起こる過渡振動、すなわち「共鳴」を抑えることによって性能を向上させる、完全にオプションの成分があります。この項は、出力の変化率を測定し、制御信号が設定値に近づくにつれて制御信号を減少させます。KDに適切な値を指定することで、出力はオーバーシュートせず過補正となります。よって、突然の大きな過渡状態に対してはより重い初期制御応答が得られます。これは、誤差がゼロに近づくにつれて減少します。D項では、設定点の急激な変化などに対するシステムの応答を向上させることができるものの、フィードバック信号のノイズに対する感度に起因して問題が生じる可能性があります。実際には、その厄介な微分項が、現在の誤差値を前のものから差し引く単純な減法に変換されます。

CD(n) = KD x (E(n-1) – E(n))

言い換えれば、この制御成分は、誤差が改善しているときには正であり、P項及びI項の効果を補強します。感知された出力が設定値をオーバーシュートした場合、D項は負になり、誤差が再び減少し始めるまで全体の制御入力が減少します。

PIDの異なる順列

PID制御アルゴリズムは、必ずしも全体を使用する必要はありません。3つの項のうちどの順列が特定のアプリケーションに使用されるかは、制御されるシステムの特性に基づいて設計者が決定する必要があります。その際は、次の2点の考慮が必要です。

  1. 最初の始動時と設定点の変更時の両方において、システムがステアリングコマンドなどで誤差の突然の増加にどの程度迅速に反応しなければならないか。これが「過渡」応答です。
  2. 設定点をどの程度正確に追跡する必要があるか。これが「定常状態」応答です。

2は、頻繁に使用されるP、I、D項の組み合わせの性能曲線例です。各ケースの青い曲線は、目的の設定点(赤い点線)に相対的な実際の出力状態(速度、位置、温度など)です。曲線が時間tに対するモータの速度を表し、t = 0でスイッチオンされたと仮定します。

PID_blog_31_d1022596fd8b6254fefa6601287570e552980c51.png

(a)固定制御基準のみによる比例。基準は推定、実験によって判明した値です。大きなKP因子は静止からの急速な立ち上がりを保証するものの、ペナルティは多くのオーバーシュートと「リンギング」です。また、基準推定値の誤差は定常状態速度を要求された設定値よりも低いままになります。

(b)比例及び積分。同一のKP値を維持しながら固定基準値を積分項に置き換えると、最終的には設定値に達しますが、最初はさらに大きなオーバーシュートが生じます。

(c)比例、積分、及び微分。理論的には、KDに適切な値を指定すれば、「魔法」のようなことが起こります。共鳴はほぼ完全に収まり、非常に短い時間で定常状態に達します。

ループのチューニング

計算は単純で、モバイルロボットの基本コントローラはArduinoなどの低コストのマイクロコントローラボード上で実行できます。少々注意が必要になるのは、そのようなK因子の値を選択するということです。「手動による」チューニングを試みる場合は、経験が重要な要素となります。場合によって、その特性のアイディアを得るため、フィードバックを切断して「開ループ」でシステムを実行することが可能です。シミュレーションを実行し、経験と試行錯誤を組み合わせて値を決定することができます。高度なチューニングプログラムを利用することもできます。実際のところ、このような小さなモータ制御について、少々の推測と試行錯誤で満足のいく結果が簡単に得られます。

次回:パート2

これらの記事では、タコメータを装備した信頼性の高いParallax BoEボットと、頭脳の役割を担うArduino-format Microchip dsPIC33プロセッサボードを使用しました。dsPICなどの最新のMCUには、「出力比較」、「入力キャプチャ」、「直交エンコーダ」といった各種ユニットなどのモータ制御及び検知用のハードウェアが搭載されています。第4言語、FORTHdsPICの自分のバージョンでコーディングされたPIDアルゴリズムの実装と、モータ制御及びタコメータセンサのための「ベアメタル」アセンブリコードドライバについて考察する予定です。

行き詰ってしまった場合は、是非Twitterで私の投稿をフォローしてください。新しいエレクトロニクスと関連技術、ロボットについて目星をつけた投稿のリツイート、宇宙探査などの興味深い記事にリンクしています。

Engineer, PhD, lecturer, freelance technical writer, blogger & tweeter interested in robots, AI, planetary explorers and all things electronic. STEM ambassador. Designed, built and programmed my first microcomputer in 1976. Still learning, still building, still coding today.