はじめに
最近AIラジコンカーが流行っているそうなので、手元の部品で試せないかと思ってやってみました。
今回試すAIラジコンカーはDonkeycar ですが、公式の手順ではステアリングサーボを使って操舵する、いわゆる一般的なラジコンを紹介しています。
ここでは、タミヤ製の
を使って作ったツインモーター台車を使い、手軽にDonkeycarを試してみます。
車体の完成イメージはこちら。
モータードライバの作成
Donkeycarは、ESCやステアリングサーボにPWM入力をしてコントロールするラジコンカーを前提に設計されています。
公式のドキュメントではPCA9685を使ったサーボシールドをRaspberry PiとI2C接続してラジコンカーをコントロールする手順が記載されています。今回はPCA9685サーボシールドからのPWM信号を入力としてツインモーター台車をコントロールするモータードライバーを実装しました。
(ArduinoとRaspberry Piを直接繋いだらよいのではという声が聞こえてきそうですが、今回は極力公式のソースコードをそのまま試してみようという試みでした。そのままラジコン戦車にも応用できそうですしね。)
こんな感じの構成です。
Arduino Nanoにて2CHのPWM入力(前進/後進、左右)を受け付け、ツインモーター台車の左右のモーターへ出力します。左右の回転数差で進む方向をコントロールします。
モータードライバには、スタンダードなTA7291Pを2つ使っています。Arduino Nanoを使っているのはスペースの都合です。Arduino用ソースコードは下記になります。
今回はユニバーサル基板に実装しましたが、そのうちプリント基板化したいと思います。
モーター用の電源供給は、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事始めとして、ツインモーター台車ラジコンを作りました。
次回は実際にコースを作って学習させ、自動走行を試してみたいと思います。