LoginSignup
8
6

More than 5 years have passed since last update.

ツインモーター台車をDonkeycarで走らせる(1)

Posted at

はじめに

最近AIラジコンカーが流行っているそうなので、手元の部品で試せないかと思ってやってみました。
今回試すAIラジコンカーはDonkeycar ですが、公式の手順ではステアリングサーボを使って操舵する、いわゆる一般的なラジコンを紹介しています。
ここでは、タミヤ製の

を使って作ったツインモーター台車を使い、手軽にDonkeycarを試してみます。
車体の完成イメージはこちら。

P_20190105_092011_vHDR_Auto.jpg

モータードライバの作成

Donkeycarは、ESCやステアリングサーボにPWM入力をしてコントロールするラジコンカーを前提に設計されています。

公式のドキュメントではPCA9685を使ったサーボシールドをRaspberry PiとI2C接続してラジコンカーをコントロールする手順が記載されています。今回はPCA9685サーボシールドからのPWM信号を入力としてツインモーター台車をコントロールするモータードライバーを実装しました。
(ArduinoとRaspberry Piを直接繋いだらよいのではという声が聞こえてきそうですが、今回は極力公式のソースコードをそのまま試してみようという試みでした。そのままラジコン戦車にも応用できそうですしね。)

モータードライバ構成図.png

こんな感じの構成です。
Arduino Nanoにて2CHのPWM入力(前進/後進、左右)を受け付け、ツインモーター台車の左右のモーターへ出力します。左右の回転数差で進む方向をコントロールします。

モータードライバには、スタンダードなTA7291Pを2つ使っています。Arduino Nanoを使っているのはスペースの都合です。Arduino用ソースコードは下記になります。

P_20190105_094544_vHDR_Auto.jpg

今回はユニバーサル基板に実装しましたが、そのうちプリント基板化したいと思います。
モーター用の電源供給は、ArduinoやRaspberry Piからとるのではなく、専用の配線を用意して行います。ここでは、PCA9685サーボシールドを経由してPanasonic製のモバイルバッテリーからモータードライバへ電源入力しています。ちなみに、Raspberry Piへの電源入力も同じモバイルバッテリーから行っていますが、とりあえずは安定して動いています。

ゲームパッドで操作してみる

車体の準備が整ったところで、Donkeycarのソフトウェアを使って走行させてみます。
Donkeycarの環境構築には、公式ドキュメントのほか下記のページを参考にさせていただきました。

Donkeycarイメージを使ってセットアップしたあと、下記のコマンドで今回の台車用のプロジェクトフォルダ「dualMotorCar」を作成します。

$ donkey createcar ~/dualMotorCar

manage.py及びconfig.pyが含まれたプロジェクトフォルダが生成されます。

Donkeycarを自動走行させるためには、

  • 学習データの生成(人間が操作した内容とその時の画像)
  • 走行のためのモデル作成(GPUを積んだホストマシンで実行)
  • モデルをDonkeycarへデプロイ

の手順が必要になります。

学習データの生成に関して、Donkeycarをセットアップした直後はWebコンソールからのコントロールで車体を走らせて生成することができます。しかし、Wi-Fi経由で動作が不安定だったり操作が難しかったりしたので、ゲームパッドを使って操作できるようにしました。

ゲームパッドにはELECOM JC-U3912Tを使いますが、必要なソフトウェアモジュールとしてDonkey Car用ジョイスティックコントローラを利用させていただきました。
ジョイスティックコントローラーのGithubに記載されている手順通りにソフトウエアのどうぬ湯とともにmanage.pyを書き換えるほかに、PCA9685からのPWM出力を調整するためconfig.pyを下記のように書き換えました(抜粋)。

#VEHICLE                                                                                        
DRIVE_LOOP_HZ = 20
MAX_LOOPS = 100000

#CAMERA                                                                                         
CAMERA_RESOLUTION = (120, 160) #(height, width)                                                 
CAMERA_FRAMERATE = DRIVE_LOOP_HZ

#STEERING                                                                                       
STEERING_CHANNEL = 1
STEERING_LEFT_PWM = 474
STEERING_RIGHT_PWM = 314

#THROTTLE                                                                                       
THROTTLE_CHANNEL = 0
THROTTLE_FORWARD_PWM = 474
THROTTLE_STOPPED_PWM = 394
THROTTLE_REVERSE_PWM = 314

STTEERINGやTHROTTLEの部分でPWM出力の幅やニュートラル時の値を設定することができます。
また、カメラの解像度やフレームレートもここで設定します。

ここまで設定できたところで、下記のコマンドを実行するとゲームパッドでツインモーター台車をコントロールできるようになります。

~/dualMotorCar $ python manage.py drive --js

次回は…

いかがでしたでしょうか。
今回はDonkeycar事始めとして、ツインモーター台車ラジコンを作りました。
次回は実際にコースを作って学習させ、自動走行を試してみたいと思います。

8
6
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
6