IT82 でラジコンカーを自動運転して レースをしよう - Microsoft...IT82 AI...

29
de:code 2019 IT82 AI でラジコンカーを自動運転して レースをしよう 有限会社松浦商事 松浦 光洋

Transcript of IT82 でラジコンカーを自動運転して レースをしよう - Microsoft...IT82 AI...

Page 1: IT82 でラジコンカーを自動運転して レースをしよう - Microsoft...IT82 AI でラジコンカーを自動運転して レースをしよう 松浦光洋 有限会社松浦商事

de:code 2019 IT82

AI でラジコンカーを自動運転して

レースをしよう

有限会社松浦商事

松浦光洋

Page 2: IT82 でラジコンカーを自動運転して レースをしよう - Microsoft...IT82 AI でラジコンカーを自動運転して レースをしよう 松浦光洋 有限会社松浦商事

IT82AI でラジコンカーを自動運転して

レースをしよう

松浦光洋

有限会社松浦商事

Page 3: IT82 でラジコンカーを自動運転して レースをしよう - Microsoft...IT82 AI でラジコンカーを自動運転して レースをしよう 松浦光洋 有限会社松浦商事

自己紹介

• 名古屋在住

• 組込み開発の1人会社

• 学生,社会人に教える講師

• 一年前にDonkeyCarを知った

• OSCで展示していたらMSの人と盛り上がった

• Twitter• https://twitter.com/mituhiromatuura?lang=ja

3

Page 4: IT82 でラジコンカーを自動運転して レースをしよう - Microsoft...IT82 AI でラジコンカーを自動運転して レースをしよう 松浦光洋 有限会社松浦商事

自動運転RCカーレース

• 海外ではレースイベントが盛ん

• DIY Robocars• DonkeyCarが開発されたレースイベント

• https://diyrobocars.com/

• AWS DeepRacer• 強化学習でレース

• 日本ではこれから

• https://aws.amazon.com/jp/deepracer/

4

Page 5: IT82 でラジコンカーを自動運転して レースをしよう - Microsoft...IT82 AI でラジコンカーを自動運転して レースをしよう 松浦光洋 有限会社松浦商事

DonkeyCar

• オープンソース

• 標準の車はこの形

• 教師あり機械学習で自動運転する

• https://www.donkeycar.com/

5

Page 6: IT82 でラジコンカーを自動運転して レースをしよう - Microsoft...IT82 AI でラジコンカーを自動運転して レースをしよう 松浦光洋 有限会社松浦商事

DonkeyCarの走らせ方

• 教師データ作成• コースを人間が手動操縦

• カメラ画像と操縦をファイルに記録

• 訓練• 教師データをホストPCに転送してディープラーニング

– 「Azure Virtual Machine」のGPUが使用可能

• 出来上がった学習モデルをRCカーに転送

• 走行• 学習モデルを使って自動運転

6

Page 7: IT82 でラジコンカーを自動運転して レースをしよう - Microsoft...IT82 AI でラジコンカーを自動運転して レースをしよう 松浦光洋 有限会社松浦商事

DonkeyCarの開発者

• ハード担当• Adam Conway

• ソフト担当• William Roscoe

• Slack• https://donkeycar.slack.com/

7

Page 8: IT82 でラジコンカーを自動運転して レースをしよう - Microsoft...IT82 AI でラジコンカーを自動運転して レースをしよう 松浦光洋 有限会社松浦商事

ハードウェア

• ラジコンカー• ステアリングとスロットルが制御可能な物

• 無線送受信機は使用しない

• Raspberry Pi• 3B,3B+

• Jetson Nanoに移植もある

• カメラ• 路面と風景を撮影

• インターフェースボード• ラズパイはI2Cを出力

• ステアリング(サーボ)とスロットル(ESC)をPWMで制御8

Page 9: IT82 でラジコンカーを自動運転して レースをしよう - Microsoft...IT82 AI でラジコンカーを自動運転して レースをしよう 松浦光洋 有限会社松浦商事

RCカー• ホビーラジコン/トイラジコン

