Skip to content

feat: 勾配・ブレーキ・エアコン・ファンをアプリで読む - #176

Merged
RyoheiHashimoto merged 1 commit into
developfrom
feat/decode-grade-brake-ac
Sep 1, 2026
Merged

feat: 勾配・ブレーキ・エアコン・ファンをアプリで読む#176
RyoheiHashimoto merged 1 commit into
developfrom
feat/decode-grade-brake-ac

Conversation

@RyoheiHashimoto

Copy link
Copy Markdown
Owner

同定した信号を、解析だけでなくアプリ本体で読むようにする。

PID 意味
0x1101 bit1 ブレーキペダル
0x1101 bit0 ラジエータファン
0x1103 bit2 エアコンコンプレッサー
0x3201 勾配(符号付き。負が登り。単位未確定)

API に brake_pedal / radiator_fan / ac_compressor / grade_raw を追加し、drive-verify.py も記録する(23列 → 27列)。

CAN の負荷

Mode 22 の送信は 1 tick に 1 PID ずつ巡回。intervalMs=50 なら各 PID は 200ms 周期。ATF(2秒周期)と合わせても Mode 22 は 25Hz 未満で、0x201 が 100Hz で流れているバスに対して十分小さい。

ブレーキは踏んだ瞬間を捉えたいので、この速さが要る。

勾配は生値のまま持つ

単位が未確定なので変換しない。正負と大小には意味があるので、記録して後から較正できるようにする。GPS の標高が取れれば換算式を決められる(#164)。

観測済み: 大橋JCT(8.9%)で -690、比叡山の急勾配区間で -2210、登り切った瞬間に +1320。

未同定PIDを探すスクリプトを追加

  • probe-toggle.py — 停車・アイドルのままヘッドライト等を 20秒ON/OFF(5項目5分)
  • find-toggle-pid.py — ラベルと poll22 ログを突き合わせて連動PIDを探す

7個同定できた経験から、成功したのはすべて「他が動かない状態でひとつだけ断続させた」場合だった。 逆に走行データの相関だけを見た絞り込みは外している(平地から絞った勾配候補2個は実際の8.9%登坂で動かず、正解は候補外だった)。その教訓を README に書いた。

テスト

DecodeStatus1101 / DecodeACCompressor / DecodeGrade を追加。勾配は実測値を固定する(大橋 -690、比叡山 -2210、反転 +1320)。

ロガーはモック API に対して実際に走らせて検証済み。

ヘッダ 27列: map,load,brake,fan,ac,grade
データ 27列
  slip  = 1.0425   ← #173 の修正が効いている(以前は常に 1.0000)
  brake = True   fan = False   ac = True   grade = -690
★列数一致

全パッケージ通過。go vet クリーン。

🤖 Generated with Claude Code

https://claude.ai/code/session_01JeHX6eyTnRPgubr7XLL8ZB

2026-08-31〜09-01 に同定した信号を、解析だけでなくアプリ本体でも読む。

  0x1101 bit1  ブレーキペダル
  0x1101 bit0  ラジエータファン
  0x1103 bit2  エアコンコンプレッサー
  0x3201       勾配 (符号付き。負が登り。単位未確定)

API に brake_pedal / radiator_fan / ac_compressor / grade_raw を追加し、
drive-verify.py も記録する (23列 → 27列)。

Mode 22 の送信は 1 tick に 1 PID ずつ巡回させる。intervalMs=50 なら各 PID
は 200ms 周期。ATF (2秒周期) と合わせても Mode 22 は 25Hz 未満で、0x201 が
100Hz で流れているバスに対して十分小さい。

勾配は単位が未確定なので生値のまま持つ。正負と大小には意味があるので、
記録して後から較正できるようにしておく。GPS の標高が取れれば換算式を
決められる (#164)。

## 未同定PIDを探すスクリプトを追加

probe-toggle.py … 停車・アイドルのままヘッドライト等を 20秒ON/OFF する
find-toggle-pid.py … ラベルと poll22 ログを突き合わせて連動PIDを探す

7個同定できた経験から、成功したのはすべて「他が動かない状態でひとつだけ
断続させた」場合だった。逆に走行データの相関だけを見た絞り込みは外した
(平地から絞った勾配候補2個は実際の登坂で動かず、正解は候補外だった)。
その教訓を README に書いた。

## テスト

DecodeStatus1101 / DecodeACCompressor / DecodeGrade を追加。勾配は大橋JCT
の -690 と比叡山の -2210、登り切った瞬間の +1320 を実測値として固定する。

ロガーはモック API に対して実際に走らせ、27列が揃うことと slip_ratio が
1.0000 でなくなったことを確認済み。

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JeHX6eyTnRPgubr7XLL8ZB
@RyoheiHashimoto
RyoheiHashimoto merged commit a7fe040 into develop Sep 1, 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