連載
» 2015年12月09日 05時00分 公開

Google Carの自動運転技術大解剖(終):人工知能の歴史と、グーグルの自動運転車が事故を起こさないためにしていること (2/2)

[近棟稔,ウルシステムズ]
前のページへ 1|2       

【3】計画した動作の実行――PIDコントロールによるステアリング操作の例

 走行ラインが決まると、いよいよGoogle Carはステアリングやアクセル、ブレーキの操作を行います。ここでは、特にステアリング操作にフォーカスして説明します。

 図4のように、本来走りたい走行ラインに対して車がずれた位置にあるとします。走行ラインの左側に車があるため、ハンドルを右に切れば走行ラインに戻れそうです。人間であれば、今までの運転経験を基に適切にハンドルを操作するでしょう。しかし、Google Carのようなロボットの場合、「ハンドルの角度を何度にするか」を数値として算出する必要があります。

図4 「ハンドルの角度を何度にするか」

 この算出方法として使うのが、「PIDコントロール(proportional integral derivative control)」と呼ばれる方法です。PIDコントロールは「Proportional(比例)」「Integral(積分)」「Derivative(微分)」の3つの要素から構成されています。各要素を順番に積み上げていきながら、PIDコントロールの処理内容をひも解いていきます。

CTE――走行ラインから車がどれだけ離れているか

 Pコントロールを説明するために、まずCTE(Cross Tracking Error)の説明をします。

 CTEとは、「走行ラインから車がどれだけ離れているか」を測定した距離情報です。ラインの真上を走行している場合はCTEの値はゼロです。ラインの左側を走っている場合は正の値となり、右側を走っている場合は負の値となります。CTEはGoogle Carの持つディスプレー上にも常に表示されています。

 図5では「CTE: +3cm」と表示されています。つまり、走行ラインから3cmほど左側にずれた位置に車があることが分かります。

図5 Google Car のコンソール上に表示されるCTE(動画「A Ride in the Google Self Driving Car」より引用)

P(比例)コントロール

 Pコントロールの考え方は単純です。「CTEに比例した量だけ右にハンドルを切れば、走行ラインに戻る方向にハンドルを切ることになる」という理屈に基づいています。PコントロールのPは「Proportional(比例)」の意味です。数式で記述すると、以下のような簡単な式で記述できます。「舵角はCTEに比例する量とする」という意味の式です。

舵角 = a * CTE
aは定数

 この数式をより明確に言葉で記述すると、以下のようになります。

  • CTEがゼロの場合はハンドルを切らない
  • CTEが正(走行ラインの左側)の場合、CTEが大きいほど、それに比例してハンドルを右に切る
  • CTEが負(走行ラインの右側)の場合、CTEが大きいほど、それに比例してハンドルを左に切る
図6 走行ラインに戻るためには、CTEに比例した量だけ、右にハンドルを切った方がいい

 数式中の定数「a」は「どれくらい急激にステアリングを操作するか」を示します。定数aを大きくし過ぎると、ラインに戻るために急ハンドルを切るような荒い運転となるでしょう。当然、乗り心地も良くありません。逆に定数aを小さくし過ぎると、車はいつまで経っても走りたいラインに向かってくれません。この定数aはちょうど良い数値に決める必要があります。

 Pコントロールに従うと走行ラインに向けてハンドルが切られるようになります。しかし、残念ながらこの制御だけでは不十分です。走行ラインを勢い良く横切ってしまうので、図7のように走行ラインを中心に蛇行運転することになります。

図7 実際には、青い線のようになる

 この問題を解決するのが、Dコントロールです。

P(比例)D(微分)コントロール

 DコントロールのDは「Derivative(微分)」のDです。Dコントロールを理解するために、まず「ΔCTE」を説明しましょう。ΔCTEはCTEの変化量です。「Δt」時間前のCTEの値が「CTE1」で、現在のCTEの値が「CTE2」だった場合、「ΔCTE = CTE2 - CTE1」となります。Δt時間の間にCTEがどれだけ変化したかがΔCTEの意味です。

図8 ΔCTE = CTE2 - CTE1

 次に「ΔCTE/Δt」を説明します。ΔCTE/Δtは、走行ラインに対してどの程度の速度でGoogle Carが近づいているかを意味します。例えば、ΔCTE/Δtがゼロの場合、車は走行ラインに対して平行に走っていることを意味します。ΔCTE/Δtがゼロではない値の場合、車は走行ラインに対して左方向にΔCTE/Δtの速度で近づいています。DコントロールのDはこのΔCTE/Δtに由来します。

 PDコントロールでは以下のようにΔCTE/Δtに比例した舵角をPコントロールに追加します。

舵角 = a * CTE + b * ΔCTE/Δt
a、bは定数
図9 ΔCTE/Δtに比例した舵角をPコントロールに追加

 Pコントロールに対してDコントロールを追加すると、走行ラインにアプローチする際の勢いを抑制できるようになります。その結果として、上の図のようなスムーズな挙動が可能になります。抑制の強さを表すのが定数「b」です。定数bをあまり大きくすると、走行ラインになかなか近づきません。定数bをゼロに近い値としてしまうと、車は蛇行運転してしまいます。やはり、程良い値を選ぶ必要があります。

P(比例)I(積分)D(微分)コントロール

 PDコントロールによって理論上は走行ラインに沿ってスムーズに走るようステアリングを操作できるようになります。しかし、実際にはもう一つ解決しなければならない問題があります。それは「機械的な狂い」です。例えば、車のホイールの取り付け角が悪いと、ステアリングを切っていないにもかかわらず、左へ左へと曲がってしまう場合があります。こうした機械的な狂いがあると、PDコントロールだけではうまく走行ラインに乗せられず、ずれた位置を走り続けてしまいます。

図10 ドリフトがあると、走行ラインにうまく載らない

 機械的な狂いによって発生する問題を解消するため、Iコントロールを追加する必要があります。Iは「Integral(積分)」のIです。移動の開始以降に測定した全てのCTEの量を累積(積分)し、その累積量に比例して舵角を補正します。CTEの量を累積した量を以下の図に示すと、ピンク色に塗りつぶした面積を合計した量に相当します。走行ラインの左側に車が居る間は正の値として累積し、走行ラインの右側に車が居る間は負の値として累積することでCTEの累積値を計算することができます。

図11 Iコントロール

 PIDコントロールでは以下のようにCTEの累積値である「Σ CTE」に比例した舵角をPDコントロールに追加します。

舵角 = a * CTE + b * ΔCTE/Δt + c * Σ CTE
a、b、cは定数
図12 PIDコントロールによる舵角の決定

 この数式の結果が最終的なPIDコントロールによるステアリング操作の量になります。Iコントロールを追加することにより、走行ラインからずれた位置を走り続けると、そのずれをなくす方向にステアリングを操作するようになります。これにより、機械的な狂いが原因で発生する問題も解消されます。定数「c」は機械的な狂いを修正するのに必要十分な大きさの値を選択する必要があります。

定数を設定するために、機械学習

 PIDコントロールを使用する際には、定数であるa、b、cを適切に調整する必要があります。これらの調整次第でGoogle Carの乗り心地は変わってきます。大き過ぎる定数aの設定は荒い運転につながりますし、小さ過ぎる定数bの設定はゆらゆら左右に蛇行する運転につながってしまうでしょう。Google Carはこれらの定数を設定するために、機械学習を用いています。

人工知能の歴史

 3回にわたって説明してきた「Google Carの自動運転技術大解剖」も、今回で最終回となります。今までの技術を振り返る意味も込めて、人工知能の歴史を簡単に振り返ってみましょう。

  • 1890年代:PIDコントロールが誕生
  • 1936年:チューリングマシンが考案される
  • 1943年:形式ニューロンが考案される
  • 1946年:ENIAC完成
  • 1956年:AI研究が学問分野として確立
  • 1958年:初期の人工ニューラルネットである「パーセプトロン」が登場
  • 1959年:AI研究の1分野として「機械学習」が登場
  • 1968年:A*探索アルゴリズムが考案される
  • 2000年前後:Probabilistic Robotics(確率ロボティクス)の研究が進む
  • 2005年:DARPA Grand ChallengeにてStanleyが優勝
  • 2006年:ディープラーニングの重要要素であるオートエンコーダーなどが考案される
  • 2012年:ディープラーニングの研究が盛んになる

 まず、今まで触れてきたGoogle Carの技術の中で最も古い技術は1890年代から存在するPIDコントロールです。人工知能が研究分野として誕生したのは、これから随分経った1956年です。AI研究の初期から探索アルゴリズムは最もベーシックなアルゴリズムの1つでしたので、地道に研究が続けられ、1968年にはGoogle Carも使用しているA*探索アルゴリズムが考案されました。

 こうして見てみると、Google Carが行動計画を立案し、その計画した動作を実行する際に使用するアルゴリズムの基礎は昔から存在し、Google Carはそれをうまく応用していることが分かると思います。

 一方で、Google Carが周囲の状況を的確に捉える能力に関わる技術であるProbabilistic Robotics(確率ロボティクス)は2000年前後に登場しており、比較的最近であることが分かります。これは、コンピューターにとって現実世界というのはひどく扱いにくい物であるためです。ディープラーニングが近年もてはやされる理由は、現実世界をうまく扱う手立てを提供してくれているためでもあります。

 このように、人工知能の歴史の流れの中から見たGoogle Carは、古くからの技術も新しい技術も巧みに取り入れ、組み上げられた、「AIの芸術作品」のように見えてきます。

 一つ一つの技術にはあまり「知性」を感じさせるところはありません。考える方法も人間とはずいぶんと異なります。それでも、いまや公道を走れるぐらいの実用性を備えるようになり、その動く姿に知性を感じさせるまでに至っています。筆者は今後も、その技術的な進歩に注目していきたいと思います。最後までお付き合いいただきありがとうございました。

筆者紹介

近棟 稔(ちかむね みのる)

ウルシステムズ マネージングコンサルタント

ITアーキテクトとして一貫して技術的な課題解決のための仕事を手掛ける。製造業を中心に多数の基幹システムの設計、構築を担当してきた。

Enterprise Geeks」でもLispインタープリターの記事を執筆中。

ここ数年は、人工知能の中でもニューラルネットワークの新しい潮流に強い関心を持っている。

主な著書

J2EEパターン第2版』(日経BP社刊、共著)


前のページへ 1|2       

Copyright © ITmedia, Inc. All Rights Reserved.

編集部からのお知らせ

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。