• タミヤ,ヨコモ,その他

• 1/10サイズのボディが種類豊富• 完成品セットが手軽

• タミヤXBシリーズ(約2万円)• 無線送受信機は使わないので余る

• 組立キット• ボディの塗装がされていない(透明なポリカーボネート)• ボディは無い方がメンテナンスは楽

• 低速走行は苦手• ラズパイの処理が遅いので車速が速いとコースアウト• 運がいいと戻る• オプションパーツで低速仕様にカスタマイズ可能

9

Page 10: IT82 でラジコンカーを自動運転して レースをしよう - Microsoft...IT82 AI でラジコンカーを自動運転して レースをしよう 松浦光洋 有限会社松浦商事

タミヤ1/10RC トヨタガズーレーシングWRT/ヤリスWRC(TT-02シャーシ)

10

Page 11: IT82 でラジコンカーを自動運転して レースをしよう - Microsoft...IT82 AI でラジコンカーを自動運転して レースをしよう 松浦光洋 有限会社松浦商事

走行動画

• https://youtu.be/c4yVvOzXpQY

11

Page 12: IT82 でラジコンカーを自動運転して レースをしよう - Microsoft...IT82 AI でラジコンカーを自動運転して レースをしよう 松浦光洋 有限会社松浦商事

車の中身ラズパイ用5V電源レギュレータ

ラズベリーパイ3B+

PCA9685I2C-PWM変換基板

透明アクリル板3mm厚

12

Page 13: IT82 でラジコンカーを自動運転して レースをしよう - Microsoft...IT82 AI でラジコンカーを自動運転して レースをしよう 松浦光洋 有限会社松浦商事

タミヤ TT-02 4WDシャシー

バッテリー7.2~7.4V

モータースピード

コントローラーステアリングサーボ

13

Page 14: IT82 でラジコンカーを自動運転して レースをしよう - Microsoft...IT82 AI でラジコンカーを自動運転して レースをしよう 松浦光洋 有限会社松浦商事

カメラの取り付け方法

14

Page 15: IT82 でラジコンカーを自動運転して レースをしよう - Microsoft...IT82 AI でラジコンカーを自動運転して レースをしよう 松浦光洋 有限会社松浦商事

3Dプリンタで製作

アクリル板3mm厚

ラズパイカメラ

15

Page 16: IT82 でラジコンカーを自動運転して レースをしよう - Microsoft...IT82 AI でラジコンカーを自動運転して レースをしよう 松浦光洋 有限会社松浦商事

コントローラ

• 人間が操縦して教師データを作る

• ソースプログラムはスマホのブラウザ画面でステアリングとスロットルをタッチ操作するスタイル

• ゲーム用Bluetoothコントローラを使う方法も公開されている

16

Page 17: IT82 でラジコンカーを自動運転して レースをしよう - Microsoft...IT82 AI でラジコンカーを自動運転して レースをしよう 松浦光洋 有限会社松浦商事

始めるために必要な費用

• 最低限で 3.5万

17

Page 18: IT82 でラジコンカーを自動運転して レースをしよう - Microsoft...IT82 AI でラジコンカーを自動運転して レースをしよう 松浦光洋 有限会社松浦商事

ソフトウェア

• オープンソース• https://github.com/autorope/donkeycar

• OS• Raspbianをベースにインストール済みのSDカードイメージファイルが公開されている

• Python• ライブラリ多数使用

• 機械学習• CNN

• ディープラーニング

• Tensorflow+ keras18

Page 19: IT82 でラジコンカーを自動運転して レースをしよう - Microsoft...IT82 AI でラジコンカーを自動運転して レースをしよう 松浦光洋 有限会社松浦商事

セットアップ

• ラズパイ• 手順は http://docs.donkeycar.com/

• バージョンアップにドキュメントが追い付かず間違いが少々...

• https://qiita.com/mituhiromatuura/items/d21bd38aa8165de36818

• 訓練用ホストPC• Azureに 「Deep Learning Virtual Machine」 を作成

• 手順はQiitahttps://qiita.com/mituhiromatuura/items/7985c474cc35f37b8e18

