コントローラ入力¶
QUESTiX は操縦入力として、UART 接続のコントローラ(Switch 系) と
DualShock / USB コントローラ の 2 種類に対応します。questix_core.launch.xml の
controller_type:=uart(既定)/ dualshock で切り替えます。
flowchart LR
subgraph 入力
U["UART コントローラ"]
D["DualShock / USB"]
end
U --> UJD["uart_joy_driver"]
D --> JOYNODE["joy ノード"]
UJD -->|/joy| JC["joy_controller"]
JOYNODE -->|/joy| JC
JC -->|/cmd_vel| DRV["drive_component"]
JC --> SHOT["shot_component"]
UART コントローラ (uart_joy_driver)¶
Switch 系のコントローラを UART シリアル経由で読み取り、sensor_msgs/Joy を配信します。
| パラメータ | 既定値 | 説明 |
|---|---|---|
serial_port |
/dev/ttyAMA0 |
RPi 内蔵 UART(GPIO14/15) |
baud_rate |
115200 |
ボーレート |
read_poll_rate |
50.0 Hz |
UART のポーリングレート |
publish_rate |
50.0 Hz |
Joy の再配信レート |
deadzone |
0.05 |
スティックのデッドゾーン |
message_timeout_sec |
0.5 |
入力途絶時にニュートラルへ戻すまでの秒数 |
低速 UART 向けのドロップアウト対策
低速な UART 入力でも誤解除しないよう、連続フレーム確認のしきい値が用意されています。
axis_release_confirm_frames(既定2): 軸入力の解除に必要な連続ニュートラル数button_release_confirm_frames(既定2): ボタン解除に必要な連続リリース数hold_axis_threshold(既定0.1): 「本当に操作している」とみなす軸入力のしきい値
ボタン / 軸の配列(Switch2 ネイティブ)¶
/joy は Switch2 ネイティブの配列で配信されます。下流ノードはこのインデックスを直接指定します。
| ボタン | index | 軸 | index | |
|---|---|---|---|---|
| A | 0 | LX(左スティック X) | 0 | |
| B | 1 | LY(左スティック Y) | 1 | |
| X | 2 | RX(右スティック X) | 3 | |
| Y | 3 | RY(右スティック Y) | 4 | |
| L | 4 | D-pad H(横) | 6 | |
| R | 5 | D-pad V(縦) | 7 | |
| ZL | 6 | |||
| ZR | 7 | |||
| Minus / Plus | 8 / 9 | |||
| Home / Capture | 10 / 11 | |||
| LStick / RStick | 12 / 13 |
joy_controller(操縦ロジック)¶
joy_controller は Joy 入力を走行コマンド(/cmd_vel)やサーボ指令に変換します。
主な既定パラメータは次のとおりです。
| パラメータ | 既定値 | 説明 |
|---|---|---|
longitudinal_input_ratio |
0.1 |
前後速度のスケール |
lateral_input_ratio |
0.3 |
左右速度のスケール(全方向移動) |
angular_input_ratio |
0.1 |
旋回の向き(符号)と速度(絶対値) |
linear_x_axis |
1 |
前後の軸(左スティック Y) |
linear_y_axis |
0 |
左右の軸(左スティック X) |
angular_z_axis |
3 |
旋回の軸(右スティック X) |
扱いやすさの調整
*_input_ratio を小さくすると最高速度が下がり、操作しやすくなります。
旋回方向を反転したい場合は angular_input_ratio の符号を反転します。
機能割り当ての例¶
| 操作 | 入力(Switch2 系) |
|---|---|
| 走行(前後・旋回) | 左スティック / 右スティック |
| ローラー回転(ESC フル) | ZR ボタン (index 7) |
| 発射(トリガー) | R ボタン (index 5) |
| チルト上 / 下 | L (4) / ZL (6)、または D-pad 縦軸 (7) |