Add LiDAR RTK hand-eye calibration workflow and results
This commit is contained in:
@@ -0,0 +1,32 @@
|
||||
param(
|
||||
[string]$Batch1Prepared = "C:\Users\admin\Documents\Codex\2026-07-15\wo\outputs\calibration_20260717\prepared",
|
||||
[string]$Batch2Prepared = "C:\Users\admin\Documents\Codex\2026-07-15\wo\outputs\calibration_data1_20260720\prepared"
|
||||
)
|
||||
$ErrorActionPreference = "Stop"
|
||||
$Repo = Split-Path -Parent $PSScriptRoot
|
||||
$Code = Join-Path $Repo "code\rigorous_calibration.py"
|
||||
$Refine = Join-Path $Repo "code\refine_pairs.py"
|
||||
$Summary = Join-Path $Repo "code\summarize_results.py"
|
||||
$R = Join-Path $Repo "results"
|
||||
$B1Frames = Join-Path $Batch1Prepared "frames_all"
|
||||
$B2Frames = Join-Path $Batch2Prepared "frames_all"
|
||||
$B1Body = Join-Path $Batch1Prepared "body_poses_rear_gga_raw_rear_to_front.csv"
|
||||
$B2Body = Join-Path $Batch2Prepared "body_poses_rear_gga_raw_rear_to_front.csv"
|
||||
|
||||
python $Code ground --frames $B2Frames --output "$R\common\ground_planes_batch2.csv"
|
||||
|
||||
python $Code pairs --backend small_gicp --frames $B2Frames --body $B2Body --output "$R\small_gicp\B_batch2_estimation.npz" --quality-json "$R\small_gicp\B_batch2_quality.json" --quality-csv "$R\small_gicp\B_batch2_quality.csv"
|
||||
python $Code pairs --backend open3d --frames $B2Frames --body $B2Body --output "$R\open3d_gicp\B_batch2_estimation.npz" --quality-json "$R\open3d_gicp\B_batch2_quality.json" --quality-csv "$R\open3d_gicp\B_batch2_quality.csv" --max-gap 3 --multistart 1 --iterations 40
|
||||
python $Refine --pairs "$R\small_gicp\B_batch2_estimation.npz" --quality-json "$R\small_gicp\B_batch2_quality.json" --output "$R\small_gicp\B_batch2_refined.npz"
|
||||
python $Refine --pairs "$R\open3d_gicp\B_batch2_estimation.npz" --quality-json "$R\open3d_gicp\B_batch2_quality.json" --output "$R\open3d_gicp\B_batch2_refined.npz"
|
||||
python $Code calibrate --pairs "$R\small_gicp\B_batch2_refined.npz" --ground-planes "$R\common\ground_planes_batch2.csv" --output "$R\small_gicp\extrinsic_batch2_refined.json"
|
||||
python $Code calibrate --pairs "$R\open3d_gicp\B_batch2_refined.npz" --ground-planes "$R\common\ground_planes_batch2.csv" --output "$R\open3d_gicp\extrinsic_batch2_refined.json"
|
||||
|
||||
python $Code pairs --backend small_gicp --frames $B1Frames --body $B1Body --output "$R\small_gicp\B_batch1_auxiliary.npz" --quality-json "$R\small_gicp\B_batch1_quality.json" --quality-csv "$R\small_gicp\B_batch1_quality.csv" --max-gap 3 --multistart 1 --iterations 40
|
||||
python $Code pairs --backend open3d --frames $B1Frames --body $B1Body --output "$R\open3d_gicp\B_batch1_auxiliary.npz" --quality-json "$R\open3d_gicp\B_batch1_quality.json" --quality-csv "$R\open3d_gicp\B_batch1_quality.csv" --max-gap 3 --multistart 1 --iterations 40
|
||||
python $Refine --pairs "$R\small_gicp\B_batch1_auxiliary.npz" --quality-json "$R\small_gicp\B_batch1_quality.json" --output "$R\small_gicp\B_batch1_auxiliary_refined.npz"
|
||||
python $Refine --pairs "$R\open3d_gicp\B_batch1_auxiliary.npz" --quality-json "$R\open3d_gicp\B_batch1_quality.json" --output "$R\open3d_gicp\B_batch1_auxiliary_refined.npz"
|
||||
python $Code validate --pairs "$R\small_gicp\B_batch1_auxiliary_refined.npz" --extrinsic "$R\small_gicp\extrinsic_batch2_refined.json" --output "$R\small_gicp\batch1_auxiliary_check.json"
|
||||
python $Code validate --pairs "$R\open3d_gicp\B_batch1_auxiliary_refined.npz" --extrinsic "$R\open3d_gicp\extrinsic_batch2_refined.json" --output "$R\open3d_gicp\batch1_auxiliary_check.json"
|
||||
|
||||
python $Summary --open3d "$R\open3d_gicp\extrinsic_batch2_refined.json" --small "$R\small_gicp\extrinsic_batch2_refined.json" --open3d-quality "$R\open3d_gicp\B_batch2_quality.json" --small-quality "$R\small_gicp\B_batch2_quality.json" --open3d-check "$R\open3d_gicp\batch1_auxiliary_check.json" --small-check "$R\small_gicp\batch1_auxiliary_check.json" --output "$R\comparison_summary.json" --recommended-output "$R\final_extrinsic_recommended.json"
|
||||
@@ -0,0 +1,12 @@
|
||||
$ErrorActionPreference = "Stop"
|
||||
$Repo = Split-Path -Parent $PSScriptRoot
|
||||
$Code = Join-Path $Repo "code\rigorous_calibration.py"
|
||||
$Filter = Join-Path $Repo "code\cross_backend_filter.py"
|
||||
$Finalize = Join-Path $Repo "code\finalize_consensus.py"
|
||||
$R = Join-Path $Repo "results"
|
||||
|
||||
python $Filter --open3d-pairs "$R\open3d_gicp\B_batch2_refined.npz" --small-pairs "$R\small_gicp\B_batch2_refined.npz" --output "$R\consensus\B_batch2_consensus.npz"
|
||||
python $Filter --open3d-pairs "$R\open3d_gicp\B_batch1_auxiliary_refined.npz" --small-pairs "$R\small_gicp\B_batch1_auxiliary_refined.npz" --output "$R\consensus\B_batch1_consensus.npz" --min-pairs 15
|
||||
python $Code calibrate --pairs "$R\consensus\B_batch2_consensus.npz" --ground-planes "$R\common\ground_planes_batch2.csv" --output "$R\consensus\extrinsic_batch2_consensus.json"
|
||||
python $Code validate --pairs "$R\consensus\B_batch1_consensus.npz" --extrinsic "$R\consensus\extrinsic_batch2_consensus.json" --output "$R\consensus\batch1_auxiliary_check.json"
|
||||
python $Finalize --consensus-extrinsic "$R\consensus\extrinsic_batch2_consensus.json" --consensus-check "$R\consensus\batch1_auxiliary_check.json" --open3d-extrinsic "$R\open3d_gicp\extrinsic_batch2_refined.json" --small-extrinsic "$R\small_gicp\extrinsic_batch2_refined.json" --output "$R\final_extrinsic_recommended.json" --summary "$R\final_summary.json"
|
||||
@@ -0,0 +1,15 @@
|
||||
param([int]$PairIndex = 0)
|
||||
$Repo = Split-Path -Parent $PSScriptRoot
|
||||
$Code = "$Repo\code\scan_extrinsic_sensitivity.py"
|
||||
$X = "$Repo\results\final_extrinsic_recommended.json"
|
||||
$Ground = "$Repo\results\common\ground_planes_batch2.csv"
|
||||
$Out = "$Repo\results\diagnostics"
|
||||
|
||||
python $Code --pairs "$Repo\results\open3d_gicp\B_batch2_refined.npz" --extrinsic $X --ground-planes $Ground --pair-index $PairIndex --output "$Out\open3d_refined_pair${PairIndex}_left_rpy_scan.json"
|
||||
if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE }
|
||||
|
||||
python $Code --pairs "$Repo\results\small_gicp\B_batch2_refined.npz" --extrinsic $X --ground-planes $Ground --pair-index $PairIndex --output "$Out\small_gicp_refined_pair${PairIndex}_left_rpy_scan.json"
|
||||
if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE }
|
||||
|
||||
python $Code --pairs "$Repo\results\consensus\B_batch2_consensus.npz" --extrinsic $X --ground-planes $Ground --pair-index $PairIndex --output "$Out\consensus_pair${PairIndex}_left_rpy_scan.json"
|
||||
exit $LASTEXITCODE
|
||||
@@ -0,0 +1,14 @@
|
||||
param(
|
||||
[int]$PairIndex = 0,
|
||||
[string]$Frames = "C:\Users\admin\Documents\Codex\2026-07-15\wo\outputs\calibration_data1_20260720\prepared\frames_all",
|
||||
[double]$LeftRollDeg = 0.0,
|
||||
[double]$LeftPitchDeg = 0.0,
|
||||
[double]$LeftYawDeg = 0.0
|
||||
)
|
||||
$Repo = Split-Path -Parent $PSScriptRoot
|
||||
python "$Repo\code\visualize_pair_3d.py" `
|
||||
--frames $Frames `
|
||||
--pairs "$Repo\results\open3d_gicp\B_batch2_refined.npz" `
|
||||
--extrinsic "$Repo\results\final_extrinsic_recommended.json" `
|
||||
--pair-index $PairIndex `
|
||||
--left-rpy-deg $LeftRollDeg $LeftPitchDeg $LeftYawDeg
|
||||
@@ -0,0 +1,18 @@
|
||||
param(
|
||||
[int]$PairIndex = 0,
|
||||
[string]$Frames = "C:\Users\admin\Documents\Codex\2026-07-15\wo\outputs\calibration_data1_20260720\prepared\frames_all",
|
||||
[string]$Extrinsic = "",
|
||||
[double]$LeftRollDeg = 0.0,
|
||||
[double]$LeftPitchDeg = 0.0,
|
||||
[double]$LeftYawDeg = 0.0
|
||||
)
|
||||
$Repo = Split-Path -Parent $PSScriptRoot
|
||||
if ([string]::IsNullOrWhiteSpace($Extrinsic)) {
|
||||
$Extrinsic = "$Repo\results\small_gicp\extrinsic_batch2_refined.json"
|
||||
}
|
||||
python "$Repo\code\visualize_pair_3d.py" `
|
||||
--frames $Frames `
|
||||
--pairs "$Repo\results\small_gicp\B_batch2_refined.npz" `
|
||||
--extrinsic $Extrinsic `
|
||||
--pair-index $PairIndex `
|
||||
--left-rpy-deg $LeftRollDeg $LeftPitchDeg $LeftYawDeg
|
||||
Reference in New Issue
Block a user