コンテンツにスキップ

コントローラ入力

QUESTiX は操縦入力として、UART 接続のコントローラ(Switch 系)DualShock / USB コントローラ の 2 種類に対応します。questix_core.launch.xmlcontroller_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)

各機能のパラメータは ESC / サーボ のページを参照してください。