35
32

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

AI RC CarAdvent Calendar 2019

Day 19

自動運転から、色々なAI RC Carまでのつながりをざっと見渡してみる

Last updated at Posted at 2019-12-19

本記事は、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です。こちらは、市街地を模した場所を走行するものでした。それぞれの映像が残されています。

この競技会にも参加し、チーム「Stanley」で2005年に優勝、2007年に2位の成績をあげたスタンフォード大のSebastian Thrun氏は、その後Googleに移籍し、自動運転研究をスタートしたとされています。一定の成果をもとに、2011年にはGoogleでの自動運転研究者として、TEDに登壇し、その映像が今も残っています。

余談ですが、同氏は確率ロボティクスの大家であり、Google X、UdacityというMOOCsそれぞれの設立に関わっています

2015年にはChris Urmson氏の講演を聞くことができます。後にGoogleを去りますが、この当時はWaymoの技術チーフです。

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つの要素 - 認知・判断・操作

さて、自動運転を実現するには、人間の代わりに、コンピュータが何を行えれば良いのでしょうか。まず、人間が車を運転する様子を、できるだけ細かく想像してみましょう。

例えば、あなたが高速道路の走行車線を走っているとします。

  • 運転席に座り、前方を注視、時にミラーを確認します。周囲に何があり、どんなスピードで動いていて、という状態を把握します。前の車がハザードランプをたいて、減速したとします。もう少し前方に目をやると、どうも渋滞というわけではありません。一台だけで故障か、何らかの事情で減速、停止をしようとしているようです。ミラーで右後ろを確認し、追越車線には、後ろに迫る車はありません。

  • その状態と、自分の向かう計画を照らし合わせて、次の行動を決めます。走行車線を守るなら、減速しなければ、目の前の車にすぐに追突してしまうでしょう。車線を守り、減速する。これがとりうる選択肢Aです。追越車線へ、速度を守りながら車線を変更する。これもとりうる選択肢Bです。選択肢Aをとっても、前の車がそのまま停止してしまうとしたら、そこに付き合う必要はないでしょう。ここでは選択肢Bをとるとしましょう。

  • 選択肢Bを取るなら、まず方向指示器で右折を知らせ、速度は保ちながら、ステアリングをゆるやかに右に傾けます。左右の手と足を協調させ、こうした操作を車に対して行います。

これらそれぞれのパラグラフが、認知、判断、操作という、自動運転の3つの要素に対応します。

まとめると以下のようになります。

認知

  • 前方の車の減速
  • 追越車線の確認

判断

  • 選択肢A、Bの着想
  • 選択肢Bを取る判断

操作

  • 方向指示器の操作
  • アクセルの維持
  • ステアリングの操作

自動運転のソフトウェアは、基本この3つを連携させ、実現しています。次に、それらの実現方法をざっと見てみましょう。

認知

現在、ひとつではなく、複数のセンサーを相互補完させる「センサーフュージョン」が主なアプローチとしてとられています。ステレオカメラ、LIDAR、レーダーなどのセンサ、GNSS、SLAMなどを組み合わせ、自身をとりまく環境、自身の場所の把握、自身だけでなく周囲の物体の動きを認識します。

判断

上の認知で得た情報を元に、次の行動の選択肢を洗い出します。そして、それらの選択肢をスコア付けし、どの選択肢を取るのがベストかを判断します。

操作

選択した行動を、できるだけ精緻に現実の環境で再現するための操作を行います。現実の世界には、命令と実際の動きの時差、制御で指定する振る舞いと実際の動きの誤差など、考慮すべきことがたくさんあります。ここは制御工学の世界です。

ラジコンカー自律走行における3要素

上記の自動運転車で行なっていることを聞くと、個人の手ではとても扱いきれない代物に感じられませんか。しかし、DIYによる自動運転車、そのレースが流行の兆しを見せています。

こちらの映像を見てみましょう。

image.png