19

Page 20: IT82 でラジコンカーを自動運転して レースをしよう - Microsoft...IT82 AI でラジコンカーを自動運転して レースをしよう 松浦光洋 有限会社松浦商事

コース

• 荷造りテープでコースを作る• 黒い床に白いテープが良い

• 黄色の破線でセンターライン(コース幅が狭ければ省略)

• ラジコン操縦練習• 慣れないと難しい

20

Page 21: IT82 でラジコンカーを自動運転して レースをしよう - Microsoft...IT82 AI でラジコンカーを自動運転して レースをしよう 松浦光洋 有限会社松浦商事

自宅共同駐車場にコースを作って実験

21

Page 22: IT82 でラジコンカーを自動運転して レースをしよう - Microsoft...IT82 AI でラジコンカーを自動運転して レースをしよう 松浦光洋 有限会社松浦商事

教師データ作成

• 人間が操縦して教師データを作成• ブラウザ orゲーム用Bluetoothコントローラで操縦

• コースを5~10周走らせる

• カメラ画像と操縦操作をファイルに記録

• 画像はJPEGファイル160×120(QVGA)カラー

• 操作はJSON形式のテキストファイル

• 記録は1秒間に20回

22

Page 23: IT82 でラジコンカーを自動運転して レースをしよう - Microsoft...IT82 AI でラジコンカーを自動運転して レースをしよう 松浦光洋 有限会社松浦商事

訓練

• 機械学習(ディープラーニング)• ラズパイで作成したデータをホスト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

Page 24: IT82 でラジコンカーを自動運転して レースをしよう - Microsoft...IT82 AI でラジコンカーを自動運転して レースをしよう 松浦光洋 有限会社松浦商事

ディープラーニングの構成

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

Page 25: IT82 でラジコンカーを自動運転して レースをしよう - Microsoft...IT82 AI でラジコンカーを自動運転して レースをしよう 松浦光洋 有限会社松浦商事

自動運転で走行

• 自動運転のモード• ローカルアングルモード

» ステアリングのみ推論で制御

» スロットルは設定値で固定,手動も可

• ローカルパイロットモード» ステアリングとスロットルの両方を推論で制御

25

Page 26: IT82 でラジコンカーを自動運転して レースをしよう - Microsoft...IT82 AI でラジコンカーを自動運転して レースをしよう 松浦光洋 有限会社松浦商事

レース開催?

• 日本では場所の問題が...

• マイクロソフトがレースを開催???

• 進展あればツイートします

• https://twitter.com/mituhiromatuura?lang=ja

26

Page 27: IT82 でラジコンカーを自動運転して レースをしよう - Microsoft...IT82 AI でラジコンカーを自動運転して レースをしよう 松浦光洋 有限会社松浦商事

Azure IoT Edgeとの連携

• DonkeyCarを Azure IoT Hubに接続

• 昨日のセッション-IT01

– 「AI on Edge -クラウドとデバイスの最適な関係」で紹介(マイクロソフト太田氏)

• レース以外への応用も期待

27

Page 28: IT82 でラジコンカーを自動運転して レースをしよう - Microsoft...IT82 AI でラジコンカーを自動運転して レースをしよう 松浦光洋 有限会社松浦商事

• 以上です

28

Page 29: IT82 でラジコンカーを自動運転して レースをしよう - Microsoft...IT82 AI でラジコンカーを自動運転して レースをしよう 松浦光洋 有限会社松浦商事

© 2018 Microsoft Corporation. All rights reserved.

本情報の内容(添付文書、リンク先などを含む)は、作成日時点でのものであり、予告なく変更される場合があります。

© 2019 Mitsuhiro Matsuura All rights reserved.

本情報の内容 (添付文書、リンク先などを含む) は、de:code 2019 開催日 (2019年5月29~30日) 時点のものであり、予告なく変更される場合があります。

本コンテンツの著作権、および本コンテンツ中に出てくる商標権、団体名、ロゴ、製品、サービスなどはそれぞれ、各権利保有者に帰属します。