背景
feature:F8 — ハンコン接続時の軸割り当て(ペダル系・ステア)を設定可能にする。
F8 以前、SDL2WheelInput は軸の並び(0=ステア/1=スロットル/2=ブレーキ/3=クラッチ)と G29 のペダル生値規約(解放=+32767, 全踏み=-32768)をコードに固定していた。どちらもデバイス側の事実であり、Logitech G923 は軸の並びが異なることが観測されたため、「ブレーキを踏むとクラッチが動く」状態を設定で回避できなかった。
実装内容
WheelAxisMapping(SDL非依存の純関数): 軸index + 生レンジ校正。ペダルは raw_released/raw_full のペアで極性を内包(invertフラグを持たない)。ステアのみ steer_invert
manual_drive.json / virtual_driver.json に設定キー(既定値は G29 レイアウト=F8以前と同一挙動)
SDL2WheelInput / SDLFFBSink を mapping 経由に。steer_invert は SignFactor() 1か所から読み、軸読み戻しと CONSTANT 出力の両方に同じ係数を掛ける(feature:F7 のサーボが目標から遠ざかる正のフィードバックになるのを防ぐ)
GT_WheelProbe(新規・読み取り専用SDL2プローブ)+ Web UI「Axis Mapping」節(ライブバー・Detect・生値校正)
- ブラウザ Gamepad API は軸には使わない(独自index空間のため誤割り当てを生む)
検証: gate:unit-ctest に test_WheelAxisMapping 16ケース(GT_ENABLE_SDL2 非依存)、backend pytest 12ケース。
残タスク
実機の非自明な観測(2026-08-06)
接続済み G29 が列挙(名前・軸数4・ボタン数25すべて正しく取得)されるのに全軸 raw=0 を返し続けた。独立計器(PySDL2 / SDL 2.32.10)でも同一、SDLバックエンドヒント(HIDAPI/RAWINPUT/DINPUT)を振っても同一 → コード側ではなくデバイス状態(電源系の疑い)。
G29 のペダル規約では raw=0 は正規化 0.4999…(≒半踏み)になるため、正規化値だけを描く UI は「何も言っていないホイール」を「ペダル半踏み」と表示してしまう。対策として probe は軸ごとの reported(開始以降に非ゼロを報告したか)を返し、UI は未報告軸を no report と表示する。
関連: feature:F7 gate:unit-ctest
背景
feature:F8— ハンコン接続時の軸割り当て(ペダル系・ステア)を設定可能にする。F8 以前、
SDL2WheelInputは軸の並び(0=ステア/1=スロットル/2=ブレーキ/3=クラッチ)と G29 のペダル生値規約(解放=+32767, 全踏み=-32768)をコードに固定していた。どちらもデバイス側の事実であり、Logitech G923 は軸の並びが異なることが観測されたため、「ブレーキを踏むとクラッチが動く」状態を設定で回避できなかった。実装内容
WheelAxisMapping(SDL非依存の純関数): 軸index + 生レンジ校正。ペダルはraw_released/raw_fullのペアで極性を内包(invertフラグを持たない)。ステアのみsteer_invertmanual_drive.json/virtual_driver.jsonに設定キー(既定値は G29 レイアウト=F8以前と同一挙動)SDL2WheelInput/SDLFFBSinkを mapping 経由に。steer_invertはSignFactor()1か所から読み、軸読み戻しと CONSTANT 出力の両方に同じ係数を掛ける(feature:F7のサーボが目標から遠ざかる正のフィードバックになるのを防ぐ)GT_WheelProbe(新規・読み取り専用SDL2プローブ)+ Web UI「Axis Mapping」節(ライブバー・Detect・生値校正)検証:
gate:unit-ctestにtest_WheelAxisMapping16ケース(GT_ENABLE_SDL2 非依存)、backend pytest 12ケース。残タスク
steer_invert=true)の実機確認。初回はffb.safety_max_saturation_secondsを有効にして実施simulation_runner._write_manual_drive_configが base のadas/adas_buttons/input_scriptedブロックを落とす既存不具合(GUI起動の手動走行でADAS設定が消える・別件)実機の非自明な観測(2026-08-06)
接続済み G29 が列挙(名前・軸数4・ボタン数25すべて正しく取得)されるのに全軸 raw=0 を返し続けた。独立計器(PySDL2 / SDL 2.32.10)でも同一、SDLバックエンドヒント(HIDAPI/RAWINPUT/DINPUT)を振っても同一 → コード側ではなくデバイス状態(電源系の疑い)。
G29 のペダル規約では raw=0 は正規化 0.4999…(≒半踏み)になるため、正規化値だけを描く UI は「何も言っていないホイール」を「ペダル半踏み」と表示してしまう。対策として probe は軸ごとの
reported(開始以降に非ゼロを報告したか)を返し、UI は未報告軸をno reportと表示する。関連:
feature:F7gate:unit-ctest