Jetson NanoでFPVラジコンを作る(7)
今回はラジコンを操縦するための入力機器をJetson Nanoに接続してみる。 もちろん入力機器を無線接続したいので、bluetooth接続のゲームパッドを使用することにする。
選定理由は、動作環境としてラズパイ(Linux)が入っていたこと、比較的品質が高そうなコメントが多かったこと、それからデザインがシンプルだったからである。
JetsonにはBluetooth機能がないのでUSBドングルを購入した。
エレコム Bluetooth USBアダプタ Class1 Windows10対応 Windows10対応 LBT-UAN05C1
- 発売日: 2016/07/25
- メディア: Personal Computers
選定理由はほぼ同じ機種がLinuxの動作実績があったのと、出力が高く最大通信距離が100mとなっていたからである。通常のbluetooth機器だと最大通信距離が10m程度なので、ラジコンとして使うには少し物足りないように思った。
USBポートにドングルを挿入して様子を見てみたところ、bluetooth関連のドライバもロードされている。なので特に追加のドライバインストールなどは必要なさそうに見える。
$ lsusb Bus 002 Device 002: ID 0bda:0411 Realtek Semiconductor Corp. Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub Bus 001 Device 005: ID 046d:0825 Logitech, Inc. Webcam C270 Bus 001 Device 004: ID 0a12:0001 Cambridge Silicon Radio, Ltd Bluetooth Dongle (HCI mode) Bus 001 Device 003: ID 0bda:8179 Realtek Semiconductor Corp. RTL8188EUS 802.11n Wireless Network Adapter Bus 001 Device 002: ID 0bda:5411 Realtek Semiconductor Corp. Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub $ lsmod Module Size Used by fuse 103969 2 zram 25920 2 bnep 16562 2 r8188eu 470585 0 btusb 40277 0 btrtl 7318 1 btusb cfg80211 589932 1 r8188eu btbcm 8808 1 btusb btintel 10771 1 btusb overlay 48718 0 uvcvideo 90512 1 spidev 13282 0 userspace_alert 5756 0 nvgpu 1581474 21 bluedroid_pm 13912 0 ip_tables 19441 0 x_tables 28951 1 ip_tables
製品仕様にはQualcommのチップを使っていると書いてあるが、USBデバイスとしてはCambridge Silicon Radioとなっている。よくわからないがメジャーなチップのエミュレーションなのだろうか。
あとは以下のサイトを参考にbluetoothctl
を操作したところ、特に問題なくペアリングや接続ができた。
ハマったのは、上記サイトの実行例を見ればわかるのだがペアリングの際はroot権限が必要なことくらい。
接続状態でbluetoothctl
を実行すると以下のような出力になる。
無事SN30 Pro+を認識している。
$ sudo bluetoothctl [sudo] password for kimito: [NEW] Controller XX:XX:XX:XX:XX:XX jetson-nano [default] [NEW] Device XX:XX:XX:XX:XX:XX 8BitDo SN30 Pro+ Agent registered [bluetooth]# quit Agent unregistered [DEL] Controller 00:1B:DC:FB:ED:56 jetson-nano [default]
Linuxではゲームパッドもそれなりにサポートされているらしい。今回は主にこことここを参照した。 ubuntuの場合はjoystickというパッケージをインストールする。
$ sudo apt install joystick
そうすると動作確認用のevtest
というパッケージが使用できる。今の環境だと/dev/input/event/3
というデバイスファイルがゲームパッドに対応していた。
ゲームパッドの機種や存在している各ボタン、値域(通常のボタンなのかアナログのボタンなのかで値域が異なる)が表示され、ボタンを操作するとログが表示される。
$ sudo evtest /dev/input/event3 Input driver version is 1.0.1 Input device ID: bus 0x5 vendor 0x45e product 0x2e0 version 0x903 Input device name: "8BitDo SN30 Pro+" Supported events: Event type 0 (EV_SYN) Event type 1 (EV_KEY) Event code 139 (KEY_MENU) Event code 304 (BTN_SOUTH) Event code 305 (BTN_EAST) Event code 306 (BTN_C) Event code 307 (BTN_NORTH) Event code 308 (BTN_WEST) Event code 309 (BTN_Z) Event code 310 (BTN_TL) Event code 311 (BTN_TR) Event code 312 (BTN_TL2) Event code 313 (BTN_TR2) Event type 3 (EV_ABS) Event code 0 (ABS_X) Value 32671 Min 0 Max 65535 Fuzz 255 Flat 4095 Event code 1 (ABS_Y) Value 32768 Min 0 Max 65535 Fuzz 255 Flat 4095 Event code 2 (ABS_Z) Value 0 Min 0 Max 1023 Fuzz 3 Flat 63 Event code 3 (ABS_RX) Value 32768 Min 0 Max 65535 Fuzz 255 Flat 4095 Event code 4 (ABS_RY) Value 32768 Min 0 Max 65535 Fuzz 255 Flat 4095 Event code 5 (ABS_RZ) Value 0 Min 0 Max 1023 Fuzz 3 Flat 63 Event code 16 (ABS_HAT0X) Value 0 Min -1 Max 1 Event code 17 (ABS_HAT0Y) Value 0 Min -1 Max 1 Event code 40 (ABS_MISC) Value 0 Min 0 Max 255 Flat 15 Event type 4 (EV_MSC) Event code 4 (MSC_SCAN) Properties: Testing ... (interrupt to exit) Event: time 1617221268.254622, type 3 (EV_ABS), code 3 (ABS_RX), value 31743 Event: time 1617221268.254622, -------------- SYN_REPORT ------------ Event: time 1617221268.275902, type 3 (EV_ABS), code 3 (ABS_RX), value 32768 Event: time 1617221268.275902, -------------- SYN_REPORT ------------ Event: time 1617221273.088606, type 4 (EV_MSC), code 4 (MSC_SCAN), value 90002 Event: time 1617221273.088606, type 1 (EV_KEY), code 305 (BTN_EAST), value 1 Event: time 1617221273.088606, -------------- SYN_REPORT ------------ Event: time 1617221273.241186, type 4 (EV_MSC), code 4 (MSC_SCAN), value 90002 Event: time 1617221273.241186, type 1 (EV_KEY), code 305 (BTN_EAST), value 0 Event: time 1617221273.241186, -------------- SYN_REPORT ------------ Event: time 1617221274.056230, type 3 (EV_ABS), code 5 (ABS_RZ), value 71 Event: time 1617221274.056230, -------------- SYN_REPORT ------------ Event: time 1617221274.077404, type 3 (EV_ABS), code 5 (ABS_RZ), value 699 Event: time 1617221274.077404, -------------- SYN_REPORT ------------ Event: time 1617221274.078572, type 3 (EV_ABS), code 5 (ABS_RZ), value 1023 Event: time 1617221274.078572, -------------- SYN_REPORT ------------ Event: time 1617221274.218626, type 3 (EV_ABS), code 5 (ABS_RZ), value 607 Event: time 1617221274.218626, -------------- SYN_REPORT ------------ Event: time 1617221274.219881, type 3 (EV_ABS), code 5 (ABS_RZ), value 271 Event: time 1617221274.219881, -------------- SYN_REPORT ------------ Event: time 1617221274.242378, type 3 (EV_ABS), code 5 (ABS_RZ), value 103 Event: time 1617221274.242378, -------------- SYN_REPORT ------------ Event: time 1617221274.263637, type 3 (EV_ABS), code 5 (ABS_RZ), value 35 Event: time 1617221274.263637, -------------- SYN_REPORT ------------ Event: time 1617221274.264880, type 3 (EV_ABS), code 5 (ABS_RZ), value 0 Event: time 1617221274.264880, -------------- SYN_REPORT ------------ Event: time 1617221275.844978, type 3 (EV_ABS), code 2 (ABS_Z), value 35 Event: time 1617221275.844978, -------------- SYN_REPORT ------------ Event: time 1617221275.866229, type 3 (EV_ABS), code 2 (ABS_Z), value 363 Event: time 1617221275.866229, -------------- SYN_REPORT ------------ Event: time 1617221275.867456, type 3 (EV_ABS), code 2 (ABS_Z), value 543 Event: time 1617221275.867456, -------------- SYN_REPORT ------------ Event: time 1617221275.889996, type 3 (EV_ABS), code 2 (ABS_Z), value 1023 Event: time 1617221275.889996, -------------- SYN_REPORT ------------ Event: time 1617221276.003716, type 3 (EV_ABS), code 2 (ABS_Z), value 871 Event: time 1617221276.003716, -------------- SYN_REPORT ------------ Event: time 1617221276.004964, type 3 (EV_ABS), code 2 (ABS_Z), value 483 Event: time 1617221276.004964, -------------- SYN_REPORT ------------ Event: time 1617221276.027465, type 3 (EV_ABS), code 2 (ABS_Z), value 0 Event: time 1617221276.027465, -------------- SYN_REPORT ------------
ボタンを全て試してみたが特に問題なく認識している。もう少し難航するのかと思っていたが割とあっさり動作確認ができた。Linuxすごい。
ということで、今回まででラジコンを成立させるための基本的なハードウェアの確認が終わった。
次回からはいよいよソフトウェアを実装する。
前回記事
Jetson NanoでFPVラジコンを作る(1) - 自由課題
Jetson NanoでFPVラジコンを作る(2) - 自由課題
Jetson NanoでFPVラジコンを作る(3) - 自由課題
Jetson NanoでFPVラジコンを作る(4) - 自由課題
Jetson Nanoを使ってFPVラジコンを作る(5) - 自由課題
Jetson Nanoを使ってFPVラジコンを作る(6) - 自由課題