Raspberry Pi はじめてのドンキーカーをおもちゃのラジコンで作る

Raspberry Pi はじめてのドンキーカーをおもちゃのラジコンで作る

ドンキーカーがどのようなものか触ってみたい・作ってみたいと思っても、キットを買うとコストが高くつきます。まずは、おもちゃのラジコンとラズパイで安価なドンキーカーを作成して動かしてみました。初めて作る過程で、参考にした物、つまずいた点などを紹介します。

ドンキーカーとは

ドンキーカーは、いわゆるAIカーの1種です。AIカーは、自律走行する車です。最も基礎的なAIカーは、人間が操作して走らせたときの周囲の状況を画像として保存し、機械学習させることで自律走行ができます。ドンキーカーは、オープンソースなので、誰でも無料で使用することができ、プログラムを改造して、オリジナルのAIカーを作ることができます。どのようなものか、こちらのサイトで確認してみてください。

ドンキーカーの作成は、3Dプリンタでボディを作るところから始まりますが、なかなかそんな環境を持っている人はいないと思います。そこで、Fabo StoreRobocar Storeでキットが販売されています。お値段は約3万円です。気軽に始めるには、ちょっと高いですね。。

ドンキーカー以外のAIカーは、Amazonの「AWS DeepRacer」, NVIDIAの「JetRacer」,「JetBot」などがあります。

シミュレーション

ドンキーカーを作成する前に、自分のパソコン環境でドンキーカーのソフトが動作することを確認する意味も込めて、ドンキーカーのシミュレーション機能で遊んでみました。参考にさせていただいたのは、以下のサイトです。

上記サイトは英語なので、英語が厳しい方は下記サイトを参考にしてください。ただし、ドンキーカーのソフトは頻繁にアップデートされているので、手順が変わることがあります。

ドンキーカーの作成

ドンキーカーを安く作る方法について色々調べた結果、Google_Homerさんの「たぶん最安、オモチャのRCカーを利用し2800円でDonkey AI Carの車体をつくる方法」が一番安そうだったので、この方法で作成しました。使用した部材は下記のとおりです。

部品商品名価格[円]
ラジコンCCP バクソーハガンマ2300
ラズパイ本体Raspberry Pi4 ModelB 4GB 技適対応品7300
カメラRaspberry Pi Camera Module V23300
パン・チルトキットPan Tilt HAT
(今回はカメラの固定用に使うだけです。)
920
360°回転サーボ 2個SG90-HV750
サーボ制御ボードSparkFun Pi Servo HAT (PCA9685)1500
バッテリAnker Power Core Fusion 50002900
SDカードSamsung EVO Plus 32GB microSDHC MB-MC32GA/ECO 国内正規保証品1000
コントローラロジクール ワイヤレスゲームパッド F7101900
USBケーブルUGREEN USB Type C L字 ケーブル 0.5m700

ラジコンのボディカバーを取り外して、モータ線(赤、黒)と基板が接続されているところを切断して、基板を取り外した写真は以下です。

ラジコンのDCモータをサーボモータとして制御するために、SG90-HVの制御基板を取り外して使用します。ラジコンの後輪側のモータがスロットル(前進、後進)なので、これをサーボ制御ボード(PCA9685)のチャネル0に接続します。同様に、ラジコンの前輪側のモータがステアリング(左右旋回)なので、これをチャネル1に接続します。以下の写真では、チャネル2、3とカメラパン・チルトのサーボモータが配線されていますが、今回は使用しないので、無視して構いません。

配線ができたら、あとはラズパイを車体に載せるだけです。両面テープで張り合わせて、最後にビニールテープでグルッと巻いて固定しました。注意点は、カメラがバンパーより前に出ないようにすること。前方衝突したときに、カメラが壊れないように搭載位置調整します。

ハードの作成が終われば、次はソフトの設定を行います。こちらも公式サイトに詳しい手順が書いてあります。注意すべき点は、機械学習を行うPCにインストールしたソフトと、ドンキーカーにインストールするソフトのバージョンは合わせておかないと、余計なトラブルの元になります。

ドンキーカーの機械学習

機械学習を始める前に、キャリブレーションを行いました。これが思っていたよりも大変でした。正確にキャリブレーションをするためには、左右旋回の回転半径が同じになるようにするのですが、それ以前に、空中で左右にステアリングを切った際に、その角度を目視確認で同等程度にすることでさえ難しかったです。

また、実際に床において走らせてみると、カーブで横転することが多々ありました。原因は、バッテリーを車体の上に載せたので、車両の重心が高くなっていること、スピードが早すぎること、ステアリング角度がキツすぎることです。それを踏まえた上で、以下の通りとしました。

この設定で、部屋の中で作ったコースを10周ぐらい走行し、データを集めました。機械学習はGoogle ColabでGPUを使用すれば早く終わるのですが、私が試した環境下では、学習結果をドンキーカーに書き込んでも、直進はすれども曲がらずという状態でした。そのため、仕方なく、非力なノートPCで学習させました。かかった時間は1時間12分。。。グラフィックボード搭載PCであれば、数分で終わると思います。

機械学習をするためのデータは、dataフォルダにあります。何度もやり直していると、フォルダが複数あると思います。必要なフォルダをPC側のdataフォルダにコピーします。そして、以下の機械学習のコマンドを実行します。。

学習結果は、modelsフォルダ内にmypilot.h5という先程指定した名前であります。これをラズパイのmodelsフォルダにコピーします。

ドンキーカーの自動走行

それでは、学習後のドンキーカーを走らせます。下記のコマンドで、学習結果を読み込みます。

そして、以下のように、ラズパイのIPアドレスとポート番号8887を指定して、「Mode & Pilot」という項目を「Local Pilot」にすると、自動走行が開始されます。

一応学習して走行しましたが、カーブで曲がりきれずにコースアウトしたり、カーブで停止することが多々ありました。原因は以下が考えられます。

  • 私のお手本走行が下手(これが第一要因)
  • スピードを抑えているため、タイヤを旋回するときの路面負荷が大きく、ステアリングモータのトルクが足りないことがある。(細かいステアリング制御ができない)
  • コースが狭すぎる

ということで、広い場所で試してみたいのですが、なかなか良い場所がありません。また、ノートPCが非力なため、機械学習の時間が長すぎます。新しくパソコンを買ってからリベンジしたいと思います。

最後に

子どもたちは、ドンキーカーが自律走行することにあまり関心を示しませんでしたが、搭載したカメラの映像をパソコン上で見ながら、パソコンからドンキーカーを操作するという遊びを楽しんでいました。テレビゲームと現実世界が融合したような感覚なのかもしれません。

Raspberry Piカテゴリの最新記事