Add camera calibration toolchain and armor pose solver

- capture_calib: capture calibration images (MindVision / USB) with a live
  quality gate (Laplacian sharpness, 3x3 coverage, board auto-detect)
- calibrate: batch intrinsics from calib_images/, writes configs/camera.yaml
- camera_calib: CameraCalib loader (intrinsics + distortion, cached
  undistort remap) and solvePose() via IPPE with a reprojection gate
- configs/camera.yaml: MV-SUA131GC intrinsics, RMS 0.483 px over 31 images,
  ruler-verified distance error < 2%
- xmake: three targets sharing an rm_deps rule, C++17
- gitignore: keep calibration photos/videos and generated
  compile_commands.json out of the repo
This commit is contained in:
2026-09-15 23:33:01 +08:00
parent 14d7f9e571
commit ca6891eef2
12 changed files with 1183 additions and 110 deletions
+37
View File
@@ -0,0 +1,37 @@
%YAML:1.0
---
# ============================================================
# 相机标定与内参配置(27RM)
# 本文件由 ./build/.../calibrate 生成,也可手工维护
# ⚠️ M12 镜头的【对焦环位置】会改变有效焦距:
# 一旦调焦,必须重新标定并重新做卷尺距离验证!
# ============================================================
camera_name: "MV-SUA131GC"
lens: "MV-LD-M12-2.8MM-C"
sensor: "1/3\" CMOS, 3.75um pixel"
resolution: "1280x1024"
calib_date: "2026-09-15"
board_spec: "10x7 inner corners, square=20.0mm"
calib_images: "31 (old_run 12 + new 19)"
distance_verify: "ruler 700mm -> computed 687~697mm, error <2%"
notes: "refocus invalidates this calibration; must re-verify with ruler"
camera_matrix: !!opencv-matrix
rows: 3
cols: 3
dt: d
data: [ 657.47392591548282, 0., 625.64119358041364, 0.,
658.25468859263844, 509.00483710801581, 0., 0., 1. ]
dist_coeffs: !!opencv-matrix
rows: 1
cols: 5
dt: d
data: [ -0.0012152502343767638, -0.058463444062878803,
-0.0022603001279860352, 0.0018169600148664874,
0.040233970225725772 ]
image_width: 1280
image_height: 1024
square_mm: 20.
board_cols: 10
board_rows: 7
rms: 0.48277734002307909