本記事は、AI RC Car Advent Calendar 2019の19日目です。
昨日は、 @arigadget氏による「AIカーをいろんなところで走らせてみた。」でした。
本内容は、技術書典7『30日で動かして学ぶ! 自動運転』第0.8版よりAdvent Calendar向けに抜粋、加筆したものです。
自動運転のこれまでと、これから
AIカーの話に入る前に、自動運転全般の話をしましょう。人工知能、深層学習の適用先のひとつとして、自動車の自律走行が盛んに取り上げられます。
自動運転の歴史
現在の自動運転開発競争は、どのように始まったのでしょうか。何がその適用を加速させたのでしょう。YouTubeなどに残された映像を頼りに、遡ってみましょう。
車の自動運転をもう少し抽象化するなら「自動での乗り物の操縦」です。その意味では、すでに飛行機や電車が先行しています。飛行機では、以前からオートパイロットシステムが使われています。電車も、新交通システムは完全自動で運行されています。
では、自動車で困難な点は何でしょうか。
- 経路が固定されていない (電車は、移動がレールに制限される)
- 周囲の物との相互影響の多さ (飛行機は、比較的他機との距離が保たれる)
こうした点が思い浮かびます。前後左右の車、歩行者などの複雑な障害に対応し、かつ自身で数ある選択肢から経路を選び、その通りに操縦する、という難しさがありそうです。
古くは1991年より、自動運転化のはしりとして、先進安全自動車(ASV)の検討の取り組みがはじまりました。その成果は一足先にヒット、普及しています。例えばEyeSightなどの衝突被害軽減ブレーキ、Adaptive Cruise Control(ACC)、その他は、そうしたコンセプトから生まれたものです。
2000年代、完全自動運転では、DARPA(アメリカ国防高等研究計画局)によって、3回の競技会が開催されました。最初の2回は郊外で開催されたDARPA Desert Challengeという砂漠のコースにおけるコンペです。最後の1回は2007年に行われたUrban Challengeです。こちらは、市街地を模した場所を走行するものでした。それぞれの映像が残されています。
-
DARPA Grand Challenge - 2005 Driverless Car Competition - YouTube
-
DARPA Urban Challenge: Final Event Highlights - YouTube
この競技会にも参加し、チーム「Stanley」で2005年に優勝、2007年に2位の成績をあげたスタンフォード大のSebastian Thrun氏は、その後Googleに移籍し、自動運転研究をスタートしたとされています。一定の成果をもとに、2011年にはGoogleでの自動運転研究者として、TEDに登壇し、その映像が今も残っています。
- Google's driverless car | Sebastian Thrun - YouTube
余談ですが、同氏は確率ロボティクスの大家であり、Google X、UdacityというMOOCsそれぞれの設立に関わっています
2015年にはChris Urmson氏の講演を聞くことができます。後にGoogleを去りますが、この当時はWaymoの技術チーフです。
- Chris Urmson: How a driverless car sees the road - YouTube
2010年代前半のGoogleによる前進がWake up callとなり、自動車業界、IT業界入り乱れての自動運転開発競争が始まりました。
米国に目を向けると、自動運転開発ではWaymoが頭一つ抜けている、というのがコンセンサスでしょう。Waymo Oneと呼ばれる自律走行タクシーのサービスを米国複数都市で立ち上げています。このWaymoの源流を辿ると、上に挙げたSebastian Thrun氏のGoogle加入に行き着きます。
Google以外にも、Uber、Lyftなどのライドシェア企業は自動タクシーを見据えた開発、内外の自動車企業は現在の車の機能拡張として、Tesla社は電気自動車とともにオートクルーズ機能をバンドル、Wayve、Comma.aiなど大学発、ハッカー発の自動運転企業と、たくさんのプレイヤーがひしめき合っています。
プレーヤーは米国だけではありません。欧州にも面白い会社があります。複数の自動運転バスを作っている会社があります。日本でも、SBドライブ社は、現在は仏NAVYA社の自動走行バス NAVYA ARMAを用いた実証実験を行なっています。また、中国では、Baidu社がApollo計画という、自動運転プラットフォームのオープンソース化とパートナ開拓を進めています。
ただ、研究や実用化の進展への期待とともに、2016年5月には米国でTesla社のレベル2自動運転における死亡事故、2018年3月にはUberのレベル4自動運転試験中の死亡事故が取り上げられ、技術面、倫理面での論議を呼びました。各国の法規制や各社の立ち位置に、「安全性」と「発展のためどこまでリスクを取るか」のトレードオフが現れます。
産業と学術、日本と海外各国、それぞれが自動運転開発において、それぞれ歩みを進めてきた様子が、構造を持って掴めてきたでしょうか。
自動運転のレベル分け
ここまで話してきた自動運転ですが、言葉を聞いて思い浮かべる自動の度合いは様々でしょう。米SAE(Society of Automotive Engineers)は、2014年1月に自動運転の成熟度の定義を発表しました。米国、欧州を皮切りに、日本を含めた各国の自動運転政策の検討にこの分類が採用され、デファクトスタンダードとなりました。
SAEの定義では、自動運転を6段階に分類します。
- レベル0 ドライバーが全て操作する
- レベル1 システムが加減速またはハンドル操作を支援する
- レベル2 システムが加減速とハンドル操作を支援する
- レベル3 指定の場所でシステムが全てを操作、緊急時はドライバーが操作する
- レベル4 指定の場所でシステムが全てを操作する
- レベル5 場所の限定なくシステムが全てを操作する
レベルは、下へ行くほど難易度が高くなります。
2010年代一般に販売される車でも、レベル2まで備えているものがあります。例えば、車の前面に取り付けられたセンサーで回避行動をとる機能は、レベル2と言えます。この定義では、レベル3から5が、一般に思い浮かべられる「自動運転」です。
2019年、日本においての自動運転車は、主に自家用車、商用車の二つの文脈に分かれます。また商用車は、あらかじめ指定した区域内を走るバスやタクシー、または高速道路を隊列走行するトラック、という二種類の実証実験が盛んに計画、または実施されています。
法規制とその適切な緩和については様々な意見があるでしょうが、日本は一定健闘していると言えるでしょう。日本では、直近2020年に高速道路におけるレベル3自動運転がマイルストーンとして掲げられ、法整備、各社の研究開発が進められています。
- 一部「レベル3」の高速道自動運転を2020年に確立…ホンダミーティング2019
3つの要素 - 認知・判断・操作
さて、自動運転を実現するには、人間の代わりに、コンピュータが何を行えれば良いのでしょうか。まず、人間が車を運転する様子を、できるだけ細かく想像してみましょう。
例えば、あなたが高速道路の走行車線を走っているとします。
-
運転席に座り、前方を注視、時にミラーを確認します。周囲に何があり、どんなスピードで動いていて、という状態を把握します。前の車がハザードランプをたいて、減速したとします。もう少し前方に目をやると、どうも渋滞というわけではありません。一台だけで故障か、何らかの事情で減速、停止をしようとしているようです。ミラーで右後ろを確認し、追越車線には、後ろに迫る車はありません。
-
その状態と、自分の向かう計画を照らし合わせて、次の行動を決めます。走行車線を守るなら、減速しなければ、目の前の車にすぐに追突してしまうでしょう。車線を守り、減速する。これがとりうる選択肢Aです。追越車線へ、速度を守りながら車線を変更する。これもとりうる選択肢Bです。選択肢Aをとっても、前の車がそのまま停止してしまうとしたら、そこに付き合う必要はないでしょう。ここでは選択肢Bをとるとしましょう。
-
選択肢Bを取るなら、まず方向指示器で右折を知らせ、速度は保ちながら、ステアリングをゆるやかに右に傾けます。左右の手と足を協調させ、こうした操作を車に対して行います。
これらそれぞれのパラグラフが、認知、判断、操作という、自動運転の3つの要素に対応します。
まとめると以下のようになります。
認知
- 前方の車の減速
- 追越車線の確認
判断
- 選択肢A、Bの着想
- 選択肢Bを取る判断
操作
- 方向指示器の操作
- アクセルの維持
- ステアリングの操作
自動運転のソフトウェアは、基本この3つを連携させ、実現しています。次に、それらの実現方法をざっと見てみましょう。
認知
現在、ひとつではなく、複数のセンサーを相互補完させる「センサーフュージョン」が主なアプローチとしてとられています。ステレオカメラ、LIDAR、レーダーなどのセンサ、GNSS、SLAMなどを組み合わせ、自身をとりまく環境、自身の場所の把握、自身だけでなく周囲の物体の動きを認識します。
判断
上の認知で得た情報を元に、次の行動の選択肢を洗い出します。そして、それらの選択肢をスコア付けし、どの選択肢を取るのがベストかを判断します。
操作
選択した行動を、できるだけ精緻に現実の環境で再現するための操作を行います。現実の世界には、命令と実際の動きの時差、制御で指定する振る舞いと実際の動きの誤差など、考慮すべきことがたくさんあります。ここは制御工学の世界です。
ラジコンカー自律走行における3要素
上記の自動運転車で行なっていることを聞くと、個人の手ではとても扱いきれない代物に感じられませんか。しかし、DIYによる自動運転車、そのレースが流行の兆しを見せています。
こちらの映像を見てみましょう。
- Three Car Head to Head by Tawn Kramer
驚くべきことに、この3台は全て自律走行しています。このラジコンカー自律走行における、認知、判断、操作を考えてみましょう。
Donkey Car
認知
標準のDonkey Carにおける入力は、正面に設置された単眼の広角カメラのみ。それ以外のセンサーはありません。オプションで、IMU、ステレオカメラその他を追加することはできます。広角カメラからは、一定の間隔で、画像が取得されます。
判断
この入力画像を元に、ステアリングは右か左か、スロットリング(アクセル)は踏み込むか否か、が学習済みの深層学習モデルから出力されます。
操作
モデルの出力を元に、サーボコントローラへ所定の制御信号が出力され、ステアリング、スロットリングが調整されます。
DonkeyCarは、先ほど挙げた3つのポイントを単純化し、うまく動かしているモデルです。
MIT Racecar
また、同じラジコンカーが対象ながら、今度はこちらの映像を見てみましょう。
- Fast Autonomous RC Car - Pure Pursuit Trajectory Tracking
後ほど紹介するMIT RaceCarやF1/10(F1tenth)では、実車の自律走行に近い、認知から操作までのパイプラインを持っています。
認知
単眼または二眼のステレオカメラ、IMUといわれる加速度・ジャイロセンサ、LIDAR、その他のセンサー情報を統合(センサーフュージョン)し、自車の状態を認識します。
判断
深層学習ではなく、一定のルールに基づき、行動の選択肢を挙げ、スコア付けなどの基準に従い、ベストな行動を選択します。
操作
判断を元に所定の制御が行われます。PIDなどの制御工学の知見が使われます。
ニュースの画面の向こうにしかなかった自動運転が、少し身近に感じられて来たでしょうか。
ラジコンカーの自律走行化に必要なこと
まず、一般的なラジコンカーの構成、およびそれらを自動運転化する時の流れや、要素を説明します。
ラジコンカーの主要部品
まず、自動運転化のベースとなる、改造前の一般的なラジコンカーの構成を説明します。
ラジコンカーは、一般に以下から構成されています。
- ボディ
- シャーシ
- 送信機
- 受信機
- ESC
- メインモータ
- ステアリングサーボ
- バッテリー(駆動用)
例えば、タミヤのTT-02というキットだと、このように対応しています。
https://www.amazon.co.jp//dp/B07L4BNNXW および https://www.tamiya.com/japan/products/58600/index.html より引用、改変
それぞれどういったものかを詳しく見てみましょう。
ボディ
軽量な樹脂製のカバーが、数カ所シャーシにピン留めされています。自動運転化にあたっては、既存のカッコ良い車の外形は取り外し、無骨だが必要なボードを保持できる、実用的なボディに取り替えます。
キットを用いるにせよ、自作をするにせよ、レーザーカッターを使って切り出されたアクリル板や樹脂と、3Dプリントされたパーツの組み合わせがよく使われます。
ただ、レーザーカッターや3Dプリンターが手元にない、しかしキットではなく自分で作ってみたい、という場合も心配いりません。筆者は、初回のプロトタイプとして、ダブルのダンボールを切り出して、ボディを作りました。後続の章で、そうした方法にも触れます。
シャーシ
以下に挙げる、送信機、受信機、ESC、メインモーター、ステアリングサーボ、バッテリーなどの部品や、車輪が取り付けられる、車の基礎となる部分です。
送信機
上の画像には含めていませんが、人が操作するためのプロポを指します。複数の周波数帯が使われますが、最近はWiFiと同様の産業バンド 2.4GHz帯を使うものが主流のようです。
受信機
同周波数帯を使い、信号を受け取ります。受け取った信号を、ここではまだ詳しく解説しませんが、ラジコン用のPWMという制御信号に変換します。その信号はESC、ステアリングサーボに渡されます。
ESC
「アクセルとブレーキ」を制御します。PWM信号を受け、メインモータへ供給する電力を制御します。
メインモーター
ESCからの供給電力でモーターを回し、ギアを通してタイヤへ動力を伝え、車を動かします。
ステアリングサーボ
「ハンドル操作」を制御します。PWM信号を受けて、モータの回転角を変え、左・中央・右と、指定の位置へタイヤの向きを合わせます。
バッテリー(駆動用)
ステアリングサーボ、ESCを通したメインモータ、受信機等への給電をします。最も電力を消費するのはメインモータです。
自律走行ラジコンカーの主要部品
これを自動運転化する時には、 受信機部分をサーボコントローラ基盤で置き換え、それをコントロールするRaspberry Pi、Jetson Nanoなど、基本Linuxベースの小型コンピュータを搭載します。そのコンピュータはカメラモジュールを備えています。まず、そのカメラからの画像と、必要に応じて外部センサの値を入力用に取得します。それを学習済みの機械学習モデルに渡します。そのモデルからの出力を得て、それを元にステアリングとアクセルを制御します。
それにより、先ほどのベースに、以下の改造が施されます。
-
ボディ取り外す - シャーシ
-
送信機カメラ付き小型コンピュータを車載 -
受信機サーボコントローラ - ESC
- メインモータ
- ステアリングサーボ
- バッテリー(駆動用)
- バッテリー(車載コンピュータ用) 追加
まず、部品のつながりは、どのように変わるのでしょうか。
Jetson Nano/ Raspberry Piなどの搭載コンピュータ (ざっくり言うと送信機の代替)
学習済みモデルを動作させ、カメラ入力を元に、アクセル・ブレーキ・ハンドルを制御します。モデルの学習は、同コンピュータ上で行うこともありますし、外部クラウドで行なった上で、学習済みモデルを再度コンピュータ上に展開することもあります。
カメラや、その他のセンサ
搭載する小型コンピュータに対応するカメラモジュールを使います。Raspberry Pi用の広角カメラモジュールが、Raspberry PiだけでなくJetson Nanoの場合にも使われます。また、より発展したプロジェクトでは、加速度、深度カメラ、LiDARなど、他のセンサを取り付けることもあります。
サーボコントローラ (ざっくり言うと受信機の代替)
PCA9685というチップを用いた、I2Cインタフェースを通して制御されるサーボコントローラを使うことが一般的なようです。I2Cについても、PWM同様ここでは詳しい解説はスキップし、後に譲ります。
バッテリー(車載コンピュータ用)
駆動用のバッテリーに加えて、車載コンピュータ用の追加バッテリーが必要です。
それ以外にも、以下が必要です。
ラップトップPC
学習やテスト走行時に、WiFi経由でJetson Nano/ Raspberry Piなどの搭載コンピュータへ接続し、様々な操作を行います。
ジョイスティック
学習時の操作に、ジョイスティックを用いて、より直感的・便利に行うこともあります。
さて、これらを一から揃えるのは大変だと思われるかもしれません。そんなみなさんには、キットの形で販売されています。DonkeyCarのフルセットは4万円程度で揃えることができます。せっかくなので、自分で揃えてみたい、既存のRCカーを改造してみたい、という方はいかがでしょうか。BOM(Bill of Materials)という形で、どういった部品を買う必要があるか、目録が整理されています。それに従って購入し、組み上げると、1-2万円であなただけの自動運転車を組み上げることができます。
機械学習と自律走行
まず、機械学習は万能ではありません。従来の制御の仕組みと、機械学習を組み合わせて使います。RCカーでは、少しエクストリームな方法を試しているのだと理解してください。認知、判断、操作に対して、それぞれのAI RCカーでの各モデルの使い方をマッピングしてみましょう。
世界のAI RC Carプロジェクト
ここで、様々な自動運転ラジコンカープロジェクトを紹介します。先ほど挙げたように、自律走行を行えるカーは、エントリーレベルのものから、本物の自動運転に近い構成まで、様々なものがあります。
今回のAI RC Car Advent Calendar 2019では、主にDonkeyCarとJetRacer関連の記事が紹介されています。
DonkeyCar
- Webサイト: https://www.donkeycar.com/
DIY文化の旗手であり、米WIRED誌の元編集長Chris Anderson氏が、2016年12月にDIY Robocarsというコミュニティを立ち上げました。自作・自動操縦ラジコンカーレースを開催し、コミュニティでは盛んに知見が共有されています。Donkey Carはそこから生まれた、自動運転ラジコンのオープンソースプラットフォームです。ハードウェア、ソフトウェア両方が公開されています。
TensorFlowをRaspberry Pi上で(Jetson Nanoにも対応)動かし、市販のラジコンカーをオンボードカメラ映像を頼りに走らせられます。
NVIDIA JetRacer
2019年3月に発表されたJetRacerは、NVIDIA Jetson Nanoの教育・コミュニティ活動促進の一環でオープンソース化されました。他にもJetBotなどが公開されています。2種類のシャーシが選べますが、日本で取り組む場合は、手に入りやすいTT-02というタミヤの初心者向けフレームを使います。
AWS DeepRacer
AWS Re: Inventで発表された。AWS SageMakerなどのMLaaSに親しみ、オンライン・オフライン両方のリーグに参加できます。完成機体がAmazonから販売される予定がありましたが、日本では技適関連でまだ売り出されていません。
2019年12月のAWS re:Inventでは、2つのニュースがありました。
ひとつは、アマゾンの自動運転「DeepRacerリーグ」で日本人が“圧倒的”世界トップになった理由の記事にあるように、DeepRacerのファイナル開催と、日本人ワンツーフィニッシュです。
また、DeepRacer Evoが発表されました。新たにステレオカメラ、LIDARを搭載し、2020年に発売予定です。新しい車体とセンサーで、他車との抜きつ抜かれつ、といったレースが今後展開されるかもしれません。
MIT Racecar
- Webサイト: https://mit-racecar.github.io/
MIT Racecarは、もともとマサチューセッツ工科大学(MIT)におけるロボティクス授業で開発されました。先に紹介したDonkeyCarやDeepRacerなどと比べ、以下の点で、より実車の制御に近い構成を取っています。
- アーキテクチャとして、ROSを採用
- センサーは、単眼カメラだけでなく、LiDARやステレオカメラを搭載できる
- 未知の場所の地図を生成しながら、一定のルールに沿って走れる(DonkeyCarやDeepRacerは、決まったコースを教えこむ)
DonkeyCar、DeepRacerと比較して、より「シリアスな」プロジェクトといえるでしょう。外見こそ違いますが、同じ技術は実車の自動運転だけでなく、ルンバなどのお掃除ロボット、倉庫などでの荷物の自律搬送車で使われます。
MIT Racecar関連の資料は、上のWebサイトや、ICRA2019のワークショップサイトに公開されています。派生のプロジェクトとして、F1/10(F1tenth)が挙げられます。
F1tenth(F1/10)
- Webサイト: http://www.f1tenth.org/
F1/10は、ペンシルバニア大学(UPenn)で、MIT Racecarの派生として生まれ、今はプロジェクトを率いたMadhur Behl氏が移ったことから、バージニア大学でも教育の一環で使われています。1/10スケールのラジコンカーを用いて、F1のようにレースを行う、というのが名称の由来のようです。インターナショナルな、F1/10カーによるレースコンペも主催しています。また、MIT Racecar同様、授業の資料や、レースコンペの模様などが公開されており、良いリソースです。
M5Stackファミリーを使ったAI Car
通常サイズのRC Carだけではありません。せまいおうちでもできるお気軽AIカー - Qiita
にあるように、テーブル上で走らせてしまえるような、極小AI Carを作るプロジェクトもあります。
このプロジェクトにおける頭脳部分は、Raspberry Piでも、Jetson Nanoでもありません。M5StickC、M5StickVという、指でつまめるサイズのモジュールです。駆動部にも、スマートフォンのバイブレータ等に使われるような超小型モータを使っています。
M5StickCはESP32、M5StickVはKendryte K210というSoCを使っています。開発にはArduino IDE、MicroPython(MaixPy)などを使う、マイコン
(参考)Autoware
自動運転は、様々な車メーカーに閉じられて開発されているものだけではありません。名古屋大学発のスタートアップであるティアフォーは、Autowareという自動運転OSSを開発しています。実際にこれらの車に積載し、実証実験を行なっています。
Autowareというソフトウェアは、オープンソースであるため、個人で実際に触って動かしてみることができます。
- アーキテクチャとして、ROSを採用
- センサーは、単眼カメラだけでなく、LiDARやステレオカメラを搭載できる
- 未知の場所の地図を生成したり、既存の地図を参照しながら、一定のルールに沿って走れる
といった形で、MIT Racecarと似ています。実際にラジコンカーに載せてみた例が、インターネット上の記事にありました。
それぞれの違いと共通点
それぞれ扱う車体の大きさやアプローチも異なり、別のものに見えるかもしれませんが、実現を支える技術、アーキテクチャは似ています。
車やステアリングなどの「動かす」要素、カメラやLiDARなどの「センサー」要素が、それぞれ情報をやりとりし、理想的な経路を辿れるように制御します。そのためには、それぞれのノードが、リアルタイムでメッセージをやりとりします。ただし、メッセージングの提供方法は、ROSに頼ったり、それぞれのソフトウェアで独自に実装したり、異なったアプローチをとっています。
このように、AI RC Carから、実車の自動運転までのつながりを見ることができました。これならラジコンカーを動かしてみることで、自動運転の要素技術を体感しながら学べそうですね。
興味を持たれたら、各自充実した内容のAI RC Car Advent Calendar 2019から、次の一歩を進めてみてください。
初出について
本内容は、技術書典7『30日で動かして学ぶ! 自動運転』第0.8版より抜粋、加筆しました。2/28開催予定の技術書典8、また同時に電子版にて、さらにハンズオンなどを加えた第1版を頒布予定です。ご興味を持たれたら、ぜひご覧ください。