Skip to content
This repository was archived by the owner on Jun 16, 2026. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 7 additions & 1 deletion app/auto_aim_async/src/rbt_threads.rs
Original file line number Diff line number Diff line change
Expand Up @@ -564,8 +564,10 @@ fn run_video_preprocess_loop(
frame_id = frame_id.wrapping_add(1);
let mut rbt_frame = RbtFrame::new();
let preprocess_started = StdInstant::now();
let gray_frame = frame_img.to_luma8();
let transform = preprocess_letterbox_f16(rbt_frame.pre_data(), &frame_img);
summary.preprocess_total += preprocess_started.elapsed();
rbt_frame.set_gray_frame(gray_frame);
rbt_frame.set_letterbox_transform(transform);
rbt_frame.set_id(frame_id);
rbt_frame.set_state(RbtFrameStage::Pre);
Expand Down Expand Up @@ -912,7 +914,7 @@ pub fn post_process(
);
let decoded_armor_count = armors.values().map(Vec::len).sum::<usize>();
let decoded_enemy_count = armors.len();
let solved_enemies = enemys_solver(armors, &cam_k, &rec)?;
let solved_enemies = enemys_solver(armors, &cam_k, frame.gray_frame(), &rec)?;
let solved_armor_count = solved_enemies
.values()
.filter_map(|result| result.as_ref())
Expand Down Expand Up @@ -1694,5 +1696,9 @@ mod tests {
assert_eq!(transform.image_width, frame.width());
assert_eq!(transform.image_height, frame.height());
assert!(transform.scale > 0.0);

let gray = frame.to_luma8();
assert_eq!(gray.width(), frame.width());
assert_eq!(gray.height(), frame.height());
}
}
2 changes: 1 addition & 1 deletion app/single_frame_dev/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ async fn main() -> RbtResult<()> {
// 获取相机内参
let cam_k = auto_aim_handle.cfg.cam_cfg.cam_k();
// 解算检测到的所有装甲板,得到所有地方单位的解算结果
let enemys = enemys_solver(detector_result, &cam_k, &auto_aim_handle.rec)?;
let enemys = enemys_solver(detector_result, &cam_k, None, &auto_aim_handle.rec)?;

// 3. 执行 estimator
estimator_poll.update(&auto_aim_handle.cfg.estimator_cfg, enemys);
Expand Down
2 changes: 1 addition & 1 deletion docs/vivsionn-gap-checklist.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ This checklist tracks the functional gaps found while comparing this Rust worksp
| [x] P0 能量机关 tracker/aimer | 相位 EKF、大小符曲线模型、相位化预瞄、pitch lead | 大符曲线 EKF(基于共享不定长 EKF)+ 两轮飞行时间迭代 + yaw preview horizon + pitch lead + 配置化偏置 | 大符走 `BigBuffCurveEskf` 曲线预测(`speed=a·sin(phase)+base-a`),小符保留常速;aimer 两轮弹道迭代、yaw MPC horizon 由 tracker 预瞄生成 |
| [ ] P1 主线热更新调参 | `param.yaml` 每秒 reload,曝光/发控/MPC 可调 | 只有实验入口,主线没接 watcher | 上车调参效率会差。本轮不做热更新,配置仅启动加载 |
| [x] P1 配置面补齐 | 大量曝光、门控、MPC、buff 参数 | `rbt_cfg.toml` 主要是 detector/cam/estimator | 新增顶层 `energy_mechanism_cfg`(tracker/aimer/mpc),补齐大符曲线 EKF 全部 knob,serde 默认值保证旧配置兼容 |
| [ ] P1 PnP 稳态保护 | 角点细化、位姿 sanity gate | 直接网络角点 + IPPE | 建议补,降低跳点。本轮延期 |
| [x] P1 PnP 稳态保护 | 角点细化、位姿 sanity gate | 主线解码后随 `RbtFrame` 流一份原尺寸灰度帧到 solver;Rust IPPE 输入前做灰度灯条端点细化 + 几何规整,输出后做深度/有限值/重投影 RMSE sanity gate | 已补齐 Rust IPPE 路径的稳态保护和灰度帧上下文;未引入 OpenCV/C++ PnP 旁路 |
| [ ] P1 离线录制/回放 | 可录 `.avi + .csv`,强制 task mode 回放 | 缺主链路复盘工具 | 调现场问题很关键 |
| [ ] P1 通信/MPC smoke 工具 | `testSerial`、`can_mpc_yaw_test` 工具链完整 | `comm_test` 基本空 | 接 CAN 后应尽快补 |
| [ ] P2 显示/HUD/录制旁路 | MJPEG/Rerun/HUD/CSV/plot 脚本多 | 有 Rerun 和日志,但观测面较薄 | 影响调试效率 |
Expand Down
Loading
Loading