ドンキーカーがどのようなものか触ってみたい・作ってみたいと思っても、キットを買うとコストが高くつきます。まずは、おもちゃのラジコンとラズパイで安価なドンキーカーを作成して動かしてみました。初めて作る過程で、参考にした物、つまずいた点などを紹介します。
ドンキーカーとは
ドンキーカーは、いわゆるAIカーの1種です。AIカーは、自律走行する車です。最も基礎的なAIカーは、人間が操作して走らせたときの周囲の状況を画像として保存し、機械学習させることで自律走行ができます。ドンキーカーは、オープンソースなので、誰でも無料で使用することができ、プログラムを改造して、オリジナルのAIカーを作ることができます。どのようなものか、こちらのサイトで確認してみてください。
ドンキーカーの作成は、3Dプリンタでボディを作るところから始まりますが、なかなかそんな環境を持っている人はいないと思います。そこで、Fabo StoreやRobocar Storeでキットが販売されています。お値段は約3万円です。気軽に始めるには、ちょっと高いですね。。
ドンキーカー以外のAIカーは、Amazonの「AWS DeepRacer」, NVIDIAの「JetRacer」,「JetBot」などがあります。
シミュレーション
ドンキーカーを作成する前に、自分のパソコン環境でドンキーカーのソフトが動作することを確認する意味も込めて、ドンキーカーのシミュレーション機能で遊んでみました。参考にさせていただいたのは、以下のサイトです。
上記サイトは英語なので、英語が厳しい方は下記サイトを参考にしてください。ただし、ドンキーカーのソフトは頻繁にアップデートされているので、手順が変わることがあります。
- https://coolerking.github.io/donkeycar_jpdocs/guide/simulator/
- https://faboplatform.github.io/DonkeyDocs/3.Simulator/2.sim/
- Donkey Carを組み立てる前にシミュレーターで楽しんでみる Donkey Car 3.1.0編
ドンキーカーの作成
ドンキーカーを安く作る方法について色々調べた結果、Google_Homerさんの「たぶん最安、オモチャのRCカーを利用し2800円でDonkey AI Carの車体をつくる方法」が一番安そうだったので、この方法で作成しました。使用した部材は下記のとおりです。
部品 | 商品名 | 価格[円] |
ラジコン | CCP バクソーハガンマ | 2300 |
ラズパイ本体 | Raspberry Pi4 ModelB 4GB 技適対応品 | 7300 |
カメラ | Raspberry Pi Camera Module V2 | 3300 |
パン・チルトキット | Pan Tilt HAT (今回はカメラの固定用に使うだけです。) | 920 |
360°回転サーボ 2個 | SG90-HV | 750 |
サーボ制御ボード | SparkFun Pi Servo HAT (PCA9685) | 1500 |
バッテリ | Anker Power Core Fusion 5000 | 2900 |
SDカード | Samsung EVO Plus 32GB microSDHC MB-MC32GA/ECO 国内正規保証品 | 1000 |
コントローラ | ロジクール ワイヤレスゲームパッド F710 | 1900 |
USBケーブル | UGREEN USB Type C L字 ケーブル 0.5m | 700 |
ラジコンのボディカバーを取り外して、モータ線(赤、黒)と基板が接続されているところを切断して、基板を取り外した写真は以下です。
ラジコンのDCモータをサーボモータとして制御するために、SG90-HVの制御基板を取り外して使用します。ラジコンの後輪側のモータがスロットル(前進、後進)なので、これをサーボ制御ボード(PCA9685)のチャネル0に接続します。同様に、ラジコンの前輪側のモータがステアリング(左右旋回)なので、これをチャネル1に接続します。以下の写真では、チャネル2、3とカメラパン・チルトのサーボモータが配線されていますが、今回は使用しないので、無視して構いません。
配線ができたら、あとはラズパイを車体に載せるだけです。両面テープで張り合わせて、最後にビニールテープでグルッと巻いて固定しました。注意点は、カメラがバンパーより前に出ないようにすること。前方衝突したときに、カメラが壊れないように搭載位置調整します。
ハードの作成が終われば、次はソフトの設定を行います。こちらも公式サイトに詳しい手順が書いてあります。注意すべき点は、機械学習を行うPCにインストールしたソフトと、ドンキーカーにインストールするソフトのバージョンは合わせておかないと、余計なトラブルの元になります。
ドンキーカーの機械学習
機械学習を始める前に、キャリブレーションを行いました。これが思っていたよりも大変でした。正確にキャリブレーションをするためには、左右旋回の回転半径が同じになるようにするのですが、それ以前に、空中で左右にステアリングを切った際に、その角度を目視確認で同等程度にすることでさえ難しかったです。
また、実際に床において走らせてみると、カーブで横転することが多々ありました。原因は、バッテリーを車体の上に載せたので、車両の重心が高くなっていること、スピードが早すぎること、ステアリング角度がキツすぎることです。それを踏まえた上で、以下の通りとしました。
この設定で、部屋の中で作ったコースを10周ぐらい走行し、データを集めました。機械学習はGoogle ColabでGPUを使用すれば早く終わるのですが、私が試した環境下では、学習結果をドンキーカーに書き込んでも、直進はすれども曲がらずという状態でした。そのため、仕方なく、非力なノートPCで学習させました。かかった時間は1時間12分。。。グラフィックボード搭載PCであれば、数分で終わると思います。
機械学習をするためのデータは、dataフォルダにあります。何度もやり直していると、フォルダが複数あると思います。必要なフォルダをPC側のdataフォルダにコピーします。そして、以下の機械学習のコマンドを実行します。。
python manage.py train --tub ./data/tub_39_20-05-23 --model ./models/mypilot.h5
学習結果は、modelsフォルダ内にmypilot.h5という先程指定した名前であります。これをラズパイのmodelsフォルダにコピーします。
ドンキーカーの自動走行
それでは、学習後のドンキーカーを走らせます。下記のコマンドで、学習結果を読み込みます。
python manage.py drive --model ./models/mypilot.h5
そして、以下のように、ラズパイのIPアドレスとポート番号8887を指定して、「Mode & Pilot」という項目を「Local Pilot」にすると、自動走行が開始されます。
http://192.168.1.20:8887/drive
一応学習して走行しましたが、カーブで曲がりきれずにコースアウトしたり、カーブで停止することが多々ありました。原因は以下が考えられます。
- 私のお手本走行が下手(これが第一要因)
- スピードを抑えているため、タイヤを旋回するときの路面負荷が大きく、ステアリングモータのトルクが足りないことがある。(細かいステアリング制御ができない)
- コースが狭すぎる
ということで、広い場所で試してみたいのですが、なかなか良い場所がありません。また、ノートPCが非力なため、機械学習の時間が長すぎます。新しくパソコンを買ってからリベンジしたいと思います。
最後に
子どもたちは、ドンキーカーが自律走行することにあまり関心を示しませんでしたが、搭載したカメラの映像をパソコン上で見ながら、パソコンからドンキーカーを操作するという遊びを楽しんでいました。テレビゲームと現実世界が融合したような感覚なのかもしれません。
コメントを残す