驚くべきことに、この3台は全て自律走行しています。このラジコンカー自律走行における、認知、判断、操作を考えてみましょう。

Donkey Car

認知

標準のDonkey Carにおける入力は、正面に設置された単眼の広角カメラのみ。それ以外のセンサーはありません。オプションで、IMU、ステレオカメラその他を追加することはできます。広角カメラからは、一定の間隔で、画像が取得されます。

判断

この入力画像を元に、ステアリングは右か左か、スロットリング(アクセル)は踏み込むか否か、が学習済みの深層学習モデルから出力されます。

操作

モデルの出力を元に、サーボコントローラへ所定の制御信号が出力され、ステアリング、スロットリングが調整されます。

DonkeyCarは、先ほど挙げた3つのポイントを単純化し、うまく動かしているモデルです。

MIT Racecar

また、同じラジコンカーが対象ながら、今度はこちらの映像を見てみましょう。

image.png

後ほど紹介するMIT RaceCarやF1/10(F1tenth)では、実車の自律走行に近い、認知から操作までのパイプラインを持っています。

認知

単眼または二眼のステレオカメラ、IMUといわれる加速度・ジャイロセンサ、LIDAR、その他のセンサー情報を統合(センサーフュージョン)し、自車の状態を認識します。

判断

深層学習ではなく、一定のルールに基づき、行動の選択肢を挙げ、スコア付けなどの基準に従い、ベストな行動を選択します。

操作

判断を元に所定の制御が行われます。PIDなどの制御工学の知見が使われます。

ニュースの画面の向こうにしかなかった自動運転が、少し身近に感じられて来たでしょうか。

ラジコンカーの自律走行化に必要なこと

まず、一般的なラジコンカーの構成、およびそれらを自動運転化する時の流れや、要素を説明します。

ラジコンカーの主要部品

まず、自動運転化のベースとなる、改造前の一般的なラジコンカーの構成を説明します。

ラジコンカーは、一般に以下から構成されています。

  • ボディ
  • シャーシ
  • 送信機
  • 受信機
  • ESC
  • メインモータ
  • ステアリングサーボ
  • バッテリー(駆動用)

例えば、タミヤのTT-02というキットだと、このように対応しています。

image.png

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
  • メインモータ
  • ステアリングサーボ
  • バッテリー(駆動用)
  • バッテリー(車載コンピュータ用) 追加

まず、部品のつながりは、どのように変わるのでしょうか。

image.png

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カーでの各モデルの使い方をマッピングしてみましょう。

image.png

世界のAI RC Carプロジェクト

ここで、様々な自動運転ラジコンカープロジェクトを紹介します。先ほど挙げたように、自律走行を行えるカーは、エントリーレベルのものから、本物の自動運転に近い構成まで、様々なものがあります。

今回のAI RC Car Advent Calendar 2019では、主にDonkeyCarとJetRacer関連の記事が紹介されています。

DonkeyCar

DIY文化の旗手であり、米WIRED誌の元編集長Chris Anderson氏が、2016年12月にDIY Robocarsというコミュニティを立ち上げました。自作・自動操縦ラジコンカーレースを開催し、コミュニティでは盛んに知見が共有されています。Donkey Carはそこから生まれた、自動運転ラジコンのオープンソースプラットフォームです。ハードウェア、ソフトウェア両方が公開されています。

TensorFlowをRaspberry Pi上で(Jetson Nanoにも対応)動かし、市販のラジコンカーをオンボードカメラ映像を頼りに走らせられます。

image.png

https://www.donkeycar.com/ より引用

NVIDIA JetRacer

2019年3月に発表されたJetRacerは、NVIDIA Jetson Nanoの教育・コミュニティ活動促進の一環でオープンソース化されました。他にもJetBotなどが公開されています。2種類のシャーシが選べますが、日本で取り組む場合は、手に入りやすいTT-02というタミヤの初心者向けフレームを使います。

