feat(ops): 大気圧・ブレーキ・勾配を調べる3本のスクリプト - #168
Merged
Merged
Conversation
いずれも「車が既に持っているはずだが、読めていない量」を対象にする。 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
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
狙い
いずれも「車が既に持っているはずだが、読めていない量」を対象にする。センサーを買い足す前に、まず車が流しているものを確認する。
1. 大気圧 — 一度も問い合わせていなかった
probe-standard-pids.py(30秒・停車で可)生ログに現れた Mode01 の応答は 05/0B/0F/10/42 の5つだけ。対応PIDビットマップ (0x00/0x20/0x40/0x60) も取っていない。0x33 (大気圧) は「非対応」ではなく未確認。
対応していれば燃料モデルの実バグが直る:
比叡山 (標高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サンプル) で実際に走らせた結果:
除外されたもの: 16E8 (r=-0.830)、1782 (+0.655)、16CD (+0.651)、17C1 (-0.645) は車速の写し。096E/1101/1103/1104/16E9/3201 は停車中も動くため別の量。
平地データなので「性質が合う」までで同定ではない。 登坂で値が跳ねるかを見る必要がある。スクリプト自身にもその旨を出力させている。
検証
ast.parse構文チェック通過find-grade-pid.pyは手持ちの実データ62ファイルで実行し、上記の絞り込み結果を得ている(書きっぱなしにしていない)probe-standard-pids.pyとcapture-brake.pyは車両が要るため未実行使い方
scripts/ops/README.mdに順序と所要時間、安全上の注意を書いた。関連
🤖 Generated with Claude Code
https://claude.ai/code/session_01JeHX6eyTnRPgubr7XLL8ZB