結論
- PPC Nagoya run3 late-window の all-epoch
p95_h を押し上げている主因は false-fix だけではなく、float drift / long-tail でもある。
- まずは
tow 554746.x と tow 554605-609.x を代表区間として、float arbitration と fallback 条件を切り分ける。
確認済み事実
- 再現条件は
/media/sasaki/aiueo/ai_coding_ws/rtklib_v2_rtk_ws/gnssplusplus-library/output/ppc_nagoya_run3_lowcost_late2k_holdcfgfix.pos。
tow 554746.8 では libgnss++ FLOAT が horiz=18.878 m, up=-7.265 m、同 epoch の RTKLIB FLOAT は horiz=7.486 m, up=17.638 m、SPP は horiz=14.287 m, up=16.342 m。
tow 554746.x の drift は default / low-cost / no-hold でほぼ同一で、hold 固着では説明できない。
apps/gnss_solve.cpp の app-level FLOAT/SPP arbitration は float_vs_spp > 30 m と last output からの jump guard に依存しており、tow 554746.x では発火していない。
- 現行の nonfixed drift guard は
last_fixed_output から <=5 s のみを見るため、長い tail を拾い切れていない。
- ratio threshold を上げるだけでは all-epoch
p95_h はほぼ改善しない。主因が float 側に残っているため。
未確認/要確認項目
- processor 側で SPP fallback すべきか、app 側で output arbitration すべきか
last output, last fixed, SPP seed のどれを基準にすると Tokyo side effect が最小か
- long-tail を
NONE に落とす方がよいか、SPP に戻す方がよいか
次アクション
/media/sasaki/aiueo/ai_coding_ws/rtklib_v2_rtk_ws/gnssplusplus-library/apps/gnss_solve.cpp の FLOAT/SPP arbitration と nonfixed drift guard を切り分ける。
- Nagoya/Tokyo late-window で offline replay し、candidate rule の matched/p95 tradeoff を比較する。
- 改善候補が見えたら Odaiba でも coverage regression を確認する。
再現コマンド
python3 apps/gnss.py ppc-demo \
--dataset-root /media/sasaki/aiueo/ai_coding_ws/datasets/PPC-Dataset-data \
--city nagoya --run run3 --solver rtk \
--skip-epochs 3201 --max-epochs 2000 \
--preset low-cost \
--summary-json output/ppc_nagoya_run3_lowcost_late2k_holdcfgfix_summary.json \
--out output/ppc_nagoya_run3_lowcost_late2k_holdcfgfix.pos \
--rtklib-pos output/ppc_nagoya_run3_late2k_rtklib.pos \
--use-existing-rtklib-solution
結論
p95_hを押し上げている主因は false-fix だけではなく、float drift / long-tail でもある。tow 554746.xとtow 554605-609.xを代表区間として、float arbitration と fallback 条件を切り分ける。確認済み事実
/media/sasaki/aiueo/ai_coding_ws/rtklib_v2_rtk_ws/gnssplusplus-library/output/ppc_nagoya_run3_lowcost_late2k_holdcfgfix.pos。tow 554746.8では libgnss++ FLOAT がhoriz=18.878 m,up=-7.265 m、同 epoch の RTKLIB FLOAT はhoriz=7.486 m,up=17.638 m、SPP はhoriz=14.287 m,up=16.342 m。tow 554746.xの drift は default / low-cost / no-hold でほぼ同一で、hold 固着では説明できない。apps/gnss_solve.cppの app-level FLOAT/SPP arbitration はfloat_vs_spp > 30 mとlast outputからの jump guard に依存しており、tow 554746.xでは発火していない。last_fixed_outputから<=5 sのみを見るため、長い tail を拾い切れていない。p95_hはほぼ改善しない。主因が float 側に残っているため。未確認/要確認項目
last output,last fixed,SPP seedのどれを基準にすると Tokyo side effect が最小かNONEに落とす方がよいか、SPP に戻す方がよいか次アクション
/media/sasaki/aiueo/ai_coding_ws/rtklib_v2_rtk_ws/gnssplusplus-library/apps/gnss_solve.cppの FLOAT/SPP arbitration と nonfixed drift guard を切り分ける。再現コマンド