Skip to content
This repository was archived by the owner on Jun 16, 2026. It is now read-only.

feat: 能量机关 tracker/aimer + 共享不定长 EKF 抽取#40

Merged
XiaoPengYouCode merged 4 commits into
mainfrom
codex/zhongjin/energy-tracker-aimer-ekf
Jun 15, 2026
Merged

feat: 能量机关 tracker/aimer + 共享不定长 EKF 抽取#40
XiaoPengYouCode merged 4 commits into
mainfrom
codex/zhongjin/energy-tracker-aimer-ekf

Conversation

@XiaoPengYouCode

Copy link
Copy Markdown
Owner

概述

本轮补齐 P0 能量机关 tracker/aimer 与 P1 配置面,并按讨论结论在 rbt_base 新增共享不定长 EKF,让 armor 与能量机关大符都复用同一份滤波核。ESKF trait(死代码)保留不动。

  • [x] P0 能量机关 tracker/aimer
  • [x] P1 配置面补齐
  • P1 主线热更新调参 保持未完成(本轮不做热更新,仅启动加载)
  • P1 PnP 稳态保护 保持未完成(延期)

关键改动

共享不定长 EKF(rbt_base)

  • 新增 lib/src/rbt_base/rbt_algorithm/rbt_ekf.rsExtendedKalmanFilter(DMatrix),predict / predict_nonlinear / update(Joseph 形式协方差 + 返回 NIS)/ nis(仅门控)。

armor 迁移到共享 EKF

  • YpdAngleTracker 改为持有 ekf: ExtendedKalmanFilter,predict/correct 走共享核。11 状态常速模型 + outpost 高度相位锁定 + 几何恢复全部保留。既有 6 个测试不改动通过——回归门槛确认数值行为一致。

大符曲线 EKF

  • 新增 big_buff_curve_ekf.rsBigBuffCurveEskf,状态 [phase, a, w],移植 vivsionn big_runev2 曲线模型(speed = a·sin(phase) + (base-a)、曲线积分 angle_delta),含 φ 一次性 seed、速度测量更新(门控/自适应噪声/slew/φ 修正限幅)、滚动窗口最小二乘估速。

能量机关 tracker 重写

  • 小符保留常速 roll 平滑 + 方向投票;大符驱动曲线 EKF。
  • 快照暴露 CurveSnapshot + predict_target_horizon() 给 aimer。
  • from_tracker_cfg(mode, &cfg) 构造,new() 保留。

能量机关 aimer 重写

  • 配置驱动(predict_time_s/fire_gap_s/yaw_offset_deg/pitch_offset_deg/pitch_velocity_lead_time_s)。
  • 两轮弹道飞行时间迭代。
  • yaw MPC horizon 由 tracker 预瞄生成(替代固定 [yaw;8])。
  • pitch lead 补偿。
  • from_aimer_cfg(&aimer, &mpc) 构造。

配置面补齐

  • 新增顶层 energy_mechanism_cfgtracker/aimer/mpc),补齐大符曲线 EKF 全部 knob。
  • serde 全部带默认值 → 旧 toml 无新表也能加载(仓库无 deny_unknown_fields)。
  • 检测参数继续留在 detector_cfg.energy_mechanism

主线接线

  • rbt_threads.rs 两个任务(estimate_process + control_loop_250hz)改用 from_*_cfg 构造。

公共接口约定

  • 不用多参 new(...)EnergyMechanismTracker::from_tracker_cfgEnergyMechanismController::from_aimer_cfgBigBuffCurveEskf::from_tracker_cfg
  • new() 仅保留无参默认。
  • ESKF trait 不动、不删。

验证

本地逐项跑过 .github/workflows/ci.yml 的三套命令:

  • cargo fmt --all -- --check
  • cargo clippy --locked --workspace --all-targets -- -D warnings
  • cargo test --locked --workspace --all-targets(130 passed, 0 failed)

回归保护:armor 既有 6 个测试全过 + 能量机关既有测试全过。

不在本轮范围

  • 热更新 watcher(仅启动加载)
  • PnP 稳态保护
  • 环境变量主线开关

- rbt_base 新增动态大小 EKF (rbt_ekf.rs),predict/update/Joseph 形式/NIS 门控
- armor YpdAngleTracker 迁移到共享 EKF,11 状态常速模型 + outpost 行为保持
- 新增大符曲线 EKF (big_buff_curve_ekf.rs),移植 vivsionn big_runev2 曲线模型
- 能量机关 tracker 重写:小符常速 + 大符曲线 EKF,快照暴露 predict_target_horizon
- 能量机关 aimer 重写:两轮弹道飞行时间迭代 + yaw MPC horizon + pitch lead + 配置化偏置
- 新增顶层 energy_mechanism_cfg (tracker/aimer/mpc),serde 默认值兼容旧配置
- 主线接线 from_*_cfg 构造,ESKF trait 保留不动
…EKF / 配置保留 / unwrap)

- fire_control: next_shot_mode 纳入 mcu_fire_permit,MCU 禁火时不下发 ShotOnce
- fire_control: yaw MPC command_deg 生效替代 raw yaw_deg(MPC 失败回退 raw)
- fire_control: pitch lead 单位修正,estimate_pitch_rate 返回 rad/s 转 deg 后再叠加
- fire_control: solve_trajectory 返回 fly_time,horizon 用真实飞行时间
- big_buff_curve_ekf: 恢复 F[PHASE,W]=dt 让 w 可学(vivsionn F(9,8)=dt)
- big_buff_curve_ekf: 速度窗口回归前 unwrap roll,跨 ±π 不再误判为大跳变
- tracker: 保存 tracker_cfg,Small→Large 切换用真实配置重建曲线 EKF
- 补测试:mcu_fire_permit、pitch lead 单位、w 可学、Small→Large 配置保留、unwrap
之前 big_lost_timeout_s / big_model_reset_timeout_s / big_curve_ekf_fit_enabled /
big_measurement_noise_scale / big_speed_measurement_enabled 只在 config 定义、无业务读取。

- tracker: snapshot() 大符用 big_lost_timeout_s 判 lost;update() 丢失超过
  big_model_reset_timeout_s 时清掉曲线 EKF(model reset timeout clamp >= lost timeout)
- big_buff_curve_ekf: curve_ekf_fit_enabled 关闭时 predict 不推进 phase(退化为常速);
  speed_measurement_enabled 关闭时 update_with_speed 直接 Skipped;
  measurement_noise_scale 缩放速度测量噪声 R
- 补测试:timeout 字段读取、clamp、3 个开关各自生效
@XiaoPengYouCode XiaoPengYouCode merged commit aeffa46 into main Jun 15, 2026
1 check passed
@XiaoPengYouCode XiaoPengYouCode deleted the codex/zhongjin/energy-tracker-aimer-ekf branch June 15, 2026 02:40
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant