本連載では、公開情報を基に主にソフトウエア(AI、アルゴリズム)の観点でGoogle Carの仕組みを解説していきます。初回は、自動運転の歴史やGoogle Carの位置付け、Google Carで使われているセンサーの基礎知識などについて。
近年、「人工知能(AI)」は多くの分野で応用され、その成果を目にしたり利用したりする機会が増えてきました。例えば、多くの人が利用しているGoogle検索も、AIの活用例として最も有名な例でしょう。
一方で、AIの進歩が急速に見え、「AIは核兵器より危険」といった、AIを脅威とみなす議論も沸き起こっています。
このようなAIをめぐる潮流の中で、ひときわ注目を集めているのはグーグルが開発した自動運転車(以降、「Google Car」と表記)の存在でしょう。人間が運転する代わりに、AIが人間より安全に運転を代行することが現実になりつつあります。
本連載では、公開情報を基に主にソフトウエア(アルゴリズム)の観点でGoogle Carの仕組みを解説していきます。具体的には、自動運転の歴史やGoogle Carの位置付け、AIの思考と制御のサイクル、自動運転を支えるアルゴリズムなどを数回に分けて解説します。
このGoogle Carの仕組みを知ることを通して、現時点のAIに何ができて、何ができそうにないかが分かっていただければ幸いです。
連載に先立って、2014年8月にウルシステムズ社内でも同じ内容の勉強会を開催しました。その際の資料をSlideShareで公開しています。プレゼンテーション資料なので読みやすくはありませんが、連載の概要はイメージいただけると思います。AIやロボティクスに関する専門知識がなくても概要を理解できるようGoogle Carの制御方式を説明しました。
自己紹介が遅れましたが、筆者はウルシステムズに勤めるITアーキテクトです。電子工作も含めて科学全般が好きな技術者でもあります。ロボットにも関心があり、Google Carを目にして以来、その魅力に引き込まれて個人的にいろいろと調べています。
最初にGoogle Carを目にしたのは2011年のことです。動画サイト「TEDトーク」で、Google Carの開発者Sebastian Thrun(セバスチャン・スラン)氏のプレゼンテーションを視聴しました。
映像を初めて見たとき、言いようのない衝撃を受けました。それまで筆者がロボットに対して持っていたイメージといえば、「動きがぎこちなく、ゆっくりとしている」「慎重に慎重を重ねて動いているにもかかわらず、ちょっとしたきっかけで制御に失敗する」といったものでした。「ロボットカー」の研究も知っていましたが、市街地で走らせるなど夢のまた夢だと思っていました。
しかしGoogle Carは、まるで違いました。Google Carの動きは非常にスムーズで、無駄がありません。「自信に満ち、堂々としている」ように感じられたのです。1人の技術者として、どんな技術がこの飛躍を可能にしたのかを知りたくはあったのですが、Google Carはグーグルの極秘プロジェクトでした。「技術が公開されることはないだろう」と諦めたのです。
ところが、すぐに状況は好転しました。約半年後の2012年の2月、Thrun氏が「Udacity」という教育サイトを立ち上げたのです。最初の講義に選んだテーマは、なんとGoogle Carでした。Google Carの仕組みを講義形式で解説してくれるというのです。筆者がすぐに受講を申し込んだのは言うまでもありません。
講師はThrun氏本人が務めました。講義は英語です。簡単な質問が頻繁に出され、正解しないと次に進めません。毎週、デッドライン付きの厳しい宿題が出され、コースの最後には最終試験が待ち構えています。毎週の宿題と最終試験の両方で、ある程度の点数が取れていないとコースの修了証がもらえません。かなり本格的な内容でした。
受講中の約2カ月間は、毎週宿題に追われる日々が続きましたが、それでも筆者は夢中になって受講しました。最終試験にもどうにか合格し、修了証を獲得するに至ったのです。ちなみに、このGoogle Carの授業は今でもUdacityのサイトで受講可能です。
Udacityのコースを受講した後も、個人的にGoogle Carについていろいろと調べました。
例えば、Google Carの基本的な制御方法は、Thrun氏が過去に開発した2台の自動運転車から引き継いでいることを知りました。1台は、2005年に開催されたロボットカー大会「DARPA Grand Challenge」で優勝した「Stanley」(現在はスミソニアン博物館に展示)。もう1台は、「DARPA Urban Challenge」で2位になった「Junior」です。Thrun氏は2台について論文を公開しており、それらを読むとGoogle Carをより深く理解できます。
本連載は、Google Carについて筆者が学んだ、これらの内容をまとめたものです。最新のGoogle Carはさらに研究が進み、公開情報をはるかに超えたものになっていると思います。しかし、おそらく基本となる制御の考え方は引き継いでいるはずです。筆者の学習の成果が、Google Carおよび自動運転技術に関心を持つ方々の参考になれば幸いです。
Google Carの開発につながる自動運転技術の開発は、2004年にDARPA(米国防高等研究計画局)が開催した「DARPA Grand Challenge」にさかのぼります。このコンペティション(競技会)は、指定された砂漠のコースを自動運転でゴールまでたどり着けるかを競うものでした。しかし、このコンペティションではゴールできた車はなく、最も長く走行できた車でさえ、240Kmあるコースの5%を走行したにとどまりました。
翌年の2005年に、DARPAは再度DARPA Grand Challengeを開催します。この時は、何と5台がゴールしました。最もゴールするまでの時間が短かったのが、後にGoogle Carの開発を行うことになるSebastian Thrun氏のチームが作った車、「Stanley」でした。
このDARPA Grand Challengeは、砂漠でのコンペティションだったため、車をコースアウト(もしくは谷底に落下)させずに、障害物(先行車含む)を回避しながら、速くゴールすることに主眼が置かれていました。砂漠という環境では道の境界がはっきりしないという難しさがあったようですが、一方で、信号や交差点、対向車など、自動運転には難しいと思われる状況は省かれたコンペティションでした。
2007年に、さらにDARPAは「DARPA Urban Challenge」というコンペティションを開催しています。このコンペティションでは難易度を上げ、市街地を想定したものになりました。
他の車が交差点などを走っている状況で、信号などの交通ルールを守りながら速く目的地に着いたり、駐車場で空いている駐車スペースを自動的に探して駐車したりするようなことが試されました。このコンペティションの優勝者はカーネギーメロン大学とGM(ゼネラルモーターズ)のチームが作った車、「BOSS」でした。Thrun氏率いるスタンフォード大学のチームが作った車「Junior」は2位になりました。
その後、Thrun氏はグーグルでGoogle Carの開発へ進み、DARPAは軍事用に「GUSS(Ground Unmanned Support Surrogate)」の開発へと進みます。2004年に始まったチャレンジから10年で、Google Carは実際の市街地で試験走行を繰り返し、GUSSは軍事演習に参加できるところまで来ています。
BOSSやJuniorが使っているセンサーと、現行のGoogle Carが装備しているセンサーは、ほぼ同じようなものです。おそらく、市街地における自動制御に必要なセンサーは似てくるのだと思います。以下に、主要なセンサーを紹介します。
Google Carをはじめとする自動運転車に付いているセンサーの中で、ひときわ目を引くのが、このLIDARでしょう。パトカーの回転灯のようにぐるぐると屋根の上で回転するため、非常に目立つのです。
このLIDARは周囲360度の3D空間構造を瞬時に読み取ってデータ化するためのセンサーです。原理は「time-of-flight」方式を採用している2代目Kinectと同じです。
「time-of-flight」方式とは、センサーからの距離を測定したい方向に赤外線レーザーを照射し、そのレーザーが何らかの物体に当って反射光が返ってくるまでの時間を計測することにより、物体までの距離を測定する方法です(注:LIDARの種類によって赤外線以外のレーザーを使うものもあります)。レーザー測量などでも使用される方式で、高速で正確な測定が可能です。
Google Carで使用されているLIDARは、大抵Velodyne社製の「HDL64E」という製品です。この製品の場合、約120m先まで3Dデータ化でき、測定誤差は5cm以下、周囲360度の測定には最速で66ミリ秒しかかからないものになります。Velodyne社のWebページで公開されているマニュアルを見ると、より詳しい情報が記載されています。
自動運転ためのセンサーとしてLIDARが優れているのは、周囲の3D空間を素早く正確に把握可能であることだけではありません。好都合なことに、LIDARは、道路に引かれている白線に代表されるレーンマーカーを読み取ることもできます。というのも、道路の白線は高い反射率を持つ塗料で塗られていることが多いため、LIDARは、白線と路面の反射率の違いを3Dデータに含めることが可能なのです。
Google Carは、LIDARで読み取った周囲の3Dデータ(道路の白線情報付き)を既知の地図情報と重ね合わせ、自分が地図上のどの道路のどの走行レーンを走っているのかを特定します。そのため、もし白線が書き換えられたり、雪が降って白線が消えてたり、土砂降りの雨で白線が見えにくくなったりした場合、Google Carは自分の走行位置を特定しにくくなってしまうそうです。そのような弱点はあるものの、LIDARは晴天であれば非常に有効な車の目として機能します。
現在市販されている車にも、衝突を未然に回避する自動ブレーキシステムのためにミリ波レーダーが搭載されていますが、Google Carにも車用ミリ波レーダーが搭載されています。レーダーが検出可能なのは、対象物までの「距離」と「相対速度」です。
Google CarにはLIDARが搭載されているため、車用ミリ波レーダーは不要のようにも思われますが、UdacityのThrun氏の解説によると、LIDARと車用ミリ波レーダーは特性に違いがあるため、必要なのだと説明がありました。例えば、LIDARが使う赤外線レーザーは、波長が900nm程度と短く、霧や雨などによって前方が隠されてしまう場合があります。一方で車用ミリ波レーダーは波長が数cm程度となり、霧の向こうを見ることができます。
また、測定可能距離も違います。LIDARは周囲の人の目に照射してしまっても影響のない強さのレーザーを使っているために120m先までしか見えませんが、車用ミリ波レーダーは250m先を見ることが可能です。より重要な理由として、車用ミリ波レーダーはドップラー効果を用いて対象物との相対速度を測定でき、早期の動体検出が可能だということもあるようです。
タイヤの回転を数えることで、車がどれだけ進んだかを測定するセンサー(走行距離計)です。
カーナビゲーションでおなじみのGPSも用います。米国におけるGPS精度は非常に高いのかと思っていましたが、例えば「DARPA Urban Challenge」では、GPSの測定誤差が1mを超えることがしばしばあったそうです。「誤差が1mを超える」ということは、GPSをそのまま信じてしまうと、対向車線をはみ出したり、縁石に乗り上げたりする可能性が高いことを意味します。そのため、GPSを全面的に信頼することはできません。
また、トンネル内などGPS衛星の電波が届かない環境もあるため、その意味でもGPSが使えない状況を想定しておく必要があります。
慣性航法に使用されるセンサーです。車がどのような挙動をしているのかを加速度と角速度の両面からとらえます。IMUは、現在でもカーナビゲーションでよく用いられています。カーナビゲーションでの利用用途は、GPS衛星の電波が届かないトンネル内やビルの谷間などでも現在位置を推定するためですが、Google Carでも同様の目的で用います。
このように、Google Carを始めとする自動運転車は周囲の状況を把握するためにたくさんのセンサーを用います。これらのセンサー群は、Google Carを制御するソフトウエアへのインプットとなり、下図のような流れで処理されていきます。
センサー情報を直接処理するのは、状況の把握を行うモジュールです。このモジュールで特に重要な処理となるのは、自分が地図上のどこに居るのかを特定する「ローカライゼーション」という処理です。
Google Carは、ローカライゼーションの処理により、車の位置を10cm程度の誤差に抑えることが可能なのだそうです。逆に、ここまで正確に車の位置を推定できなければ、車の走行レーンからはみ出してしまったり、縁石に乗り上げたりしてしまうことでしょう。
次回は、このローカライゼーションの仕組みを紹介します。
ウルシステムズ マネージングコンサルタント
ITアーキテクトとして一貫して技術的な課題解決のための仕事を手掛ける。製造業を中心に多数の基幹システムの設計、構築を担当してきた。
「Enterprise Geeks」でもLispインタープリターの記事を執筆中。
ここ数年は、人工知能の中でもニューラルネットワークの新しい潮流に強い関心を持っている。
『J2EEパターン第2版』(日経BP社刊、共著)
Copyright © ITmedia, Inc. All Rights Reserved.