image.png

https://github.com/NVIDIA-AI-IOT/jetracer/ より引用

AWS DeepRacer

AWS Re: Inventで発表された。AWS SageMakerなどのMLaaSに親しみ、オンライン・オフライン両方のリーグに参加できます。完成機体がAmazonから販売される予定がありましたが、日本では技適関連でまだ売り出されていません。

2019年12月のAWS re:Inventでは、2つのニュースがありました。

ひとつは、アマゾンの自動運転「DeepRacerリーグ」で日本人が“圧倒的”世界トップになった理由の記事にあるように、DeepRacerのファイナル開催と、日本人ワンツーフィニッシュです。

また、DeepRacer Evoが発表されました。新たにステレオカメラ、LIDARを搭載し、2020年に発売予定です。新しい車体とセンサーで、他車との抜きつ抜かれつ、といったレースが今後展開されるかもしれません。

image.png

https://www.amazon.com/dp/B07JMHRKQG より引用

MIT Racecar

MIT Racecarは、もともとマサチューセッツ工科大学(MIT)におけるロボティクス授業で開発されました。先に紹介したDonkeyCarやDeepRacerなどと比べ、以下の点で、より実車の制御に近い構成を取っています。

  • アーキテクチャとして、ROSを採用
  • センサーは、単眼カメラだけでなく、LiDARやステレオカメラを搭載できる
  • 未知の場所の地図を生成しながら、一定のルールに沿って走れる(DonkeyCarやDeepRacerは、決まったコースを教えこむ)

DonkeyCar、DeepRacerと比較して、より「シリアスな」プロジェクトといえるでしょう。外見こそ違いますが、同じ技術は実車の自動運転だけでなく、ルンバなどのお掃除ロボット、倉庫などでの荷物の自律搬送車で使われます。

MIT Racecar関連の資料は、上のWebサイトや、ICRA2019のワークショップサイトに公開されています。派生のプロジェクトとして、F1/10(F1tenth)が挙げられます。

image.png

https://www.jetsonhacks.com/racecar-j/ より引用

F1tenth(F1/10)

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を開発しています。実際にこれらの車に積載し、実証実験を行なっています。

image.png

https://tech.tier4.jp/ より引用

Autowareというソフトウェアは、オープンソースであるため、個人で実際に触って動かしてみることができます。

  • アーキテクチャとして、ROSを採用
  • センサーは、単眼カメラだけでなく、LiDARやステレオカメラを搭載できる
  • 未知の場所の地図を生成したり、既存の地図を参照しながら、一定のルールに沿って走れる

といった形で、MIT Racecarと似ています。実際にラジコンカーに載せてみた例が、インターネット上の記事にありました。

それぞれの違いと共通点

それぞれ扱う車体の大きさやアプローチも異なり、別のものに見えるかもしれませんが、実現を支える技術、アーキテクチャは似ています。

車やステアリングなどの「動かす」要素、カメラやLiDARなどの「センサー」要素が、それぞれ情報をやりとりし、理想的な経路を辿れるように制御します。そのためには、それぞれのノードが、リアルタイムでメッセージをやりとりします。ただし、メッセージングの提供方法は、ROSに頼ったり、それぞれのソフトウェアで独自に実装したり、異なったアプローチをとっています。

このように、AI RC Carから、実車の自動運転までのつながりを見ることができました。これならラジコンカーを動かしてみることで、自動運転の要素技術を体感しながら学べそうですね。

興味を持たれたら、各自充実した内容のAI RC Car Advent Calendar 2019から、次の一歩を進めてみてください。

初出について

本内容は、技術書典7『30日で動かして学ぶ! 自動運転』第0.8版より抜粋、加筆しました。2/28開催予定の技術書典8、また同時に電子版にて、さらにハンズオンなどを加えた第1版を頒布予定です。ご興味を持たれたら、ぜひご覧ください。

35
32
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
35
32

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?