LEGOで作る ゆるメカトロ Donkey AI Car

#■はじめに
####簡単かつ安価にDonkey AI Carの車体を作成する記事です。とりあえずDonkeyを試してみたいという超ビギナー向けの記事です。普段ラズパイを触ったり、LEGOでServo回したりしている方であれば、持ち合わせのものを適当に組み合わせてほぼほぼお金かけずにDonkeyをお試しできる思います。
DonkeyでAI Carを始めようと思ったのですが、ちょい試したいだけの自分にとってキット4万円は少しハードルが高くひるんでしまいました。色々調査を進めると、**「2台のServoでハンドルと車輪を制御」**する機構であるということがわかりました。それであれば、ビュンビュン走らせるのではなく低速でも良いなら**「ゆるメカトロ的な車体」**でも行けるのではないかと思い、LEGOで車体を組んで成功したという記事です。
#■Donkeyの車体を簡単に作成する記事で
##・車体&駆動部分ともにLEGOで組み立てます。
##・プログラム作成や変更は不要です。
##・100%チュートリアル(日本語)通りで動きます。
#■車体イメージ
##こんな、ゆる～いDonkey AI Carを作ります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/234533/1062e5c9-633b-9cbc-6723-ca21781411e5.png)
#■機械学習後の自立走行動画
##ゆる～い車体ですが、立派に学習&走行します。
(注)本記事の車体はこの動画の車体に色々改造を加えて最終仕上げしたもので、動画の車体とは微妙に異なる部分があります。
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr"><a href="https://twitter.com/hashtag/yurufuwaml?src=hash&amp;ref_src=twsrc%5Etfw">#yurufuwaml</a> <a href="https://twitter.com/hashtag/%E3%82%86%E3%82%8B%E3%83%A1%E3%82%AB%E3%83%88%E3%83%AD?src=hash&amp;ref_src=twsrc%5Etfw">#ゆるメカトロ</a><br>わかりやすいようにコース作って <a href="https://twitter.com/hashtag/Donkeycar?src=hash&amp;ref_src=twsrc%5Etfw">#Donkeycar</a> 走らせてみた。ぽく走っている、なんか感動もの。手前の急カーブ無茶ぶりショートカット部分は、教師操作何度も失敗した難所で、学習結果に明確に出ていて面白い。↓に写真も。 <a href="https://t.co/6t4xASmQOv">pic.twitter.com/6t4xASmQOv</a></p>&mdash; Google Homer (@google_homer_) <a href="https://twitter.com/google_homer_/status/1211223148944691206?ref_src=twsrc%5Etfw">December 29, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
#■Donkey Car チュートリアル
とても分かり易いチュートリアルがFaBoさんから公開されています。「[FaBo DonkeyCar Docs](https://faboplatform.github.io/DonkeyDocs/)」を参照下さい。すべてこれで完結しているので、これ以外を参照する必要はないでしょう。
####また、すべての操作はPCからSSHで行うのでラズパイにDisplay/KB等接続する必要はありません。
以下メニューのみ抜粋です。
####「組み立て」部分は、本Qiita記事で読み替えて下さい。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/234533/03ff77ca-02f8-4373-0e30-9b431da16bbd.png)
#■ゆるメカトロ Donkey AI car のシステム構成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/234533/d50c64d6-ea49-2a4e-d99f-b375f17d2d03.png)
#■主要パーツ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/234533/390225e5-6c1f-4232-cf9e-a5bf4dc342a9.png)
クリックで購入サイト表示されます。
[① LEGO用Red Motor & Gray Servo](https://eu.banggood.com/Wholesale-Warehouse-KittenBot-Red-Color-360-Gray-Color-270-Geek-Servo-with-Wire-for-LegoMicrobit-Smart-Car-wp-Eu-1355495.html?akmClientCountry=JP&) **(4個セットですが、赤×2/灰×1のみ使用)**
[② LEGO用プラスチックメカナムホイール](https://www.switch-science.com/catalog/5939/)**(4個セットですが、2個のみ使用)**
[③ 360°連続回転サーボSG90-HV](http://akizukidenshi.com/catalog/g/gM-14382/) **(基板取出しDC Motor Driverとして流用)**
[④ Raspberry Pi 3B](https://www.switch-science.com/catalog/3050/) **(推奨3B+ですが、持ち合わせの3Bで代用)**
[⑤ PCA9685 I2C Servo Driver HAT](https://www.amazon.co.jp/dp/B07K7NK2TJ)　**(HAT以外の方が購入しやすいかも)**
[➅ Raspberry Pi用広角Camera Module](https://www.fabo.store/collections/donkeycar/products/raspberry-pi%E7%94%A8-camera-module)
[⑦ 32G microSD Card](https://www.amazon.co.jp/dp/B07MTCJHP6)
[⑧ ワイヤレスゲームパッドF710](https://www.yodobashi.com/product/100000001001285938/) **(教師走行で使用)**
[⑨その他LEGOパーツ類：LEGOブロック専門店Brickers!](https://www.brickers.jp/?mode=grp&gid=280029) **(1点でも購入可で便利)**
#■駆動輪のメカナムホイールについて
2輪なのにメカナムホイールを使用している事に違和感を感じる人もいるかもしれませんが、たぶん普通のタイヤに変更すると細いタイヤであっても操舵が難しくなるかもしれません。前方の小さい車輪でハンドル操作しているので、本来なら後の駆動輪はデフギア的な動作させないとうまく回れません。適当なタイヤがなかったので、たまたまメカナムホイールで代用したのですが、偶然にもデフギア風の動作をしていて、うまくハンドル操作できているようです。
#■ゆるメカトロ Donkey Carの組み立て方法
###車体の組み立て
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/234533/b684a0ab-4746-466a-ba53-0407edea4b3f.png)
ハンドル操作はGray Servoの回転軸で直接行うようにしました。駆動輪は、Motor1台だと2つのタイヤに回転を伝える機構の部品点数がで多くなるので、Red motor2台をタコ足配線することでメカ部分を単純化しました。まあこの部分は、ハンドル操作と駆動輪を2台のPWM信号で制御できればよいので、思い思いの機構を組めばよいでしょう。
###ラズパイにMotorを接続する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/234533/2b0f30bc-46fd-0f06-a3d9-17777cde29f1.png)
まず、ラズパイにPCA9685 I2C Servo Driver HATを刺します。これでラズバイから電源供給されI2C端子とも接続され便利なので、ラズパイと一体化できるHAT形式をお勧めします。Red Motorは直接Servo Driverに接続できないので、ギヤ故障で使えなくなった回転Servo SG90-HVの内蔵基板(PWM→DC Motor変換回路)を取り出してDC Motor Driveとして流用します。今の所30分の連続走行でも、溶ける事なく動いています。Red MotorをServo Driveの0番に、Gray Servoを1番に接続すれば、Donkey Carの環境変数を変更することなく動作させる事ができます。
###車体にラズパイを乗っけて完成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/234533/c8dfc2cd-6110-b3b9-9434-a22829b1d4af.png)
車体のシャーシ部分にモバイルバッテリーとラズパイを乗っけます。強力両面テープ等で適当に固定しました。カメラも適当な場所に貼りつけます。これで完成です。ラズパイは消費電力が大きいようですが、Motor Drive及びMotorも含めて2A出力のモバイルバッテリーで動いています。
#■最後に
やってみてわかったのですが、車の速度が速いと教師操作が難しいので、RCカー操縦に自身のない方がDonkey Carを始めるには、今回のような低速の車体の方が始めやすいかもしれません。なかなかコースの確保も難しいですし、自宅内でできるのもメリットです。まあ、いずれ本格的な走りの方向に行くでしょうけど。

#####以上