Skip to content

feat(ops): 大気圧・ブレーキ・勾配を調べる3本のスクリプト - #168

Merged
RyoheiHashimoto merged 1 commit into
developfrom
feat/ops-investigate
Aug 31, 2026
Merged

feat(ops): 大気圧・ブレーキ・勾配を調べる3本のスクリプト#168
RyoheiHashimoto merged 1 commit into
developfrom
feat/ops-investigate

Conversation

@RyoheiHashimoto

Copy link
Copy Markdown
Owner

狙い

いずれも「車が既に持っているはずだが、読めていない量」を対象にする。センサーを買い足す前に、まず車が流しているものを確認する。

1. 大気圧 — 一度も問い合わせていなかった

probe-standard-pids.py(30秒・停車で可)

生ログに現れた Mode01 の応答は 05/0B/0F/10/42 の5つだけ。対応PIDビットマップ (0x00/0x20/0x40/0x60) も取っていない。0x33 (大気圧) は「非対応」ではなく未確認。

対応していれば燃料モデルの実バグが直る:

atmosphericKPa = 101.3                  // ハードコード
ve := intakeMAP / atmosphericKPa        // 体積効率の近似

比叡山 (標高848m) の実大気圧は約 91.6kPa。山では体積効率を1割過大に見積もっている。

外気温 (0x46)、エンジン油温 (0x5C)、絶対負荷 (0x43) も同時に確認する。

2. ブレーキ — 対照群を含む設計にした

capture-brake.py(15分・要走行) → find-brake-bit.py(Mac で解析)

操作ラベル付きで candump を録り、踏む/離すに連動するビットを探す。

要点は「ブレーキを踏まずにアクセルオフだけで減速する」区間を必ず含めること。 これが対照群になる。ブレーキ信号ならその区間で立たず、単に減速と相関するだけのビットはそこでも立つ。

手持ちの生ログで 0x200 を調べて決着しなかったのは、走行データが最高17.2km/hの駐車場走行しか無く、対照が取れなかったため(相関は r=+0.20/-0.30/+0.08 と全部弱い)。

3. 勾配 — 17個から2個に絞れた

find-grade-pid.py(Mac で解析、追加操作不要)

FN4A-EL は road load / grade logic で変速線を動かす。登坂で不要なシフトアップを避け、降坂でエンジンブレーキを残すには、PCM が勾配相当の量を持っていなければ制御できない。

未同定 PID 17個 (#150) から「停車中は固定・走行中に動く・車速と無相関」を満たすものを探す。

手持ちの平地データ (1,269,416サンプル) で実際に走らせた結果:

PID 範囲 車速相関 判定
098E 0〜40 +0.243 ★停車中は常に0、走行中のみ動く
1746 0〜5376 +0.200 ★停車中は固定、走行中に動く

除外されたもの: 16E8 (r=-0.830)、1782 (+0.655)、16CD (+0.651)、17C1 (-0.645) は車速の写し。096E/1101/1103/1104/16E9/3201 は停車中も動くため別の量。

平地データなので「性質が合う」までで同定ではない。 登坂で値が跳ねるかを見る必要がある。スクリプト自身にもその旨を出力させている。

検証

  • 3本とも ast.parse 構文チェック通過
  • find-grade-pid.py は手持ちの実データ62ファイルで実行し、上記の絞り込み結果を得ている(書きっぱなしにしていない)
  • probe-standard-pids.pycapture-brake.py は車両が要るため未実行

使い方

scripts/ops/README.md に順序と所要時間、安全上の注意を書いた。

関連

🤖 Generated with Claude Code

https://claude.ai/code/session_01JeHX6eyTnRPgubr7XLL8ZB

いずれも「車が既に持っているはずだが、読めていない量」を対象にする。

1. probe-standard-pids.py — 標準PIDの対応確認

大気圧 (0x33) を一度も問い合わせていなかった。生ログに現れた Mode01 の
応答は 05/0B/0F/10/42 の5つだけで、対応PIDビットマップ (0x00/0x20/0x40)
も取っていない。0x33 は「非対応」ではなく未確認である。

対応していれば燃料モデルが直る。fuel.go は atmosphericKPa = 101.3 を
ハードコードしており、比叡山 (標高848m、実大気圧91.6kPa) では体積効率を
1割過大に見積もる。外気温・油温・絶対負荷も同時に確認する。

2. capture-brake.py + find-brake-bit.py — ブレーキ信号の探索

操作ラベル付きで candump を録り、踏む/離すに連動するビットを探す。

対照群を必ず含める設計にした。「踏まずにアクセルオフだけで減速する」
区間を録り、そこで立たないビットだけをブレーキ信号とみなす。これが
無いと、単に減速と相関するだけのビットを掴む。手持ちの生ログで 0x200 を
調べた際に決着しなかったのは、走行データが最高17km/hの駐車場走行しか
無く、対照が取れなかったため。

3. find-grade-pid.py — 勾配PIDの絞り込み

FN4A-EL は road load / grade logic で変速線を動かすので、PCM は勾配相当の
量を持っているはずである。未同定 PID 17個 (#150) から「停車中は固定・
走行中に動く・車速と無相関」を満たすものを探す。

手持ちの平地データ (1,269,416サンプル) で実行し、17個から2個に絞れた。

  098E  0〜40      車速相関 +0.243  停車中は常に0
  1746  0〜5376    車速相関 +0.200  停車中は固定

平地データなので「性質が合う」までで同定ではない。登坂で値が跳ねるかを
見る必要がある。スクリプトにもその旨を出力させている。

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JeHX6eyTnRPgubr7XLL8ZB
@RyoheiHashimoto
RyoheiHashimoto merged commit 9b6e4b2 into develop Aug 31, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant