Donkey Carの手動運転にて以下のコントローラを使用可能にします。
- Logicool Wireress GamePad F710 F710の上面に"D"か"X"のどちらかに設定できるスイッチが用意されています。 これは、従来の DirectInput に準拠したドライバを使って接続するかどうかを選択できます。 Xinput のほうが新しく、Logoボタンのコントロールまで可能になっています。
ともにUSBドングルが同梱された製品であるため、Raspberry Pi上でのbluetooth設定が不要です。
ドングルを刺さずに、Raspberry Pi本体上に搭載されたBluetoothデバイスを使用することもできますが、本サイトでは紹介しません。
本コードでは autorope/donkeypart_bluetooth_game_controller パッケージを使用しています。
Raspberry Pi上にdonkeycarパッケージがインストールされ、donkey createcarコマンドで独自アプリ用ディレクトリ~/mycarが作成されている状態とします。
donkeypart_bluetooth_game_controller パッケージでは、Wii-Uコントローラを標準でサポートしています(かわりにPS3/PS4コントローラはサポートされていません)。 Wii-Uコントローラのみを使用する場合は、このリポジトリは不要です。
- Raspberry Pi にターミナル接続します。
- 以下のコマンドを実行して、前提パッケージ
donkeypart_bluetooth_game_controllerをインストールします。cd git clone https://github.com/autorope/donkeypart_bluetooth_game_controller.git cd donkeypart_bluetooth_game_controller pip install -e .
- 以下のコマンドを実行して、本リポジトリをcloneします。
cd git clone https://github.com/coolerking/donkeypart_game_controller.git - 以下のコマンドを実行して、必要なファイルを
~/mycar/elecom(ELECOM JC-U3912Tの場合)へコピーします。mkdir ~/mycar/elecom cp ~/donkeypart_game_controller/elecom/* ~/mycar/elecom/
- Logicool F710 の場合
mkdir ~/mycar/logicool cp ~/donkeypart_game_controller/logicool/* ~/mycar/logicool/
-
~/mycar/manage.pyを、以下のように編集します(ELECOM JC-U3912Tの場合)。# manage.py デフォルトのジョイスティックpart生成 #if use_joystick or cfg.USE_JOYSTICK_AS_DEFAULT: # ctr = JoystickController(max_throttle=cfg.JOYSTICK_MAX_THROTTLE, # steering_scale=cfg.JOYSTICK_STEERING_SCALE, # throttle_axis=cfg.JOYSTICK_THROTTLE_AXIS, # auto_record_on_throttle=cfg.AUTO_RECORD_ON_THROTTLE) # ジョイスティック part の生成 if use_joystick or cfg.USE_JOYSTICK_AS_DEFAULT: # wii-U コントローラを使用 #from donkeypart_bluetooth_game_controller import BluetoothGameController #ctl = BluetoothGameController() # F710用ジョイスティックコントローラを使用 #from logicool import JoystickController # ELECOM JC-U3912T ジョイスティックコントローラを使用 from elecom import JoystickController ctr = JoystickController()
-
Raspberry Piをシャットダウンします。
-
コントローラ同梱のUSBドングルをRaspberry Piに刺します。
-
Raspberry Piを再起動します。
Logicool製品の場合は logicool/part.py、Elecom製品の場合は elecom/part.py上の各 JoystickController クラス上のインスタンス変数 self.func_map を編集することで、ジョイスティックのキーの割当機能を変更できます。
以下の関数は、elecom/part.pyより該当箇所のみ切り出した例です(Logicoolの場合も同じ位置のボタンに機能を割り当てています)。
# 独自関数マップ 書き換え(key:ボタン名, value:呼び出す関数)
self.func_map = {
'LEFT_STICK_X': self.update_angle, # アングル値更新
'RIGHT_STICK_Y': self.update_throttle, # スロットル値更新
'1': self.toggle_recording, # 記録モード変更
'4': self.toggle_drive_mode, # 運転モード変更
'2': self.increment_throttle_scale, # スロットル倍率増加
'3': self.decrement_throttle_scale, # スロットル倍率減少
}ボタンとイベントデータとのマッピングは logicool/f710.yml もしくは elecom/jc_u3912t.yml を参照してください。
- 以下のコマンドを実行して、ジョイスティックを使った手動運転を開始します。
cd ~/mycar # JC-U3912Tのデフォルト設定の場合"4"ボタンで運転モードを切り替え python manage.py drive --js
本リポジトリの上記OSSで生成、コピーしたコード以外のすべてのコードはMITライセンス準拠とします。

