wenig
This commit is contained in:
@@ -1,6 +1,23 @@
|
|||||||
{
|
{
|
||||||
|
"_label": "todo3_2026-06-11",
|
||||||
"coordinateSystem": {"handedness": "right", "x": "right", "y": "backward", "z": "up"},
|
"coordinateSystem": {"handedness": "right", "x": "right", "y": "backward", "z": "up"},
|
||||||
"units": {"length": "mm", "rotation": "degree"},
|
"units": {"_owner": "appRobotDriver", "length": "mm", "rotation": "degree"},
|
||||||
|
"kinematics": {
|
||||||
|
"_owner": "appRobotDriver",
|
||||||
|
"type": "arm3segmentlinearx"
|
||||||
|
},
|
||||||
|
"motion": {
|
||||||
|
"_owner": "appRobotDriver",
|
||||||
|
"defaultFeedrate": 2300,
|
||||||
|
"speedMode": "legacy",
|
||||||
|
"speedModeOptions": ["legacy", "correct"]
|
||||||
|
},
|
||||||
|
"controllers": {
|
||||||
|
"_owner": "appRobotDriver",
|
||||||
|
"base": { "ip": "fluidNcBase.local", "port": 2300, "protocol": "telnet", "axes": ["x", "y", "z"] },
|
||||||
|
"elbow": { "ip": "fluidNcEllbow.local", "port": 5000, "protocol": "telnet", "axes": ["a", null, null] },
|
||||||
|
"hand": { "ip": "fluidNcHand.local", "port": 5000, "protocol": "telnet", "axes": ["c", "e", "b"] }
|
||||||
|
},
|
||||||
"vision_config": {"MarkerType": "DICT_4X4_250", "MarkerSize": 0.025},
|
"vision_config": {"MarkerType": "DICT_4X4_250", "MarkerSize": 0.025},
|
||||||
"renderingInfo": {
|
"renderingInfo": {
|
||||||
"width": 1280,
|
"width": 1280,
|
||||||
@@ -163,6 +180,7 @@
|
|||||||
"normal_flip_weight": 0.05
|
"normal_flip_weight": 0.05
|
||||||
},
|
},
|
||||||
"links": {
|
"links": {
|
||||||
|
"_owner": "appRobotDriver",
|
||||||
"Board": {
|
"Board": {
|
||||||
"parent": null,
|
"parent": null,
|
||||||
"size": [1000, 200, 25],
|
"size": [1000, 200, 25],
|
||||||
@@ -273,7 +291,9 @@
|
|||||||
"axis": [1, 0, 0],
|
"axis": [1, 0, 0],
|
||||||
"origin": [0, 0, 16],
|
"origin": [0, 0, 16],
|
||||||
"rotation": [0, 0, 0],
|
"rotation": [0, 0, 0],
|
||||||
"variable": "x"
|
"variable": "x",
|
||||||
|
"feedrate": 2000,
|
||||||
|
"controller": "base"
|
||||||
},
|
},
|
||||||
"skeleton": {"from": [0, 108, 45], "to": [110, 108, 45], "radius": 4, "color": [0.2, 0.8, 0.2]},
|
"skeleton": {"from": [0, 108, 45], "to": [110, 108, 45], "radius": 4, "color": [0.2, 0.8, 0.2]},
|
||||||
"markers": [],
|
"markers": [],
|
||||||
@@ -297,7 +317,9 @@
|
|||||||
"axis": [-1, 0, 0],
|
"axis": [-1, 0, 0],
|
||||||
"origin": [110, 108, 45],
|
"origin": [110, 108, 45],
|
||||||
"rotation": [0, 0, 0],
|
"rotation": [0, 0, 0],
|
||||||
"variable": "y"
|
"variable": "y",
|
||||||
|
"feedrate": 2300,
|
||||||
|
"controller": "base"
|
||||||
},
|
},
|
||||||
"skeleton": {"from": [0, 0, 0], "to": [0, -250, 0], "radius": 4, "color": [0.2, 0.2, 0.9]},
|
"skeleton": {"from": [0, 0, 0], "to": [0, -250, 0], "radius": 4, "color": [0.2, 0.2, 0.9]},
|
||||||
"markers": [
|
"markers": [
|
||||||
@@ -327,7 +349,9 @@
|
|||||||
"axis": [-1, 0, 0],
|
"axis": [-1, 0, 0],
|
||||||
"origin": [0, -250, 0],
|
"origin": [0, -250, 0],
|
||||||
"rotation": [0, 0, 0],
|
"rotation": [0, 0, 0],
|
||||||
"variable": "z"
|
"variable": "z",
|
||||||
|
"feedrate": 2300,
|
||||||
|
"controller": "base"
|
||||||
},
|
},
|
||||||
"skeleton": {"from": [0, 0, 0], "to": [90, 0, 0], "radius": 4, "color": [0.9, 0.2, 0.2]},
|
"skeleton": {"from": [0, 0, 0], "to": [90, 0, 0], "radius": 4, "color": [0.9, 0.2, 0.2]},
|
||||||
"model": [
|
"model": [
|
||||||
@@ -358,7 +382,9 @@
|
|||||||
"axis": [0, -1, 0],
|
"axis": [0, -1, 0],
|
||||||
"origin": [90, 0, 0],
|
"origin": [90, 0, 0],
|
||||||
"rotation": [0, 0, 0],
|
"rotation": [0, 0, 0],
|
||||||
"variable": "a"
|
"variable": "a",
|
||||||
|
"feedrate": 2300,
|
||||||
|
"controller": "elbow"
|
||||||
},
|
},
|
||||||
"skeleton": {"from": [0, 0, 0], "to": [0, -250, 0], "radius": 4, "color": [0.95, 0.85, 0.2]},
|
"skeleton": {"from": [0, 0, 0], "to": [0, -250, 0], "radius": 4, "color": [0.95, 0.85, 0.2]},
|
||||||
"model": [
|
"model": [
|
||||||
@@ -390,7 +416,9 @@
|
|||||||
"axis": [1, 0, 0],
|
"axis": [1, 0, 0],
|
||||||
"origin": [0, -250, 0],
|
"origin": [0, -250, 0],
|
||||||
"rotation": [0, 0, 0],
|
"rotation": [0, 0, 0],
|
||||||
"variable": "b"
|
"variable": "b",
|
||||||
|
"feedrate": 2300,
|
||||||
|
"controller": "hand"
|
||||||
},
|
},
|
||||||
"skeleton": {"from": [0, 0, 0], "to": [0, -35, 0], "radius": 4, "color": [0.95, 0.55, 0.15]}
|
"skeleton": {"from": [0, 0, 0], "to": [0, -35, 0], "radius": 4, "color": [0.95, 0.55, 0.15]}
|
||||||
},
|
},
|
||||||
@@ -404,7 +432,9 @@
|
|||||||
"axis": [0, -1, 0],
|
"axis": [0, -1, 0],
|
||||||
"origin": [0, 0, 0],
|
"origin": [0, 0, 0],
|
||||||
"rotation": [0, 0, 0],
|
"rotation": [0, 0, 0],
|
||||||
"variable": "c"
|
"variable": "c",
|
||||||
|
"feedrate": 2300,
|
||||||
|
"controller": "hand"
|
||||||
},
|
},
|
||||||
"skeleton": {"from": [-50, -35, 0], "to": [50, -35, 0], "radius": 7, "color": [0.95, 0.2, 0.2]}
|
"skeleton": {"from": [-50, -35, 0], "to": [50, -35, 0], "radius": 7, "color": [0.95, 0.2, 0.2]}
|
||||||
},
|
},
|
||||||
@@ -419,7 +449,9 @@
|
|||||||
"axis": [1, 0, 0],
|
"axis": [1, 0, 0],
|
||||||
"origin": [4, -35, 0],
|
"origin": [4, -35, 0],
|
||||||
"rotation": [0, 0, 0],
|
"rotation": [0, 0, 0],
|
||||||
"variable": "e"
|
"variable": "e",
|
||||||
|
"feedrate": 2000,
|
||||||
|
"controller": "hand"
|
||||||
},
|
},
|
||||||
"skeleton": {"from": [0, 0, 0], "to": [0, -60, 0], "radius": 4, "color": [0.2, 0.8, 0.2]},
|
"skeleton": {"from": [0, 0, 0], "to": [0, -60, 0], "radius": 4, "color": [0.2, 0.8, 0.2]},
|
||||||
"markers": [
|
"markers": [
|
||||||
@@ -447,7 +479,9 @@
|
|||||||
"axis": [-1, 0, 0],
|
"axis": [-1, 0, 0],
|
||||||
"origin": [-4, -35, 0],
|
"origin": [-4, -35, 0],
|
||||||
"rotation": [0, 0, 0],
|
"rotation": [0, 0, 0],
|
||||||
"variable": "e"
|
"variable": "e",
|
||||||
|
"feedrate": 2000,
|
||||||
|
"controller": "hand"
|
||||||
},
|
},
|
||||||
"skeleton": {"from": [0, 0, 0], "to": [0, -60, 0], "radius": 4, "color": [0.2, 0.8, 0.2]},
|
"skeleton": {"from": [0, 0, 0], "to": [0, -60, 0], "radius": 4, "color": [0.2, 0.8, 0.2]},
|
||||||
"markers": [
|
"markers": [
|
||||||
|
|||||||
BIN
data/testPictures/calibration_cam0.npz
Normal file
BIN
data/testPictures/calibration_cam0.npz
Normal file
Binary file not shown.
BIN
data/testPictures/calibration_cam1.npz
Normal file
BIN
data/testPictures/calibration_cam1.npz
Normal file
Binary file not shown.
BIN
data/testPictures/calibration_cam2.npz
Normal file
BIN
data/testPictures/calibration_cam2.npz
Normal file
Binary file not shown.
BIN
data/testPictures/cam0_hires_1781074183695.jpg
Normal file
BIN
data/testPictures/cam0_hires_1781074183695.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 74 KiB |
BIN
data/testPictures/cam1_hires_1781074183695.jpg
Normal file
BIN
data/testPictures/cam1_hires_1781074183695.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 66 KiB |
BIN
data/testPictures/cam2_hires_1781074183695.jpg
Normal file
BIN
data/testPictures/cam2_hires_1781074183695.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 221 KiB |
433
data/testPictures/robot_1781069752019.json
Normal file
433
data/testPictures/robot_1781069752019.json
Normal file
@@ -0,0 +1,433 @@
|
|||||||
|
{
|
||||||
|
"coordinateSystem": {"handedness": "right", "x": "right", "y": "backward", "z": "up"},
|
||||||
|
"units": {"length": "mm", "rotation": "degree"},
|
||||||
|
"vision_config": {"MarkerType": "DICT_4X4_250", "MarkerSize": 0.025},
|
||||||
|
"renderingInfo": {
|
||||||
|
"width": 1280,
|
||||||
|
"height": 720,
|
||||||
|
"renderDefaults": {"width": 1280, "height": 720, "dofFStop": 11},
|
||||||
|
"cameraPosition__1": [-10, -800, 500],
|
||||||
|
"cameraPosition__2": [-500, 300, 1200],
|
||||||
|
"cameraPosition__3": [-200, -900, 200],
|
||||||
|
"cameraPosition__4": [1200, 200, 300],
|
||||||
|
"cameraPosition_a": [-300, -800, 500],
|
||||||
|
"cameraPosition": [-200, 200, 1400],
|
||||||
|
"cameraPosition_c": [600, -500, 600],
|
||||||
|
"cameraTarget": [200, -200, 180],
|
||||||
|
"cameraUpVector": [0, 0, 1],
|
||||||
|
"lightPosition": [-500, -500, 500],
|
||||||
|
"lightTarget": [0, 0, 0],
|
||||||
|
"lightUpVector": [0, 0, 1],
|
||||||
|
"metric": "mm",
|
||||||
|
"showSkeleton": true,
|
||||||
|
"showMarkers": true,
|
||||||
|
"backgroundColor": [0.7, 0.85, 1.0],
|
||||||
|
"backgroundStrength": 0.2,
|
||||||
|
"sunEnergy": 0.35,
|
||||||
|
"areaEnergy": 120,
|
||||||
|
"exposure": -1.5,
|
||||||
|
"lensDirt": true,
|
||||||
|
"lensDirtStrength": 0.08,
|
||||||
|
"dofEnabled": true,
|
||||||
|
"dofFStop": 11.0,
|
||||||
|
"arucoDust": true,
|
||||||
|
"arucoDustStrength": 1.6,
|
||||||
|
"markerOffsetMaxMm": 4.0,
|
||||||
|
"markerOffsetSeed": 0,
|
||||||
|
"markerRotationMaxDeg": 3,
|
||||||
|
"motionBlur": true,
|
||||||
|
"motionBlurMaxPx": 5.5,
|
||||||
|
"focalErrorPct": 0.5,
|
||||||
|
"principalErrorPx": 3.0,
|
||||||
|
"residualDistortion": [0.02, -0.01],
|
||||||
|
"localizedBlur": false,
|
||||||
|
"localizedBlurStrength": 0.15,
|
||||||
|
"vignette": true,
|
||||||
|
"vignetteStrength": 0.08,
|
||||||
|
"sensorNoise": true,
|
||||||
|
"sensorNoiseStrength": 0.01,
|
||||||
|
"lensDistortion": true,
|
||||||
|
"lensDistortionStrength": 0.002,
|
||||||
|
"materials": {
|
||||||
|
"wood": {"baseColor": [0.72, 0.52, 0.33], "roughness": 0.85, "metallic": 0.0},
|
||||||
|
"plaWhite": {"baseColor": [0.95, 0.95, 0.95], "roughness": 0.45, "metallic": 0.0},
|
||||||
|
"steel": {"baseColor": [0.72, 0.72, 0.75], "roughness": 0.25, "metallic": 1.0},
|
||||||
|
"powderCoatBlue": {"baseColor": [0.15, 0.25, 0.7], "roughness": 0.55, "metallic": 0.0},
|
||||||
|
"defaultPlastic": {"baseColor": [0.95, 0.95, 0.95], "roughness": 0.4, "metallic": 0.0},
|
||||||
|
"skeletonRed": {"baseColor": [0.85, 0.2, 0.2], "roughness": 0.35, "metallic": 0.0},
|
||||||
|
"markerBlack": {"baseColor": [0.04, 0.04, 0.04], "roughness": 0.8, "metallic": 0.0}
|
||||||
|
},
|
||||||
|
"skeletonDefaults": {"radius": 4, "color": [0.85, 0.2, 0.2]},
|
||||||
|
"markerDefaults": {"size": 25, "thickness": 1, "color": [0.04, 0.04, 0.04]},
|
||||||
|
"defaultPosition": {"x": 80, "y": 20, "z": 80, "a": -120, "b": 23, "c": 9, "e": 3}
|
||||||
|
},
|
||||||
|
"defaultPosition__": {"x": 10, "y": 4, "z": 20, "a": 10, "b": 2, "c": 9, "e": 1},
|
||||||
|
"defaultPosition": {"x": 50, "y": 4, "z": 176, "a": 20, "b": 60, "c": 9, "e": 5},
|
||||||
|
"recognized": {"x": null, "y": null, "z": null, "a": null, "b": null, "c": null, "e": null},
|
||||||
|
"constraint_rules": {
|
||||||
|
"rigid_distance": {"enabled": true, "mode": "mst", "weight": 1.0},
|
||||||
|
"joint_axis_projection": {"enabled": true, "max_pairs": 2, "weight": 0.35},
|
||||||
|
"chain_axis_projection": {"enabled": false, "max_depth": 3, "max_pairs": 2, "weight": 0.15},
|
||||||
|
"axis_alignment_threshold": 0.95
|
||||||
|
},
|
||||||
|
"observation_weighting": {"enabled": true, "distance_weight": true, "marker_size_weight": true, "view_angle_weight": true},
|
||||||
|
"multiview_calculation": {
|
||||||
|
"combine_mode": "mean",
|
||||||
|
"size_ref_px": 50.0,
|
||||||
|
"border_ref_px": 120.0,
|
||||||
|
"center_ref_norm": 0.01,
|
||||||
|
"sharpness_ref": 2500.0,
|
||||||
|
"homography_ref": 0.18,
|
||||||
|
"size_factor": 0.3,
|
||||||
|
"aspect_factor": 0.3,
|
||||||
|
"border_factor": 0.01,
|
||||||
|
"center_factor": 0.01,
|
||||||
|
"sharpness_factor": 0.5,
|
||||||
|
"homography_factor": 0.2,
|
||||||
|
"normal_visibility_factor": 0.01,
|
||||||
|
"spin_factor": 0.3,
|
||||||
|
"weight_floor": 0.3
|
||||||
|
},
|
||||||
|
"pose_estimation": {
|
||||||
|
"method": "hybrid",
|
||||||
|
"marker_observation": "corner_pose",
|
||||||
|
"use_normals": true,
|
||||||
|
"normal_weight": 100.0,
|
||||||
|
"robust_loss": "huber",
|
||||||
|
"huber_delta_mm": 8.0,
|
||||||
|
"max_iterations": 200,
|
||||||
|
"min_cameras_per_marker": 2,
|
||||||
|
"finger_block_joints": ["b", "c", "e"],
|
||||||
|
"per_link_method": {}
|
||||||
|
},
|
||||||
|
"robot_test_poses": {
|
||||||
|
"4": {"x": 70, "y": 50, "z": -70, "a": 120, "b": 50, "c": 30, "e": 20},
|
||||||
|
"5": {"x": 180, "y": 86, "z": -120, "a": -60, "b": 22, "c": 91, "e": 10},
|
||||||
|
"6": {"x": 80, "y": 20, "z": 80, "a": -120, "b": 23, "c": 9, "e": 3},
|
||||||
|
"7": {"x": 30, "y": -2, "z": 95, "a": 20, "b": 23, "c": 9, "e": 9},
|
||||||
|
"8": {"x": 50, "y": -2, "z": 95, "a": 20, "b": 60, "c": 9, "e": 3},
|
||||||
|
"9": {"x": 60, "y": -2, "z": 95, "a": 200, "b": 60, "c": 9, "e": 8},
|
||||||
|
"9a": {
|
||||||
|
"x": 60,
|
||||||
|
"y": -2,
|
||||||
|
"z": 95,
|
||||||
|
"a": 200,
|
||||||
|
"b": 60,
|
||||||
|
"c": 9,
|
||||||
|
"e": 8,
|
||||||
|
"rendering": {"width": 1440, "height": 1080, "dofFStop": 11}
|
||||||
|
},
|
||||||
|
"9b": {
|
||||||
|
"x": 60,
|
||||||
|
"y": -2,
|
||||||
|
"z": 95,
|
||||||
|
"a": 200,
|
||||||
|
"b": 60,
|
||||||
|
"c": 9,
|
||||||
|
"e": 8,
|
||||||
|
"rendering": {"width": 4896, "height": 3264, "dofFStop": 5.6}
|
||||||
|
},
|
||||||
|
"10": {"x": 120, "y": 60, "z": -110, "a": 20, "b": 30, "c": 180, "e": 4},
|
||||||
|
"11": {"x": 50, "y": 4, "z": 176, "a": 20, "b": 60, "c": 9, "e": 5},
|
||||||
|
"12": {"x": 50, "y": 0, "z": 178, "a": 210, "b": 80, "c": 90, "e": 6}
|
||||||
|
},
|
||||||
|
"test_camera_positions": {
|
||||||
|
"a": [-300, -800, 800],
|
||||||
|
"b": [300, -900, 1200],
|
||||||
|
"c": [300, -900, 400],
|
||||||
|
"d": [700, -800, 400],
|
||||||
|
"e": [1200, -900, 400],
|
||||||
|
"f": [500, -300, 1400],
|
||||||
|
"g": [-200, 200, 1400]
|
||||||
|
},
|
||||||
|
"test_camera_targets": {
|
||||||
|
"a": [210, -100, 180],
|
||||||
|
"b": [310, -80, 180],
|
||||||
|
"c": [210, -100, 150],
|
||||||
|
"d": [210, -100, 150],
|
||||||
|
"e": [210, -100, 50],
|
||||||
|
"f": [200, -200, 180],
|
||||||
|
"g": [200, -200, 180]
|
||||||
|
},
|
||||||
|
"movements": {"x": null, "y": null, "z": null, "a": null, "b": null, "c": null, "e": null},
|
||||||
|
"state_pose_params": {
|
||||||
|
"numbers_of_Elements_to_consider_start": 3,
|
||||||
|
"numbers_of_Elements_to_consider_final": 5,
|
||||||
|
"solver_in_between_geometrical": false,
|
||||||
|
"solver_after_geometrical": false,
|
||||||
|
"geometric_passes_per_stage": 2,
|
||||||
|
"revolute_search_coarse_deg": 5.0,
|
||||||
|
"revolute_search_fine_deg": 1.0,
|
||||||
|
"root_pose_min_markers": 3,
|
||||||
|
"use_marker_normals_flip_tiebreak": true,
|
||||||
|
"normal_flip_weight": 0.05
|
||||||
|
},
|
||||||
|
"links": {
|
||||||
|
"Board": {
|
||||||
|
"parent": null,
|
||||||
|
"size": [1000, 200, 25],
|
||||||
|
"mountPosition": [0, 0, 0],
|
||||||
|
"mountRotation": [0, 0, 0],
|
||||||
|
"skeleton": {"from": [0, 0, 16], "to": [1000, 0, 16], "radius": 4, "color": [0.85, 0.2, 0.2]},
|
||||||
|
"markers": [
|
||||||
|
{
|
||||||
|
"id": 46,
|
||||||
|
"set": "A0",
|
||||||
|
"position": [536.71, 185.44, -27.3],
|
||||||
|
"normal": [0, 0, 1],
|
||||||
|
"spin": 90,
|
||||||
|
"info": "is placed on a white paper, A0_60Arucos_25mm_Seet223.pdf, with the following marker placements:"
|
||||||
|
},
|
||||||
|
{"id": 47, "set": "A0", "position": [344.23, -286.54, -27.3], "normal": [0, 0, 1], "spin": 90},
|
||||||
|
{"id": 48, "set": "A0", "position": [688.69, -320.72, -27.3], "normal": [0, 0, 1], "spin": 90},
|
||||||
|
{"id": 49, "set": "A0", "position": [1006.0, 158.33, -27.3], "normal": [0, 0, 1], "spin": 90},
|
||||||
|
{"id": 50, "set": "A0", "position": [573.41, 211.86, -27.3], "normal": [0, 0, 1], "spin": 90},
|
||||||
|
{"id": 51, "set": "A0", "position": [167.8, -172.08, -27.3], "normal": [0, 0, 1], "spin": 90},
|
||||||
|
{"id": 52, "set": "A0", "position": [94.68, 208.66, -27.3], "normal": [0, 0, 1], "spin": 90},
|
||||||
|
{"id": 53, "set": "A0", "position": [486.25, 212.24, -27.3], "normal": [0, 0, 1], "spin": 90},
|
||||||
|
{"id": 54, "set": "A0", "position": [342.27, -330.59, -27.3], "normal": [0, 0, 1], "spin": 90},
|
||||||
|
{"id": 55, "set": "A0", "position": [283.72, -262.58, -27.3], "normal": [0, 0, 1], "spin": 90},
|
||||||
|
{"id": 56, "set": "A0", "position": [498.68, 168.67, -27.3], "normal": [0, 0, 1], "spin": 90},
|
||||||
|
{"id": 57, "set": "A0", "position": [602.86, -364.05, -27.3], "normal": [0, 0, 1], "spin": 90},
|
||||||
|
{"id": 58, "set": "A0", "position": [50.09, -218.11, -27.3], "normal": [0, 0, 1], "spin": 90},
|
||||||
|
{"id": 59, "set": "A0", "position": [626.21, -278.75, -27.3], "normal": [0, 0, 1], "spin": 90},
|
||||||
|
{"id": 60, "set": "A0", "position": [434.36, 283.81, -27.3], "normal": [0, 0, 1], "spin": 90},
|
||||||
|
{"id": 61, "set": "A0", "position": [-22.42, 335.83, -27.3], "normal": [0, 0, 1], "spin": 90},
|
||||||
|
{"id": 62, "set": "A0", "position": [404.7, -175.1, -27.3], "normal": [0, 0, 1], "spin": 90},
|
||||||
|
{"id": 63, "set": "A0", "position": [777.4, -236.15, -27.3], "normal": [0, 0, 1], "spin": 90},
|
||||||
|
{"id": 64, "set": "A0", "position": [-21.27, -188.23, -27.3], "normal": [0, 0, 1], "spin": 90},
|
||||||
|
{"id": 65, "set": "A0", "position": [803.39, -297.37, -27.3], "normal": [0, 0, 1], "spin": 90},
|
||||||
|
{"id": 66, "set": "A0", "position": [209.75, -363.23, -27.3], "normal": [0, 0, 1], "spin": 90},
|
||||||
|
{"id": 67, "set": "A0", "position": [523.07, 267.04, -27.3], "normal": [0, 0, 1], "spin": 90},
|
||||||
|
{"id": 68, "set": "A0", "position": [573.73, 170.64, -27.3], "normal": [0, 0, 1], "spin": 90},
|
||||||
|
{"id": 69, "set": "A0", "position": [7.61, -281.21, -27.3], "normal": [0, 0, 1], "spin": 90},
|
||||||
|
{"id": 70, "set": "A0", "position": [601.87, 300.33, -27.3], "normal": [0, 0, 1], "spin": 90},
|
||||||
|
{"id": 71, "set": "A0", "position": [749.75, -284.01, -27.3], "normal": [0, 0, 1], "spin": 90},
|
||||||
|
{"id": 72, "set": "A0", "position": [440.99, 194.32, -27.3], "normal": [0, 0, 1], "spin": 90},
|
||||||
|
{"id": 73, "set": "A0", "position": [221.73, 333.11, -27.3], "normal": [0, 0, 1], "spin": 90},
|
||||||
|
{"id": 74, "set": "A0", "position": [93.78, 144.5, -27.3], "normal": [0, 0, 1], "spin": 90},
|
||||||
|
{"id": 75, "set": "A0", "position": [-25.7, 194.58, -27.3], "normal": [0, 0, 1], "spin": 90},
|
||||||
|
{"id": 76, "set": "A0", "position": [685.21, 166.8, -27.3], "normal": [0, 0, 1], "spin": 90},
|
||||||
|
{"id": 77, "set": "A0", "position": [18.19, 191.57, -27.3], "normal": [0, 0, 1], "spin": 90},
|
||||||
|
{"id": 78, "set": "A0", "position": [823.11, -344.38, -27.3], "normal": [0, 0, 1], "spin": 90},
|
||||||
|
{"id": 79, "set": "A0", "position": [312.3, -159.11, -27.3], "normal": [0, 0, 1], "spin": 90},
|
||||||
|
{"id": 80, "set": "A0", "position": [863.59, -335.92, -27.3], "normal": [0, 0, 1], "spin": 90},
|
||||||
|
{"id": 81, "set": "A0", "position": [132.14, 169.03, -27.3], "normal": [0, 0, 1], "spin": 90},
|
||||||
|
{"id": 82, "set": "A0", "position": [219.16, 297.24, -27.3], "normal": [0, 0, 1], "spin": 90},
|
||||||
|
{"id": 83, "set": "A0", "position": [44.16, 339.22, -27.3], "normal": [0, 0, 1], "spin": 90},
|
||||||
|
{"id": 84, "set": "A0", "position": [407.49, 258.42, -27.3], "normal": [0, 0, 1], "spin": 90},
|
||||||
|
{"id": 85, "set": "A0", "position": [504.58, -312.75, -27.3], "normal": [0, 0, 1], "spin": 90},
|
||||||
|
{"id": 86, "set": "A0", "position": [362.89, 292.01, -27.3], "normal": [0, 0, 1], "spin": 90},
|
||||||
|
{"id": 87, "set": "A0", "position": [943.63, -245.76, -27.3], "normal": [0, 0, 1], "spin": 90},
|
||||||
|
{"id": 88, "set": "A0", "position": [765.87, 316.04, -27.3], "normal": [0, 0, 1], "spin": 90},
|
||||||
|
{"id": 89, "set": "A0", "position": [988.02, -369.14, -27.3], "normal": [0, 0, 1], "spin": 90},
|
||||||
|
{"id": 90, "set": "A0", "position": [643.17, 316.43, -27.3], "normal": [0, 0, 1], "spin": 90},
|
||||||
|
{"id": 91, "set": "A0", "position": [723.35, 328.05, -27.3], "normal": [0, 0, 1], "spin": 90},
|
||||||
|
{"id": 92, "set": "A0", "position": [645.09, -184.84, -27.3], "normal": [0, 0, 1], "spin": 90},
|
||||||
|
{"id": 93, "set": "A0", "position": [934.88, 143.6, -27.3], "normal": [0, 0, 1], "spin": 90},
|
||||||
|
{"id": 94, "set": "A0", "position": [875.7, 173.65, -27.3], "normal": [0, 0, 1], "spin": 90},
|
||||||
|
{"id": 95, "set": "A0", "position": [186.04, -274.07, -27.3], "normal": [0, 0, 1], "spin": 90},
|
||||||
|
{"id": 96, "set": "A0", "position": [369.77, -186.49, -27.3], "normal": [0, 0, 1], "spin": 90},
|
||||||
|
{"id": 97, "set": "A0", "position": [304.35, -359.67, -27.3], "normal": [0, 0, 1], "spin": 90},
|
||||||
|
{"id": 98, "set": "A0", "position": [575.27, 315.06, -27.3], "normal": [0, 0, 1], "spin": 90},
|
||||||
|
{"id": 99, "set": "A0", "position": [959.16, -321.55, -27.3], "normal": [0, 0, 1], "spin": 90},
|
||||||
|
{"id": 100, "set": "A0", "position": [803.25, 172.36, -27.3], "normal": [0, 0, 1], "spin": 90},
|
||||||
|
{"id": 101, "set": "A0", "position": [117.7, 298.66, -27.3], "normal": [0, 0, 1], "spin": 90},
|
||||||
|
{"id": 102, "set": "A0", "position": [649.69, -223.0, -27.3], "normal": [0, 0, 1], "spin": 90},
|
||||||
|
{"id": 103, "set": "A0", "position": [105.71, -187.71, -27.3], "normal": [0, 0, 1], "spin": 90},
|
||||||
|
{"id": 104, "set": "A0", "position": [826.71, 239.16, -27.3], "normal": [0, 0, 1], "spin": 90},
|
||||||
|
{"id": 105, "set": "A0", "position": [524.84, -266.25, -27.3], "normal": [0, 0, 1], "spin": 90}
|
||||||
|
],
|
||||||
|
"model": [
|
||||||
|
{
|
||||||
|
"stlFile": "surfaces/Board.stl",
|
||||||
|
"originOfModel": [0, 0, 0],
|
||||||
|
"rotationOfModelDegree": [0, 0, -90],
|
||||||
|
"material": "wood"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"stlFile": "surfaces/BoardRail.stl",
|
||||||
|
"originOfModel": [0, 0, 0],
|
||||||
|
"rotationOfModelDegree": [0, 0, -90],
|
||||||
|
"material": "steel"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"Base": {
|
||||||
|
"parent": "Board",
|
||||||
|
"size": [150, 200, 150],
|
||||||
|
"mountPosition": [0, 0, 0],
|
||||||
|
"mountRotation": [0, 0, 0],
|
||||||
|
"jointToParent": {
|
||||||
|
"name": "Slider",
|
||||||
|
"type": "linear",
|
||||||
|
"axis": [1, 0, 0],
|
||||||
|
"origin": [0, 0, 16],
|
||||||
|
"rotation": [0, 0, 0],
|
||||||
|
"variable": "x"
|
||||||
|
},
|
||||||
|
"skeleton": {"from": [0, 108, 45], "to": [110, 108, 45], "radius": 4, "color": [0.2, 0.8, 0.2]},
|
||||||
|
"markers": [],
|
||||||
|
"model": [
|
||||||
|
{
|
||||||
|
"stlFile": "surfaces/Base.stl",
|
||||||
|
"originOfModel": [-30, 0, -35],
|
||||||
|
"rotationOfModelDegree": [0, 0, 0],
|
||||||
|
"material": "plaWhite"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"Arm1": {
|
||||||
|
"parent": "Base",
|
||||||
|
"size": [70, 250, 70],
|
||||||
|
"mountPosition": [0, 0, 0],
|
||||||
|
"mountRotation": [0, 0, 0],
|
||||||
|
"jointToParent": {
|
||||||
|
"name": "Joint1",
|
||||||
|
"type": "revolute",
|
||||||
|
"axis": [-1, 0, 0],
|
||||||
|
"origin": [110, 108, 45],
|
||||||
|
"rotation": [0, 0, 0],
|
||||||
|
"variable": "y"
|
||||||
|
},
|
||||||
|
"skeleton": {"from": [0, 0, 0], "to": [0, -250, 0], "radius": 4, "color": [0.2, 0.2, 0.9]},
|
||||||
|
"markers": [ ],
|
||||||
|
"model": [
|
||||||
|
{
|
||||||
|
"stlFile": "surfaces/Holm.stl",
|
||||||
|
"originOfModel__": [-25, 29, -28.5],
|
||||||
|
"originOfModel": [-29, 25, 28.5],
|
||||||
|
"rotationOfModelDegree__": [0, 0, 0],
|
||||||
|
"rotationOfModelDegree": [180, 0, -90],
|
||||||
|
"material": "powderCoatBlue"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"Ellbow": {
|
||||||
|
"parent": "Arm1",
|
||||||
|
"mountPosition": [0, 0, 0],
|
||||||
|
"mountRotation": [0, 0, 0],
|
||||||
|
"jointToParent": {
|
||||||
|
"name": "Joint2",
|
||||||
|
"type": "revolute",
|
||||||
|
"axis": [-1, 0, 0],
|
||||||
|
"origin": [0, -250, 0],
|
||||||
|
"rotation": [0, 0, 0],
|
||||||
|
"variable": "z"
|
||||||
|
},
|
||||||
|
"skeleton": {"from": [0, 0, 0], "to": [90, 0, 0], "radius": 4, "color": [0.9, 0.2, 0.2]},
|
||||||
|
"model": [
|
||||||
|
{
|
||||||
|
"stlFile": "surfaces/Ellebogen.stl",
|
||||||
|
"originOfModel": [90, 0, 0],
|
||||||
|
"rotationOfModelDegree": [0, -90, -90],
|
||||||
|
"material": "defaultPlastic"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"markers": [
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"Arm2": {
|
||||||
|
"parent": "Ellbow",
|
||||||
|
"mountPosition": [0, 0, 0],
|
||||||
|
"mountRotation": [0, 0, 0],
|
||||||
|
"jointToParent": {
|
||||||
|
"name": "Joint3",
|
||||||
|
"type": "revolute",
|
||||||
|
"axis": [0, -1, 0],
|
||||||
|
"origin": [90, 0, 0],
|
||||||
|
"rotation": [0, 0, 0],
|
||||||
|
"variable": "a"
|
||||||
|
},
|
||||||
|
"skeleton": {"from": [0, 0, 0], "to": [0, -250, 0], "radius": 4, "color": [0.95, 0.85, 0.2]},
|
||||||
|
"model": [
|
||||||
|
{
|
||||||
|
"stlFile": "surfaces/Unterarm.stl",
|
||||||
|
"originOfModel": [0, -250, 0],
|
||||||
|
"rotationOfModelDegree": [180, 0, -90],
|
||||||
|
"material": "defaultPlastic"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"markers": [
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"Hand": {
|
||||||
|
"parent": "Arm2",
|
||||||
|
"mountPosition": [0, 0, 0],
|
||||||
|
"mountRotation": [0, 0, 0],
|
||||||
|
"jointToParent": {
|
||||||
|
"name": "Joint4",
|
||||||
|
"type": "revolute",
|
||||||
|
"axis": [1, 0, 0],
|
||||||
|
"origin": [0, -250, 0],
|
||||||
|
"rotation": [0, 0, 0],
|
||||||
|
"variable": "b"
|
||||||
|
},
|
||||||
|
"skeleton": {"from": [0, 0, 0], "to": [0, -35, 0], "radius": 4, "color": [0.95, 0.55, 0.15]}
|
||||||
|
},
|
||||||
|
"Palm": {
|
||||||
|
"parent": "Hand",
|
||||||
|
"mountPosition": [0, 0, 0],
|
||||||
|
"mountRotation": [0, 0, 0],
|
||||||
|
"jointToParent": {
|
||||||
|
"name": "Joint3",
|
||||||
|
"type": "revolute",
|
||||||
|
"axis": [0, -1, 0],
|
||||||
|
"origin": [0, 0, 0],
|
||||||
|
"rotation": [0, 0, 0],
|
||||||
|
"variable": "c"
|
||||||
|
},
|
||||||
|
"skeleton": {"from": [-50, -35, 0], "to": [50, -35, 0], "radius": 7, "color": [0.95, 0.2, 0.2]}
|
||||||
|
},
|
||||||
|
"FingerA": {
|
||||||
|
"parent": "Palm",
|
||||||
|
"size": [80, 60, 20],
|
||||||
|
"mountPosition": [0, 0, 0],
|
||||||
|
"mountRotation": [0, 0, 0],
|
||||||
|
"jointToParent": {
|
||||||
|
"name": "Slider",
|
||||||
|
"type": "linear",
|
||||||
|
"axis": [1, 0, 0],
|
||||||
|
"origin": [4, -35, 0],
|
||||||
|
"rotation": [0, 0, 0],
|
||||||
|
"variable": "e"
|
||||||
|
},
|
||||||
|
"skeleton": {"from": [0, 0, 0], "to": [0, -60, 0], "radius": 4, "color": [0.2, 0.8, 0.2]},
|
||||||
|
"markers": [
|
||||||
|
],
|
||||||
|
"model": [
|
||||||
|
{
|
||||||
|
"stlFile": "surfaces/Finger.stl",
|
||||||
|
"originOfModel": [24, 0, -9.1],
|
||||||
|
"rotationOfModelDegree": [90, -90, 0],
|
||||||
|
"material": "defaultPlastic"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"FingerB": {
|
||||||
|
"parent": "Palm",
|
||||||
|
"size": [80, 60, 20],
|
||||||
|
"mountPosition": [0, 0, 0],
|
||||||
|
"mountRotation": [0, 0, 0],
|
||||||
|
"jointToParent": {
|
||||||
|
"name": "Slider",
|
||||||
|
"type": "linear",
|
||||||
|
"axis": [-1, 0, 0],
|
||||||
|
"origin": [-4, -35, 0],
|
||||||
|
"rotation": [0, 0, 0],
|
||||||
|
"variable": "e"
|
||||||
|
},
|
||||||
|
"skeleton": {"from": [0, 0, 0], "to": [0, -60, 0], "radius": 4, "color": [0.2, 0.8, 0.2]},
|
||||||
|
"markers": [
|
||||||
|
],
|
||||||
|
"model": [
|
||||||
|
{
|
||||||
|
"stlFile": "surfaces/Finger.stl",
|
||||||
|
"originOfModel": [-24, 0, 9.1],
|
||||||
|
"rotationOfModelDegree": [90, 90, 0],
|
||||||
|
"material": "defaultPlastic"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -351,6 +351,12 @@ def main():
|
|||||||
required=True
|
required=True
|
||||||
)
|
)
|
||||||
|
|
||||||
|
parser.add_argument(
|
||||||
|
'--saveDebugImage',
|
||||||
|
action='store_true',
|
||||||
|
help='Speichert ein Debug-JPG mit eingezeichneten Marker-Rahmen'
|
||||||
|
)
|
||||||
|
|
||||||
args = parser.parse_args()
|
args = parser.parse_args()
|
||||||
|
|
||||||
out_dir = resolve_path(args.outDir)
|
out_dir = resolve_path(args.outDir)
|
||||||
@@ -404,6 +410,9 @@ def main():
|
|||||||
detector_tuple
|
detector_tuple
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# ids_raw: original numpy array für drawDetectedMarkers
|
||||||
|
ids_raw = ids
|
||||||
|
|
||||||
detections = []
|
detections = []
|
||||||
|
|
||||||
# --------------------------------------------------------
|
# --------------------------------------------------------
|
||||||
@@ -601,6 +610,25 @@ def main():
|
|||||||
|
|
||||||
print(f'Saved: {out_json}')
|
print(f'Saved: {out_json}')
|
||||||
|
|
||||||
|
# --------------------------------------------------------
|
||||||
|
# Debug-Bild mit Marker-Rahmen
|
||||||
|
# --------------------------------------------------------
|
||||||
|
|
||||||
|
if args.saveDebugImage:
|
||||||
|
|
||||||
|
debug_img = image.copy()
|
||||||
|
|
||||||
|
if corners_list and ids_raw is not None:
|
||||||
|
cv2.aruco.drawDetectedMarkers(debug_img, corners_list, ids_raw)
|
||||||
|
|
||||||
|
debug_path = os.path.join(
|
||||||
|
out_dir,
|
||||||
|
f'{input_base}_debug.jpg'
|
||||||
|
)
|
||||||
|
|
||||||
|
cv2.imwrite(debug_path, debug_img)
|
||||||
|
print(f'Saved debug: {debug_path}')
|
||||||
|
|
||||||
|
|
||||||
# ------------------------------------------------------------
|
# ------------------------------------------------------------
|
||||||
|
|
||||||
|
|||||||
424
test/jRun.py
Normal file
424
test/jRun.py
Normal file
@@ -0,0 +1,424 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
"""
|
||||||
|
jRun.py – Test-Pipeline: detect → camera-pose → ArUco-CSV
|
||||||
|
|
||||||
|
Ablauf:
|
||||||
|
1. pipeline/1_detect_aruco_observations.py pro Bild → test/temp/
|
||||||
|
2. pipeline/2_estimate_camera_from_observations.py pro Bild → test/temp/
|
||||||
|
3. Positionen + Normalen per solvePnP aus Beobachtungen ableiten,
|
||||||
|
über alle Kameras mitteln, nach ID sortieren
|
||||||
|
4. test/temp/detections.csv schreiben: id, set, x, y, z, nx, ny, nz
|
||||||
|
|
||||||
|
Einheiten: x/y/z in mm (Weltframe des Roboters), nx/ny/nz dimensionslos.
|
||||||
|
"""
|
||||||
|
|
||||||
|
from __future__ import annotations
|
||||||
|
|
||||||
|
import csv
|
||||||
|
import glob
|
||||||
|
import json
|
||||||
|
import os
|
||||||
|
import re
|
||||||
|
import subprocess
|
||||||
|
import sys
|
||||||
|
from typing import Dict, List, Optional, Tuple
|
||||||
|
|
||||||
|
import cv2
|
||||||
|
import numpy as np
|
||||||
|
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
# Pfade
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__))
|
||||||
|
PROJECT_ROOT = os.path.dirname(SCRIPT_DIR)
|
||||||
|
PIPELINE_DIR = os.path.join(PROJECT_ROOT, "pipeline")
|
||||||
|
DATA_DIR = os.path.join(PROJECT_ROOT, "data", "testPictures")
|
||||||
|
TEMP_DIR = os.path.join(SCRIPT_DIR, "temp")
|
||||||
|
|
||||||
|
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
# Hilfsfunktionen – Dateien
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
def find_images() -> List[str]:
|
||||||
|
return sorted(glob.glob(os.path.join(DATA_DIR, "cam*_hires_*.jpg")))
|
||||||
|
|
||||||
|
|
||||||
|
def cam_id_from_path(img_path: str) -> str:
|
||||||
|
m = re.match(r"(cam\d+)_", os.path.basename(img_path))
|
||||||
|
if not m:
|
||||||
|
raise ValueError(f"Kein Camera-ID in Dateiname: {img_path}")
|
||||||
|
return m.group(1)
|
||||||
|
|
||||||
|
|
||||||
|
def npz_path(cam_id: str) -> str:
|
||||||
|
p = os.path.join(DATA_DIR, f"calibration_{cam_id}.npz")
|
||||||
|
if not os.path.exists(p):
|
||||||
|
raise FileNotFoundError(f"Kalibrierung nicht gefunden: {p}")
|
||||||
|
return p
|
||||||
|
|
||||||
|
|
||||||
|
def find_robot_json() -> str:
|
||||||
|
candidates = glob.glob(os.path.join(DATA_DIR, "robot*.json"))
|
||||||
|
if not candidates:
|
||||||
|
raise FileNotFoundError(f"Kein robot*.json in {DATA_DIR}")
|
||||||
|
return sorted(candidates)[0]
|
||||||
|
|
||||||
|
|
||||||
|
def detection_json_path(img_path: str) -> str:
|
||||||
|
base = os.path.splitext(os.path.basename(img_path))[0]
|
||||||
|
return os.path.join(TEMP_DIR, f"{base}_aruco_detection.json")
|
||||||
|
|
||||||
|
|
||||||
|
def camera_pose_json_path(img_path: str) -> str:
|
||||||
|
base = os.path.splitext(os.path.basename(img_path))[0]
|
||||||
|
return os.path.join(TEMP_DIR, f"{base}_camera_pose.json")
|
||||||
|
|
||||||
|
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
# Subprocess-Wrapper
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
def run_step(cmd: List[str]) -> None:
|
||||||
|
print(f"\n>>> {' '.join(cmd)}")
|
||||||
|
r = subprocess.run(cmd, text=True)
|
||||||
|
if r.returncode != 0:
|
||||||
|
raise RuntimeError(f"Befehl fehlgeschlagen (exit {r.returncode})")
|
||||||
|
|
||||||
|
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
# Marker-Klassifizierung aus robot.json
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
def load_marker_set_map(robot_path: str) -> Dict[int, str]:
|
||||||
|
"""
|
||||||
|
Gibt marker_id -> Set-Label zurück.
|
||||||
|
'set'-Marker → set_name (z.B. 'Brett', 'A0')
|
||||||
|
Arm/Loose → Link-Name
|
||||||
|
"""
|
||||||
|
if PIPELINE_DIR not in sys.path:
|
||||||
|
sys.path.insert(0, PIPELINE_DIR)
|
||||||
|
|
||||||
|
# Import erst nach sys.path-Erweiterung
|
||||||
|
from marker_sets import classify_markers # noqa: PLC0415
|
||||||
|
|
||||||
|
with open(robot_path, "r", encoding="utf-8") as f:
|
||||||
|
robot_data = json.load(f)
|
||||||
|
|
||||||
|
classification = classify_markers(robot_data)
|
||||||
|
result: Dict[int, str] = {}
|
||||||
|
for mid, info in classification.items():
|
||||||
|
if info.role == "set" and info.set_name:
|
||||||
|
result[mid] = info.set_name
|
||||||
|
else:
|
||||||
|
result[mid] = info.link
|
||||||
|
return result
|
||||||
|
|
||||||
|
|
||||||
|
def load_a0_reference(robot_path: str) -> Dict[int, np.ndarray]:
|
||||||
|
"""
|
||||||
|
Welt-Referenz (x, y) in mm für die A0-Marker aus robot.json.
|
||||||
|
|
||||||
|
Nur die A0-Marker definieren (momentan) die Welt-Koordinaten, daher wird
|
||||||
|
der dxy-Abgleich ausschließlich auf sie beschränkt. Position steht im
|
||||||
|
Board-Frame = Welt-Frame (Board ist Wurzel-Link bei [0,0,0]).
|
||||||
|
"""
|
||||||
|
if PIPELINE_DIR not in sys.path:
|
||||||
|
sys.path.insert(0, PIPELINE_DIR)
|
||||||
|
|
||||||
|
from marker_sets import classify_markers # noqa: PLC0415
|
||||||
|
|
||||||
|
with open(robot_path, "r", encoding="utf-8") as f:
|
||||||
|
robot_data = json.load(f)
|
||||||
|
|
||||||
|
ref: Dict[int, np.ndarray] = {}
|
||||||
|
for mid, info in classify_markers(robot_data).items():
|
||||||
|
if info.role == "set" and info.set_name == "A0":
|
||||||
|
ref[mid] = np.array(info.position[:2], dtype=float)
|
||||||
|
return ref
|
||||||
|
|
||||||
|
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
# Positionen + Normalen per solvePnP
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
def _marker_local_corners(marker_size_m: float) -> np.ndarray:
|
||||||
|
h = marker_size_m / 2.0
|
||||||
|
return np.array([
|
||||||
|
[-h, h, 0.0],
|
||||||
|
[ h, h, 0.0],
|
||||||
|
[ h, -h, 0.0],
|
||||||
|
[-h, -h, 0.0],
|
||||||
|
], dtype=np.float32)
|
||||||
|
|
||||||
|
|
||||||
|
def estimate_marker_poses(
|
||||||
|
det_json: dict,
|
||||||
|
pose_json: dict,
|
||||||
|
) -> Dict[int, Tuple[np.ndarray, np.ndarray]]:
|
||||||
|
"""
|
||||||
|
Gibt pro erkannter Marker-ID: (pos_mm [3], normal_world [3]) zurück.
|
||||||
|
|
||||||
|
pos_mm: Marker-Mittelpunkt im Weltframe, Einheit mm
|
||||||
|
normal_world: normierter Normalenvektor (Marker-Z-Achse im Weltframe)
|
||||||
|
"""
|
||||||
|
K = np.array(det_json["camera"]["camera_matrix"],
|
||||||
|
dtype=np.float64).reshape(3, 3)
|
||||||
|
D = np.array(det_json["camera"]["distortion_coefficients"],
|
||||||
|
dtype=np.float64).reshape(-1, 1)
|
||||||
|
marker_size_m = float(
|
||||||
|
det_json.get("vision_config", {}).get("MarkerSize", 0.025)
|
||||||
|
)
|
||||||
|
|
||||||
|
w2c = pose_json["camera_pose"]["world_to_camera"]
|
||||||
|
R_wc = np.array(w2c["rotation_matrix"], dtype=np.float64).reshape(3, 3)
|
||||||
|
t_wc = np.array(w2c["translation_m"], dtype=np.float64).reshape(3)
|
||||||
|
|
||||||
|
obj_corners = _marker_local_corners(marker_size_m)
|
||||||
|
result: Dict[int, Tuple[np.ndarray, np.ndarray]] = {}
|
||||||
|
|
||||||
|
for det in det_json.get("detections", []):
|
||||||
|
mid = int(det["marker_id"])
|
||||||
|
corners_px = np.array(
|
||||||
|
det["image_points_px"], dtype=np.float32
|
||||||
|
).reshape(4, 2)
|
||||||
|
|
||||||
|
ok, rvec, tvec = cv2.solvePnP(
|
||||||
|
obj_corners, corners_px,
|
||||||
|
K.astype(np.float32), D.astype(np.float32),
|
||||||
|
flags=cv2.SOLVEPNP_IPPE_SQUARE,
|
||||||
|
)
|
||||||
|
if not ok:
|
||||||
|
ok, rvec, tvec = cv2.solvePnP(
|
||||||
|
obj_corners, corners_px,
|
||||||
|
K.astype(np.float32), D.astype(np.float32),
|
||||||
|
flags=cv2.SOLVEPNP_ITERATIVE,
|
||||||
|
)
|
||||||
|
if not ok:
|
||||||
|
continue
|
||||||
|
|
||||||
|
tvec_f = tvec.reshape(3).astype(np.float64)
|
||||||
|
R_mc, _ = cv2.Rodrigues(rvec.reshape(3, 1))
|
||||||
|
R_mc = R_mc.astype(np.float64)
|
||||||
|
|
||||||
|
# Weltframe-Position: x_world = R_wc.T @ (x_cam - t_wc)
|
||||||
|
pos_world_m = R_wc.T @ (tvec_f - t_wc)
|
||||||
|
|
||||||
|
# Marker-Normale (Z-Achse) im Weltframe
|
||||||
|
normal_cam = R_mc[:, 2]
|
||||||
|
normal_world = R_wc.T @ normal_cam
|
||||||
|
nlen = np.linalg.norm(normal_world)
|
||||||
|
if nlen > 1e-9:
|
||||||
|
normal_world /= nlen
|
||||||
|
|
||||||
|
result[mid] = (pos_world_m * 1000.0, normal_world)
|
||||||
|
|
||||||
|
return result
|
||||||
|
|
||||||
|
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
# Main
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
def main() -> None:
|
||||||
|
os.makedirs(TEMP_DIR, exist_ok=True)
|
||||||
|
|
||||||
|
images = find_images()
|
||||||
|
if not images:
|
||||||
|
print(f"[FEHLER] Keine cam*_hires_*.jpg in {DATA_DIR}")
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
robot_path = find_robot_json()
|
||||||
|
print(f"Robot: {os.path.basename(robot_path)}")
|
||||||
|
print(f"Bilder: {[os.path.basename(i) for i in images]}")
|
||||||
|
print(f"Ausgabe-Ordner: {TEMP_DIR}")
|
||||||
|
|
||||||
|
# ------------------------------------------------------------------
|
||||||
|
# Schritt 1: ArUco-Erkennung
|
||||||
|
# ------------------------------------------------------------------
|
||||||
|
print("\n" + "=" * 60)
|
||||||
|
print("Schritt 1: ArUco-Erkennung")
|
||||||
|
print("=" * 60)
|
||||||
|
for img in images:
|
||||||
|
cam_id = cam_id_from_path(img)
|
||||||
|
run_step([
|
||||||
|
sys.executable,
|
||||||
|
os.path.join(PIPELINE_DIR, "1_detect_aruco_observations.py"),
|
||||||
|
"-i", img,
|
||||||
|
"-npz", npz_path(cam_id),
|
||||||
|
"-robot", robot_path,
|
||||||
|
"-cameraId", cam_id,
|
||||||
|
"-outDir", TEMP_DIR,
|
||||||
|
"--saveDebugImage",
|
||||||
|
])
|
||||||
|
|
||||||
|
# ------------------------------------------------------------------
|
||||||
|
# Schritt 2: Kamera-Positionen
|
||||||
|
# ------------------------------------------------------------------
|
||||||
|
print("\n" + "=" * 60)
|
||||||
|
print("Schritt 2: Kamera-Poses")
|
||||||
|
print("=" * 60)
|
||||||
|
for img in images:
|
||||||
|
run_step([
|
||||||
|
sys.executable,
|
||||||
|
os.path.join(PIPELINE_DIR, "2_estimate_camera_from_observations.py"),
|
||||||
|
"-i", detection_json_path(img),
|
||||||
|
"-robot", robot_path,
|
||||||
|
"-outDir", TEMP_DIR,
|
||||||
|
])
|
||||||
|
|
||||||
|
# ------------------------------------------------------------------
|
||||||
|
# Schritt 3: Beobachtungen zusammenführen
|
||||||
|
# ------------------------------------------------------------------
|
||||||
|
print("\n" + "=" * 60)
|
||||||
|
print("Schritt 3: Positionen + Normalen")
|
||||||
|
print("=" * 60)
|
||||||
|
|
||||||
|
marker_set_map = load_marker_set_map(robot_path)
|
||||||
|
a0_ref = load_a0_reference(robot_path)
|
||||||
|
|
||||||
|
# mid -> Liste von (pos_mm, normal)
|
||||||
|
observations: Dict[int, List[Tuple[np.ndarray, np.ndarray]]] = {}
|
||||||
|
|
||||||
|
# cam_id -> Welt-Position (mm) / QA-Metadaten
|
||||||
|
camera_positions: Dict[str, np.ndarray] = {}
|
||||||
|
camera_meta: Dict[str, dict] = {}
|
||||||
|
|
||||||
|
for img in images:
|
||||||
|
det_path = detection_json_path(img)
|
||||||
|
pose_path = camera_pose_json_path(img)
|
||||||
|
|
||||||
|
if not os.path.exists(det_path):
|
||||||
|
print(f"[WARN] Fehlend: {det_path}")
|
||||||
|
continue
|
||||||
|
if not os.path.exists(pose_path):
|
||||||
|
print(f"[WARN] Fehlend: {pose_path}")
|
||||||
|
continue
|
||||||
|
|
||||||
|
with open(det_path, "r", encoding="utf-8") as f:
|
||||||
|
det_json = json.load(f)
|
||||||
|
with open(pose_path, "r", encoding="utf-8") as f:
|
||||||
|
pose_json = json.load(f)
|
||||||
|
|
||||||
|
cam_id = cam_id_from_path(img)
|
||||||
|
ciw = pose_json["camera_pose"]["camera_in_world"]["position_mm"]
|
||||||
|
camera_positions[cam_id] = np.array(ciw, dtype=float)
|
||||||
|
est = pose_json.get("estimation", {})
|
||||||
|
camera_meta[cam_id] = {
|
||||||
|
"rms_px": est.get("residual_rms_px"),
|
||||||
|
"num_markers": est.get("num_used_markers"),
|
||||||
|
}
|
||||||
|
|
||||||
|
cam_name = os.path.basename(img)
|
||||||
|
poses = estimate_marker_poses(det_json, pose_json)
|
||||||
|
print(f" {cam_name}: {len(poses)} Marker mit Pose")
|
||||||
|
|
||||||
|
for mid, pn in poses.items():
|
||||||
|
observations.setdefault(mid, []).append(pn)
|
||||||
|
|
||||||
|
# ------------------------------------------------------------------
|
||||||
|
# Mittelwert über alle Kameras + CSV schreiben
|
||||||
|
# ------------------------------------------------------------------
|
||||||
|
rows = []
|
||||||
|
for mid in sorted(observations.keys()):
|
||||||
|
obs_list = observations[mid]
|
||||||
|
positions = np.array([p for p, _ in obs_list])
|
||||||
|
normals = np.array([n for _, n in obs_list])
|
||||||
|
|
||||||
|
pos_mean = positions.mean(axis=0)
|
||||||
|
|
||||||
|
n_sum = normals.sum(axis=0)
|
||||||
|
n_norm = np.linalg.norm(n_sum)
|
||||||
|
normal_mean = n_sum / n_norm if n_norm > 1e-9 else np.array([0.0, 0.0, 1.0])
|
||||||
|
|
||||||
|
set_label = marker_set_map.get(mid, "?")
|
||||||
|
|
||||||
|
# dxy: planarer Abgleich gegen robot.json — nur für A0 definiert
|
||||||
|
if mid in a0_ref:
|
||||||
|
d = pos_mean[:2] - a0_ref[mid]
|
||||||
|
dxy = round(float(np.hypot(d[0], d[1])), 2)
|
||||||
|
else:
|
||||||
|
dxy = ""
|
||||||
|
|
||||||
|
rows.append({
|
||||||
|
"id": mid,
|
||||||
|
"set": set_label,
|
||||||
|
"SeenByCount": len(obs_list),
|
||||||
|
"x": round(float(pos_mean[0]), 2),
|
||||||
|
"y": round(float(pos_mean[1]), 2),
|
||||||
|
"z": round(float(pos_mean[2]), 2),
|
||||||
|
"nx": round(float(normal_mean[0]), 4),
|
||||||
|
"ny": round(float(normal_mean[1]), 4),
|
||||||
|
"nz": round(float(normal_mean[2]), 4),
|
||||||
|
"dxy": dxy,
|
||||||
|
})
|
||||||
|
|
||||||
|
# Kamera-Positionen als eigene Zeilen (oben in der CSV)
|
||||||
|
camera_rows = []
|
||||||
|
for cam_id in sorted(camera_positions.keys()):
|
||||||
|
pos = camera_positions[cam_id]
|
||||||
|
camera_rows.append({
|
||||||
|
"id": cam_id,
|
||||||
|
"set": "CAMERA",
|
||||||
|
"SeenByCount": "",
|
||||||
|
"x": round(float(pos[0]), 2),
|
||||||
|
"y": round(float(pos[1]), 2),
|
||||||
|
"z": round(float(pos[2]), 2),
|
||||||
|
"nx": "",
|
||||||
|
"ny": "",
|
||||||
|
"nz": "",
|
||||||
|
"dxy": "",
|
||||||
|
})
|
||||||
|
|
||||||
|
csv_path = os.path.join(TEMP_DIR, "detections.csv")
|
||||||
|
fieldnames = ["id", "set", "SeenByCount", "x", "y", "z", "nx", "ny", "nz", "dxy"]
|
||||||
|
|
||||||
|
with open(csv_path, "w", newline="", encoding="utf-8") as f:
|
||||||
|
writer = csv.DictWriter(f, fieldnames=fieldnames)
|
||||||
|
writer.writeheader()
|
||||||
|
writer.writerows(camera_rows + rows)
|
||||||
|
|
||||||
|
# ------------------------------------------------------------------
|
||||||
|
# Konsolenübersicht
|
||||||
|
# ------------------------------------------------------------------
|
||||||
|
print(f"\nGeschrieben: {csv_path} "
|
||||||
|
f"({len(rows)} Marker + {len(camera_rows)} Kameras)\n")
|
||||||
|
|
||||||
|
# Kamera-Positionen + Reprojektions-RMS (schlechte Kamera erkennen)
|
||||||
|
print("Kamera-Positionen (Welt, mm):")
|
||||||
|
chdr = f"{'cam':>5} {'x':>9} {'y':>9} {'z':>9} {'rms_px':>7} {'#mk':>4}"
|
||||||
|
print(chdr)
|
||||||
|
print("-" * len(chdr))
|
||||||
|
for cam_id in sorted(camera_positions.keys()):
|
||||||
|
pos = camera_positions[cam_id]
|
||||||
|
meta = camera_meta.get(cam_id, {})
|
||||||
|
rms = meta.get("rms_px")
|
||||||
|
nmk = meta.get("num_markers")
|
||||||
|
rms_s = f"{rms:7.2f}" if rms is not None else " n/a"
|
||||||
|
print(f"{cam_id:>5} {pos[0]:>9.1f} {pos[1]:>9.1f} {pos[2]:>9.1f} "
|
||||||
|
f"{rms_s} {str(nmk):>4}")
|
||||||
|
|
||||||
|
# Marker-Tabelle
|
||||||
|
print()
|
||||||
|
hdr = (f"{'id':>5} {'set':<12} {'cams':>4} {'x':>8} {'y':>8} {'z':>8} "
|
||||||
|
f"{'nx':>7} {'ny':>7} {'nz':>7} {'dxy':>7}")
|
||||||
|
print(hdr)
|
||||||
|
print("-" * len(hdr))
|
||||||
|
for row in rows:
|
||||||
|
dxy_s = f"{row['dxy']:7.2f}" if row['dxy'] != "" else " -"
|
||||||
|
print(
|
||||||
|
f"{row['id']:>5} {row['set']:<12} {row['SeenByCount']:>4} "
|
||||||
|
f"{row['x']:>8.1f} {row['y']:>8.1f} {row['z']:>8.1f} "
|
||||||
|
f"{row['nx']:>7.4f} {row['ny']:>7.4f} {row['nz']:>7.4f} {dxy_s}"
|
||||||
|
)
|
||||||
|
|
||||||
|
# A0-Abgleich-Statistik (planarer Fehler gegen robot.json)
|
||||||
|
dxys = np.array([row["dxy"] for row in rows if row["dxy"] != ""], dtype=float)
|
||||||
|
if dxys.size:
|
||||||
|
print(f"\nA0 dxy (Welt-Abgleich, mm): n={dxys.size} "
|
||||||
|
f"mean={dxys.mean():.2f} median={np.median(dxys):.2f} "
|
||||||
|
f"max={dxys.max():.2f}")
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
||||||
2956
test/temp/cam0_hires_1781074183695_aruco_detection.json
Normal file
2956
test/temp/cam0_hires_1781074183695_aruco_detection.json
Normal file
File diff suppressed because it is too large
Load Diff
719
test/temp/cam0_hires_1781074183695_camera_pose.json
Normal file
719
test/temp/cam0_hires_1781074183695_camera_pose.json
Normal file
@@ -0,0 +1,719 @@
|
|||||||
|
{
|
||||||
|
"schema_version": "1.0",
|
||||||
|
"created_utc": "2026-06-10T10:41:07Z",
|
||||||
|
"source": {
|
||||||
|
"detection_json": "C:\\Users\\kech\\SynologyDrive\\2026-AppServer-AppRobot\\appRobotRendering\\test\\temp\\cam0_hires_1781074183695_aruco_detection.json",
|
||||||
|
"robot_json": "C:\\Users\\kech\\SynologyDrive\\2026-AppServer-AppRobot\\appRobotRendering\\data\\testPictures\\robot_1781069752019.json"
|
||||||
|
},
|
||||||
|
"camera": {
|
||||||
|
"camera_id": "cam0",
|
||||||
|
"camera_matrix": [
|
||||||
|
[
|
||||||
|
1429.6978759765625,
|
||||||
|
0.0,
|
||||||
|
633.3245239257812
|
||||||
|
],
|
||||||
|
[
|
||||||
|
0.0,
|
||||||
|
1414.5067138671875,
|
||||||
|
468.4399108886719
|
||||||
|
],
|
||||||
|
[
|
||||||
|
0.0,
|
||||||
|
0.0,
|
||||||
|
1.0
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"distortion_coefficients": [
|
||||||
|
0.0862322673201561,
|
||||||
|
0.14179007709026337,
|
||||||
|
0.0014998731203377247,
|
||||||
|
-0.004277258180081844,
|
||||||
|
-0.7496029734611511
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"estimation": {
|
||||||
|
"method": "single_camera_marker_center_lm",
|
||||||
|
"description": "Rigid init from per-marker pose estimates, followed by LM on normalized marker-center reprojection residuals.",
|
||||||
|
"marker_size_m": 0.025,
|
||||||
|
"num_used_markers": 37,
|
||||||
|
"used_marker_ids": [
|
||||||
|
95,
|
||||||
|
97,
|
||||||
|
51,
|
||||||
|
55,
|
||||||
|
54,
|
||||||
|
47,
|
||||||
|
79,
|
||||||
|
96,
|
||||||
|
85,
|
||||||
|
62,
|
||||||
|
57,
|
||||||
|
105,
|
||||||
|
59,
|
||||||
|
48,
|
||||||
|
102,
|
||||||
|
86,
|
||||||
|
71,
|
||||||
|
92,
|
||||||
|
72,
|
||||||
|
84,
|
||||||
|
65,
|
||||||
|
80,
|
||||||
|
89,
|
||||||
|
60,
|
||||||
|
56,
|
||||||
|
63,
|
||||||
|
99,
|
||||||
|
68,
|
||||||
|
46,
|
||||||
|
87,
|
||||||
|
67,
|
||||||
|
50,
|
||||||
|
98,
|
||||||
|
76,
|
||||||
|
70,
|
||||||
|
100,
|
||||||
|
91
|
||||||
|
],
|
||||||
|
"history": {
|
||||||
|
"iters": [
|
||||||
|
0,
|
||||||
|
1,
|
||||||
|
2,
|
||||||
|
3
|
||||||
|
],
|
||||||
|
"rms": [
|
||||||
|
0.013977914197306877,
|
||||||
|
0.0012063861436378766,
|
||||||
|
0.00041790882674225575,
|
||||||
|
0.000417864448222557
|
||||||
|
],
|
||||||
|
"lambda": [
|
||||||
|
0.001,
|
||||||
|
0.0005,
|
||||||
|
0.00025,
|
||||||
|
0.000125
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"residual_rms_px": 0.8488907668283678,
|
||||||
|
"residual_median_px": 0.6015952243821542,
|
||||||
|
"residual_max_px": 3.215993321685572,
|
||||||
|
"sigma2_normalized": 1.900175232935359e-07
|
||||||
|
},
|
||||||
|
"camera_pose": {
|
||||||
|
"world_to_camera": {
|
||||||
|
"rotation_matrix": [
|
||||||
|
[
|
||||||
|
0.7153297066688538,
|
||||||
|
-0.6744856238365173,
|
||||||
|
0.18268170952796936
|
||||||
|
],
|
||||||
|
[
|
||||||
|
-0.24956846237182617,
|
||||||
|
-0.4907773733139038,
|
||||||
|
-0.834777295589447
|
||||||
|
],
|
||||||
|
[
|
||||||
|
0.6527013182640076,
|
||||||
|
0.5515493750572205,
|
||||||
|
-0.5193979740142822
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"translation_m": [
|
||||||
|
-0.5062417984008789,
|
||||||
|
0.09014879167079926,
|
||||||
|
0.7660393714904785
|
||||||
|
],
|
||||||
|
"rvec_rad": [
|
||||||
|
2.0691228499009884,
|
||||||
|
-0.7015145339853286,
|
||||||
|
0.6341981126084956
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"camera_in_world": {
|
||||||
|
"position_m": [
|
||||||
|
-0.11536678671836853,
|
||||||
|
-0.719718337059021,
|
||||||
|
0.5656145811080933
|
||||||
|
],
|
||||||
|
"position_mm": [
|
||||||
|
-115.36678314208984,
|
||||||
|
-719.7183227539062,
|
||||||
|
565.6145629882812
|
||||||
|
],
|
||||||
|
"orientation_deg": {
|
||||||
|
"roll": 133.28041076660156,
|
||||||
|
"pitch": -40.74557876586914,
|
||||||
|
"yaw": -19.2331600189209
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"uncertainty": {
|
||||||
|
"pose_covariance_6x6": [
|
||||||
|
[
|
||||||
|
2.384673507521362e-07,
|
||||||
|
-4.007478825357904e-08,
|
||||||
|
-8.83056895699674e-08,
|
||||||
|
-2.241640771133345e-08,
|
||||||
|
5.7720270356521624e-08,
|
||||||
|
1.378850799895014e-07
|
||||||
|
],
|
||||||
|
[
|
||||||
|
-4.0074788253579336e-08,
|
||||||
|
1.2484717569362809e-07,
|
||||||
|
5.533958978882963e-08,
|
||||||
|
-4.109574324899393e-09,
|
||||||
|
-6.375572286576732e-08,
|
||||||
|
-3.447971573741165e-08
|
||||||
|
],
|
||||||
|
[
|
||||||
|
-8.830568956996727e-08,
|
||||||
|
5.533958978882929e-08,
|
||||||
|
3.5195680429658137e-07,
|
||||||
|
7.077668257887362e-08,
|
||||||
|
-9.83714238710889e-08,
|
||||||
|
-1.8066440288226506e-07
|
||||||
|
],
|
||||||
|
[
|
||||||
|
-2.2416407711333367e-08,
|
||||||
|
-4.10957432489948e-09,
|
||||||
|
7.07766825788736e-08,
|
||||||
|
2.2608963627527025e-08,
|
||||||
|
-1.477120449173928e-08,
|
||||||
|
-4.530858533789268e-08
|
||||||
|
],
|
||||||
|
[
|
||||||
|
5.772027035652173e-08,
|
||||||
|
-6.375572286576727e-08,
|
||||||
|
-9.837142387108908e-08,
|
||||||
|
-1.4771204491739334e-08,
|
||||||
|
5.6162582570999035e-08,
|
||||||
|
7.030683489124922e-08
|
||||||
|
],
|
||||||
|
[
|
||||||
|
1.3788507998950147e-07,
|
||||||
|
-3.44797157374115e-08,
|
||||||
|
-1.8066440288226543e-07,
|
||||||
|
-4.53085853378928e-08,
|
||||||
|
7.030683489124922e-08,
|
||||||
|
2.3454528563310696e-07
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"parameter_std": {
|
||||||
|
"rvec_std_deg": [
|
||||||
|
0.02797931616962056,
|
||||||
|
0.020244730206848253,
|
||||||
|
0.03399126405526364
|
||||||
|
],
|
||||||
|
"tvec_std_m": [
|
||||||
|
0.00015036277340993356,
|
||||||
|
0.0002369864607335175,
|
||||||
|
0.0004842987565884378
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"camera_center_std_m": [
|
||||||
|
0.0003928571281192472,
|
||||||
|
0.00037055936963847897,
|
||||||
|
0.0005785760565158723
|
||||||
|
],
|
||||||
|
"camera_center_std_mm": [
|
||||||
|
0.39285712811924717,
|
||||||
|
0.37055936963847896,
|
||||||
|
0.5785760565158723
|
||||||
|
],
|
||||||
|
"orientation_std_deg": {
|
||||||
|
"roll": 0.034843440181318734,
|
||||||
|
"pitch": 0.02499050875561387,
|
||||||
|
"yaw": 0.029035517784143414
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"observations": {
|
||||||
|
"markers": [
|
||||||
|
{
|
||||||
|
"marker_id": 95,
|
||||||
|
"observed_center_px": [
|
||||||
|
259.25,
|
||||||
|
854.0
|
||||||
|
],
|
||||||
|
"projected_center_px": [
|
||||||
|
258.490478515625,
|
||||||
|
853.5327758789062
|
||||||
|
],
|
||||||
|
"reprojection_error_px": 0.8917237602301682,
|
||||||
|
"confidence": 0.8258754592596019
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"marker_id": 97,
|
||||||
|
"observed_center_px": [
|
||||||
|
538.5,
|
||||||
|
857.75
|
||||||
|
],
|
||||||
|
"projected_center_px": [
|
||||||
|
538.7420654296875,
|
||||||
|
858.910888671875
|
||||||
|
],
|
||||||
|
"reprojection_error_px": 1.1858575718599158,
|
||||||
|
"confidence": 0.9204299158225671
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"marker_id": 51,
|
||||||
|
"observed_center_px": [
|
||||||
|
129.5,
|
||||||
|
750.75
|
||||||
|
],
|
||||||
|
"projected_center_px": [
|
||||||
|
128.6764678955078,
|
||||||
|
750.4482421875
|
||||||
|
],
|
||||||
|
"reprojection_error_px": 0.8770763390572774,
|
||||||
|
"confidence": 0.6584739246254625
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"marker_id": 55,
|
||||||
|
"observed_center_px": [
|
||||||
|
402.75,
|
||||||
|
765.25
|
||||||
|
],
|
||||||
|
"projected_center_px": [
|
||||||
|
402.4529724121094,
|
||||||
|
765.8202514648438
|
||||||
|
],
|
||||||
|
"reprojection_error_px": 0.6429713221634116,
|
||||||
|
"confidence": 0.7393243794945659
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"marker_id": 54,
|
||||||
|
"observed_center_px": [
|
||||||
|
557.0,
|
||||||
|
796.75
|
||||||
|
],
|
||||||
|
"projected_center_px": [
|
||||||
|
556.9273071289062,
|
||||||
|
797.4539184570312
|
||||||
|
],
|
||||||
|
"reprojection_error_px": 0.7076619586053134,
|
||||||
|
"confidence": 0.7478392159262601
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"marker_id": 47,
|
||||||
|
"observed_center_px": [
|
||||||
|
510.5,
|
||||||
|
750.25
|
||||||
|
],
|
||||||
|
"projected_center_px": [
|
||||||
|
511.28216552734375,
|
||||||
|
750.1286010742188
|
||||||
|
],
|
||||||
|
"reprojection_error_px": 0.7915305498499524,
|
||||||
|
"confidence": 0.7141846645068768
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"marker_id": 79,
|
||||||
|
"observed_center_px": [
|
||||||
|
343.25,
|
||||||
|
648.75
|
||||||
|
],
|
||||||
|
"projected_center_px": [
|
||||||
|
342.9404296875,
|
||||||
|
648.327880859375
|
||||||
|
],
|
||||||
|
"reprojection_error_px": 0.5234676181611774,
|
||||||
|
"confidence": 0.545522217065577
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"marker_id": 96,
|
||||||
|
"observed_center_px": [
|
||||||
|
443.5,
|
||||||
|
642.0
|
||||||
|
],
|
||||||
|
"projected_center_px": [
|
||||||
|
444.098388671875,
|
||||||
|
641.9876708984375
|
||||||
|
],
|
||||||
|
"reprojection_error_px": 0.5985156717861821,
|
||||||
|
"confidence": 0.5196626187985754
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"marker_id": 85,
|
||||||
|
"observed_center_px": [
|
||||||
|
725.5,
|
||||||
|
682.25
|
||||||
|
],
|
||||||
|
"projected_center_px": [
|
||||||
|
725.919189453125,
|
||||||
|
681.0695190429688
|
||||||
|
],
|
||||||
|
"reprojection_error_px": 1.2526991209083898,
|
||||||
|
"confidence": 0.4333112154683819
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"marker_id": 62,
|
||||||
|
"observed_center_px": [
|
||||||
|
476.0,
|
||||||
|
615.0
|
||||||
|
],
|
||||||
|
"projected_center_px": [
|
||||||
|
476.35174560546875,
|
||||||
|
615.0320434570312
|
||||||
|
],
|
||||||
|
"reprojection_error_px": 0.35320214340387446,
|
||||||
|
"confidence": 0.48909895359164274
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"marker_id": 57,
|
||||||
|
"observed_center_px": [
|
||||||
|
877.0,
|
||||||
|
674.75
|
||||||
|
],
|
||||||
|
"projected_center_px": [
|
||||||
|
877.175048828125,
|
||||||
|
674.4921875
|
||||||
|
],
|
||||||
|
"reprojection_error_px": 0.3116237753833712,
|
||||||
|
"confidence": 0.3447832172321244
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"marker_id": 105,
|
||||||
|
"observed_center_px": [
|
||||||
|
697.0,
|
||||||
|
632.5
|
||||||
|
],
|
||||||
|
"projected_center_px": [
|
||||||
|
697.4603271484375,
|
||||||
|
631.9234008789062
|
||||||
|
],
|
||||||
|
"reprojection_error_px": 0.7378127337168187,
|
||||||
|
"confidence": 0.3941136916116856
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"marker_id": 59,
|
||||||
|
"observed_center_px": [
|
||||||
|
805.5,
|
||||||
|
596.75
|
||||||
|
],
|
||||||
|
"projected_center_px": [
|
||||||
|
805.6655883789062,
|
||||||
|
596.3532104492188
|
||||||
|
],
|
||||||
|
"reprojection_error_px": 0.42995518235972685,
|
||||||
|
"confidence": 0.272074573917431
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"marker_id": 48,
|
||||||
|
"observed_center_px": [
|
||||||
|
902.25,
|
||||||
|
601.5
|
||||||
|
],
|
||||||
|
"projected_center_px": [
|
||||||
|
902.2860107421875,
|
||||||
|
601.1778564453125
|
||||||
|
],
|
||||||
|
"reprojection_error_px": 0.32415003220668187,
|
||||||
|
"confidence": 0.27826623535156253
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"marker_id": 102,
|
||||||
|
"observed_center_px": [
|
||||||
|
771.25,
|
||||||
|
547.75
|
||||||
|
],
|
||||||
|
"projected_center_px": [
|
||||||
|
770.7193603515625,
|
||||||
|
547.3040771484375
|
||||||
|
],
|
||||||
|
"reprojection_error_px": 0.6931274241000027,
|
||||||
|
"confidence": 0.27992431449450633
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"marker_id": 86,
|
||||||
|
"observed_center_px": [
|
||||||
|
79.25,
|
||||||
|
320.25
|
||||||
|
],
|
||||||
|
"projected_center_px": [
|
||||||
|
78.74799346923828,
|
||||||
|
321.10186767578125
|
||||||
|
],
|
||||||
|
"reprojection_error_px": 0.988781620970154,
|
||||||
|
"confidence": 0.1358137908003952
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"marker_id": 71,
|
||||||
|
"observed_center_px": [
|
||||||
|
912.0,
|
||||||
|
552.0
|
||||||
|
],
|
||||||
|
"projected_center_px": [
|
||||||
|
912.014404296875,
|
||||||
|
551.594970703125
|
||||||
|
],
|
||||||
|
"reprojection_error_px": 0.40528535021083606,
|
||||||
|
"confidence": 0.23938019040412045
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"marker_id": 92,
|
||||||
|
"observed_center_px": [
|
||||||
|
730.25,
|
||||||
|
523.75
|
||||||
|
],
|
||||||
|
"projected_center_px": [
|
||||||
|
730.6965942382812,
|
||||||
|
523.346923828125
|
||||||
|
],
|
||||||
|
"reprojection_error_px": 0.6015952243821542,
|
||||||
|
"confidence": 0.2632574407582938
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"marker_id": 72,
|
||||||
|
"observed_center_px": [
|
||||||
|
231.25,
|
||||||
|
355.0
|
||||||
|
],
|
||||||
|
"projected_center_px": [
|
||||||
|
231.26632690429688,
|
||||||
|
356.1981201171875
|
||||||
|
],
|
||||||
|
"reprojection_error_px": 1.198231356213527,
|
||||||
|
"confidence": 0.2033684790201144
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"marker_id": 84,
|
||||||
|
"observed_center_px": [
|
||||||
|
151.5,
|
||||||
|
328.5
|
||||||
|
],
|
||||||
|
"projected_center_px": [
|
||||||
|
152.23899841308594,
|
||||||
|
329.2857971191406
|
||||||
|
],
|
||||||
|
"reprojection_error_px": 1.078700962729356,
|
||||||
|
"confidence": 0.16272265589141124
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"marker_id": 65,
|
||||||
|
"observed_center_px": [
|
||||||
|
965.0,
|
||||||
|
541.5
|
||||||
|
],
|
||||||
|
"projected_center_px": [
|
||||||
|
965.0440673828125,
|
||||||
|
541.2013549804688
|
||||||
|
],
|
||||||
|
"reprojection_error_px": 0.30187875367233796,
|
||||||
|
"confidence": 0.1894175373214682
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"marker_id": 80,
|
||||||
|
"observed_center_px": [
|
||||||
|
1046.25,
|
||||||
|
545.25
|
||||||
|
],
|
||||||
|
"projected_center_px": [
|
||||||
|
1046.1553955078125,
|
||||||
|
545.08056640625
|
||||||
|
],
|
||||||
|
"reprojection_error_px": 0.194056055388887,
|
||||||
|
"confidence": 0.16189579196314718
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"marker_id": 89,
|
||||||
|
"observed_center_px": [
|
||||||
|
1159.25,
|
||||||
|
521.5
|
||||||
|
],
|
||||||
|
"projected_center_px": [
|
||||||
|
1157.6162109375,
|
||||||
|
524.2700805664062
|
||||||
|
],
|
||||||
|
"reprojection_error_px": 3.215993321685572,
|
||||||
|
"confidence": 0.17985049003304185
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"marker_id": 60,
|
||||||
|
"observed_center_px": [
|
||||||
|
167.5,
|
||||||
|
310.0
|
||||||
|
],
|
||||||
|
"projected_center_px": [
|
||||||
|
167.38864135742188,
|
||||||
|
310.4362487792969
|
||||||
|
],
|
||||||
|
"reprojection_error_px": 0.4502374314901596,
|
||||||
|
"confidence": 0.15039999323852157
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"marker_id": 56,
|
||||||
|
"observed_center_px": [
|
||||||
|
311.0,
|
||||||
|
355.75
|
||||||
|
],
|
||||||
|
"projected_center_px": [
|
||||||
|
310.8277587890625,
|
||||||
|
356.5285339355469
|
||||||
|
],
|
||||||
|
"reprojection_error_px": 0.7973594694636303,
|
||||||
|
"confidence": 0.20911960257932388
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"marker_id": 63,
|
||||||
|
"observed_center_px": [
|
||||||
|
885.75,
|
||||||
|
511.25
|
||||||
|
],
|
||||||
|
"projected_center_px": [
|
||||||
|
885.6793212890625,
|
||||||
|
511.126708984375
|
||||||
|
],
|
||||||
|
"reprojection_error_px": 0.14211317572143223,
|
||||||
|
"confidence": 0.2003141260801938
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"marker_id": 99,
|
||||||
|
"observed_center_px": [
|
||||||
|
1091.75,
|
||||||
|
505.0
|
||||||
|
],
|
||||||
|
"projected_center_px": [
|
||||||
|
1091.5972900390625,
|
||||||
|
505.013671875
|
||||||
|
],
|
||||||
|
"reprojection_error_px": 0.15332074985320285,
|
||||||
|
"confidence": 0.15127373626685678
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"marker_id": 68,
|
||||||
|
"observed_center_px": [
|
||||||
|
385.25,
|
||||||
|
339.0
|
||||||
|
],
|
||||||
|
"projected_center_px": [
|
||||||
|
384.7447204589844,
|
||||||
|
338.80047607421875
|
||||||
|
],
|
||||||
|
"reprojection_error_px": 0.5432469158017581,
|
||||||
|
"confidence": 0.181058749706097
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"marker_id": 46,
|
||||||
|
"observed_center_px": [
|
||||||
|
338.25,
|
||||||
|
339.25
|
||||||
|
],
|
||||||
|
"projected_center_px": [
|
||||||
|
338.55401611328125,
|
||||||
|
339.2395324707031
|
||||||
|
],
|
||||||
|
"reprojection_error_px": 0.3041962628044907,
|
||||||
|
"confidence": 0.16268174014312184
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"marker_id": 87,
|
||||||
|
"observed_center_px": [
|
||||||
|
1008.25,
|
||||||
|
466.75
|
||||||
|
],
|
||||||
|
"projected_center_px": [
|
||||||
|
1008.1798706054688,
|
||||||
|
466.3894348144531
|
||||||
|
],
|
||||||
|
"reprojection_error_px": 0.36732190923735014,
|
||||||
|
"confidence": 0.13144713990357454
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"marker_id": 67,
|
||||||
|
"observed_center_px": [
|
||||||
|
272.5,
|
||||||
|
301.5
|
||||||
|
],
|
||||||
|
"projected_center_px": [
|
||||||
|
272.3302001953125,
|
||||||
|
301.4171142578125
|
||||||
|
],
|
||||||
|
"reprojection_error_px": 0.18894978150261477,
|
||||||
|
"confidence": 0.1526939471328476
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"marker_id": 50,
|
||||||
|
"observed_center_px": [
|
||||||
|
357.25,
|
||||||
|
318.75
|
||||||
|
],
|
||||||
|
"projected_center_px": [
|
||||||
|
357.13116455078125,
|
||||||
|
318.4410400390625
|
||||||
|
],
|
||||||
|
"reprojection_error_px": 0.33102586221249186,
|
||||||
|
"confidence": 0.16588357002730827
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"marker_id": 98,
|
||||||
|
"observed_center_px": [
|
||||||
|
294.0,
|
||||||
|
270.5
|
||||||
|
],
|
||||||
|
"projected_center_px": [
|
||||||
|
294.2515869140625,
|
||||||
|
269.8180236816406
|
||||||
|
],
|
||||||
|
"reprojection_error_px": 0.7269027955170481,
|
||||||
|
"confidence": 0.12006603211516774
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"marker_id": 76,
|
||||||
|
"observed_center_px": [
|
||||||
|
488.0,
|
||||||
|
318.75
|
||||||
|
],
|
||||||
|
"projected_center_px": [
|
||||||
|
488.0938720703125,
|
||||||
|
318.10589599609375
|
||||||
|
],
|
||||||
|
"reprojection_error_px": 0.6509085445996369,
|
||||||
|
"confidence": 0.14193112858785442
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"marker_id": 70,
|
||||||
|
"observed_center_px": [
|
||||||
|
328.0,
|
||||||
|
272.25
|
||||||
|
],
|
||||||
|
"projected_center_px": [
|
||||||
|
328.2170715332031,
|
||||||
|
272.0340270996094
|
||||||
|
],
|
||||||
|
"reprojection_error_px": 0.3062096409819492,
|
||||||
|
"confidence": 0.11352543707690875
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"marker_id": 100,
|
||||||
|
"observed_center_px": [
|
||||||
|
578.5,
|
||||||
|
294.75
|
||||||
|
],
|
||||||
|
"projected_center_px": [
|
||||||
|
579.1131591796875,
|
||||||
|
294.27313232421875
|
||||||
|
],
|
||||||
|
"reprojection_error_px": 0.7767669919866956,
|
||||||
|
"confidence": 0.13400150965155774
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"marker_id": 91,
|
||||||
|
"observed_center_px": [
|
||||||
|
416.75,
|
||||||
|
242.25
|
||||||
|
],
|
||||||
|
"projected_center_px": [
|
||||||
|
417.3974609375,
|
||||||
|
241.78074645996094
|
||||||
|
],
|
||||||
|
"reprojection_error_px": 0.7996277574143927,
|
||||||
|
"confidence": 0.11558895571856645
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"qa": {
|
||||||
|
"sanity_notes": []
|
||||||
|
}
|
||||||
|
}
|
||||||
BIN
test/temp/cam0_hires_1781074183695_debug.jpg
Normal file
BIN
test/temp/cam0_hires_1781074183695_debug.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 205 KiB |
1850
test/temp/cam1_hires_1781074183695_aruco_detection.json
Normal file
1850
test/temp/cam1_hires_1781074183695_aruco_detection.json
Normal file
File diff suppressed because it is too large
Load Diff
551
test/temp/cam1_hires_1781074183695_camera_pose.json
Normal file
551
test/temp/cam1_hires_1781074183695_camera_pose.json
Normal file
@@ -0,0 +1,551 @@
|
|||||||
|
{
|
||||||
|
"schema_version": "1.0",
|
||||||
|
"created_utc": "2026-06-10T10:41:08Z",
|
||||||
|
"source": {
|
||||||
|
"detection_json": "C:\\Users\\kech\\SynologyDrive\\2026-AppServer-AppRobot\\appRobotRendering\\test\\temp\\cam1_hires_1781074183695_aruco_detection.json",
|
||||||
|
"robot_json": "C:\\Users\\kech\\SynologyDrive\\2026-AppServer-AppRobot\\appRobotRendering\\data\\testPictures\\robot_1781069752019.json"
|
||||||
|
},
|
||||||
|
"camera": {
|
||||||
|
"camera_id": "cam1",
|
||||||
|
"camera_matrix": [
|
||||||
|
[
|
||||||
|
1335.5843505859375,
|
||||||
|
0.0,
|
||||||
|
669.8739013671875
|
||||||
|
],
|
||||||
|
[
|
||||||
|
0.0,
|
||||||
|
1340.3487548828125,
|
||||||
|
434.5127258300781
|
||||||
|
],
|
||||||
|
[
|
||||||
|
0.0,
|
||||||
|
0.0,
|
||||||
|
1.0
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"distortion_coefficients": [
|
||||||
|
0.013518857769668102,
|
||||||
|
0.6387264132499695,
|
||||||
|
-0.004291425924748182,
|
||||||
|
-0.003142312401905656,
|
||||||
|
-1.9807322025299072
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"estimation": {
|
||||||
|
"method": "single_camera_marker_center_lm",
|
||||||
|
"description": "Rigid init from per-marker pose estimates, followed by LM on normalized marker-center reprojection residuals.",
|
||||||
|
"marker_size_m": 0.025,
|
||||||
|
"num_used_markers": 25,
|
||||||
|
"used_marker_ids": [
|
||||||
|
57,
|
||||||
|
59,
|
||||||
|
85,
|
||||||
|
105,
|
||||||
|
54,
|
||||||
|
97,
|
||||||
|
92,
|
||||||
|
102,
|
||||||
|
66,
|
||||||
|
47,
|
||||||
|
95,
|
||||||
|
55,
|
||||||
|
62,
|
||||||
|
69,
|
||||||
|
96,
|
||||||
|
79,
|
||||||
|
103,
|
||||||
|
58,
|
||||||
|
64,
|
||||||
|
51,
|
||||||
|
74,
|
||||||
|
52,
|
||||||
|
75,
|
||||||
|
81,
|
||||||
|
77
|
||||||
|
],
|
||||||
|
"history": {
|
||||||
|
"iters": [
|
||||||
|
0,
|
||||||
|
1,
|
||||||
|
2,
|
||||||
|
3
|
||||||
|
],
|
||||||
|
"rms": [
|
||||||
|
0.00821410924365016,
|
||||||
|
0.0005796130478329388,
|
||||||
|
0.0004528899483522234,
|
||||||
|
0.0004528893564058897
|
||||||
|
],
|
||||||
|
"lambda": [
|
||||||
|
0.001,
|
||||||
|
0.0005,
|
||||||
|
0.00025,
|
||||||
|
0.000125
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"residual_rms_px": 0.867342582216324,
|
||||||
|
"residual_median_px": 0.608681178523418,
|
||||||
|
"residual_max_px": 2.7179420081717525,
|
||||||
|
"sigma2_normalized": 2.3307814675638535e-07
|
||||||
|
},
|
||||||
|
"camera_pose": {
|
||||||
|
"world_to_camera": {
|
||||||
|
"rotation_matrix": [
|
||||||
|
[
|
||||||
|
-0.980829656124115,
|
||||||
|
0.1278911679983139,
|
||||||
|
0.14702728390693665
|
||||||
|
],
|
||||||
|
[
|
||||||
|
0.16805413365364075,
|
||||||
|
0.9370887875556946,
|
||||||
|
0.30597788095474243
|
||||||
|
],
|
||||||
|
[
|
||||||
|
-0.09864574670791626,
|
||||||
|
0.32482072710990906,
|
||||||
|
-0.9406170845031738
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"translation_m": [
|
||||||
|
0.2543368637561798,
|
||||||
|
0.17617078125476837,
|
||||||
|
1.0045982599258423
|
||||||
|
],
|
||||||
|
"rvec_rad": [
|
||||||
|
0.22767542290885773,
|
||||||
|
2.968432623677477,
|
||||||
|
0.48528339118991104
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"camera_in_world": {
|
||||||
|
"position_m": [
|
||||||
|
0.3189542591571808,
|
||||||
|
-0.5239294767379761,
|
||||||
|
0.8536434769630432
|
||||||
|
],
|
||||||
|
"position_mm": [
|
||||||
|
318.9542541503906,
|
||||||
|
-523.9295043945312,
|
||||||
|
853.6434936523438
|
||||||
|
],
|
||||||
|
"orientation_deg": {
|
||||||
|
"roll": 160.94879150390625,
|
||||||
|
"pitch": 5.661191940307617,
|
||||||
|
"yaw": 170.2774200439453
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"uncertainty": {
|
||||||
|
"pose_covariance_6x6": [
|
||||||
|
[
|
||||||
|
3.127441931746991e-07,
|
||||||
|
1.2611994564482237e-07,
|
||||||
|
-2.6481242745835294e-07,
|
||||||
|
2.220874904109554e-08,
|
||||||
|
-5.424247207491378e-08,
|
||||||
|
-2.3469346032411482e-08
|
||||||
|
],
|
||||||
|
[
|
||||||
|
1.2611994564482083e-07,
|
||||||
|
1.7736366090593526e-06,
|
||||||
|
1.7073582936930538e-06,
|
||||||
|
-2.0513038317965798e-08,
|
||||||
|
5.817162316400782e-08,
|
||||||
|
-4.3575632542245767e-07
|
||||||
|
],
|
||||||
|
[
|
||||||
|
-2.648124274583587e-07,
|
||||||
|
1.7073582936930396e-06,
|
||||||
|
5.575466237723722e-06,
|
||||||
|
-2.143261716718035e-08,
|
||||||
|
8.436780693695763e-08,
|
||||||
|
-5.750157395485433e-07
|
||||||
|
],
|
||||||
|
[
|
||||||
|
2.220874904109555e-08,
|
||||||
|
-2.051303831796606e-08,
|
||||||
|
-2.143261716718066e-08,
|
||||||
|
1.1352143805196684e-08,
|
||||||
|
-5.900072683314034e-09,
|
||||||
|
-4.703659593185704e-09
|
||||||
|
],
|
||||||
|
[
|
||||||
|
-5.4242472074913865e-08,
|
||||||
|
5.817162316400724e-08,
|
||||||
|
8.436780693695687e-08,
|
||||||
|
-5.9000726833139505e-09,
|
||||||
|
2.211014317418639e-08,
|
||||||
|
-1.0277230205531951e-08
|
||||||
|
],
|
||||||
|
[
|
||||||
|
-2.3469346032410817e-08,
|
||||||
|
-4.3575632542245735e-07,
|
||||||
|
-5.750157395485471e-07,
|
||||||
|
-4.703659593184902e-09,
|
||||||
|
-1.0277230205531706e-08,
|
||||||
|
2.2015022890204316e-07
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"parameter_std": {
|
||||||
|
"rvec_std_deg": [
|
||||||
|
0.032041826154000676,
|
||||||
|
0.07630534399918094,
|
||||||
|
0.13528923079637759
|
||||||
|
],
|
||||||
|
"tvec_std_m": [
|
||||||
|
0.00010654643966457389,
|
||||||
|
0.0001486947987462453,
|
||||||
|
0.00046920169320031565
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"camera_center_std_m": [
|
||||||
|
0.0015986459647155456,
|
||||||
|
0.0009965541542375047,
|
||||||
|
0.000655580178244062
|
||||||
|
],
|
||||||
|
"camera_center_std_mm": [
|
||||||
|
1.5986459647155455,
|
||||||
|
0.9965541542375047,
|
||||||
|
0.655580178244062
|
||||||
|
],
|
||||||
|
"orientation_std_deg": {
|
||||||
|
"roll": 0.06336728811161631,
|
||||||
|
"pitch": 0.09289304619911497,
|
||||||
|
"yaw": 0.025599763400525364
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"observations": {
|
||||||
|
"markers": [
|
||||||
|
{
|
||||||
|
"marker_id": 57,
|
||||||
|
"observed_center_px": [
|
||||||
|
52.25,
|
||||||
|
319.0
|
||||||
|
],
|
||||||
|
"projected_center_px": [
|
||||||
|
51.970375061035156,
|
||||||
|
318.21563720703125
|
||||||
|
],
|
||||||
|
"reprojection_error_px": 0.8327154961238747,
|
||||||
|
"confidence": 0.5244924829597363
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"marker_id": 59,
|
||||||
|
"observed_center_px": [
|
||||||
|
51.75,
|
||||||
|
452.25
|
||||||
|
],
|
||||||
|
"projected_center_px": [
|
||||||
|
51.892948150634766,
|
||||||
|
451.67559814453125
|
||||||
|
],
|
||||||
|
"reprojection_error_px": 0.5919220095044975,
|
||||||
|
"confidence": 0.4943639237071812
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"marker_id": 85,
|
||||||
|
"observed_center_px": [
|
||||||
|
233.25,
|
||||||
|
371.5
|
||||||
|
],
|
||||||
|
"projected_center_px": [
|
||||||
|
233.19097900390625,
|
||||||
|
371.65509033203125
|
||||||
|
],
|
||||||
|
"reprojection_error_px": 0.16594122173065323,
|
||||||
|
"confidence": 0.8483075854962995
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"marker_id": 105,
|
||||||
|
"observed_center_px": [
|
||||||
|
218.25,
|
||||||
|
444.0
|
||||||
|
],
|
||||||
|
"projected_center_px": [
|
||||||
|
218.5349578857422,
|
||||||
|
443.7501525878906
|
||||||
|
],
|
||||||
|
"reprojection_error_px": 0.3789785297142959,
|
||||||
|
"confidence": 0.8026039835274208
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"marker_id": 54,
|
||||||
|
"observed_center_px": [
|
||||||
|
477.75,
|
||||||
|
306.75
|
||||||
|
],
|
||||||
|
"projected_center_px": [
|
||||||
|
477.47686767578125,
|
||||||
|
306.69378662109375
|
||||||
|
],
|
||||||
|
"reprojection_error_px": 0.27885697140504484,
|
||||||
|
"confidence": 0.8452719950987326
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"marker_id": 97,
|
||||||
|
"observed_center_px": [
|
||||||
|
527.5,
|
||||||
|
255.0
|
||||||
|
],
|
||||||
|
"projected_center_px": [
|
||||||
|
526.965087890625,
|
||||||
|
254.7095489501953
|
||||||
|
],
|
||||||
|
"reprojection_error_px": 0.608681178523418,
|
||||||
|
"confidence": 0.8803422600053223
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"marker_id": 92,
|
||||||
|
"observed_center_px": [
|
||||||
|
61.75,
|
||||||
|
588.5
|
||||||
|
],
|
||||||
|
"projected_center_px": [
|
||||||
|
62.09781265258789,
|
||||||
|
587.8051147460938
|
||||||
|
],
|
||||||
|
"reprojection_error_px": 0.7770708831223688,
|
||||||
|
"confidence": 0.5831582761878896
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"marker_id": 102,
|
||||||
|
"observed_center_px": [
|
||||||
|
39.0,
|
||||||
|
537.25
|
||||||
|
],
|
||||||
|
"projected_center_px": [
|
||||||
|
38.78061294555664,
|
||||||
|
536.7982177734375
|
||||||
|
],
|
||||||
|
"reprojection_error_px": 0.5022328741680533,
|
||||||
|
"confidence": 0.250937972298748
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"marker_id": 66,
|
||||||
|
"observed_center_px": [
|
||||||
|
667.25,
|
||||||
|
227.75
|
||||||
|
],
|
||||||
|
"projected_center_px": [
|
||||||
|
666.9827270507812,
|
||||||
|
227.5442657470703
|
||||||
|
],
|
||||||
|
"reprojection_error_px": 0.3372853572460938,
|
||||||
|
"confidence": 0.8298789941103211
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"marker_id": 47,
|
||||||
|
"observed_center_px": [
|
||||||
|
486.75,
|
||||||
|
370.5
|
||||||
|
],
|
||||||
|
"projected_center_px": [
|
||||||
|
486.16741943359375,
|
||||||
|
370.6946716308594
|
||||||
|
],
|
||||||
|
"reprojection_error_px": 0.614245195516966,
|
||||||
|
"confidence": 0.7781680532624052
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"marker_id": 95,
|
||||||
|
"observed_center_px": [
|
||||||
|
717.25,
|
||||||
|
350.0
|
||||||
|
],
|
||||||
|
"projected_center_px": [
|
||||||
|
717.3355712890625,
|
||||||
|
350.58428955078125
|
||||||
|
],
|
||||||
|
"reprojection_error_px": 0.5905224167328221,
|
||||||
|
"confidence": 0.7551712168920252
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"marker_id": 55,
|
||||||
|
"observed_center_px": [
|
||||||
|
580.25,
|
||||||
|
389.5
|
||||||
|
],
|
||||||
|
"projected_center_px": [
|
||||||
|
580.1473388671875,
|
||||||
|
389.7716979980469
|
||||||
|
],
|
||||||
|
"reprojection_error_px": 0.29044639838191394,
|
||||||
|
"confidence": 0.7273519115777719
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"marker_id": 62,
|
||||||
|
"observed_center_px": [
|
||||||
|
427.25,
|
||||||
|
536.75
|
||||||
|
],
|
||||||
|
"projected_center_px": [
|
||||||
|
427.4496154785156,
|
||||||
|
537.495849609375
|
||||||
|
],
|
||||||
|
"reprojection_error_px": 0.7720997209349723,
|
||||||
|
"confidence": 0.670160195967072
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"marker_id": 69,
|
||||||
|
"observed_center_px": [
|
||||||
|
964.75,
|
||||||
|
299.0
|
||||||
|
],
|
||||||
|
"projected_center_px": [
|
||||||
|
964.7708129882812,
|
||||||
|
298.9970703125
|
||||||
|
],
|
||||||
|
"reprojection_error_px": 0.021018171900598445,
|
||||||
|
"confidence": 0.7128402360059218
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"marker_id": 96,
|
||||||
|
"observed_center_px": [
|
||||||
|
474.25,
|
||||||
|
513.5
|
||||||
|
],
|
||||||
|
"projected_center_px": [
|
||||||
|
474.6187744140625,
|
||||||
|
513.740966796875
|
||||||
|
],
|
||||||
|
"reprojection_error_px": 0.4405219241573996,
|
||||||
|
"confidence": 0.6404186396481667
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"marker_id": 79,
|
||||||
|
"observed_center_px": [
|
||||||
|
562.25,
|
||||||
|
534.5
|
||||||
|
],
|
||||||
|
"projected_center_px": [
|
||||||
|
562.2368774414062,
|
||||||
|
535.1456909179688
|
||||||
|
],
|
||||||
|
"reprojection_error_px": 0.6458242509316087,
|
||||||
|
"confidence": 0.6430894222572451
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"marker_id": 103,
|
||||||
|
"observed_center_px": [
|
||||||
|
840.0,
|
||||||
|
447.5
|
||||||
|
],
|
||||||
|
"projected_center_px": [
|
||||||
|
840.52978515625,
|
||||||
|
447.9445495605469
|
||||||
|
],
|
||||||
|
"reprojection_error_px": 0.6915899244243344,
|
||||||
|
"confidence": 0.6444201033439911
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"marker_id": 58,
|
||||||
|
"observed_center_px": [
|
||||||
|
911.75,
|
||||||
|
394.75
|
||||||
|
],
|
||||||
|
"projected_center_px": [
|
||||||
|
912.2774658203125,
|
||||||
|
394.775146484375
|
||||||
|
],
|
||||||
|
"reprojection_error_px": 0.5280648987334423,
|
||||||
|
"confidence": 0.6422534651483102
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"marker_id": 64,
|
||||||
|
"observed_center_px": [
|
||||||
|
1011.0,
|
||||||
|
418.0
|
||||||
|
],
|
||||||
|
"projected_center_px": [
|
||||||
|
1009.9371337890625,
|
||||||
|
417.3528747558594
|
||||||
|
],
|
||||||
|
"reprojection_error_px": 1.2443695849532412,
|
||||||
|
"confidence": 0.6368641043980565
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"marker_id": 51,
|
||||||
|
"observed_center_px": [
|
||||||
|
758.5,
|
||||||
|
482.0
|
||||||
|
],
|
||||||
|
"projected_center_px": [
|
||||||
|
758.6611328125,
|
||||||
|
483.0947265625
|
||||||
|
],
|
||||||
|
"reprojection_error_px": 1.1065215903484336,
|
||||||
|
"confidence": 0.6455595507517459
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"marker_id": 74,
|
||||||
|
"observed_center_px": [
|
||||||
|
890.5,
|
||||||
|
834.75
|
||||||
|
],
|
||||||
|
"projected_center_px": [
|
||||||
|
891.2932739257812,
|
||||||
|
835.595703125
|
||||||
|
],
|
||||||
|
"reprojection_error_px": 1.1595245995489538,
|
||||||
|
"confidence": 0.4237258557628202
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"marker_id": 52,
|
||||||
|
"observed_center_px": [
|
||||||
|
895.75,
|
||||||
|
902.75
|
||||||
|
],
|
||||||
|
"projected_center_px": [
|
||||||
|
896.4219360351562,
|
||||||
|
903.2128295898438
|
||||||
|
],
|
||||||
|
"reprojection_error_px": 0.8159100836344867,
|
||||||
|
"confidence": 0.3439829645330524
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"marker_id": 75,
|
||||||
|
"observed_center_px": [
|
||||||
|
1039.0,
|
||||||
|
861.75
|
||||||
|
],
|
||||||
|
"projected_center_px": [
|
||||||
|
1037.73388671875,
|
||||||
|
859.344970703125
|
||||||
|
],
|
||||||
|
"reprojection_error_px": 2.7179420081717525,
|
||||||
|
"confidence": 0.4233448853603915
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"marker_id": 81,
|
||||||
|
"observed_center_px": [
|
||||||
|
846.75,
|
||||||
|
870.25
|
||||||
|
],
|
||||||
|
"projected_center_px": [
|
||||||
|
847.3787231445312,
|
||||||
|
871.1409301757812
|
||||||
|
],
|
||||||
|
"reprojection_error_px": 1.0904354041330793,
|
||||||
|
"confidence": 0.3887985352320142
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"marker_id": 77,
|
||||||
|
"observed_center_px": [
|
||||||
|
985.75,
|
||||||
|
867.0
|
||||||
|
],
|
||||||
|
"projected_center_px": [
|
||||||
|
985.7974853515625,
|
||||||
|
866.8070678710938
|
||||||
|
],
|
||||||
|
"reprojection_error_px": 0.1986898713505852,
|
||||||
|
"confidence": 0.4081027110350248
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"qa": {
|
||||||
|
"sanity_notes": []
|
||||||
|
}
|
||||||
|
}
|
||||||
BIN
test/temp/cam1_hires_1781074183695_debug.jpg
Normal file
BIN
test/temp/cam1_hires_1781074183695_debug.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 174 KiB |
3433
test/temp/cam2_hires_1781074183695_aruco_detection.json
Normal file
3433
test/temp/cam2_hires_1781074183695_aruco_detection.json
Normal file
File diff suppressed because it is too large
Load Diff
929
test/temp/cam2_hires_1781074183695_camera_pose.json
Normal file
929
test/temp/cam2_hires_1781074183695_camera_pose.json
Normal file
@@ -0,0 +1,929 @@
|
|||||||
|
{
|
||||||
|
"schema_version": "1.0",
|
||||||
|
"created_utc": "2026-06-10T10:41:08Z",
|
||||||
|
"source": {
|
||||||
|
"detection_json": "C:\\Users\\kech\\SynologyDrive\\2026-AppServer-AppRobot\\appRobotRendering\\test\\temp\\cam2_hires_1781074183695_aruco_detection.json",
|
||||||
|
"robot_json": "C:\\Users\\kech\\SynologyDrive\\2026-AppServer-AppRobot\\appRobotRendering\\data\\testPictures\\robot_1781069752019.json"
|
||||||
|
},
|
||||||
|
"camera": {
|
||||||
|
"camera_id": "cam2",
|
||||||
|
"camera_matrix": [
|
||||||
|
[
|
||||||
|
1365.456298828125,
|
||||||
|
0.0,
|
||||||
|
916.1585083007812
|
||||||
|
],
|
||||||
|
[
|
||||||
|
0.0,
|
||||||
|
1364.6678466796875,
|
||||||
|
557.509033203125
|
||||||
|
],
|
||||||
|
[
|
||||||
|
0.0,
|
||||||
|
0.0,
|
||||||
|
1.0
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"distortion_coefficients": [
|
||||||
|
0.042227353900671005,
|
||||||
|
-0.2937094569206238,
|
||||||
|
-0.000249923556111753,
|
||||||
|
-0.0038161256816238165,
|
||||||
|
0.5750380158424377
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"estimation": {
|
||||||
|
"method": "single_camera_marker_center_lm",
|
||||||
|
"description": "Rigid init from per-marker pose estimates, followed by LM on normalized marker-center reprojection residuals.",
|
||||||
|
"marker_size_m": 0.025,
|
||||||
|
"num_used_markers": 52,
|
||||||
|
"used_marker_ids": [
|
||||||
|
61,
|
||||||
|
75,
|
||||||
|
83,
|
||||||
|
77,
|
||||||
|
52,
|
||||||
|
101,
|
||||||
|
74,
|
||||||
|
64,
|
||||||
|
81,
|
||||||
|
69,
|
||||||
|
73,
|
||||||
|
82,
|
||||||
|
58,
|
||||||
|
103,
|
||||||
|
51,
|
||||||
|
95,
|
||||||
|
86,
|
||||||
|
66,
|
||||||
|
84,
|
||||||
|
79,
|
||||||
|
60,
|
||||||
|
55,
|
||||||
|
72,
|
||||||
|
97,
|
||||||
|
54,
|
||||||
|
47,
|
||||||
|
53,
|
||||||
|
96,
|
||||||
|
56,
|
||||||
|
67,
|
||||||
|
62,
|
||||||
|
46,
|
||||||
|
70,
|
||||||
|
98,
|
||||||
|
50,
|
||||||
|
68,
|
||||||
|
90,
|
||||||
|
85,
|
||||||
|
76,
|
||||||
|
105,
|
||||||
|
91,
|
||||||
|
59,
|
||||||
|
57,
|
||||||
|
102,
|
||||||
|
92,
|
||||||
|
100,
|
||||||
|
48,
|
||||||
|
71,
|
||||||
|
94,
|
||||||
|
63,
|
||||||
|
65,
|
||||||
|
49
|
||||||
|
],
|
||||||
|
"history": {
|
||||||
|
"iters": [
|
||||||
|
0,
|
||||||
|
1,
|
||||||
|
2,
|
||||||
|
3
|
||||||
|
],
|
||||||
|
"rms": [
|
||||||
|
0.011984790416146193,
|
||||||
|
0.000748124316348008,
|
||||||
|
0.0004621256111282346,
|
||||||
|
0.0004621231525591624
|
||||||
|
],
|
||||||
|
"lambda": [
|
||||||
|
0.001,
|
||||||
|
0.0005,
|
||||||
|
0.00025,
|
||||||
|
0.000125
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"residual_rms_px": 0.8931551476129429,
|
||||||
|
"residual_median_px": 0.6460402304256327,
|
||||||
|
"residual_max_px": 2.4510862935844595,
|
||||||
|
"sigma2_normalized": 2.2663277596682428e-07
|
||||||
|
},
|
||||||
|
"camera_pose": {
|
||||||
|
"world_to_camera": {
|
||||||
|
"rotation_matrix": [
|
||||||
|
[
|
||||||
|
-0.2814928889274597,
|
||||||
|
-0.959563136100769,
|
||||||
|
-0.0006156218587420881
|
||||||
|
],
|
||||||
|
[
|
||||||
|
-0.7972064018249512,
|
||||||
|
0.2342216819524765,
|
||||||
|
-0.5564190149307251
|
||||||
|
],
|
||||||
|
[
|
||||||
|
0.5340633988380432,
|
||||||
|
-0.15613722801208496,
|
||||||
|
-0.8309016227722168
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"translation_m": [
|
||||||
|
0.16960781812667847,
|
||||||
|
0.19306619465351105,
|
||||||
|
0.8885678648948669
|
||||||
|
],
|
||||||
|
"rvec_rad": [
|
||||||
|
1.6251837047350812,
|
||||||
|
-2.1708495805581816,
|
||||||
|
0.659184269040976
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"camera_in_world": {
|
||||||
|
"position_m": [
|
||||||
|
-0.27289459109306335,
|
||||||
|
0.2562676668167114,
|
||||||
|
0.8458425998687744
|
||||||
|
],
|
||||||
|
"position_mm": [
|
||||||
|
-272.89459228515625,
|
||||||
|
256.2676696777344,
|
||||||
|
845.8425903320312
|
||||||
|
],
|
||||||
|
"orientation_deg": {
|
||||||
|
"roll": -169.35748291015625,
|
||||||
|
"pitch": -32.28041458129883,
|
||||||
|
"yaw": -109.44808197021484
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"uncertainty": {
|
||||||
|
"pose_covariance_6x6": [
|
||||||
|
[
|
||||||
|
1.5063737842098413e-07,
|
||||||
|
-8.335910592336172e-08,
|
||||||
|
-3.064318777732698e-08,
|
||||||
|
1.296037575122895e-09,
|
||||||
|
3.825991719294466e-08,
|
||||||
|
7.338024221745554e-08
|
||||||
|
],
|
||||||
|
[
|
||||||
|
-8.335910592336e-08,
|
||||||
|
1.9572401471349003e-07,
|
||||||
|
4.902855952330072e-08,
|
||||||
|
-3.2496406832607055e-08,
|
||||||
|
-3.877361500380251e-08,
|
||||||
|
-1.0148736472989194e-07
|
||||||
|
],
|
||||||
|
[
|
||||||
|
-3.064318777732759e-08,
|
||||||
|
4.9028559523301544e-08,
|
||||||
|
6.795918188810849e-07,
|
||||||
|
5.7317179496685195e-08,
|
||||||
|
-6.365580225321214e-08,
|
||||||
|
-1.6150762608367604e-07
|
||||||
|
],
|
||||||
|
[
|
||||||
|
1.2960375751224031e-09,
|
||||||
|
-3.249640683260679e-08,
|
||||||
|
5.731717949668508e-08,
|
||||||
|
1.832623332284755e-08,
|
||||||
|
-1.018243938937513e-09,
|
||||||
|
2.879104601402566e-09
|
||||||
|
],
|
||||||
|
[
|
||||||
|
3.82599171929445e-08,
|
||||||
|
-3.877361500380285e-08,
|
||||||
|
-6.365580225321209e-08,
|
||||||
|
-1.0182439389374238e-09,
|
||||||
|
2.1148437851966976e-08,
|
||||||
|
3.4895901940506535e-08
|
||||||
|
],
|
||||||
|
[
|
||||||
|
7.338024221745488e-08,
|
||||||
|
-1.0148736472989244e-07,
|
||||||
|
-1.6150762608367557e-07,
|
||||||
|
2.8791046014027618e-09,
|
||||||
|
3.489590194050643e-08,
|
||||||
|
1.4353963669281618e-07
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"parameter_std": {
|
||||||
|
"rvec_std_deg": [
|
||||||
|
0.02223765595627221,
|
||||||
|
0.02534805788125073,
|
||||||
|
0.04723312755300941
|
||||||
|
],
|
||||||
|
"tvec_std_m": [
|
||||||
|
0.00013537441901204065,
|
||||||
|
0.00014542502484774406,
|
||||||
|
0.00037886625172059885
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"camera_center_std_m": [
|
||||||
|
0.0003990009598470209,
|
||||||
|
0.000607790728802823,
|
||||||
|
0.0005472769194608717
|
||||||
|
],
|
||||||
|
"camera_center_std_mm": [
|
||||||
|
0.39900095984702094,
|
||||||
|
0.6077907288028229,
|
||||||
|
0.5472769194608716
|
||||||
|
],
|
||||||
|
"orientation_std_deg": {
|
||||||
|
"roll": 0.05086200168889332,
|
||||||
|
"pitch": 0.02925593897609651,
|
||||||
|
"yaw": 0.017037341044152724
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"observations": {
|
||||||
|
"markers": [
|
||||||
|
{
|
||||||
|
"marker_id": 61,
|
||||||
|
"observed_center_px": [
|
||||||
|
678.75,
|
||||||
|
1048.25
|
||||||
|
],
|
||||||
|
"projected_center_px": [
|
||||||
|
678.7637939453125,
|
||||||
|
1049.9586181640625
|
||||||
|
],
|
||||||
|
"reprojection_error_px": 1.7086738435089337,
|
||||||
|
"confidence": 0.1298805194008731
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"marker_id": 75,
|
||||||
|
"observed_center_px": [
|
||||||
|
901.0,
|
||||||
|
987.75
|
||||||
|
],
|
||||||
|
"projected_center_px": [
|
||||||
|
900.0938110351562,
|
||||||
|
989.9572143554688
|
||||||
|
],
|
||||||
|
"reprojection_error_px": 2.3859953166324357,
|
||||||
|
"confidence": 0.9054705142666829
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"marker_id": 83,
|
||||||
|
"observed_center_px": [
|
||||||
|
654.75,
|
||||||
|
950.0
|
||||||
|
],
|
||||||
|
"projected_center_px": [
|
||||||
|
654.1168823242188,
|
||||||
|
949.4424438476562
|
||||||
|
],
|
||||||
|
"reprojection_error_px": 0.8436272010805596,
|
||||||
|
"confidence": 0.8383768107463128
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"marker_id": 77,
|
||||||
|
"observed_center_px": [
|
||||||
|
887.0,
|
||||||
|
923.0
|
||||||
|
],
|
||||||
|
"projected_center_px": [
|
||||||
|
886.1251831054688,
|
||||||
|
923.5886840820312
|
||||||
|
],
|
||||||
|
"reprojection_error_px": 1.0544446630308655,
|
||||||
|
"confidence": 0.8372378253881325
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"marker_id": 52,
|
||||||
|
"observed_center_px": [
|
||||||
|
831.75,
|
||||||
|
824.75
|
||||||
|
],
|
||||||
|
"projected_center_px": [
|
||||||
|
831.6743774414062,
|
||||||
|
824.7091674804688
|
||||||
|
],
|
||||||
|
"reprojection_error_px": 0.08594222489286081,
|
||||||
|
"confidence": 0.7438876362292666
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"marker_id": 101,
|
||||||
|
"observed_center_px": [
|
||||||
|
694.5,
|
||||||
|
830.0
|
||||||
|
],
|
||||||
|
"projected_center_px": [
|
||||||
|
694.2298583984375,
|
||||||
|
829.5364379882812
|
||||||
|
],
|
||||||
|
"reprojection_error_px": 0.5365316613243687,
|
||||||
|
"confidence": 0.6912989810207925
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"marker_id": 74,
|
||||||
|
"observed_center_px": [
|
||||||
|
923.0,
|
||||||
|
801.0
|
||||||
|
],
|
||||||
|
"projected_center_px": [
|
||||||
|
922.6452026367188,
|
||||||
|
800.9827270507812
|
||||||
|
],
|
||||||
|
"reprojection_error_px": 0.3552175724341925,
|
||||||
|
"confidence": 0.7063299460473174
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"marker_id": 64,
|
||||||
|
"observed_center_px": [
|
||||||
|
1438.75,
|
||||||
|
820.75
|
||||||
|
],
|
||||||
|
"projected_center_px": [
|
||||||
|
1437.7794189453125,
|
||||||
|
823.000732421875
|
||||||
|
],
|
||||||
|
"reprojection_error_px": 2.4510862935844595,
|
||||||
|
"confidence": 0.6757268014633911
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"marker_id": 81,
|
||||||
|
"observed_center_px": [
|
||||||
|
873.25,
|
||||||
|
761.5
|
||||||
|
],
|
||||||
|
"projected_center_px": [
|
||||||
|
873.4539794921875,
|
||||||
|
761.24560546875
|
||||||
|
],
|
||||||
|
"reprojection_error_px": 0.32607393450409006,
|
||||||
|
"confidence": 0.6474169705665015
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"marker_id": 69,
|
||||||
|
"observed_center_px": [
|
||||||
|
1536.0,
|
||||||
|
750.25
|
||||||
|
],
|
||||||
|
"projected_center_px": [
|
||||||
|
1536.01904296875,
|
||||||
|
750.9163208007812
|
||||||
|
],
|
||||||
|
"reprojection_error_px": 0.6665928624074666,
|
||||||
|
"confidence": 0.6112865494409404
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"marker_id": 73,
|
||||||
|
"observed_center_px": [
|
||||||
|
617.75,
|
||||||
|
711.5
|
||||||
|
],
|
||||||
|
"projected_center_px": [
|
||||||
|
618.2041015625,
|
||||||
|
710.8424682617188
|
||||||
|
],
|
||||||
|
"reprojection_error_px": 0.7990971254560385,
|
||||||
|
"confidence": 0.532833258968179
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"marker_id": 82,
|
||||||
|
"observed_center_px": [
|
||||||
|
667.75,
|
||||||
|
701.75
|
||||||
|
],
|
||||||
|
"projected_center_px": [
|
||||||
|
668.7314453125,
|
||||||
|
701.2522583007812
|
||||||
|
],
|
||||||
|
"reprojection_error_px": 1.100446137059598,
|
||||||
|
"confidence": 0.552022973773092
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"marker_id": 58,
|
||||||
|
"observed_center_px": [
|
||||||
|
1427.0,
|
||||||
|
721.75
|
||||||
|
],
|
||||||
|
"projected_center_px": [
|
||||||
|
1427.1419677734375,
|
||||||
|
721.8328247070312
|
||||||
|
],
|
||||||
|
"reprojection_error_px": 0.16436173760828193,
|
||||||
|
"confidence": 0.6045651933799014
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"marker_id": 103,
|
||||||
|
"observed_center_px": [
|
||||||
|
1353.0,
|
||||||
|
667.25
|
||||||
|
],
|
||||||
|
"projected_center_px": [
|
||||||
|
1353.5479736328125,
|
||||||
|
666.92724609375
|
||||||
|
],
|
||||||
|
"reprojection_error_px": 0.6359600508344548,
|
||||||
|
"confidence": 0.602350818516097
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"marker_id": 51,
|
||||||
|
"observed_center_px": [
|
||||||
|
1297.0,
|
||||||
|
603.25
|
||||||
|
],
|
||||||
|
"projected_center_px": [
|
||||||
|
1297.596435546875,
|
||||||
|
602.8515014648438
|
||||||
|
],
|
||||||
|
"reprojection_error_px": 0.7173119573085042,
|
||||||
|
"confidence": 0.5578670422625701
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"marker_id": 95,
|
||||||
|
"observed_center_px": [
|
||||||
|
1407.5,
|
||||||
|
552.25
|
||||||
|
],
|
||||||
|
"projected_center_px": [
|
||||||
|
1407.8885498046875,
|
||||||
|
551.9653930664062
|
||||||
|
],
|
||||||
|
"reprojection_error_px": 0.48163477591670184,
|
||||||
|
"confidence": 0.4802479007916047
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"marker_id": 86,
|
||||||
|
"observed_center_px": [
|
||||||
|
640.25,
|
||||||
|
541.5
|
||||||
|
],
|
||||||
|
"projected_center_px": [
|
||||||
|
641.0107421875,
|
||||||
|
541.1596069335938
|
||||||
|
],
|
||||||
|
"reprojection_error_px": 0.8334243309981626,
|
||||||
|
"confidence": 0.3964057961714926
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"marker_id": 66,
|
||||||
|
"observed_center_px": [
|
||||||
|
1494.25,
|
||||||
|
502.25
|
||||||
|
],
|
||||||
|
"projected_center_px": [
|
||||||
|
1494.6441650390625,
|
||||||
|
501.90594482421875
|
||||||
|
],
|
||||||
|
"reprojection_error_px": 0.5232017220929314,
|
||||||
|
"confidence": 0.45475830315312954
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"marker_id": 84,
|
||||||
|
"observed_center_px": [
|
||||||
|
672.5,
|
||||||
|
487.0
|
||||||
|
],
|
||||||
|
"projected_center_px": [
|
||||||
|
673.2105102539062,
|
||||||
|
487.0281066894531
|
||||||
|
],
|
||||||
|
"reprojection_error_px": 0.7110659652225932,
|
||||||
|
"confidence": 0.36929083534733026
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"marker_id": 79,
|
||||||
|
"observed_center_px": [
|
||||||
|
1206.0,
|
||||||
|
461.25
|
||||||
|
],
|
||||||
|
"projected_center_px": [
|
||||||
|
1206.052001953125,
|
||||||
|
461.0175476074219
|
||||||
|
],
|
||||||
|
"reprojection_error_px": 0.2381980645263715,
|
||||||
|
"confidence": 0.4098258244985548
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"marker_id": 60,
|
||||||
|
"observed_center_px": [
|
||||||
|
635.0,
|
||||||
|
468.5
|
||||||
|
],
|
||||||
|
"projected_center_px": [
|
||||||
|
635.5394897460938,
|
||||||
|
468.3836669921875
|
||||||
|
],
|
||||||
|
"reprojection_error_px": 0.5518899843691694,
|
||||||
|
"confidence": 0.36321795262481693
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"marker_id": 55,
|
||||||
|
"observed_center_px": [
|
||||||
|
1338.0,
|
||||||
|
459.75
|
||||||
|
],
|
||||||
|
"projected_center_px": [
|
||||||
|
1338.171875,
|
||||||
|
459.31719970703125
|
||||||
|
],
|
||||||
|
"reprojection_error_px": 0.46567919130967816,
|
||||||
|
"confidence": 0.4226507579685383
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"marker_id": 72,
|
||||||
|
"observed_center_px": [
|
||||||
|
742.5,
|
||||||
|
437.25
|
||||||
|
],
|
||||||
|
"projected_center_px": [
|
||||||
|
743.2981567382812,
|
||||||
|
437.74658203125
|
||||||
|
],
|
||||||
|
"reprojection_error_px": 0.9400254744548894,
|
||||||
|
"confidence": 0.32333953337853494
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"marker_id": 97,
|
||||||
|
"observed_center_px": [
|
||||||
|
1433.5,
|
||||||
|
414.5
|
||||||
|
],
|
||||||
|
"projected_center_px": [
|
||||||
|
1433.2255859375,
|
||||||
|
414.3753967285156
|
||||||
|
],
|
||||||
|
"reprojection_error_px": 0.3013785874317596,
|
||||||
|
"confidence": 0.3750450731634656
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"marker_id": 54,
|
||||||
|
"observed_center_px": [
|
||||||
|
1380.75,
|
||||||
|
388.5
|
||||||
|
],
|
||||||
|
"projected_center_px": [
|
||||||
|
1380.5369873046875,
|
||||||
|
388.4062805175781
|
||||||
|
],
|
||||||
|
"reprojection_error_px": 0.2327181766637924,
|
||||||
|
"confidence": 0.3804229609837889
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"marker_id": 47,
|
||||||
|
"observed_center_px": [
|
||||||
|
1332.0,
|
||||||
|
398.5
|
||||||
|
],
|
||||||
|
"projected_center_px": [
|
||||||
|
1331.9332275390625,
|
||||||
|
397.9681701660156
|
||||||
|
],
|
||||||
|
"reprojection_error_px": 0.536005162153778,
|
||||||
|
"confidence": 0.3734523056846838
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"marker_id": 53,
|
||||||
|
"observed_center_px": [
|
||||||
|
709.75,
|
||||||
|
401.5
|
||||||
|
],
|
||||||
|
"projected_center_px": [
|
||||||
|
710.3843383789062,
|
||||||
|
401.6002502441406
|
||||||
|
],
|
||||||
|
"reprojection_error_px": 0.6422112506050203,
|
||||||
|
"confidence": 0.30688470757026015
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"marker_id": 96,
|
||||||
|
"observed_center_px": [
|
||||||
|
1209.25,
|
||||||
|
401.5
|
||||||
|
],
|
||||||
|
"projected_center_px": [
|
||||||
|
1209.242919921875,
|
||||||
|
401.32574462890625
|
||||||
|
],
|
||||||
|
"reprojection_error_px": 0.1743991452423911,
|
||||||
|
"confidence": 0.3473105376216546
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"marker_id": 56,
|
||||||
|
"observed_center_px": [
|
||||||
|
758.0,
|
||||||
|
379.5
|
||||||
|
],
|
||||||
|
"projected_center_px": [
|
||||||
|
758.4189453125,
|
||||||
|
379.59234619140625
|
||||||
|
],
|
||||||
|
"reprojection_error_px": 0.4290023239248972,
|
||||||
|
"confidence": 0.3172821134080634
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"marker_id": 67,
|
||||||
|
"observed_center_px": [
|
||||||
|
636.5,
|
||||||
|
383.75
|
||||||
|
],
|
||||||
|
"projected_center_px": [
|
||||||
|
637.0377197265625,
|
||||||
|
383.2904968261719
|
||||||
|
],
|
||||||
|
"reprojection_error_px": 0.7073087523087564,
|
||||||
|
"confidence": 0.28880951617505063
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"marker_id": 62,
|
||||||
|
"observed_center_px": [
|
||||||
|
1180.5,
|
||||||
|
374.0
|
||||||
|
],
|
||||||
|
"projected_center_px": [
|
||||||
|
1180.4544677734375,
|
||||||
|
373.8306579589844
|
||||||
|
],
|
||||||
|
"reprojection_error_px": 0.17535652400488683,
|
||||||
|
"confidence": 0.3341836586203227
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"marker_id": 46,
|
||||||
|
"observed_center_px": [
|
||||||
|
729.0,
|
||||||
|
351.5
|
||||||
|
],
|
||||||
|
"projected_center_px": [
|
||||||
|
729.3017578125,
|
||||||
|
351.3228759765625
|
||||||
|
],
|
||||||
|
"reprojection_error_px": 0.3499009818269637,
|
||||||
|
"confidence": 0.26347861637214165
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"marker_id": 70,
|
||||||
|
"observed_center_px": [
|
||||||
|
582.5,
|
||||||
|
325.5
|
||||||
|
],
|
||||||
|
"projected_center_px": [
|
||||||
|
582.8350219726562,
|
||||||
|
325.0391540527344
|
||||||
|
],
|
||||||
|
"reprojection_error_px": 0.5697532003189067,
|
||||||
|
"confidence": 0.2570583858267052
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"marker_id": 98,
|
||||||
|
"observed_center_px": [
|
||||||
|
569.75,
|
||||||
|
351.5
|
||||||
|
],
|
||||||
|
"projected_center_px": [
|
||||||
|
570.3342895507812,
|
||||||
|
350.63134765625
|
||||||
|
],
|
||||||
|
"reprojection_error_px": 1.046876866424377,
|
||||||
|
"confidence": 0.26500110579975544
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"marker_id": 50,
|
||||||
|
"observed_center_px": [
|
||||||
|
689.75,
|
||||||
|
327.75
|
||||||
|
],
|
||||||
|
"projected_center_px": [
|
||||||
|
690.3238525390625,
|
||||||
|
327.2581481933594
|
||||||
|
],
|
||||||
|
"reprojection_error_px": 0.7557942420289565,
|
||||||
|
"confidence": 0.2553101300914065
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"marker_id": 68,
|
||||||
|
"observed_center_px": [
|
||||||
|
736.75,
|
||||||
|
317.25
|
||||||
|
],
|
||||||
|
"projected_center_px": [
|
||||||
|
737.05517578125,
|
||||||
|
317.24169921875
|
||||||
|
],
|
||||||
|
"reprojection_error_px": 0.30528865100247043,
|
||||||
|
"confidence": 0.2627003031266385
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"marker_id": 90,
|
||||||
|
"observed_center_px": [
|
||||||
|
556.75,
|
||||||
|
296.75
|
||||||
|
],
|
||||||
|
"projected_center_px": [
|
||||||
|
557.29150390625,
|
||||||
|
295.6229553222656
|
||||||
|
],
|
||||||
|
"reprojection_error_px": 1.2503824159405754,
|
||||||
|
"confidence": 0.2463831284328039
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"marker_id": 85,
|
||||||
|
"observed_center_px": [
|
||||||
|
1279.75,
|
||||||
|
261.5
|
||||||
|
],
|
||||||
|
"projected_center_px": [
|
||||||
|
1279.4200439453125,
|
||||||
|
260.87799072265625
|
||||||
|
],
|
||||||
|
"reprojection_error_px": 0.7041069088758003,
|
||||||
|
"confidence": 0.2657187200890806
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"marker_id": 76,
|
||||||
|
"observed_center_px": [
|
||||||
|
714.75,
|
||||||
|
230.75
|
||||||
|
],
|
||||||
|
"projected_center_px": [
|
||||||
|
715.0855102539062,
|
||||||
|
230.44677734375
|
||||||
|
],
|
||||||
|
"reprojection_error_px": 0.45222904566109196,
|
||||||
|
"confidence": 0.21252735432479583
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"marker_id": 105,
|
||||||
|
"observed_center_px": [
|
||||||
|
1223.5,
|
||||||
|
256.25
|
||||||
|
],
|
||||||
|
"projected_center_px": [
|
||||||
|
1222.8546142578125,
|
||||||
|
255.816650390625
|
||||||
|
],
|
||||||
|
"reprojection_error_px": 0.7773767684748337,
|
||||||
|
"confidence": 0.2621913434075788
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"marker_id": 91,
|
||||||
|
"observed_center_px": [
|
||||||
|
531.5,
|
||||||
|
237.5
|
||||||
|
],
|
||||||
|
"projected_center_px": [
|
||||||
|
531.8168334960938,
|
||||||
|
236.93191528320312
|
||||||
|
],
|
||||||
|
"reprojection_error_px": 0.6504642263070076,
|
||||||
|
"confidence": 0.22193151443517992
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"marker_id": 59,
|
||||||
|
"observed_center_px": [
|
||||||
|
1192.5,
|
||||||
|
180.5
|
||||||
|
],
|
||||||
|
"projected_center_px": [
|
||||||
|
1191.9222412109375,
|
||||||
|
180.2024688720703
|
||||||
|
],
|
||||||
|
"reprojection_error_px": 0.6498692102462452,
|
||||||
|
"confidence": 0.22338557625759903
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"marker_id": 57,
|
||||||
|
"observed_center_px": [
|
||||||
|
1285.75,
|
||||||
|
179.5
|
||||||
|
],
|
||||||
|
"projected_center_px": [
|
||||||
|
1284.944091796875,
|
||||||
|
179.25888061523438
|
||||||
|
],
|
||||||
|
"reprojection_error_px": 0.8412054383882214,
|
||||||
|
"confidence": 0.2198605610785733
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"marker_id": 102,
|
||||||
|
"observed_center_px": [
|
||||||
|
1128.25,
|
||||||
|
175.25
|
||||||
|
],
|
||||||
|
"projected_center_px": [
|
||||||
|
1127.7625732421875,
|
||||||
|
175.20362854003906
|
||||||
|
],
|
||||||
|
"reprojection_error_px": 0.4896275692100215,
|
||||||
|
"confidence": 0.22088674806143707
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"marker_id": 92,
|
||||||
|
"observed_center_px": [
|
||||||
|
1092.25,
|
||||||
|
186.25
|
||||||
|
],
|
||||||
|
"projected_center_px": [
|
||||||
|
1091.6705322265625,
|
||||||
|
186.0386962890625
|
||||||
|
],
|
||||||
|
"reprojection_error_px": 0.6167918276927576,
|
||||||
|
"confidence": 0.20880094929023507
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"marker_id": 100,
|
||||||
|
"observed_center_px": [
|
||||||
|
684.25,
|
||||||
|
149.25
|
||||||
|
],
|
||||||
|
"projected_center_px": [
|
||||||
|
684.1082763671875,
|
||||||
|
149.09165954589844
|
||||||
|
],
|
||||||
|
"reprojection_error_px": 0.2125024411687107,
|
||||||
|
"confidence": 0.1658427624477632
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"marker_id": 48,
|
||||||
|
"observed_center_px": [
|
||||||
|
1207.5,
|
||||||
|
130.25
|
||||||
|
],
|
||||||
|
"projected_center_px": [
|
||||||
|
1206.74365234375,
|
||||||
|
130.34719848632812
|
||||||
|
],
|
||||||
|
"reprojection_error_px": 0.7625675857649254,
|
||||||
|
"confidence": 0.19719918051995877
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"marker_id": 71,
|
||||||
|
"observed_center_px": [
|
||||||
|
1149.25,
|
||||||
|
98.5
|
||||||
|
],
|
||||||
|
"projected_center_px": [
|
||||||
|
1148.265380859375,
|
||||||
|
98.3095474243164
|
||||||
|
],
|
||||||
|
"reprojection_error_px": 1.002869401103468,
|
||||||
|
"confidence": 0.18035085894910577
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"marker_id": 94,
|
||||||
|
"observed_center_px": [
|
||||||
|
668.75,
|
||||||
|
102.25
|
||||||
|
],
|
||||||
|
"projected_center_px": [
|
||||||
|
668.649658203125,
|
||||||
|
102.52938079833984
|
||||||
|
],
|
||||||
|
"reprojection_error_px": 0.2968536789078286,
|
||||||
|
"confidence": 0.13931516180114967
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"marker_id": 63,
|
||||||
|
"observed_center_px": [
|
||||||
|
1094.0,
|
||||||
|
89.5
|
||||||
|
],
|
||||||
|
"projected_center_px": [
|
||||||
|
1093.3001708984375,
|
||||||
|
89.75130462646484
|
||||||
|
],
|
||||||
|
"reprojection_error_px": 0.743582400730686,
|
||||||
|
"confidence": 0.18347683233254594
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"marker_id": 65,
|
||||||
|
"observed_center_px": [
|
||||||
|
1142.0,
|
||||||
|
63.0
|
||||||
|
],
|
||||||
|
"projected_center_px": [
|
||||||
|
1140.761962890625,
|
||||||
|
63.32167434692383
|
||||||
|
],
|
||||||
|
"reprojection_error_px": 1.2791443505947548,
|
||||||
|
"confidence": 0.1712791339969131
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"marker_id": 49,
|
||||||
|
"observed_center_px": [
|
||||||
|
659.75,
|
||||||
|
20.0
|
||||||
|
],
|
||||||
|
"projected_center_px": [
|
||||||
|
659.8107299804688,
|
||||||
|
22.313045501708984
|
||||||
|
],
|
||||||
|
"reprojection_error_px": 2.3138426099248632,
|
||||||
|
"confidence": 0.03034300498209627
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"qa": {
|
||||||
|
"sanity_notes": []
|
||||||
|
}
|
||||||
|
}
|
||||||
BIN
test/temp/cam2_hires_1781074183695_debug.jpg
Normal file
BIN
test/temp/cam2_hires_1781074183695_debug.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 384 KiB |
70
test/temp/detections.csv
Normal file
70
test/temp/detections.csv
Normal file
@@ -0,0 +1,70 @@
|
|||||||
|
id,set,SeenByCount,x,y,z,nx,ny,nz,dxy
|
||||||
|
cam0,CAMERA,,-115.37,-719.72,565.61,,,,
|
||||||
|
cam1,CAMERA,,318.95,-523.93,853.64,,,,
|
||||||
|
cam2,CAMERA,,-272.89,256.27,845.84,,,,
|
||||||
|
0,?,2,513.41,-99.44,-19.39,-0.5015,-0.865,0.0182,
|
||||||
|
46,A0,2,565.64,209.9,-55.56,0.0354,0.015,0.9993,37.88
|
||||||
|
47,A0,3,362.8,-287.49,-65.76,-0.333,-0.3131,0.8894,18.59
|
||||||
|
48,A0,2,761.75,-329.77,-88.34,-0.6704,0.4149,0.6152,73.62
|
||||||
|
49,A0,1,1092.66,151.29,-83.59,-0.0347,-0.025,0.9991,86.95
|
||||||
|
50,A0,2,630.74,265.32,-79.87,0.0073,-0.0024,1.0,78.39
|
||||||
|
51,A0,3,176.56,-163.97,-69.44,-0.26,0.2559,0.9311,11.94
|
||||||
|
52,A0,2,96.93,219.89,-55.7,-0.0341,-0.0377,0.9987,11.46
|
||||||
|
53,A0,1,518.69,210.86,-64.22,0.0166,0.0014,0.9999,32.47
|
||||||
|
54,A0,3,357.23,-330.04,-55.94,-0.2949,0.3095,0.904,14.97
|
||||||
|
55,A0,3,296.01,-261.27,-57.66,-0.291,0.0608,0.9548,12.36
|
||||||
|
56,A0,2,538.59,201.55,-67.84,-0.0012,0.0013,1.0,51.71
|
||||||
|
57,A0,3,635.81,-362.16,-68.53,0.0282,-0.001,0.9996,33.01
|
||||||
|
58,A0,2,49.92,-219.72,-67.42,0.0418,-0.0158,0.999,1.62
|
||||||
|
59,A0,3,664.52,-276.95,-69.92,-0.4034,-0.2722,0.8736,38.35
|
||||||
|
60,A0,2,465.81,316.89,-63.04,-0.4284,-0.7766,0.462,45.64
|
||||||
|
61,A0,1,-11.44,338.72,-61.53,0.0583,-0.0284,0.9979,11.35
|
||||||
|
62,A0,3,423.81,-171.25,-62.26,-0.0275,-0.2428,0.9697,19.49
|
||||||
|
63,A0,2,858.89,-229.54,-87.46,-0.0167,0.0026,0.9999,81.75
|
||||||
|
64,A0,2,-21.74,-191.34,-56.41,-0.2806,0.4588,0.8431,3.14
|
||||||
|
65,A0,2,876.99,-304.2,-81.63,0.0086,-0.0228,0.9997,73.92
|
||||||
|
66,A0,2,221.89,-378.26,-70.96,-0.3787,0.5606,0.7364,19.32
|
||||||
|
67,A0,2,570.28,307.19,-74.97,-0.665,-0.023,0.7465,61.98
|
||||||
|
68,A0,2,615.28,185.13,-67.64,0.0036,0.0103,0.9999,44.0
|
||||||
|
69,A0,2,7.51,-289.23,-71.43,0.0655,0.0143,0.9977,8.02
|
||||||
|
70,A0,2,646.35,344.94,-66.82,0.013,0.0124,0.9998,63.0
|
||||||
|
71,A0,2,801.68,-284.13,-67.44,-0.0049,0.0036,1.0,51.93
|
||||||
|
72,A0,2,470.53,219.63,-59.99,-0.8891,-0.3928,-0.2349,38.9
|
||||||
|
73,A0,1,227.77,334.47,-38.57,0.0887,-0.003,0.9961,6.19
|
||||||
|
74,A0,2,93.61,158.28,-59.95,-0.4017,0.1293,0.9066,13.78
|
||||||
|
75,A0,2,-31.35,211.98,-57.21,-0.1993,-0.6229,0.7565,18.29
|
||||||
|
76,A0,2,725.6,203.41,-58.89,-0.5971,-0.6684,0.4436,54.51
|
||||||
|
77,A0,2,14.87,208.14,-61.15,-0.2433,-0.6323,0.7355,16.9
|
||||||
|
79,A0,3,324.61,-146.67,-56.54,-0.0051,-0.0055,1.0,17.5
|
||||||
|
80,A0,1,920.78,-313.59,-61.98,0.0261,-0.0109,0.9996,61.4
|
||||||
|
81,A0,2,134.74,179.65,-55.28,0.1542,-0.6375,0.7549,10.94
|
||||||
|
82,A0,1,235.39,299.34,-56.31,0.0119,-0.0171,0.9998,16.36
|
||||||
|
83,A0,1,60.54,343.24,-73.55,-0.0211,-0.0083,0.9997,16.87
|
||||||
|
84,A0,2,433.15,283.86,-57.97,0.0108,0.0308,0.9995,36.13
|
||||||
|
85,A0,3,530.97,-312.83,-65.01,-0.5392,0.0418,0.8411,26.39
|
||||||
|
86,A0,2,371.18,293.37,-37.99,0.0359,0.0184,0.9992,8.4
|
||||||
|
87,A0,1,992.42,-224.08,-54.87,0.0164,-0.0161,0.9997,53.39
|
||||||
|
89,A0,1,1087.35,-337.82,-77.4,-0.8097,-0.3076,-0.4998,104.15
|
||||||
|
90,A0,1,716.28,322.0,-98.36,-0.9961,-0.0881,-0.0008,73.33
|
||||||
|
91,A0,2,797.63,384.71,-85.91,-0.6357,-0.6612,0.3984,93.42
|
||||||
|
92,A0,3,689.76,-175.44,-72.48,-0.4179,0.1772,0.8911,45.65
|
||||||
|
94,A0,1,912.67,170.82,-55.05,0.0401,-0.0161,0.9991,37.08
|
||||||
|
95,A0,3,196.36,-271.55,-63.02,-0.263,-0.3771,0.8881,10.62
|
||||||
|
96,A0,3,386.86,-188.18,-58.96,-0.0153,-0.2337,0.9722,17.17
|
||||||
|
97,A0,3,317.16,-361.37,-54.79,-0.242,-0.4685,0.8497,12.92
|
||||||
|
98,A0,2,648.49,382.72,-96.14,-0.001,0.016,0.9999,99.69
|
||||||
|
99,A0,1,1032.86,-294.32,-67.94,-0.7854,-0.2944,-0.5445,78.57
|
||||||
|
100,A0,2,848.99,192.39,-61.29,-0.6582,-0.6214,0.4251,49.94
|
||||||
|
101,A0,1,131.96,300.1,-59.87,0.0067,0.0277,0.9996,14.34
|
||||||
|
102,A0,3,683.89,-213.5,-68.38,-0.2212,-0.1903,0.9565,35.49
|
||||||
|
103,A0,2,111.85,-193.49,-59.79,0.0184,0.0312,0.9993,8.43
|
||||||
|
105,A0,3,553.96,-263.47,-68.08,-0.4035,-0.285,0.8695,29.26
|
||||||
|
201,?,1,897.13,61.75,90.23,-0.9978,0.0489,0.0451,
|
||||||
|
208,?,3,683.3,-76.41,-55.32,-0.3861,-0.3324,0.8605,
|
||||||
|
210,?,2,153.21,-2.51,-63.41,-0.3954,0.267,0.8788,
|
||||||
|
211,?,3,359.71,3.01,-41.85,0.0415,0.0337,0.9986,
|
||||||
|
214,?,3,595.34,16.16,-69.24,-0.9274,-0.1985,0.3172,
|
||||||
|
215,?,3,353.19,-91.68,-33.15,-0.2708,-0.4026,0.8744,
|
||||||
|
217,?,1,764.54,-10.41,-25.65,0.106,0.004,0.9944,
|
||||||
|
218,?,1,1121.04,-225.1,28.11,-0.7647,-0.6357,0.1053,
|
||||||
|
219,?,1,1127.16,-337.07,20.54,-0.9004,-0.4335,0.038,
|
||||||
|
Reference in New Issue
Block a user