Rule-Guided Observation Credibility-Adaptive Multi-Source Robust Fusion Positioning for GNSS-Degraded Construction Sites
Target: Automation in Construction (Elsevier, EI-indexed)
Paper repository for a multi-source robust fusion positioning framework designed for construction sites under weak GNSS conditions.
This project addresses reliable personnel tracking in complex construction environments where GNSS signals are degraded by building obstructions, steel-structure reflections, and multipath effects. A 5-D EKF framework fuses GNSS, IMU, PDR/ZUPT, and CAD-map constraints with a Rule-guided GRU-Rscale module for adaptive observation credibility estimation.
├── 论文/ # Paper directory
│ ├── main_rule_guided_gru.tex # English paper (elsarticle template)
│ ├── main_rule_guided_gru_cn.tex # Chinese paper (elsarticle + ctex template)
│ ├── scripts/
│ │ ├── generate_paper_figures.py # Figure generation (TikZ + PNG plots)
│ │ └── run_robustness_stress_tests.py
│ ├── 脚本/
│ │ ├── run_paper_ablation.py
│ │ └── run_no_rfid_ablation.py
│ ├── 图/ # Figures (PNG outputs)
│ └── 论文内容总结_简历用.md # Paper summary for CV use
│
├── 算法代码/ # Algorithm implementation
│ ├── robust_gnss_imu_pdr_map_fusion.py # Main EKF fusion script
│ │ # (ai-mode: rule/gru/rule_gru/lstm/mlp/tcn)
│ │ # (ekf-mode: standard/huber/mcc)
│ ├── run27_robust_fusion.py # EKF with RTS smoother
│ ├── run_gru_ablation.py # Ablation runner: 7 modes x 7 runs
│ ├── imu_gnss_3d_ekf_map_constrained.py # 15-D error-state EKF
│ ├── imu_gnss_3d_ekf_optimized.py # GNSS-dominant 6-D KF
│ ├── imu_pdr_trajectory.py # Standalone PDR trajectory
│ ├── NN/
│ │ ├── GRU/
│ │ │ ├── gru_rscale.py # GRU/LSTM/MLP Rscale models
│ │ │ ├── train_local_gru.py # GRU training (RTS labels)
│ │ │ └── train_baselines.py # LSTM/MLP training
│ │ └── TCN_EMSA/
│ │ ├── tcn_emsa_rscale.py # TCN-EMSA Rscale model
│ │ └── train_local_rscale.py # TCN-EMSA training
│ └── outputs/ # Experiment outputs
│ ├── gru_ablation/ # Ablation results (per-run)
│ ├── gru_ablation_comparison.csv
│ ├── gru_rscale_best.pth # GRU model weights
│ ├── rule_gru_rscale_best.pth # Rule-guided GRU weights
│ ├── lstm_rscale_best.pth # LSTM model weights
│ └── mlp_rscale_best.pth # MLP model weights
│
└── data/ # Raw data
├── imu_db/ # IMU CSV files
├── gnss_db/ # GNSS CSV files
└── image/ # CAD/DWG/DXF files
- 5-D heading-coupled EKF framework: Joint estimation of heading angle with covariance-gated safety lock for PDR
- GNSS accept--downweight--reject mechanism: Mahalanobis gating + local outlier detection
- CAD inequality constraints: Passable-region guardrails with auto-degradation based on registration error
- Rule-guided GRU-Rscale: Bounded residual correction with mathematical safety wall (tanh activation)
- RTS knowledge distillation: Smoother → Filter label generation via EM-consistent formula
- Comprehensive baselines: Huber-EKF, MCC-EKF, RTS-distilled GRU/LSTM/MLP, TCN-EMSA
| Strategy | Type | Training |
|---|---|---|
| Rule-based Rscale | Hand-crafted heuristic | None |
| Huber-EKF | Classical robust M-estimator | None |
| MCC-EKF | Maximum Correntropy Criterion | None |
| GRU-Rscale | Temporal deep learning | RTS-distilled labels |
| LSTM-Rscale | Temporal deep learning | RTS-distilled labels |
| MLP-Rscale | Static deep learning | RTS-distilled labels |
| Rule-guided GRU-Rscale | Bounded residual learning | RTS-distilled labels |
| TCN-EMSA-Rscale | Complex temporal + attention | Weak heuristic labels |
cd 算法代码
# Rule-based Rscale with map constraint
python robust_gnss_imu_pdr_map_fusion.py --run-id 30 \
--use-map-constraint --ai-mode rule
# MCC-EKF robust filter
python robust_gnss_imu_pdr_map_fusion.py --run-id 30 \
--use-map-constraint --ekf-mode mcc --mcc-kernel-sigma 5.0
# Pure GRU with trained model
python robust_gnss_imu_pdr_map_fusion.py --run-id 30 \
--use-map-constraint --ai-mode gru \
--ai-model outputs/gru_rscale_best.pth --ai-device cpucd 算法代码
python run_gru_ablation.pycd 算法代码
# Train GRU + Rule-guided GRU
python NN/GRU/train_local_gru.py \
--features-root outputs/rts_run24 outputs/rts_run25 \
--epochs 100 --patience 15 --batch-size 32
# Train LSTM + MLP baselines
python NN/GRU/train_baselines.py \
--features-root outputs/rts_run24 outputs/rts_run25 \
--epochs 100 --patience 15 --batch-size 32python 论文/scripts/generate_paper_figures.pycd 论文
xelatex main_rule_guided_gru.tex
xelatex main_rule_guided_gru.tex # second pass for cross-referencesMean across 7 runs (run24-28, run30-31), PDR+Map enabled
| Rscale Strategy | Mean OBD/m | P95 OBD/m | In-Corr. Rate |
|---|---|---|---|
| Rule-based | 2.32 | 5.79 | 0.514 |
| Huber-EKF | 2.35 | 5.89 | 0.510 |
| MCC-EKF | 2.36 | 5.92 | 0.505 |
| GRU-Rscale (RTS) | 2.97 | 7.32 | 0.348 |
| LSTM-Rscale (RTS) | 2.97 | 7.32 | 0.348 |
| Rule-guided GRU (RTS) | 2.97 | 7.32 | 0.348 |
Key finding: At the current data scale (~1000 labeled epochs), hand-crafted rules and classical robust filters outperform all deep learning variants. The knowledge-distillation paradigm is architecturally correct; data scale is the primary bottleneck.
EKF State Vector (5-D): [E, N, vE, vN, ψ] — position, velocity, heading angle
RTS Smoother: Rauch-Tung-Striebel backward pass computes globally optimal posterior trajectories; EM-consistent formula derives per-epoch optimal noise scaling labels s_k^opt.
Rule-guided GRU Formula:
s_k = clip(s_k^rule · exp(α · tanh(Δs_k^GRU)), 1, 200)
where α = ln 2 bounds the multiplicative correction to [0.5, 2.0].
- Python 3.10+ with NumPy, Pandas, Matplotlib, PyTorch
- LaTeX (TeX Live 2025+) with
elsarticle,ctex,tikz,algorithm2e,booktabs - XeLaTeX for Chinese character support
@article{paper-gnss,
title = {Rule-Guided Observation Credibility-Adaptive Multi-Source Robust
Fusion Positioning for GNSS-Degraded Construction Sites},
journal = {Automation in Construction (under review)},
year = {2026}
}MIT