今天在測試 Donkey Car 的搖桿,發現插上 2.4GHz 接收器竟然會變成 /dev/input/js1
因此 python3 manage.py drive --js 就讀不到搖桿資訊了,因為預設會使用 /dev/input/js0
還好這篇文章給了一些線索,可以使用 udevadm 指令去觀察這些裝置節點。
觀察結果如下。
$ sudo udevadm info /dev/input/js0
```
P: /devices/virtual/input/input4/js0
N: input/js0
L: 0
E: DEVPATH=/devices/virtual/input/input4/js0
E: DEVNAME=/dev/input/js0
E: MAJOR=13
E: MINOR=0
E: SUBSYSTEM=input
E: USEC_INITIALIZED=33222115
E: ID_INPUT=1
E: ID_INPUT_MOUSE=1
E: ID_SERIAL=noserial
```
$ sudo udevadm test-builtin input_id /class/input/js0
```
Load module index
Skipping empty file: /etc/systemd/network/99-default.link
Created link configuration context.
ID_INPUT=1
ID_INPUT_MOUSE=1
Unload module index
Unloaded link configuration context.
```
不過最有收穫的竟然還是使用 jstest 去測試
jstest /dev/input/js0
```
Driver version is 2.1.0.
Joystick (vnc-abspointer) has 2 axes (X, Y)
and 3 buttons (LeftBtn, RightBtn, MiddleBtn).
Testing ... (interrupt to exit)
Axes: 0:-32767 1:-32767 Buttons: 0:off 1:off 2:off
```
發現這 Joystick 是 vnc-abspointer,也就是因為啟動 VNC Server 之後跑出來的...
因此解決方法有三個。
1. 不要開啟 VNC Server。
2. 修改 donkeypart_ps3_controller/donkeypart_ps3_controller/part.py
把所有 /dev/input/js0 改為 /dev/input/js1 之後重新安裝。
3. 最簡單,把接收器插在 Pi 上以後重開機,HID 裝置會比 vnc-abspointer 早載入,因此會拿到 js0