it82 でラジコンカーを自動運転して レースをしよう - microsoft...it82 ai...
TRANSCRIPT
de:code 2019 IT82
AI でラジコンカーを自動運転して
レースをしよう
有限会社松浦商事
松浦光洋
IT82AI でラジコンカーを自動運転して
レースをしよう
松浦光洋
有限会社松浦商事
自己紹介
• 名古屋在住
• 組込み開発の1人会社
• 学生,社会人に教える講師
• 一年前にDonkeyCarを知った
• OSCで展示していたらMSの人と盛り上がった
• Twitter• https://twitter.com/mituhiromatuura?lang=ja
3
自動運転RCカーレース
• 海外ではレースイベントが盛ん
• DIY Robocars• DonkeyCarが開発されたレースイベント
• https://diyrobocars.com/
• AWS DeepRacer• 強化学習でレース
• 日本ではこれから
• https://aws.amazon.com/jp/deepracer/
4
DonkeyCar
• オープンソース
• 標準の車はこの形
• 教師あり機械学習で自動運転する
• https://www.donkeycar.com/
5
DonkeyCarの走らせ方
• 教師データ作成• コースを人間が手動操縦
• カメラ画像と操縦をファイルに記録
• 訓練• 教師データをホストPCに転送してディープラーニング
– 「Azure Virtual Machine」のGPUが使用可能
• 出来上がった学習モデルをRCカーに転送
• 走行• 学習モデルを使って自動運転
6
DonkeyCarの開発者
• ハード担当• Adam Conway
• ソフト担当• William Roscoe
• Slack• https://donkeycar.slack.com/
7
ハードウェア
• ラジコンカー• ステアリングとスロットルが制御可能な物
• 無線送受信機は使用しない
• Raspberry Pi• 3B,3B+
• Jetson Nanoに移植もある
• カメラ• 路面と風景を撮影
• インターフェースボード• ラズパイはI2Cを出力
• ステアリング(サーボ)とスロットル(ESC)をPWMで制御8
RCカー• ホビーラジコン/トイラジコン
• タミヤ,ヨコモ,その他
• 1/10サイズのボディが種類豊富• 完成品セットが手軽
• タミヤXBシリーズ(約2万円)• 無線送受信機は使わないので余る
• 組立キット• ボディの塗装がされていない(透明なポリカーボネート)• ボディは無い方がメンテナンスは楽
• 低速走行は苦手• ラズパイの処理が遅いので車速が速いとコースアウト• 運がいいと戻る• オプションパーツで低速仕様にカスタマイズ可能
9
タミヤ1/10RC トヨタガズーレーシングWRT/ヤリスWRC(TT-02シャーシ)
10
車の中身ラズパイ用5V電源レギュレータ
ラズベリーパイ3B+
PCA9685I2C-PWM変換基板
透明アクリル板3mm厚
12
タミヤ TT-02 4WDシャシー
バッテリー7.2~7.4V
モータースピード
コントローラーステアリングサーボ
13
カメラの取り付け方法
14
3Dプリンタで製作
アクリル板3mm厚
ラズパイカメラ
15
コントローラ
• 人間が操縦して教師データを作る
• ソースプログラムはスマホのブラウザ画面でステアリングとスロットルをタッチ操作するスタイル
• ゲーム用Bluetoothコントローラを使う方法も公開されている
16
始めるために必要な費用
• 最低限で 3.5万
17
ソフトウェア
• オープンソース• https://github.com/autorope/donkeycar
• OS• Raspbianをベースにインストール済みのSDカードイメージファイルが公開されている
• Python• ライブラリ多数使用
• 機械学習• CNN
• ディープラーニング
• Tensorflow+ keras18
セットアップ
• ラズパイ• 手順は http://docs.donkeycar.com/
• バージョンアップにドキュメントが追い付かず間違いが少々...
• https://qiita.com/mituhiromatuura/items/d21bd38aa8165de36818
• 訓練用ホストPC• Azureに 「Deep Learning Virtual Machine」 を作成
• 手順はQiitahttps://qiita.com/mituhiromatuura/items/7985c474cc35f37b8e18
19
コース
• 荷造りテープでコースを作る• 黒い床に白いテープが良い
• 黄色の破線でセンターライン(コース幅が狭ければ省略)
• ラジコン操縦練習• 慣れないと難しい
20
自宅共同駐車場にコースを作って実験
21
教師データ作成
• 人間が操縦して教師データを作成• ブラウザ orゲーム用Bluetoothコントローラで操縦
• コースを5~10周走らせる
• カメラ画像と操縦操作をファイルに記録
• 画像はJPEGファイル160×120(QVGA)カラー
• 操作はJSON形式のテキストファイル
• 記録は1秒間に20回
22
訓練
• 機械学習(ディープラーニング)• ラズパイで作成したデータをホストPCに転送
– Azureの仮想PC(GPU使用)で10分程度
• 生成された学習モデルのファイルをラズパイに転送
• NVIDIAの自動運転の論文が元と思われる
• End-to-End Deep Learning for Self-Driving Cars
• https://devblogs.nvidia.com/deep-learning-self-driving-cars/
23
ディープラーニングの構成
def default_linear():img_in = Input(shape=(120, 160, 3), name='img_in')x = img_in
# Convolution2D class name is an alias for Conv2Dx = Convolution2D(filters=24, kernel_size=(5, 5), strides=(2, 2), activation='relu')(x)x = Convolution2D(filters=32, kernel_size=(5, 5), strides=(2, 2), activation='relu')(x)x = Convolution2D(filters=64, kernel_size=(5, 5), strides=(2, 2), activation='relu')(x)x = Convolution2D(filters=64, kernel_size=(3, 3), strides=(2, 2), activation='relu')(x)x = Convolution2D(filters=64, kernel_size=(3, 3), strides=(1, 1), activation='relu')(x)
x = Flatten(name='flattened')(x)x = Dense(units=100, activation='linear')(x)x = Dropout(rate=.1)(x)x = Dense(units=50, activation='linear')(x)x = Dropout(rate=.1)(x)# categorical output of the angleangle_out = Dense(units=1, activation='linear', name='angle_out')(x)
# continous output of throttlethrottle_out = Dense(units=1, activation='linear', name='throttle_out')(x)
model = Model(inputs=[img_in], outputs=[angle_out, throttle_out])
model.compile(optimizer='adam',loss={'angle_out': 'mean_squared_error',
'throttle_out': 'mean_squared_error'},loss_weights={'angle_out': 0.5, 'throttle_out': .5})
return model
End-to-End Deep Learning for Self-Driving Carsより24
自動運転で走行
• 自動運転のモード• ローカルアングルモード
» ステアリングのみ推論で制御
» スロットルは設定値で固定,手動も可
• ローカルパイロットモード» ステアリングとスロットルの両方を推論で制御
25
レース開催?
• 日本では場所の問題が...
• マイクロソフトがレースを開催???
• 進展あればツイートします
• https://twitter.com/mituhiromatuura?lang=ja
26
Azure IoT Edgeとの連携
• DonkeyCarを Azure IoT Hubに接続
• 昨日のセッション-IT01
– 「AI on Edge -クラウドとデバイスの最適な関係」で紹介(マイクロソフト太田氏)
• レース以外への応用も期待
27
• 以上です
28
© 2018 Microsoft Corporation. All rights reserved.
本情報の内容(添付文書、リンク先などを含む)は、作成日時点でのものであり、予告なく変更される場合があります。
© 2019 Mitsuhiro Matsuura All rights reserved.
本情報の内容 (添付文書、リンク先などを含む) は、de:code 2019 開催日 (2019年5月29~30日) 時点のものであり、予告なく変更される場合があります。
本コンテンツの著作権、および本コンテンツ中に出てくる商標権、団体名、ロゴ、製品、サービスなどはそれぞれ、各権利保有者に帰属します。