技術は使ってなんぼ

自分が得たものを誰かの役に立てたい

タミヤのラジコン(くまもんバギー)を自動運転車(Donkey Car)に改造しよう。~2日目~ ついに自動運転成功!

くまもんバギーを自動運転させることに成功しました!

いやーうまく走った時は感動のあまり、ニヤニヤしてガッツポーズしてしまいました。


あまりに嬉しかったので、自動走行してる動画をYouTubeにアップしました。


こんな手作り感満載の改造車でも、ちゃんと自動運転するんですねぇ。


この素晴らしいシステムをオープンソースで提供してくださったナイスガイな皆様に超感謝!


それでは前回の続きから説明していきます。


バックしない問題はどうなったのか?

まず、前回のバック方向に動かない問題ですが、

わかりませんでした。。

色々確認したんですがねぇ。ほんとわからんのです。。

詳しい方いましたらアドバイスいただけると幸いです。

確認したことを列挙します。

モーターが壊れたのかと思い(買ってまだ一か月なので、よほどないと思いながらも)、通常のラジコンモードに戻してプロポで確認しました。

普通にバックできます。


モータードライバが壊れているのかと思い、ピンの位置を変えて、ソフト側のアドレスも変えたら動くのかどうか確認しました。

サーボモーターは問題なく動くし、前にも進めます。でもバックしないんです。


公式文書では、バックの設定を(例:330→370→330)みたいなキャリブレーションが必要と書いてたので、そういうコマンドも打ってみました。

コントローラーなら前進側と逆に引き下げるとかなんとかあったので、それっぽいこともやってみました。

ダメでした。やり方がなんか違うんやろか・・?


ま、今のところ自動運転でバックすることは想定してないので(車としてどうなん?)、一旦放置。


ソースコードもざっと追ったんですがねぇ。PCA9685専用のメソッドにPWM値を渡してるだけなんですよね。

なので、キャリブレーションでPWM値を直接打って確認してるので、疑うならやっぱPCA9685?
新しいの買って試すかなぁ。。

自動運転用のコースを作ろう!

コース作りました。もちろんダンボーです。

f:id:yonesuke0716:20200131143004j:plain
ダンボール最強

百均で買った白いビニールテープ(幅5cm×長さ10m)も半分以上使いましたね。。


車を訓練させよう!

車体とコースが揃ったので、自動運転させるための訓練データを取得します。


訓練時は私がコントローラーで操作します。


走行中はカメラでコースを撮影します。

f:id:yonesuke0716:20200131143712p:plain
こんな感じです


この画像データと、その時の車の舵角とスロットルを、jsonファイルに保存していきます。


この保存された訓練データが、後で学習させる教師データとなるわけです。(正解値、アノテーションともいう)


データがとり終わったら、WinSCPで、ラズパイから自分のPCへ訓練データを転送します。

訓練データで学習済みモデルを生成しよう!

転送したデータで、学習を行うことでモデルを生成することができます。


Donkey Carの公式にはGoogle Colabという超便利なクラウドの開発環境が用意されてます。


GPUのないパソコンをお持ちの方でも、Google Colabを使うと無料で学習もできちゃいます。


Donkey Carのモデル構造は、以下のようになってます。

f:id:yonesuke0716:20200131145423p:plain
Donkey Carモデル(デフォルト)


とてもシンプルな畳み込み(Conv2D)を5回やってます。途中ドロップアウトとか挟んで汎化性能をあげてるようです。

この辺の細かい説明は他の方の技術ブログとかを参照ください。


学習も、early stoppingで早く終了しました。
これは、学習が所定回数回る前に、いい感じに収束したので早めに終わりますという機能です。

f:id:yonesuke0716:20200131150123p:plain
学習が途中で終わっても大丈夫!だってearly stoppingなんだもん!

なので、学習が途中で止まっても安心してください。


私もわずか10回で止まって、lossが0.17もあるのに大丈夫か?と思いましたが、問題なく動きます。


学習が終わると、mypilot.h5というファイルが生成されるので、これをラズパイへ転送します。


すると、上にあげたYouTubeのような自動運転が完成~!


ヤッタネ!

今後どうするん?

あとやりたいことは、強化学習での自動運転やりたいですね。


最近の車らしく、障害物を検知したら自動で止まるような自動運転にしてみたいですね。


欲を言えば、障害物を検知したら避けて走行できるようになるとかっこいいですよね!


何やるかはまた次回までに考えます。


今日はとても満足しました。