Add pose_test tool and harden solvePose; expose camera controls

- pose_test: verify the geometry chain (4 corners -> distance/yaw/pitch)
  before any detector exists; modes: camera + mouse clicks, --image,
  --corners (headless), --selftest (synthetic round-trip, no camera needed)
- solvePose: undistort corners first, then solvePnPGeneric(IPPE) and pick
  the best candidate; reject solutions behind the camera (z<=0) or with
  reprojection error > 8px
  - fixes IPPE + distortion + in-plane rotation returning garbage
  - 4 coplanar points: cyclic/mirrored orderings give the same quad and
    the same pose (harmless); crossing orderings blow up reprojection
    and are rejected
- camera_set: implement setAeState/setExposureTime/setAnalogGain(+-Times)/
  setWbMode/setFrameSpeed; configs/camera_runtime.yaml drives them
- selftest passes all 6 synthetic cases; verified on 6 real photos
  (chessboard outer rect 180x120mm): distance 0.44-0.69m, reproj <2.5px
This commit is contained in:
2026-09-16 21:08:03 +08:00
parent c50be9a48d
commit 19ac43da6f
8 changed files with 724 additions and 30 deletions
+19
View File
@@ -0,0 +1,19 @@
%YAML:1.0
---
# ============================================================
# 相机运行时参数(27RM)
# 与 configs/camera.yaml(标定)分开存放:
# camera.yaml 由 ./calibrate 生成,会被整体重写
# camera_runtime.yaml 手工维护,calibrate 不会碰它
#
# ⚠️ 比赛/联调必须【手动曝光】:
# 自动曝光/自动白平衡会让画面亮度随环境漂移,
# 传统 CV 检测的 HSV 阈值会直接失效。
# ============================================================
ae_state: 0 # 曝光模式:0=手动(推荐) 1=自动
exposure_time_us: 3000.0 # 曝光时间(微秒)。MV-SUA131GC 常用 1000~15000,
# 数值越大画面越亮但运动拖影越重
analog_gain: 2.0 # 模拟增益(倍率)。1.0 = 不放大;SDK 内部按
# fAnalogGainStep 换算(例:0.125 步进 → 2.0x = 原始值16)
auto_wb: 0 # 白平衡:0=手动(推荐,颜色阈值才稳定) 1=自动
frame_speed: 2 # 帧率档位:0=低速 1=正常 2=高速