DonckeyCarのセットアップ(RaspberryPi PS4コントローラ対応)

1.インストール

```
pip install git+https://github.com/autorope/donkeypart_ps3_controller.git
```

2.RaspberryPiとコントローラ接続

```
(env) pi@donkeypi:~ $ bluetoothctl
Waiting to connect to bluetoothd...
[bluetooth]# [NEW] Controller B8:27:EB:E7:2F:09 donkeypi [default]
[bluetooth]# scanon on
[bluetooth]# Discovery started
[bluetooth]# pair 1C:66:6D:EB:2D:2C
Attempting to pair with 1C:66:6D:EB:2D:2C
[bluetooth]# [CHG] Device 1C:66:6D:EB:2D:2C Connected: yes
[Wireless Controller]# [CHG] Device 1C:66:6D:EB:2D:2C UUIDs: 00001124-0000-1000-8000-00805f9b34fb
[Wireless Controller]# [CHG] Device 1C:66:6D:EB:2D:2C UUIDs: 00001200-0000-1000-8000-00805f9b34fb
[Wireless Controller]# [CHG] Device 1C:66:6D:EB:2D:2C ServicesResolved: yes
[Wireless Controller]# [CHG] Device 1C:66:6D:EB:2D:2C Paired: yes
[Wireless Controller]# Pairing successful
[Wireless Controller]# [CHG] Device 1C:66:6D:EB:2D:2C ServicesResolved: no   <- 接続が切れてしまう
[Wireless Controller]# [CHG] Device 1C:66:6D:EB:2D:2C Connected: no

[bluetooth]# trust 1C:66:6D:EB:2D:2C　　<- 接続が維持できるようになる。
[bluetooth]# info 1C:66:6D:EB:2D:2C
Device 1C:66:6D:EB:2D:2C
	Name: Wireless Controller
	Alias: Wireless Controller
	Class: 0x002508
	Icon: input-gaming
	Paired: yes
	Trusted: yes
	Blocked: no
	Connected: no
	LegacyPairing: no
	UUID: Human Interface Device... (00001124-0000-1000-8000-00805f9b34fb)
	UUID: PnP Information           (00001200-0000-1000-8000-00805f9b34fb)
	Modalias: usb:v054Cp05C4d0100
	RSSI: -44
[bluetooth]# [CHG] Device 1C:66:6D:EB:2D:2C Connected: yes
[Wireless Controller]# info 1C:66:6D:EB:2D:2C
Device 1C:66:6D:EB:2D:2C
	Name: Wireless Controller
	Alias: Wireless Controller
	Class: 0x002508
	Icon: input-gaming
	Paired: yes
	Trusted: yes
	Blocked: no
	Connected: yes
	LegacyPairing: no
	UUID: Human Interface Device... (00001124-0000-1000-8000-00805f9b34fb)
	UUID: PnP Information           (00001200-0000-1000-8000-00805f9b34fb)
	Modalias: usb:v054Cp05C4d0100
	RSSI: -44

※接続できなくなった時
　・1度ペアリング削除の後に再度接続処理を行う
[bluetooth]# remove 1C:66:6D:EB:2D:2C
```

3.manage.py 変更
(1)インポート追加

```python
from donkeycar.parts.clock import Timestamp
from donkeypart_ps3_controller import PS4JoystickController #2019/1/4 add
```

(2)コントローラ部分、記述変更

```python
        """
        ctr = JoystickController(max_throttle=cfg.JOYSTICK_MAX_THROTTLE,
                                 steering_scale=cfg.JOYSTICK_STEERING_SCALE,
                                 auto_record_on_throttle=cfg.AUTO_RECORD_ON_THROTTLE)
        """
        #2019/1/5 add
        ctr = PS4JoystickController(
                        throttle_scale=cfg.JOYSTICK_MAX_THROTTLE,
                        steering_scale=cfg.JOYSTICK_STEERING_SCALE,
                        auto_record_on_throttle=cfg.AUTO_RECORD_ON_THROTTLE)
```

4.コントローラで操作

```
python mycar01/manage.py drive --js
-> mycar01/tub の中に画像・走行データが保存されている。
```

5.課題
　使用しているPS4コントローラとプログラム(~/env/lib/python3.5/site-packages/donkeypart_ps3_controller/part.py)内のボタンのマップが一致していないような気がする。。。
 ->マップ修正(#付きは変更前)

```python
 #          0x05: 'right_stick_vert',
            0x04: 'right_stick_vert',

 #            0x130: 'square',
 #            0x131: 'cross',
 #            0x132: 'circle',
            0x130: 'cross',
            0x131: 'circle',
            0x133: 'triangle',
            0x134: 'square',

 #            0x134: 'L1',
 #            0x135: 'R1',
 #            0x136: 'L2',
 #            0x137: 'R2',
 #            0x13a: 'L3',
 #            0x13b: 'R3',
            0x136: 'L1',
            0x137: 'R1',
            0x138: 'L2',
            0x139: 'R2',

 #            0x13d: 'pad',
 #            0x138: 'share',
 #            0x139: 'options',
            0x13a: 'share',
            0x13b: 'options',
            0x13c: 'PS',
            0x13d: 'L3',
            0x13e: 'R3',
```