diff --git a/scripts/4b_revolute_angle.py b/scripts/4b_revolute_angle.py index 18fb439..e371fe9 100644 --- a/scripts/4b_revolute_angle.py +++ b/scripts/4b_revolute_angle.py @@ -5,11 +5,17 @@ Generic revolute-joint angle estimator. For each movable link (Arm1, Ellbow, Arm2 …) whose joint type is 'revolute', -this script estimates the rotation angle using the pairwise-vector method: +this script estimates the rotation angle using the pairwise-vector method +(PRIMARY), with a single-marker pivot method as FALLBACK: - For every PAIR (m1, m2) of markers belonging to the target link: - v_model = local_pos_m2 - local_pos_m1 (in link's own frame) - v_obs = world_pos_m2 - world_pos_m1 (in world frame) + PRIMARY — for every PAIR (m1, m2) of markers belonging to the target link: + v_model = spoke_world(m2) - spoke_world(m1) (model, world-oriented) + v_obs = world_pos_m2 - world_pos_m1 (observed, world frame) + + where spoke_world(m) rotates the marker's local `position` (from + robot.json) through the already-known PARENT joints via FK, so it is + expressed in world orientation at this joint's own angle = 0 — exactly + the frame v_obs lives in. Both vectors are projected perpendicular to the joint axis (in world frame), and the signed angle from v_model_perp to v_obs_perp is measured. @@ -20,6 +26,16 @@ this script estimates the rotation angle using the pairwise-vector method: Pair weights = baseline_model × baseline_obs (longer baselines → more reliable). + FALLBACK — only used when the PRIMARY method has no usable pair at all + (e.g. just one marker visible, or every visible pair happens to lie + parallel to the joint axis, as for two markers spaced along a forearm): + the joint PIVOT itself stands in for the missing second marker, i.e. the + "pair" becomes (pivot, m1). This needs only ONE matched marker, but — + unlike the primary method — its accuracy additionally depends on the + already-estimated PARENT joint *values* being correct (not just their + axis direction), since the pivot's world position comes from FK. See + `PIVOT_FALLBACK_ID` / `used_fallback` in the code. + How to use sequentially ----------------------- Run 4b once per revolute joint, from root to tip: @@ -36,6 +52,7 @@ Output JSON { "link": "Arm1", "joint": "y", + "method": "marker_pair", // or "pivot_fallback" — see FALLBACK above "mean_angle_deg": 86.3, "circular_std_deg": 0.7, "num_pairs": 6, @@ -62,6 +79,12 @@ from robot_fk import RobotFK STATE_KEYS = ("x", "y", "z", "a", "b", "c", "e") +# Sentinel "marker id" used in `per_pair` reports for the joint pivot. +# Only ever appears when the FALLBACK path (pivot vs. a single marker) +# was used instead of a real marker-to-marker pair — see the +# `used_fallback` block inside `estimate_revolute_angle()` below. +PIVOT_FALLBACK_ID = -1 + # ────────────────────────────────────────────────────────────── # I/O @@ -130,6 +153,78 @@ def _circular_mean_deg(angles_rad: np.ndarray, return math.degrees(mean), c_var, math.degrees(c_std) +# ────────────────────────────────────────────────────────────── +# Shared spoke/pair math +# (used by BOTH the primary marker-pair method and the pivot FALLBACK) +# ────────────────────────────────────────────────────────────── + +def _model_spoke_world(fk: RobotFK, + zero_transforms: Dict[str, np.ndarray], + link_name: str, + origin_world: np.ndarray, + local_pos: np.ndarray) -> np.ndarray: + """ + Vector from the joint PIVOT to a marker, in WORLD ORIENTATION, as it + would be if this joint's own angle were 0 (only the already-known + PARENT rotations applied). + + This is what `v_model` must be expressed as before comparing it to + `axis_world` / an observed vector: the raw `position` field from + robot.json lives in the link's own pre-rotation local frame and is + NOT yet rotated into world orientation by the parent chain. Skipping + this rotation silently biases the estimated angle by (roughly) the + parent joint's own angle — invisible whenever the parent chain has + no rotation yet (e.g. Arm1, whose parent 'Base' is purely linear), + but wrong for anything further down the chain (Ellbow, Arm2, Hand …). + """ + p0 = fk.marker_world(zero_transforms, link_name, local_pos) + return p0 - origin_world + + +def _pair_estimate(v_model: np.ndarray, + v_obs: np.ndarray, + axis_world: np.ndarray, + marker_ids: Tuple[int, int], + min_baseline_mm: float, + fallback: bool) -> Tuple[Optional[float], Optional[float], dict]: + """ + Project model/observed vectors perpendicular to the joint axis and + derive one angle estimate from them. Returns (angle_rad, weight, + per_pair_entry) — angle_rad/weight are None when skipped (baseline + too short). + + `fallback=True` marks entries produced by the pivot FALLBACK (one of + the two "markers" is actually the joint pivot, see PIVOT_FALLBACK_ID) + so callers/reports can always tell primary and fallback data apart. + """ + v_model_perp = _project_perp(v_model, axis_world) + v_obs_perp = _project_perp(v_obs, axis_world) + + bl_model = float(np.linalg.norm(v_model_perp)) + bl_obs = float(np.linalg.norm(v_obs_perp)) + + if bl_model < min_baseline_mm or bl_obs < min_baseline_mm: + return None, None, { + "marker_ids": list(marker_ids), + "fallback": fallback, + "skipped": True, + "reason": f"bl_model={bl_model:.1f} bl_obs={bl_obs:.1f} < {min_baseline_mm}", + } + + angle = _wrap(_signed_angle_rad(v_model_perp, v_obs_perp, axis_world)) + weight = bl_model * bl_obs + entry = { + "marker_ids": list(marker_ids), + "fallback": fallback, + "skipped": False, + "angle_deg": math.degrees(angle), + "baseline_model_mm": bl_model, + "baseline_obs_mm": bl_obs, + "weight": weight, + } + return angle, weight, entry + + # ────────────────────────────────────────────────────────────── # Core estimator (generic — works for any revolute joint) # ────────────────────────────────────────────────────────────── @@ -179,8 +274,9 @@ def estimate_revolute_angle( zero_state = dict(known_state) zero_state[var] = 0.0 - origin_world = fk.joint_origin_world(link_name, zero_state) - axis_world = fk.joint_axis_world(link_name, zero_state) + origin_world = fk.joint_origin_world(link_name, zero_state) + axis_world = fk.joint_axis_world(link_name, zero_state) + zero_transforms = fk.compute(zero_state) # needed to rotate model spokes into world orientation # ── collect matched markers ─────────────────────────────── model_local: Dict[int, np.ndarray] = {} @@ -192,15 +288,24 @@ def estimate_revolute_angle( matched = {mid: (model_local[mid], observed_mm[mid]) for mid in model_local if mid in observed_mm} - if len(matched) < 2: + # Only 1 matched marker is enough to *attempt* an estimate — the + # PIVOT FALLBACK below can work with a single marker. With 0 there + # is nothing to go on at all. + if len(matched) < 1: return { "status": "failed", - "reason": (f"Need ≥2 matched markers, found {len(matched)}: " - f"{list(matched.keys())}. " + "reason": (f"Need ≥1 matched marker, found {len(matched)}. " f"Model marker IDs: {list(model_local.keys())}"), } - # ── pairwise estimation ─────────────────────────────────── + def _spoke(local_pos: np.ndarray) -> np.ndarray: + return _model_spoke_world(fk, zero_transforms, link_name, origin_world, local_pos) + + # ── PRIMARY: marker-to-marker pairs within this link ────── + # Preferred whenever ≥2 markers with a usable (non axis-parallel) + # baseline are visible. Only the AXIS DIRECTION needs to be correct + # for this — not the pivot's position — so it is the more robust + # source of truth and is always tried first. ids = sorted(matched.keys()) angle_rad_list: List[float] = [] weight_list: List[float] = [] @@ -210,42 +315,49 @@ def estimate_revolute_angle( l1, o1 = matched[id1] l2, o2 = matched[id2] - v_model = l2 - l1 # local frame, both in same link - v_obs = o2 - o1 # world frame + v_model = _spoke(l2) - _spoke(l1) # model, world-oriented + v_obs = o2 - o1 # observed, world frame - v_model_perp = _project_perp(v_model, axis_world) - v_obs_perp = _project_perp(v_obs, axis_world) + angle, weight, entry = _pair_estimate( + v_model, v_obs, axis_world, (id1, id2), min_baseline_mm, fallback=False) + per_pair.append(entry) + if angle is not None: + angle_rad_list.append(angle) + weight_list.append(weight) - bl_model = float(np.linalg.norm(v_model_perp)) - bl_obs = float(np.linalg.norm(v_obs_perp)) + # ── FALLBACK: pivot + single marker, axis from predecessor ──── + # Only entered when the PRIMARY method above produced NOT A SINGLE + # usable pair (e.g. only one marker visible at all, or every visible + # pair happens to lie parallel to the joint axis — as for two + # markers spaced along a forearm). Each matched marker is paired + # with the joint PIVOT instead of another marker, using the + # rotation axis already known from the predecessor joints. + # This is strictly a fallback: compared to a real 2-marker baseline + # it additionally relies on the predecessor joints' *values* (not + # just their axis direction) being accurate, since the pivot's + # world position is computed via FK rather than observed directly. + used_fallback = False + if not angle_rad_list: + used_fallback = True + for mid in ids: + l, o = matched[mid] + v_model = _spoke(l) # pivot → marker, model, world-oriented + v_obs = o - origin_world # pivot → marker, observed - if bl_model < min_baseline_mm or bl_obs < min_baseline_mm: - per_pair.append({ - "marker_ids": [id1, id2], - "skipped": True, - "reason": f"bl_model={bl_model:.1f} bl_obs={bl_obs:.1f} < {min_baseline_mm}", - }) - continue - - angle = _wrap(_signed_angle_rad(v_model_perp, v_obs_perp, axis_world)) - w = bl_model * bl_obs - - angle_rad_list.append(angle) - weight_list.append(w) - per_pair.append({ - "marker_ids": [id1, id2], - "skipped": False, - "angle_deg": math.degrees(angle), - "baseline_model_mm": bl_model, - "baseline_obs_mm": bl_obs, - "weight": w, - }) + angle, weight, entry = _pair_estimate( + v_model, v_obs, axis_world, + (PIVOT_FALLBACK_ID, mid), min_baseline_mm, fallback=True) + per_pair.append(entry) + if angle is not None: + angle_rad_list.append(angle) + weight_list.append(weight) if not angle_rad_list: return { "status": "failed", - "reason": "All pairs below min_baseline_mm. " - "Try --min-baseline 5 or check step-3 output.", + "reason": "All pairs below min_baseline_mm, including the " + "pivot fallback. Try --min-baseline 5 or check " + "step-3 output.", } mean_deg, c_var, c_std_deg = _circular_mean_deg( @@ -258,16 +370,23 @@ def estimate_revolute_angle( print(f" Joint origin (world): [{', '.join(f'{v:.1f}' for v in origin_world)}] mm") print(f" Joint axis (world): [{', '.join(f'{v:.3f}' for v in axis_world)}]") print(f" Matched markers: {list(matched.keys())}") - print(f" Pairs used: {len(angle_rad_list)} / {len(list(combinations(ids, 2)))}") + if used_fallback: + print(f" [FALLBACK] No usable marker-marker pair — estimating from " + f"pivot + predecessor axis instead (single-marker spokes).") + print(f" Pairs used: {len(angle_rad_list)} / {len(per_pair)}") print(f" Angle: {mean_deg:+.2f} ° circular_σ {c_std_deg:.2f} °") if c_std_deg > 5.0: print(f" [WARN] high spread – step-3 errors or marker overlap") print(f"\n Pair detail:") for pp in per_pair: + id0, id1_ = pp["marker_ids"] + m0 = "PIVOT" if id0 == PIVOT_FALLBACK_ID else f"M{id0}" + m1 = "PIVOT" if id1_ == PIVOT_FALLBACK_ID else f"M{id1_}" + tag = " [fallback]" if pp.get("fallback") else "" if pp["skipped"]: - print(f" M{pp['marker_ids'][0]}↔M{pp['marker_ids'][1]}: SKIPPED – {pp['reason']}") + print(f" {m0}↔{m1}{tag}: SKIPPED – {pp['reason']}") else: - print(f" M{pp['marker_ids'][0]}↔M{pp['marker_ids'][1]}: " + print(f" {m0}↔{m1}{tag}: " f"{pp['angle_deg']:+7.2f}° " f"bl_model={pp['baseline_model_mm']:.1f} " f"bl_obs={pp['baseline_obs_mm']:.1f}") @@ -280,6 +399,7 @@ def estimate_revolute_angle( "status": "ok", "link": link_name, "joint": var, + "method": "pivot_fallback" if used_fallback else "marker_pair", "joint_origin_world_mm": origin_world.tolist(), "joint_axis_world": axis_world.tolist(), "mean_angle_deg": mean_deg, diff --git a/scripts/__pycache__/robot_fk.cpython-311.pyc b/scripts/__pycache__/robot_fk.cpython-311.pyc new file mode 100644 index 0000000..0830b4a Binary files /dev/null and b/scripts/__pycache__/robot_fk.cpython-311.pyc differ diff --git a/test/homing/20260616_120456/aruco_marker_poses.csv b/test/homing/20260616_120456/aruco_marker_poses.csv new file mode 100644 index 0000000..21676be --- /dev/null +++ b/test/homing/20260616_120456/aruco_marker_poses.csv @@ -0,0 +1,46 @@ +marker_id,link,set,num_cameras,x_mm,y_mm,z_mm,nx,ny,nz,model_x_mm,model_y_mm,model_z_mm,dist_to_model_mm,delta_z_mm,edge_length_mm +47,Board,A0,3,343.56,-286.5,-27.02,0.01282,0.04293,0.999,344.23,-286.54,-27.3,0.727,0.278,23.86 +51,Board,A0,2,168.06,-172.05,-26.96,-0.06575,-0.00903,0.99779,167.8,-172.08,-27.3,0.432,0.344,23.62 +54,Board,A0,3,341.85,-330.17,-26.58,0.02766,0.00621,0.9996,342.27,-330.59,-27.3,0.928,0.716,23.56 +55,Board,A0,3,282.99,-262.34,-26.34,0.0153,0.00966,0.99984,283.72,-262.58,-27.3,1.231,0.961,23.68 +57,Board,A0,2,602.73,-364.49,-27.92,0.02948,0.01103,0.9995,602.86,-364.05,-27.3,0.774,-0.622,23.95 +62,Board,A0,3,403.64,-174.91,-26.43,0.02093,-0.01927,0.9996,404.7,-175.1,-27.3,1.381,0.868,23.73 +65,Board,A0,2,805.42,-298.68,-28.85,0.07317,-0.00718,0.99729,803.39,-297.37,-27.3,2.872,-1.549,24.67 +66,Board,A0,2,209.91,-362.69,-27.32,0.01431,0.0008,0.9999,209.75,-363.23,-27.3,0.56,-0.021,24.07 +70,Board,A0,2,598.23,299.66,-24.5,-0.01925,0.12918,0.99143,601.87,300.33,-27.3,4.638,2.798,24.16 +71,Board,A0,2,750.95,-284.52,-27.87,0.02144,-0.00558,0.99975,749.75,-284.01,-27.3,1.423,-0.571,24.07 +79,Board,A0,2,312.62,-159.33,-27.38,-0.03005,-0.02443,0.99925,312.3,-159.11,-27.3,0.397,-0.077,23.93 +80,Board,A0,2,866.21,-337.3,-29.23,0.03205,-0.01144,0.99942,863.59,-335.92,-27.3,3.54,-1.934,23.73 +82,Board,A0,2,217.92,296.91,-26.35,-0.02521,0.05118,0.99837,219.16,297.24,-27.3,1.599,0.954,23.75 +84,Board,A0,3,405.0,257.84,-25.4,0.01076,0.0148,0.99983,407.49,258.42,-27.3,3.183,1.897,23.57 +85,Board,A0,3,504.05,-312.91,-27.97,-0.00509,-0.01089,0.99993,504.58,-312.75,-27.3,0.869,-0.668,23.76 +86,Board,A0,2,362.68,291.99,-27.28,-0.01296,0.03562,0.99928,362.89,292.01,-27.3,0.209,0.022,23.91 +87,Board,A0,2,946.89,-246.84,-29.25,0.03555,0.02881,0.99895,943.63,-245.76,-27.3,3.952,-1.95,24.15 +90,Board,A0,2,639.54,315.8,-24.64,-0.00908,0.0411,0.99911,643.17,316.43,-27.3,4.55,2.665,23.68 +91,Board,A0,2,719.12,327.68,-24.61,-0.07043,0.08617,0.99379,723.35,328.05,-27.3,5.028,2.687,23.57 +93,Board,A0,2,932.27,143.24,-24.03,-0.05724,0.02723,0.99799,934.88,143.6,-27.3,4.202,3.272,22.76 +95,Board,A0,2,186.15,-273.72,-26.9,0.01775,-0.00563,0.99983,186.04,-274.07,-27.3,0.548,0.404,23.8 +96,Board,A0,3,368.95,-186.48,-26.8,-0.02679,0.03068,0.99917,369.77,-186.49,-27.3,0.961,0.499,23.46 +97,Board,A0,2,304.05,-359.12,-27.02,0.00663,-0.01188,0.99991,304.35,-359.67,-27.3,0.689,0.284,23.61 +99,Board,A0,2,963.23,-323.27,-29.97,0.05209,-0.03007,0.99819,959.16,-321.55,-27.3,5.165,-2.671,23.74 +104,Board,A0,2,822.76,238.49,-24.06,-0.01937,0.04301,0.99889,826.71,239.16,-27.3,5.157,3.245,23.49 +105,Board,A0,3,524.14,-266.3,-27.48,0.04369,0.05496,0.99753,524.84,-266.25,-27.3,0.728,-0.183,24.08 +129,Ellbow,,2,392.44,-57.59,273.3,-0.02284,-0.02831,0.99934,,,,,,23.22 +132,Ellbow,,2,355.65,-57.41,273.66,0.00682,-0.01043,0.99992,,,,,,23.57 +143,Arm2,,3,368.17,-239.23,261.07,-0.6936,-0.02269,0.72001,,,,,,24.16 +144,Arm2,,3,356.52,-168.54,237.95,-0.99956,0.02529,0.01551,,,,,,24.28 +146,Arm2,,2,363.47,-167.73,265.11,-0.69227,-0.01571,0.72147,,,,,,23.95 +147,unknown,,2,361.52,-238.42,219.07,-0.87822,0.02426,-0.47764,,,,,,25.11 +148,Arm2,,3,356.84,-275.1,235.17,-0.99971,0.02422,-0.00165,,,,,,24.49 +197,Arm1,,2,253.16,-55.28,243.87,-0.99795,-0.06394,0.00227,,,,,,24.78 +200,unknown,,2,231.14,-30.63,109.67,-0.03466,0.04681,0.9983,,,,,,22.96 +201,unknown,,3,195.05,46.33,96.05,-0.99847,-0.02285,0.05033,,,,,,24.23 +204,unknown,,3,230.13,118.96,116.92,-0.00845,0.01273,0.99988,,,,,,23.55 +205,unknown,,2,935.95,-97.07,-6.58,-0.01249,0.09996,0.99491,,,,,,23.18 +215,unknown,,2,334.82,-96.93,-7.71,-0.02232,0.05948,0.99798,,,,,,23.34 +243,Arm1,,2,303.21,-79.66,265.92,0.02387,-0.65211,0.75775,,,,,,23.8 + +camera_id,x_mm,y_mm,z_mm,dir_x,dir_y,dir_z +cam0,-352.63,-78.05,407.29,0.94846,0.07547,-0.30777 +cam1,-232.55,-598.43,854.78,0.51862,0.43559,-0.73573 +cam2,-237.23,81.29,837.43,0.70662,-0.07011,-0.70411 diff --git a/test/homing/20260616_120456/aruco_marker_poses.json b/test/homing/20260616_120456/aruco_marker_poses.json new file mode 100644 index 0000000..5004a17 --- /dev/null +++ b/test/homing/20260616_120456/aruco_marker_poses.json @@ -0,0 +1,1827 @@ +{ + "schema_version": "1.1", + "stage": "corner_marker_poses", + "created_utc": "2026-06-16T12:05:07Z", + "summary": { + "num_cameras": 3, + "num_markers": 40 + }, + "cameras": [ + { + "camera_id": "cam0", + "position_m": [ + -0.3526316087449289, + -0.07805285691670827, + 0.40728851378172376 + ], + "position_mm": [ + -352.6316087449289, + -78.05285691670827, + 407.28851378172374 + ], + "direction": [ + 0.9484628438949585, + 0.07547000050544739, + -0.3077702820301056 + ] + }, + { + "camera_id": "cam1", + "position_m": [ + -0.23255102813413764, + -0.5984326679457976, + 0.8547813589099071 + ], + "position_mm": [ + -232.55102813413765, + -598.4326679457977, + 854.7813589099071 + ], + "direction": [ + 0.5186222195625305, + 0.4355906546115875, + -0.7357253432273865 + ] + }, + { + "camera_id": "cam2", + "position_m": [ + -0.23722987461977407, + 0.08128705685627069, + 0.8374324063547778 + ], + "position_mm": [ + -237.22987461977408, + 81.2870568562707, + 837.4324063547778 + ], + "direction": [ + 0.7066220045089722, + -0.07011179625988007, + -0.7041091322898865 + ] + } + ], + "markers": [ + { + "marker_id": 47, + "link": "Board", + "set": "A0", + "position_m": [ + 0.3435594815282216, + -0.2864989783751998, + -0.02702216916703986 + ], + "position_mm": [ + 343.55948152822157, + -286.4989783751998, + -27.02216916703986 + ], + "normal": [ + 0.01281904945086653, + 0.042932052554481966, + 0.9989957511594509 + ], + "corners_m": [ + [ + 0.331734550944306, + -0.2986060980719228, + -0.026732013555025753 + ], + [ + 0.33157970280176785, + -0.274358751587932, + -0.027026066426628078 + ], + [ + 0.3559272456658041, + -0.27479444093523214, + -0.02805971915735549 + ], + [ + 0.3549964267010083, + -0.2982366229057123, + -0.02627087752915012 + ] + ], + "num_cameras": 3, + "edge_length_mm": 23.855281582769656 + }, + { + "marker_id": 51, + "link": "Board", + "set": "A0", + "position_m": [ + 0.16806033846312557, + -0.17204948308519424, + -0.026956210419144172 + ], + "position_mm": [ + 168.06033846312556, + -172.04948308519425, + -26.95621041914417 + ], + "normal": [ + -0.065754828880651, + -0.009033755131075186, + 0.9977949156751141 + ], + "corners_m": [ + [ + 0.1567953158114941, + -0.18415747100025076, + -0.028145558766103494 + ], + [ + 0.1560739055906344, + -0.15989153290571004, + -0.027312396915976478 + ], + [ + 0.1798474581271879, + -0.1603029074592515, + -0.026407024525597435 + ], + [ + 0.17952467432318586, + -0.18384602097556474, + -0.025959861468899278 + ] + ], + "num_cameras": 2, + "edge_length_mm": 23.617799284569507 + }, + { + "marker_id": 54, + "link": "Board", + "set": "A0", + "position_m": [ + 0.3418515458730868, + -0.33017234615005137, + -0.02658418405350185 + ], + "position_mm": [ + 341.8515458730868, + -330.17234615005134, + -26.58418405350185 + ], + "normal": [ + 0.027662895722125127, + 0.006207862690345567, + 0.9995980325316196 + ], + "corners_m": [ + [ + 0.3301904041781284, + -0.34189600678440824, + -0.02647439338532304 + ], + [ + 0.32995654471724595, + -0.3182285585786004, + -0.026057780631504143 + ], + [ + 0.3540977342364183, + -0.3185912616091774, + -0.027269582967585776 + ], + [ + 0.35316150036055455, + -0.34197355762801956, + -0.02653497922959444 + ] + ], + "num_cameras": 3, + "edge_length_mm": 23.557610489270527 + }, + { + "marker_id": 55, + "link": "Board", + "set": "A0", + "position_m": [ + 0.282988866940312, + -0.26234135312609974, + -0.026338936623851658 + ], + "position_mm": [ + 282.988866940312, + -262.34135312609976, + -26.33893662385166 + ], + "normal": [ + 0.015303479980810959, + 0.009658895290663994, + 0.9998362412126502 + ], + "corners_m": [ + [ + 0.2709237860266876, + -0.2740751579697253, + -0.026181423102864688 + ], + [ + 0.27139790823337806, + -0.2505764067936851, + -0.026133818111019145 + ], + [ + 0.29498064147212893, + -0.25042073977840074, + -0.026776767581457053 + ], + [ + 0.2946531320290533, + -0.27429310796258766, + -0.026263737700065747 + ] + ], + "num_cameras": 3, + "edge_length_mm": 23.676551875539428 + }, + { + "marker_id": 57, + "link": "Board", + "set": "A0", + "position_m": [ + 0.6027304008026454, + -0.3644928884676598, + -0.027921601894952942 + ], + "position_mm": [ + 602.7304008026454, + -364.49288846765984, + -27.921601894952943 + ], + "normal": [ + 0.02948145450228854, + 0.011027424877642416, + 0.9995044971089412 + ], + "corners_m": [ + [ + 0.5901972700954341, + -0.37611572953074024, + -0.02751821370573375 + ], + [ + 0.5908143652673012, + -0.3527503807666853, + -0.027602449877633786 + ], + [ + 0.6149126004438322, + -0.3527952455393245, + -0.028506604021249354 + ], + [ + 0.6149973674040142, + -0.3763101980338891, + -0.028059139975194883 + ] + ], + "num_cameras": 2, + "edge_length_mm": 23.953750264584524 + }, + { + "marker_id": 62, + "link": "Board", + "set": "A0", + "position_m": [ + 0.40364344614378134, + -0.17490636660601097, + -0.02643155398626886 + ], + "position_mm": [ + 403.6434461437813, + -174.90636660601098, + -26.431553986268863 + ], + "normal": [ + 0.02092874287739503, + -0.019273888190835427, + 0.9995951705343414 + ], + "corners_m": [ + [ + 0.3915297047997293, + -0.18703732761358588, + -0.025911780773202615 + ], + [ + 0.39237607084038917, + -0.16290196842082394, + -0.02650449667239105 + ], + [ + 0.4148784175387845, + -0.16290900583889775, + -0.025890411369450014 + ], + [ + 0.41578959139622235, + -0.1867771645507363, + -0.027419527130031755 + ] + ], + "num_cameras": 3, + "edge_length_mm": 23.727679857336103 + }, + { + "marker_id": 65, + "link": "Board", + "set": "A0", + "position_m": [ + 0.805424733667933, + -0.2986770695260395, + -0.028848724395244853 + ], + "position_mm": [ + 805.424733667933, + -298.67706952603953, + -28.848724395244854 + ], + "normal": [ + 0.0731722427652809, + -0.007178635039391312, + 0.9972934824251436 + ], + "corners_m": [ + [ + 0.7926314497337715, + -0.3103941854118441, + -0.028625729829629187 + ], + [ + 0.7928917381498267, + -0.2862456880267707, + -0.02728509795225192 + ], + [ + 0.8197175550448343, + -0.287352529825253, + -0.030388499936827778 + ], + [ + 0.8164581917432996, + -0.3107158748402903, + -0.029095569862270517 + ] + ], + "num_cameras": 2, + "edge_length_mm": 24.668260363425663 + }, + { + "marker_id": 66, + "link": "Board", + "set": "A0", + "position_m": [ + 0.2099077783801797, + -0.36269288991015625, + -0.027321255071907344 + ], + "position_mm": [ + 209.9077783801797, + -362.6928899101562, + -27.321255071907345 + ], + "normal": [ + 0.014306918222595727, + 0.0008002215714391081, + 0.9998973305977013 + ], + "corners_m": [ + [ + 0.19790236961555752, + -0.3746482274255844, + -0.02792511862101442 + ], + [ + 0.1975678143011603, + -0.3504456907987716, + -0.0264020548274949 + ], + [ + 0.2223951774246176, + -0.35125651948759024, + -0.02829546919729508 + ], + [ + 0.22176575217938346, + -0.3744211219286787, + -0.02666237764182497 + ] + ], + "num_cameras": 2, + "edge_length_mm": 24.073462291775762 + }, + { + "marker_id": 70, + "link": "Board", + "set": "A0", + "position_m": [ + 0.5982323519048035, + 0.2996616725289836, + -0.02450201986961239 + ], + "position_mm": [ + 598.2323519048035, + 299.6616725289836, + -24.50201986961239 + ], + "normal": [ + -0.019254299445460196, + 0.12918498454472607, + 0.9914335639471983 + ], + "corners_m": [ + [ + 0.5854241826919778, + 0.28736144992529217, + -0.0236707946945674 + ], + [ + 0.588466922590518, + 0.31221161304926626, + -0.025829289337753317 + ], + [ + 0.6117001060629799, + 0.3123305383061553, + -0.026368927855161137 + ], + [ + 0.6073381962737382, + 0.28674308883522087, + -0.022139067590967697 + ] + ], + "num_cameras": 2, + "edge_length_mm": 24.16088217631989 + }, + { + "marker_id": 71, + "link": "Board", + "set": "A0", + "position_m": [ + 0.7509503710458807, + -0.2845188840869718, + -0.027870878467156444 + ], + "position_mm": [ + 750.9503710458807, + -284.5188840869718, + -27.870878467156444 + ], + "normal": [ + 0.02143975841505378, + -0.005579524260732327, + 0.9997545727167885 + ], + "corners_m": [ + [ + 0.7380071326782967, + -0.29686630496955996, + -0.02739709823771704 + ], + [ + 0.7392571141023191, + -0.272923550803108, + -0.027832551464465866 + ], + [ + 0.7633557476279906, + -0.2726699775729534, + -0.027782324563754332 + ], + [ + 0.763181489774916, + -0.29561570300226575, + -0.02847153960268854 + ] + ], + "num_cameras": 2, + "edge_length_mm": 24.066090421227216 + }, + { + "marker_id": 79, + "link": "Board", + "set": "A0", + "position_m": [ + 0.3126232958177162, + -0.15932683001076592, + -0.02737723352519187 + ], + "position_mm": [ + 312.6232958177162, + -159.32683001076592, + -27.37723352519187 + ], + "normal": [ + -0.030050438292693264, + -0.024432429658533643, + 0.9992497323189022 + ], + "corners_m": [ + [ + 0.3007555501466273, + -0.17146779433230047, + -0.027747576588955537 + ], + [ + 0.30101805233611456, + -0.1470481459509444, + -0.02771912296362553 + ], + [ + 0.3240799821668159, + -0.14724652686896375, + -0.026443056695420363 + ], + [ + 0.32463959862130715, + -0.17154485289085505, + -0.027599177852766055 + ] + ], + "num_cameras": 2, + "edge_length_mm": 23.934004762134016 + }, + { + "marker_id": 80, + "link": "Board", + "set": "A0", + "position_m": [ + 0.8662139375802267, + -0.3372995942195068, + -0.029234018754704154 + ], + "position_mm": [ + 866.2139375802267, + -337.2995942195068, + -29.234018754704152 + ], + "normal": [ + 0.032052211009864565, + -0.011439109592326302, + 0.9994207334957155 + ], + "corners_m": [ + [ + 0.8536783254027517, + -0.34941959577051246, + -0.02881352445324401 + ], + [ + 0.8552159099165889, + -0.32498201415319417, + -0.028910856493020116 + ], + [ + 0.8778104598221781, + -0.32574473929451186, + -0.02929513319540261 + ], + [ + 0.8781510551793882, + -0.34905202765980853, + -0.02991656087714988 + ] + ], + "num_cameras": 2, + "edge_length_mm": 23.728793971485857 + }, + { + "marker_id": 82, + "link": "Board", + "set": "A0", + "position_m": [ + 0.21792024777244431, + 0.2969073069455647, + -0.026345900181160686 + ], + "position_mm": [ + 217.92024777244433, + 296.9073069455647, + -26.345900181160687 + ], + "normal": [ + -0.025206043607732164, + 0.051180134308862826, + 0.9983712982742302 + ], + "corners_m": [ + [ + 0.20611065023491956, + 0.28494778464546366, + -0.02603691642976002 + ], + [ + 0.20670493615065785, + 0.30979486439779197, + -0.027283877280395892 + ], + [ + 0.2299178524545844, + 0.30841610383005946, + -0.02663903549141006 + ], + [ + 0.22894755224961552, + 0.2844704749089437, + -0.025423771523076774 + ] + ], + "num_cameras": 2, + "edge_length_mm": 23.748600663453015 + }, + { + "marker_id": 84, + "link": "Board", + "set": "A0", + "position_m": [ + 0.40499970437215244, + 0.25784142306048335, + -0.025403312075298144 + ], + "position_mm": [ + 404.99970437215245, + 257.84142306048335, + -25.403312075298143 + ], + "normal": [ + 0.010760035569841288, + 0.014801561955888443, + 0.9998325536799659 + ], + "corners_m": [ + [ + 0.39296708810008074, + 0.24614902706425917, + -0.0250697437542557 + ], + [ + 0.39345300642240216, + 0.26990235293642534, + -0.025489239570601115 + ], + [ + 0.4167845303683871, + 0.2693229126936563, + -0.025667891186234592 + ], + [ + 0.4167941925977398, + 0.2459913995475927, + -0.025386373790101172 + ] + ], + "num_cameras": 3, + "edge_length_mm": 23.566085887264308 + }, + { + "marker_id": 85, + "link": "Board", + "set": "A0", + "position_m": [ + 0.5040464707293562, + -0.31290787955125565, + -0.027967791722774648 + ], + "position_mm": [ + 504.04647072935614, + -312.90787955125563, + -27.96779172277465 + ], + "normal": [ + -0.005092293456634005, + -0.01088733105600137, + 0.9999277646759432 + ], + "corners_m": [ + [ + 0.49221050465089006, + -0.3249595453753359, + -0.02825081055236353 + ], + [ + 0.4923137031514488, + -0.3009328102234328, + -0.02780583711928354 + ], + [ + 0.5159089635259284, + -0.30093561696001936, + -0.027868968591870484 + ], + [ + 0.5157527115891576, + -0.3248035456462345, + -0.027945550627581042 + ] + ], + "num_cameras": 3, + "edge_length_mm": 23.75992188818433 + }, + { + "marker_id": 86, + "link": "Board", + "set": "A0", + "position_m": [ + 0.36268349865980476, + 0.29198623972377213, + -0.027278193713927187 + ], + "position_mm": [ + 362.68349865980474, + 291.98623972377214, + -27.278193713927188 + ], + "normal": [ + -0.012964645198457043, + 0.03561713439313833, + 0.9992814106709378 + ], + "corners_m": [ + [ + 0.3503715557237215, + 0.2799311611288383, + -0.026855463904124795 + ], + [ + 0.3518636904338405, + 0.304317645675007, + -0.028008659574448223 + ], + [ + 0.3751768320165507, + 0.30425996442318476, + -0.027405576969644928 + ], + [ + 0.37332191646510615, + 0.27943618766805833, + -0.026843074407490806 + ] + ], + "num_cameras": 2, + "edge_length_mm": 23.908835638838603 + }, + { + "marker_id": 87, + "link": "Board", + "set": "A0", + "position_m": [ + 0.9468949232155965, + -0.2468351870686718, + -0.029250383405795485 + ], + "position_mm": [ + 946.8949232155966, + -246.83518706867181, + -29.250383405795485 + ], + "normal": [ + 0.03554576282506344, + 0.028808718002565792, + 0.9989527298687526 + ], + "corners_m": [ + [ + 0.9331481696707938, + -0.25855560571913133, + -0.028507363646461326 + ], + [ + 0.9360879376671185, + -0.23462732386912843, + -0.029132281819786488 + ], + [ + 0.9603824597305418, + -0.23548504527036945, + -0.030145959507700448 + ], + [ + 0.9579611257939323, + -0.25867277341605804, + -0.02921592864923369 + ] + ], + "num_cameras": 2, + "edge_length_mm": 24.150692702442953 + }, + { + "marker_id": 90, + "link": "Board", + "set": "A0", + "position_m": [ + 0.6395358859991032, + 0.3157997261646937, + -0.02463512661975782 + ], + "position_mm": [ + 639.5358859991031, + 315.7997261646937, + -24.635126619757823 + ], + "normal": [ + -0.009084595674752892, + 0.041097933495752303, + 0.9991138223364769 + ], + "corners_m": [ + [ + 0.6271970763256791, + 0.30377856548847043, + -0.024670704964589434 + ], + [ + 0.629237542885725, + 0.3287473526508092, + -0.024870880602922908 + ], + [ + 0.6525874593643987, + 0.32732670469888014, + -0.025395525457501473 + ], + [ + 0.64912146542061, + 0.303346281820615, + -0.02360339545401747 + ] + ], + "num_cameras": 2, + "edge_length_mm": 23.675549991353236 + }, + { + "marker_id": 91, + "link": "Board", + "set": "A0", + "position_m": [ + 0.7191168779967866, + 0.3276766263373311, + -0.02461294072063889 + ], + "position_mm": [ + 719.1168779967866, + 327.6766263373311, + -24.61294072063889 + ], + "normal": [ + -0.07043267652877566, + 0.0861655482796454, + 0.9937880741720847 + ], + "corners_m": [ + [ + 0.7064378300993974, + 0.3154104690743812, + -0.024069515991114995 + ], + [ + 0.7097947964562855, + 0.3403621403627465, + -0.02678916608547992 + ], + [ + 0.7307003529254329, + 0.3398285672615131, + -0.024423429695494176 + ], + [ + 0.7295345325060306, + 0.3151053286506836, + -0.023169651110466476 + ] + ], + "num_cameras": 2, + "edge_length_mm": 23.56684612140302 + }, + { + "marker_id": 93, + "link": "Board", + "set": "A0", + "position_m": [ + 0.9322689098783274, + 0.14323726047373192, + -0.024028165140906107 + ], + "position_mm": [ + 932.2689098783275, + 143.2372604737319, + -24.028165140906108 + ], + "normal": [ + -0.05724464963721315, + 0.02723206549795765, + 0.9979887097039865 + ], + "corners_m": [ + [ + 0.9200704141921848, + 0.13178716162894935, + -0.024025683344466146 + ], + [ + 0.9227228819454555, + 0.15531798921291382, + -0.025326031728257856 + ], + [ + 0.9435927239694109, + 0.1547586736732895, + -0.023273219531950447 + ], + [ + 0.9426896194062583, + 0.131085217379775, + -0.023487725958949972 + ] + ], + "num_cameras": 2, + "edge_length_mm": 22.75542017021335 + }, + { + "marker_id": 95, + "link": "Board", + "set": "A0", + "position_m": [ + 0.18614627908129266, + -0.2737161262208145, + -0.02689556841036435 + ], + "position_mm": [ + 186.14627908129268, + -273.7161262208145, + -26.895568410364348 + ], + "normal": [ + 0.01775111160345188, + -0.005628533826115723, + 0.9998265937870477 + ], + "corners_m": [ + [ + 0.17443855856046878, + -0.28598570686159913, + -0.02616158051530595 + ], + [ + 0.1742905486459255, + -0.2614323941144238, + -0.027204537375444742 + ], + [ + 0.1980034761196116, + -0.2620369964957412, + -0.02642217878708248 + ], + [ + 0.1978525329991647, + -0.28540940741149384, + -0.027793976963624217 + ] + ], + "num_cameras": 2, + "edge_length_mm": 23.80010904979725 + }, + { + "marker_id": 96, + "link": "Board", + "set": "A0", + "position_m": [ + 0.3689482468152302, + -0.18647528980224404, + -0.026801110840563046 + ], + "position_mm": [ + 368.9482468152302, + -186.47528980224405, + -26.801110840563044 + ], + "normal": [ + -0.02678995626498763, + 0.03068338191540299, + 0.9991700697666808 + ], + "corners_m": [ + [ + 0.3574218374741447, + -0.19861960849916427, + -0.02683756075884329 + ], + [ + 0.3578365133741501, + -0.17451424627279072, + -0.027367929302413472 + ], + [ + 0.3807034169298325, + -0.17419394428382506, + -0.026960344897252107 + ], + [ + 0.37983121948279347, + -0.19857336015319607, + -0.026038608403743318 + ] + ], + "num_cameras": 3, + "edge_length_mm": 23.455906923475034 + }, + { + "marker_id": 97, + "link": "Board", + "set": "A0", + "position_m": [ + 0.30405438375855637, + -0.3591160729749752, + -0.027016180367155085 + ], + "position_mm": [ + 304.05438375855636, + -359.1160729749752, + -27.016180367155084 + ], + "normal": [ + 0.0066300296186699356, + -0.011877364317404823, + 0.9999074811821977 + ], + "corners_m": [ + [ + 0.29209586253306685, + -0.37094809200329015, + -0.02659587397517982 + ], + [ + 0.29251446196213543, + -0.34713208534826684, + -0.027295545244428055 + ], + [ + 0.315621544691162, + -0.34741946814777774, + -0.026450453987698266 + ], + [ + 0.31598566584786114, + -0.37096464640056603, + -0.027722848261314204 + ] + ], + "num_cameras": 2, + "edge_length_mm": 23.61324923573567 + }, + { + "marker_id": 99, + "link": "Board", + "set": "A0", + "position_m": [ + 0.9632323305032665, + -0.3232680565816618, + -0.029971451357167535 + ], + "position_mm": [ + 963.2323305032666, + -323.2680565816618, + -29.971451357167535 + ], + "normal": [ + 0.05208680132292138, + -0.030067961674563937, + 0.9981898029977483 + ], + "corners_m": [ + [ + 0.9525372608982561, + -0.33454168538084117, + -0.030385843457019945 + ], + [ + 0.9494218955957283, + -0.3117983446292164, + -0.028375347668404407 + ], + [ + 0.9760353174582381, + -0.3119788702615086, + -0.030829546312133818 + ], + [ + 0.9749348480608436, + -0.33475332605508096, + -0.030295067991111972 + ] + ], + "num_cameras": 2, + "edge_length_mm": 23.744151357271637 + }, + { + "marker_id": 104, + "link": "Board", + "set": "A0", + "position_m": [ + 0.8227572630562223, + 0.23849362957786668, + -0.02405546177153102 + ], + "position_mm": [ + 822.7572630562223, + 238.49362957786667, + -24.05546177153102 + ], + "normal": [ + -0.01936682411478001, + 0.04301381929657167, + 0.9988867490728012 + ], + "corners_m": [ + [ + 0.8103296464221889, + 0.22688268454778449, + -0.023569150953522244 + ], + [ + 0.8119986969445971, + 0.2510088979288581, + -0.025041324096065853 + ], + [ + 0.8346139507213676, + 0.2496843668465886, + -0.024059882295974798 + ], + [ + 0.8340867581367356, + 0.2263985689882355, + -0.02355148974056117 + ] + ], + "num_cameras": 2, + "edge_length_mm": 23.490816216242866 + }, + { + "marker_id": 105, + "link": "Board", + "set": "A0", + "position_m": [ + 0.5241369546268219, + -0.26630432644178875, + -0.027482908452784387 + ], + "position_mm": [ + 524.1369546268219, + -266.30432644178876, + -27.482908452784386 + ], + "normal": [ + 0.04368656226046676, + 0.05496092292900596, + 0.9975323459560869 + ], + "corners_m": [ + [ + 0.5116261070503494, + -0.27826479820143935, + -0.02661615385463839 + ], + [ + 0.5122570128552358, + -0.25435931925311106, + -0.02730896385897328 + ], + [ + 0.5376500579492596, + -0.2546352966957986, + -0.029036578933075426 + ], + [ + 0.5350146406524429, + -0.2779578916168059, + -0.02696993716445045 + ] + ], + "num_cameras": 3, + "edge_length_mm": 24.08303305603862 + }, + { + "marker_id": 129, + "link": "Ellbow", + "set": "", + "position_m": [ + 0.39244413685977836, + -0.05758938087670008, + 0.273295458917783 + ], + "position_mm": [ + 392.4441368597784, + -57.58938087670008, + 273.295458917783 + ], + "normal": [ + -0.022836768061933795, + -0.028310615060506143, + 0.9993382766107687 + ], + "corners_m": [ + [ + 0.38139429249309886, + -0.04532128042589595, + 0.2737741789550633 + ], + [ + 0.4043325773321195, + -0.046073464211793126, + 0.27350281344963706 + ], + [ + 0.4031527306872116, + -0.0696634480421872, + 0.2736001745663777 + ], + [ + 0.38089694692668336, + -0.06929933082692406, + 0.27230466870005404 + ] + ], + "num_cameras": 2, + "edge_length_mm": 23.22412650151607 + }, + { + "marker_id": 132, + "link": "Ellbow", + "set": "", + "position_m": [ + 0.35565472490172495, + -0.0574130133073629, + 0.27365524935288993 + ], + "position_mm": [ + 355.65472490172493, + -57.413013307362895, + 273.65524935288994 + ], + "normal": [ + 0.006820544836909778, + -0.010426782215562175, + 0.9999223781778048 + ], + "corners_m": [ + [ + 0.3446556549798091, + -0.04513441025302817, + 0.2740011521607033 + ], + [ + 0.36764037401784244, + -0.04548962869464084, + 0.27355372998294364 + ], + [ + 0.36658901000975647, + -0.06958827067730422, + 0.273598695987482 + ], + [ + 0.34373386059949174, + -0.06943974360447835, + 0.27346741928043083 + ] + ], + "num_cameras": 2, + "edge_length_mm": 23.574524003973327 + }, + { + "marker_id": 143, + "link": "Arm2", + "set": "", + "position_m": [ + 0.3681677624774638, + -0.23923495194149885, + 0.2610659816691646 + ], + "position_mm": [ + 368.1677624774638, + -239.23495194149885, + 261.0659816691646 + ], + "normal": [ + -0.6935950555578677, + -0.02269173762034005, + 0.7200076277022681 + ], + "corners_m": [ + [ + 0.3594089754560099, + -0.2271438648508434, + 0.25286332240318365 + ], + [ + 0.37657915712443074, + -0.2270479645768774, + 0.2696979848086414 + ], + [ + 0.3770606392409976, + -0.2514174139084056, + 0.2691033901384442 + ], + [ + 0.35962227808841685, + -0.251330564429869, + 0.2525992293263893 + ] + ], + "num_cameras": 3, + "edge_length_mm": 24.15679733420918 + }, + { + "marker_id": 144, + "link": "Arm2", + "set": "", + "position_m": [ + 0.35652186793093876, + -0.16854396679078165, + 0.2379525119969505 + ], + "position_mm": [ + 356.52186793093875, + -168.54396679078164, + 237.9525119969505 + ], + "normal": [ + -0.9995599628362326, + 0.02528704233073728, + 0.015506327256734679 + ], + "corners_m": [ + [ + 0.3570185234512094, + -0.1561109276938487, + 0.22561153226880043 + ], + [ + 0.3566510939285112, + -0.15681901685010205, + 0.25051703363730754 + ], + [ + 0.3567604409377072, + -0.18133294976898037, + 0.24972211686085105 + ], + [ + 0.3556574134063274, + -0.17991297285019545, + 0.22595936522084292 + ] + ], + "num_cameras": 3, + "edge_length_mm": 24.279871294359946 + }, + { + "marker_id": 146, + "link": "Arm2", + "set": "", + "position_m": [ + 0.363472325285653, + -0.16772687205682443, + 0.265109618053662 + ], + "position_mm": [ + 363.47232528565297, + -167.72687205682442, + 265.109618053662 + ], + "normal": [ + -0.6922672622601596, + -0.015707902429529245, + 0.7214702345932839 + ], + "corners_m": [ + [ + 0.3547922746141114, + -0.15565211384078753, + 0.25702356951034117 + ], + [ + 0.37192380494706784, + -0.1556834631620315, + 0.2735014817458783 + ], + [ + 0.3721852786796317, + -0.1797822314235374, + 0.27318719230309774 + ], + [ + 0.35498794290180113, + -0.17978967980094135, + 0.2567262286553309 + ] + ], + "num_cameras": 2, + "edge_length_mm": 23.954528360784135 + }, + { + "marker_id": 147, + "link": "unknown", + "set": "", + "position_m": [ + 0.3615184485791417, + -0.23841669673931903, + 0.21907244218637884 + ], + "position_mm": [ + 361.5184485791417, + -238.41669673931904, + 219.07244218637882 + ], + "normal": [ + -0.878221246282815, + 0.024257134029470218, + -0.47763902062764474 + ], + "corners_m": [ + [ + 0.36694796283565045, + -0.22529561363634942, + 0.209519235923806 + ], + [ + 0.3560274620568797, + -0.22617990557014367, + 0.23004398438798657 + ], + [ + 0.35519653554227987, + -0.25056960914061205, + 0.22985244646589773 + ], + [ + 0.3679018338817568, + -0.2516216586101709, + 0.20687410196782502 + ] + ], + "num_cameras": 2, + "edge_length_mm": 25.106097970844647 + }, + { + "marker_id": 148, + "link": "Arm2", + "set": "", + "position_m": [ + 0.3568386103924535, + -0.27510261911828315, + 0.23517050366298003 + ], + "position_mm": [ + 356.8386103924535, + -275.10261911828314, + 235.17050366298002 + ], + "normal": [ + -0.9997052633668333, + 0.024220896283771637, + -0.001653656512533451 + ], + "corners_m": [ + [ + 0.35744154166965986, + -0.2627827734820778, + 0.22279960560715792 + ], + [ + 0.3568170186725771, + -0.26339173133072086, + 0.24782645316007296 + ], + [ + 0.3568070628438994, + -0.2874163660831901, + 0.24742590674566362 + ], + [ + 0.35628881838367765, + -0.28681960557714387, + 0.22263004913902565 + ] + ], + "num_cameras": 3, + "edge_length_mm": 24.485881133599957 + }, + { + "marker_id": 197, + "link": "Arm1", + "set": "", + "position_m": [ + 0.253163768621946, + -0.05527809120244931, + 0.24387491078691192 + ], + "position_mm": [ + 253.16376862194602, + -55.27809120244931, + 243.87491078691193 + ], + "normal": [ + -0.9979510471574089, + -0.0639418740820268, + 0.0022680864862595477 + ], + "corners_m": [ + [ + 0.2528272318922449, + -0.05326768772074739, + 0.2609389703706266 + ], + [ + 0.2545740087435863, + -0.07368053849936355, + 0.24465912114927044 + ], + [ + 0.2529313476217113, + -0.05609821774215413, + 0.2267440475295298 + ], + [ + 0.2523224862302414, + -0.03806592084753216, + 0.2431575040982209 + ] + ], + "num_cameras": 2, + "edge_length_mm": 24.778496288237054 + }, + { + "marker_id": 200, + "link": "unknown", + "set": "", + "position_m": [ + 0.23113771707884417, + -0.030633920217542222, + 0.10966751341773837 + ], + "position_mm": [ + 231.13771707884416, + -30.633920217542222, + 109.66751341773836 + ], + "normal": [ + -0.034662252540171905, + 0.046809963911018215, + 0.998302236563402 + ], + "corners_m": [ + [ + 0.22029258258695444, + -0.01953037453349748, + 0.10864220345607818 + ], + [ + 0.2421623717352265, + -0.018276314423710804, + 0.10959598831246466 + ], + [ + 0.24250561463124798, + -0.0420092979109768, + 0.11047618653031904 + ], + [ + 0.2195902993619478, + -0.04271969400198381, + 0.10995567537209162 + ] + ], + "num_cameras": 2, + "edge_length_mm": 22.961896103637063 + }, + { + "marker_id": 201, + "link": "unknown", + "set": "", + "position_m": [ + 0.19504563409796766, + 0.04633460263057501, + 0.0960481648053175 + ], + "position_mm": [ + 195.04563409796765, + 46.33460263057501, + 96.0481648053175 + ], + "normal": [ + -0.9984710563549918, + -0.022848425182162194, + 0.050333876147600855 + ], + "corners_m": [ + [ + 0.19545396522938072, + 0.05821733575370025, + 0.10800643944085221 + ], + [ + 0.1958666944633815, + 0.033662193549933696, + 0.10810244693275738 + ], + [ + 0.19478182151424317, + 0.034610513177077355, + 0.08395448750493807 + ], + [ + 0.19408005518486524, + 0.058848368041588744, + 0.08412928534272233 + ] + ], + "num_cameras": 3, + "edge_length_mm": 24.230831134819315 + }, + { + "marker_id": 204, + "link": "unknown", + "set": "", + "position_m": [ + 0.23013172875463628, + 0.11895565577235898, + 0.11691625060333717 + ], + "position_mm": [ + 230.13172875463627, + 118.95565577235898, + 116.91625060333718 + ], + "normal": [ + -0.008448899443797633, + 0.012731120096397763, + 0.9998832605255874 + ], + "corners_m": [ + [ + 0.2180115295433193, + 0.13100532707169854, + 0.11682172305100165 + ], + [ + 0.2415416754935023, + 0.1309523077166566, + 0.11669744727487655 + ], + [ + 0.24175845360711393, + 0.10699356863312848, + 0.11733628115507563 + ], + [ + 0.21921525637460954, + 0.1068714196679523, + 0.1168095509323948 + ] + ], + "num_cameras": 3, + "edge_length_mm": 23.553090122777217 + }, + { + "marker_id": 205, + "link": "unknown", + "set": "", + "position_m": [ + 0.9359450011246738, + -0.09706857888416112, + -0.00658007274709131 + ], + "position_mm": [ + 935.9450011246738, + -97.06857888416113, + -6.58007274709131 + ], + "normal": [ + -0.0124916181991004, + 0.09995889343297341, + 0.9949131515355616 + ], + "corners_m": [ + [ + 0.927046190277984, + -0.08574993505577169, + -0.008230944020141686 + ], + [ + 0.9489889188389297, + -0.08554473363007005, + -0.007194740353157756 + ], + [ + 0.9458721400199858, + -0.10918462091462988, + -0.00558040099114502 + ], + [ + 0.9218727553617957, + -0.10779502593617286, + -0.005314205623920778 + ] + ], + "num_cameras": 2, + "edge_length_mm": 23.184829325742115 + }, + { + "marker_id": 215, + "link": "unknown", + "set": "", + "position_m": [ + 0.33481755156826415, + -0.09693343592376348, + -0.0077058626241340595 + ], + "position_mm": [ + 334.81755156826415, + -96.93343592376348, + -7.70586262413406 + ], + "normal": [ + -0.02231829648666927, + 0.05947825293243409, + 0.9979800754875012 + ], + "corners_m": [ + [ + 0.32414678150721027, + -0.08458915675432864, + -0.008482193260271385 + ], + [ + 0.34674317931812926, + -0.08523284085203056, + -0.008342430587289298 + ], + [ + 0.3454278029786714, + -0.10878329301480924, + -0.006555051424774829 + ], + [ + 0.32295244246904553, + -0.10912845307388547, + -0.007443775224200722 + ] + ], + "num_cameras": 2, + "edge_length_mm": 23.336657591421694 + }, + { + "marker_id": 243, + "link": "Arm1", + "set": "", + "position_m": [ + 0.3032137411734344, + -0.07966369587150926, + 0.26592424441015955 + ], + "position_mm": [ + 303.2137411734344, + -79.66369587150926, + 265.92424441015953 + ], + "normal": [ + 0.02387468825620931, + -0.6521076124102778, + 0.7577503949832266 + ], + "corners_m": [ + [ + 0.2918999781340217, + -0.0707033607768169, + 0.27393611202052415 + ], + [ + 0.31465005630205756, + -0.0701862504488178, + 0.2737755745653182 + ], + [ + 0.3150449967907514, + -0.08859076478657275, + 0.25781589062483895 + ], + [ + 0.2912599334669071, + -0.08917440747382961, + 0.2581694004299569 + ] + ], + "num_cameras": 2, + "edge_length_mm": 23.802183733931233 + } + ] +} \ No newline at end of file diff --git a/test/homing/20260616_120456/cam0.jpg b/test/homing/20260616_120456/cam0.jpg new file mode 100644 index 0000000..ef3b622 Binary files /dev/null and b/test/homing/20260616_120456/cam0.jpg differ diff --git a/test/homing/20260616_120456/cam0_aruco_detection.json b/test/homing/20260616_120456/cam0_aruco_detection.json new file mode 100644 index 0000000..31979c2 --- /dev/null +++ b/test/homing/20260616_120456/cam0_aruco_detection.json @@ -0,0 +1,2376 @@ +{ + "schema_version": "1.0", + "created_utc": "2026-06-16T12:05:00Z", + "vision_config": { + "MarkerType": "DICT_4X4_250", + "MarkerSize": 0.025 + }, + "camera": { + "camera_id": "cam0", + "intrinsics_file": "/app/data/calibration/20260610_092149/cam0_calibration.npz", + "camera_matrix": [ + [ + 1424.7584228515625, + 0.0, + 635.95947265625 + ], + [ + 0.0, + 1421.5770263671875, + 482.1744384765625 + ], + [ + 0.0, + 0.0, + 1.0 + ] + ], + "distortion_coefficients": [ + 0.05634751915931702, + 0.33765655755996704, + 0.002130246954038739, + -0.004022662527859211, + -1.182201862335205 + ] + }, + "image": { + "image_file": "/app/data/homing/20260616_120456/cam0.jpg", + "image_sha256": "a1d925109522cf686465ca4b50ff9e9c41aa8587bf0b28bef2d456fd1964fbd8", + "width_px": 1280, + "height_px": 960 + }, + "aruco": { + "dictionary": "DICT_4X4_250", + "num_detected_markers": 25, + "num_rejected_candidates": 39 + }, + "detections": [ + { + "observation_id": "b3330214-0c88-460f-940c-f469c90f677f", + "type": "aruco", + "marker_id": 197, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 682.0, + 370.0 + ], + [ + 729.0, + 403.0 + ], + [ + 692.0, + 445.0 + ], + [ + 649.0, + 412.0 + ] + ], + "center_px": [ + 688.0, + 407.5 + ], + "quality": { + "area_px": 3045.0, + "perimeter_px": 221.01822662353516, + "sharpness": { + "laplacian_var": 2046.248444554672 + }, + "contrast": { + "p05": 3.0, + "p95": 158.0, + "dynamic_range": 155.0, + "mean_gray": 78.66847826086956, + "std_gray": 63.74958943103102 + }, + "geometry": { + "distance_to_center_norm": 0.10868712514638901, + "distance_to_border_px": 370.0 + }, + "edge_ratio": 1.0751632763948984, + "edge_lengths_px": [ + 57.42821502685547, + 55.973209381103516, + 54.20331954956055, + 53.413482666015625 + ] + }, + "confidence": 0.9300912912065539 + }, + { + "observation_id": "5280b3fe-bd51-4f56-a788-4bd0d2f4cb8a", + "type": "aruco", + "marker_id": 201, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 441.0, + 757.0 + ], + [ + 498.0, + 754.0 + ], + [ + 502.0, + 806.0 + ], + [ + 447.0, + 809.0 + ] + ], + "center_px": [ + 472.0, + 781.5 + ], + "quality": { + "area_px": 2927.0, + "perimeter_px": 216.65927505493164, + "sharpness": { + "laplacian_var": 1596.4513072715565 + }, + "contrast": { + "p05": 5.0, + "p95": 141.0, + "dynamic_range": 136.0, + "mean_gray": 51.77325876970005, + "std_gray": 53.284938145339545 + }, + "geometry": { + "distance_to_center_norm": 0.43143337965011597, + "distance_to_border_px": 151.0 + }, + "edge_ratio": 1.0944378184575825, + "edge_lengths_px": [ + 57.07889175415039, + 52.15361785888672, + 55.081756591796875, + 52.345008850097656 + ] + }, + "confidence": 0.9137111155472716 + }, + { + "observation_id": "50073a98-ee3e-4a97-94e0-cd9df47dc098", + "type": "aruco", + "marker_id": 148, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 1110.0, + 367.0 + ], + [ + 1113.0, + 318.0 + ], + [ + 1165.0, + 316.0 + ], + [ + 1161.0, + 366.0 + ] + ], + "center_px": [ + 1137.25, + 341.75 + ], + "quality": { + "area_px": 2544.0, + "perimeter_px": 202.29974746704102, + "sharpness": { + "laplacian_var": 1753.581730327204 + }, + "contrast": { + "p05": 6.0, + "p95": 160.0, + "dynamic_range": 154.0, + "mean_gray": 53.075581395348834, + "std_gray": 57.843645378801035 + }, + "geometry": { + "distance_to_center_norm": 0.6451388597488403, + "distance_to_border_px": 115.0 + }, + "edge_ratio": 1.0600242845114052, + "edge_lengths_px": [ + 49.09175109863281, + 52.038448333740234, + 50.15974426269531, + 51.009803771972656 + ] + }, + "confidence": 0.9433746137815399 + }, + { + "observation_id": "ec513667-bbcd-4fd7-92c0-04ab455720b5", + "type": "aruco", + "marker_id": 144, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 892.0, + 375.0 + ], + [ + 892.0, + 327.0 + ], + [ + 942.0, + 324.0 + ], + [ + 941.0, + 373.0 + ] + ], + "center_px": [ + 916.75, + 349.75 + ], + "quality": { + "area_px": 2399.5, + "perimeter_px": 196.14092254638672, + "sharpness": { + "laplacian_var": 2133.2682578445197 + }, + "contrast": { + "p05": 8.0, + "p95": 173.0, + "dynamic_range": 165.0, + "mean_gray": 70.31624459542928, + "std_gray": 66.95848871575342 + }, + "geometry": { + "distance_to_center_norm": 0.3823358118534088, + "distance_to_border_px": 324.0 + }, + "edge_ratio": 1.0435400009155273, + "edge_lengths_px": [ + 48.0, + 50.08992004394531, + 49.01020431518555, + 49.04079818725586 + ] + }, + "confidence": 0.9582766344583548 + }, + { + "observation_id": "423a7517-98ce-4d26-b478-0697981d1233", + "type": "aruco", + "marker_id": 143, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 1036.0, + 311.0 + ], + [ + 1030.0, + 272.0 + ], + [ + 1080.0, + 270.0 + ], + [ + 1087.0, + 309.0 + ] + ], + "center_px": [ + 1058.25, + 290.5 + ], + "quality": { + "area_px": 1982.5, + "perimeter_px": 180.16125106811523, + "sharpness": { + "laplacian_var": 3631.966808281215 + }, + "contrast": { + "p05": 23.0, + "p95": 215.0, + "dynamic_range": 192.0, + "mean_gray": 103.67441860465117, + "std_gray": 75.29378667482312 + }, + "geometry": { + "distance_to_center_norm": 0.5739709734916687, + "distance_to_border_px": 193.0 + }, + "edge_ratio": 1.293479498734423, + "edge_lengths_px": [ + 39.458839416503906, + 50.03998565673828, + 39.623226165771484, + 51.03919982910156 + ] + }, + "confidence": 0.7731085038289578 + }, + { + "observation_id": "805dc124-2b09-41a7-af1c-3963a5a46722", + "type": "aruco", + "marker_id": 146, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 892.0, + 317.0 + ], + [ + 888.0, + 278.0 + ], + [ + 937.0, + 275.0 + ], + [ + 942.0, + 314.0 + ] + ], + "center_px": [ + 914.75, + 296.0 + ], + "quality": { + "area_px": 1944.0, + "perimeter_px": 177.7054672241211, + "sharpness": { + "laplacian_var": 2604.434293137679 + }, + "contrast": { + "p05": 22.0, + "p95": 216.0, + "dynamic_range": 194.0, + "mean_gray": 91.49923312883436, + "std_gray": 75.60599758337663 + }, + "geometry": { + "distance_to_center_norm": 0.413339227437973, + "distance_to_border_px": 275.0 + }, + "edge_ratio": 1.2776544849360452, + "edge_lengths_px": [ + 39.20458984375, + 49.09175109863281, + 39.31920623779297, + 50.08992004394531 + ] + }, + "confidence": 0.7826842168914364 + }, + { + "observation_id": "0e86047e-c4be-4280-94e3-9652cc3d9405", + "type": "aruco", + "marker_id": 147, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 1028.0, + 395.0 + ], + [ + 1034.0, + 360.0 + ], + [ + 1085.0, + 358.0 + ], + [ + 1078.0, + 394.0 + ] + ], + "center_px": [ + 1056.25, + 376.75 + ], + "quality": { + "area_px": 1783.0, + "perimeter_px": 173.23400115966797, + "sharpness": { + "laplacian_var": 2226.0568095502704 + }, + "contrast": { + "p05": 21.0, + "p95": 166.0, + "dynamic_range": 145.0, + "mean_gray": 61.087921117502056, + "std_gray": 51.89642355387487 + }, + "geometry": { + "distance_to_center_norm": 0.5360804200172424, + "distance_to_border_px": 195.0 + }, + "edge_ratio": 1.4372962765342043, + "edge_lengths_px": [ + 35.510562896728516, + 51.03919982910156, + 36.67424011230469, + 50.0099983215332 + ] + }, + "confidence": 0.6957507761804894 + }, + { + "observation_id": "1c47af07-5eac-4545-9871-3e433cc0ef6f", + "type": "aruco", + "marker_id": 204, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 288.0, + 723.0 + ], + [ + 304.0, + 699.0 + ], + [ + 355.0, + 696.0 + ], + [ + 341.0, + 719.0 + ] + ], + "center_px": [ + 322.0, + 709.25 + ], + "quality": { + "area_px": 1169.5, + "perimeter_px": 160.0091209411621, + "sharpness": { + "laplacian_var": 3175.6177169737957 + }, + "contrast": { + "p05": 9.0, + "p95": 191.8499999999999, + "dynamic_range": 182.8499999999999, + "mean_gray": 66.5497572815534, + "std_gray": 66.736985203977 + }, + "geometry": { + "distance_to_center_norm": 0.4900248050689697, + "distance_to_border_px": 237.0 + }, + "edge_ratio": 1.9739686216917811, + "edge_lengths_px": [ + 28.844409942626953, + 51.088157653808594, + 26.925823211669922, + 53.15073013305664 + ] + }, + "confidence": 0.39497419467511935 + }, + { + "observation_id": "9437dc1f-e8e5-4f6d-9f18-6dfe837650cc", + "type": "aruco", + "marker_id": 55, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 1168.0, + 902.0 + ], + [ + 1118.0, + 902.0 + ], + [ + 1106.0, + 876.0 + ], + [ + 1154.0, + 873.0 + ] + ], + "center_px": [ + 1136.5, + 888.25 + ], + "quality": { + "area_px": 1367.0, + "perimeter_px": 158.9317855834961, + "sharpness": { + "laplacian_var": 2462.8168354723093 + }, + "contrast": { + "p05": 33.0, + "p95": 220.0, + "dynamic_range": 187.0, + "mean_gray": 105.60752688172043, + "std_gray": 71.13229948038764 + }, + "geometry": { + "distance_to_center_norm": 0.8034887909889221, + "distance_to_border_px": 58.0 + }, + "edge_ratio": 1.7460756858374602, + "edge_lengths_px": [ + 50.0, + 28.635643005371094, + 48.093658447265625, + 32.202484130859375 + ] + }, + "confidence": 0.5219323198445638 + }, + { + "observation_id": "61383b6f-6996-49dd-92b0-f2de3da02fb8", + "type": "aruco", + "marker_id": 79, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 946.0, + 874.0 + ], + [ + 898.0, + 875.0 + ], + [ + 893.0, + 848.0 + ], + [ + 939.0, + 848.0 + ] + ], + "center_px": [ + 919.0, + 861.25 + ], + "quality": { + "area_px": 1248.5, + "perimeter_px": 148.3952980041504, + "sharpness": { + "laplacian_var": 4349.245734353337 + }, + "contrast": { + "p05": 17.0, + "p95": 215.0, + "dynamic_range": 198.0, + "mean_gray": 108.70310701956272, + "std_gray": 77.79558799594786 + }, + "geometry": { + "distance_to_center_norm": 0.5905407071113586, + "distance_to_border_px": 85.0 + }, + "edge_ratio": 1.7830620719045263, + "edge_lengths_px": [ + 48.010414123535156, + 27.459060668945312, + 46.0, + 26.925823211669922 + ] + }, + "confidence": 0.46679997653940364 + }, + { + "observation_id": "ce6986b0-d4f5-4aa2-9121-c15c5b3833dd", + "type": "aruco", + "marker_id": 47, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 1182.0, + 833.0 + ], + [ + 1134.0, + 835.0 + ], + [ + 1122.0, + 812.0 + ], + [ + 1167.0, + 809.0 + ] + ], + "center_px": [ + 1151.25, + 822.25 + ], + "quality": { + "area_px": 1126.5, + "perimeter_px": 147.38572311401367, + "sharpness": { + "laplacian_var": 2866.357507959523 + }, + "contrast": { + "p05": 32.0, + "p95": 211.0, + "dynamic_range": 179.0, + "mean_gray": 96.38331160365058, + "std_gray": 67.4110482163555 + }, + "geometry": { + "distance_to_center_norm": 0.7690412402153015, + "distance_to_border_px": 98.0 + }, + "edge_ratio": 1.851869470113939, + "edge_lengths_px": [ + 48.041648864746094, + 25.942243576049805, + 45.09988784790039, + 28.301942825317383 + ] + }, + "confidence": 0.40553614178530284 + }, + { + "observation_id": "ad261da5-823d-4c02-8336-ba7bf1a15ea9", + "type": "aruco", + "marker_id": 54, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 1265.0, + 831.0 + ], + [ + 1220.0, + 832.0 + ], + [ + 1206.0, + 810.0 + ], + [ + 1250.0, + 808.0 + ] + ], + "center_px": [ + 1235.25, + 820.25 + ], + "quality": { + "area_px": 1023.0, + "perimeter_px": 142.5924072265625, + "sharpness": { + "laplacian_var": 2414.2913876510743 + }, + "contrast": { + "p05": 38.0, + "p95": 200.0, + "dynamic_range": 162.0, + "mean_gray": 81.26638176638177, + "std_gray": 53.8961382022795 + }, + "geometry": { + "distance_to_center_norm": 0.8570412397384644, + "distance_to_border_px": 15.0 + }, + "edge_ratio": 1.7260972583043088, + "edge_lengths_px": [ + 45.0111083984375, + 26.07680892944336, + 44.04542922973633, + 27.459060668945312 + ] + }, + "confidence": 0.11853329759702871 + }, + { + "observation_id": "46639873-992b-4458-be02-be4ab80c456f", + "type": "aruco", + "marker_id": 215, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 774.0, + 821.0 + ], + [ + 774.0, + 799.0 + ], + [ + 817.0, + 796.0 + ], + [ + 821.0, + 820.0 + ] + ], + "center_px": [ + 796.5, + 809.0 + ], + "quality": { + "area_px": 1039.0, + "perimeter_px": 136.44620895385742, + "sharpness": { + "laplacian_var": 2691.8773229515314 + }, + "contrast": { + "p05": 19.300000000000004, + "p95": 201.0, + "dynamic_range": 181.7, + "mean_gray": 92.97312588401698, + "std_gray": 72.35792780514315 + }, + "geometry": { + "distance_to_center_norm": 0.45540717244148254, + "distance_to_border_px": 139.0 + }, + "edge_ratio": 2.136847062544389, + "edge_lengths_px": [ + 22.0, + 43.104522705078125, + 24.331050872802734, + 47.01063537597656 + ] + }, + "confidence": 0.32415359938857474 + }, + { + "observation_id": "1480f67c-f762-43d7-bd58-b00c7562f5d5", + "type": "aruco", + "marker_id": 86, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 135.0, + 853.0 + ], + [ + 95.0, + 855.0 + ], + [ + 111.0, + 832.0 + ], + [ + 151.0, + 831.0 + ] + ], + "center_px": [ + 123.0, + 842.75 + ], + "quality": { + "area_px": 876.0, + "perimeter_px": 135.28325843811035, + "sharpness": { + "laplacian_var": 1931.7447241371437 + }, + "contrast": { + "p05": 6.550000000000001, + "p95": 167.0, + "dynamic_range": 160.45, + "mean_gray": 81.80574324324324, + "std_gray": 63.827796469487275 + }, + "geometry": { + "distance_to_center_norm": 0.7894584536552429, + "distance_to_border_px": 95.0 + }, + "edge_ratio": 1.472266083380264, + "edge_lengths_px": [ + 40.04996871948242, + 28.017850875854492, + 40.01249694824219, + 27.20294189453125 + ] + }, + "confidence": 0.39666742757474877 + }, + { + "observation_id": "a77b5889-21f6-4ea0-9c69-7e1505ee647e", + "type": "aruco", + "marker_id": 96, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 980.0, + 812.0 + ], + [ + 935.0, + 814.0 + ], + [ + 929.0, + 792.0 + ], + [ + 972.0, + 790.0 + ] + ], + "center_px": [ + 954.0, + 802.0 + ], + "quality": { + "area_px": 982.0, + "perimeter_px": 134.3038158416748, + "sharpness": { + "laplacian_var": 3020.3348977273727 + }, + "contrast": { + "p05": 25.0, + "p95": 216.0, + "dynamic_range": 191.0, + "mean_gray": 109.07121661721068, + "std_gray": 75.77123329247239 + }, + "geometry": { + "distance_to_center_norm": 0.5621943473815918, + "distance_to_border_px": 146.0 + }, + "edge_ratio": 1.975328561346033, + "edge_lengths_px": [ + 45.0444221496582, + 22.803508758544922, + 43.046485900878906, + 23.409399032592773 + ] + }, + "confidence": 0.3314216578838723 + }, + { + "observation_id": "5a3f4e66-53d2-4116-863c-c7c29651031f", + "type": "aruco", + "marker_id": 84, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 219.0, + 808.0 + ], + [ + 180.0, + 810.0 + ], + [ + 196.0, + 790.0 + ], + [ + 232.0, + 788.0 + ] + ], + "center_px": [ + 206.75, + 799.0 + ], + "quality": { + "area_px": 721.0, + "perimeter_px": 124.57297706604004, + "sharpness": { + "laplacian_var": 3323.519204538409 + }, + "contrast": { + "p05": 4.0, + "p95": 173.0, + "dynamic_range": 169.0, + "mean_gray": 85.84645669291339, + "std_gray": 62.1923613499248 + }, + "geometry": { + "distance_to_center_norm": 0.6725262403488159, + "distance_to_border_px": 150.0 + }, + "edge_ratio": 1.6371133723859008, + "edge_lengths_px": [ + 39.051246643066406, + 25.612497329711914, + 36.055511474609375, + 23.853721618652344 + ] + }, + "confidence": 0.29360621858836283 + }, + { + "observation_id": "20b130e6-924b-423e-bc37-4ff1a8c3302f", + "type": "aruco", + "marker_id": 62, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 949.0, + 780.0 + ], + [ + 906.0, + 781.0 + ], + [ + 902.0, + 761.0 + ], + [ + 943.0, + 761.0 + ] + ], + "center_px": [ + 925.0, + 770.75 + ], + "quality": { + "area_px": 821.5, + "perimeter_px": 124.33256340026855, + "sharpness": { + "laplacian_var": 2370.344497432548 + }, + "contrast": { + "p05": 22.0, + "p95": 199.25, + "dynamic_range": 177.25, + "mean_gray": 61.52181208053691, + "std_gray": 51.13898545100377 + }, + "geometry": { + "distance_to_center_norm": 0.5089212656021118, + "distance_to_border_px": 179.0 + }, + "edge_ratio": 2.1586917706486197, + "edge_lengths_px": [ + 43.011627197265625, + 20.39607810974121, + 41.0, + 19.92485809326172 + ] + }, + "confidence": 0.25370304094044416 + }, + { + "observation_id": "28f50ce1-5278-4bab-90ef-9798fcaead52", + "type": "aruco", + "marker_id": 85, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 1145.0, + 695.0 + ], + [ + 1106.0, + 696.0 + ], + [ + 1096.0, + 680.0 + ], + [ + 1135.0, + 679.0 + ] + ], + "center_px": [ + 1120.5, + 687.5 + ], + "quality": { + "area_px": 634.0, + "perimeter_px": 115.76155853271484, + "sharpness": { + "laplacian_var": 3555.029352648257 + }, + "contrast": { + "p05": 32.45, + "p95": 224.54999999999995, + "dynamic_range": 192.09999999999997, + "mean_gray": 144.0212765957447, + "std_gray": 73.95115966224992 + }, + "geometry": { + "distance_to_center_norm": 0.6542367339134216, + "distance_to_border_px": 135.0 + }, + "edge_ratio": 2.067675227647998, + "edge_lengths_px": [ + 39.0128173828125, + 18.867961883544922, + 39.0128173828125, + 18.867961883544922 + ] + }, + "confidence": 0.20441637110846192 + }, + { + "observation_id": "a0411f12-3b5f-4213-8880-e76d7c9b417e", + "type": "aruco", + "marker_id": 105, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 1062.0, + 682.0 + ], + [ + 1024.0, + 684.0 + ], + [ + 1016.0, + 669.0 + ], + [ + 1053.0, + 667.0 + ] + ], + "center_px": [ + 1038.75, + 675.5 + ], + "quality": { + "area_px": 579.5, + "perimeter_px": 109.59946823120117, + "sharpness": { + "laplacian_var": 2567.2096110726648 + }, + "contrast": { + "p05": 25.200000000000003, + "p95": 188.79999999999995, + "dynamic_range": 163.59999999999997, + "mean_gray": 68.09647058823529, + "std_gray": 47.42049804253511 + }, + "geometry": { + "distance_to_center_norm": 0.5551207661628723, + "distance_to_border_px": 218.0 + }, + "edge_ratio": 2.2383880615234375, + "edge_lengths_px": [ + 38.05259704589844, + 17.0, + 37.05401611328125, + 17.492855072021484 + ] + }, + "confidence": 0.17259443971051047 + }, + { + "observation_id": "326d75ef-9c05-4ad3-817b-0bc7d20b49a6", + "type": "aruco", + "marker_id": 57, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 1180.0, + 628.0 + ], + [ + 1145.0, + 629.0 + ], + [ + 1135.0, + 616.0 + ], + [ + 1169.0, + 614.0 + ] + ], + "center_px": [ + 1157.25, + 621.75 + ], + "quality": { + "area_px": 481.5, + "perimeter_px": 103.27876853942871, + "sharpness": { + "laplacian_var": 4761.11457589804 + }, + "contrast": { + "p05": 31.0, + "p95": 213.0, + "dynamic_range": 182.0, + "mean_gray": 111.8357771260997, + "std_gray": 63.841510216646 + }, + "geometry": { + "distance_to_center_norm": 0.6704017519950867, + "distance_to_border_px": 100.0 + }, + "edge_ratio": 2.134858354431808, + "edge_lengths_px": [ + 35.0142822265625, + 16.401220321655273, + 34.058773040771484, + 17.804492950439453 + ] + }, + "confidence": 0.15036126370334021 + }, + { + "observation_id": "bdd8db15-bec4-4e3b-9440-a50e766b12af", + "type": "aruco", + "marker_id": 0, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 770.0, + 676.0 + ], + [ + 769.0, + 662.0 + ], + [ + 804.0, + 660.0 + ], + [ + 806.0, + 675.0 + ] + ], + "center_px": [ + 787.25, + 668.25 + ], + "quality": { + "area_px": 517.0, + "perimeter_px": 100.23939418792725, + "sharpness": { + "laplacian_var": 3346.322229568224 + }, + "contrast": { + "p05": 39.0, + "p95": 198.0, + "dynamic_range": 159.0, + "mean_gray": 109.47169811320755, + "std_gray": 60.17509162297464 + }, + "geometry": { + "distance_to_center_norm": 0.29874902963638306, + "distance_to_border_px": 284.0 + }, + "edge_ratio": 2.565883187084189, + "edge_lengths_px": [ + 14.03566837310791, + 35.05709457397461, + 15.132745742797852, + 36.013885498046875 + ] + }, + "confidence": 0.13432671775613372 + }, + { + "observation_id": "6f96bc9c-4a62-4524-9312-c0cc37fe29c1", + "type": "aruco", + "marker_id": 59, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 1047.0, + 619.0 + ], + [ + 1014.0, + 620.0 + ], + [ + 1007.0, + 608.0 + ], + [ + 1040.0, + 606.0 + ] + ], + "center_px": [ + 1027.0, + 613.25 + ], + "quality": { + "area_px": 423.0, + "perimeter_px": 94.73296546936035, + "sharpness": { + "laplacian_var": 4600.714575610199 + }, + "contrast": { + "p05": 31.0, + "p95": 226.0, + "dynamic_range": 195.0, + "mean_gray": 135.66329966329965, + "std_gray": 70.76066575484187 + }, + "geometry": { + "distance_to_center_norm": 0.5116220712661743, + "distance_to_border_px": 233.0 + }, + "edge_ratio": 2.3797505684484883, + "edge_lengths_px": [ + 33.0151481628418, + 13.892443656921387, + 33.060550689697266, + 14.764822959899902 + ] + }, + "confidence": 0.11849981411449093 + }, + { + "observation_id": "f7d461ac-333a-458b-995a-f72e01707ea8", + "type": "aruco", + "marker_id": 48, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 1086.0, + 583.0 + ], + [ + 1053.0, + 584.0 + ], + [ + 1046.0, + 574.0 + ], + [ + 1079.0, + 572.0 + ] + ], + "center_px": [ + 1066.0, + 578.25 + ], + "quality": { + "area_px": 357.0, + "perimeter_px": 91.32065868377686, + "sharpness": { + "laplacian_var": 4136.381714876033 + }, + "contrast": { + "p05": 24.0, + "p95": 200.85, + "dynamic_range": 176.85, + "mean_gray": 91.01515151515152, + "std_gray": 58.29535363371659 + }, + "geometry": { + "distance_to_center_norm": 0.5464788675308228, + "distance_to_border_px": 194.0 + }, + "edge_ratio": 2.7084258987908982, + "edge_lengths_px": [ + 33.0151481628418, + 12.206555366516113, + 33.060550689697266, + 13.03840446472168 + ] + }, + "confidence": 0.08787391972076787 + }, + { + "observation_id": "f8c57986-ccc2-45fd-aa68-62de00823e5c", + "type": "aruco", + "marker_id": 92, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 911.0, + 614.0 + ], + [ + 878.0, + 614.0 + ], + [ + 875.0, + 603.0 + ], + [ + 907.0, + 602.0 + ] + ], + "center_px": [ + 892.75, + 608.25 + ], + "quality": { + "area_px": 375.5, + "perimeter_px": 89.06648635864258, + "sharpness": { + "laplacian_var": 4059.0313579782846 + }, + "contrast": { + "p05": 39.1, + "p95": 205.89999999999998, + "dynamic_range": 166.79999999999998, + "mean_gray": 104.07604562737643, + "std_gray": 59.870217022022544 + }, + "geometry": { + "distance_to_center_norm": 0.3542832136154175, + "distance_to_border_px": 346.0 + }, + "edge_ratio": 2.894291431149538, + "edge_lengths_px": [ + 33.0, + 11.401754379272461, + 32.015621185302734, + 12.649110794067383 + ] + }, + "confidence": 0.08649209635185473 + }, + { + "observation_id": "cd72a3a8-fec9-4a95-a3d0-e711deaa8a2f", + "type": "aruco", + "marker_id": 71, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 1020.0, + 556.0 + ], + [ + 990.0, + 558.0 + ], + [ + 984.0, + 547.0 + ], + [ + 1012.0, + 546.0 + ] + ], + "center_px": [ + 1001.5, + 551.75 + ], + "quality": { + "area_px": 315.0, + "perimeter_px": 83.42065715789795, + "sharpness": { + "laplacian_var": 4683.884939803804 + }, + "contrast": { + "p05": 37.0, + "p95": 217.0, + "dynamic_range": 180.0, + "mean_gray": 135.24137931034483, + "std_gray": 61.23219244156583 + }, + "geometry": { + "distance_to_center_norm": 0.4606895446777344, + "distance_to_border_px": 260.0 + }, + "edge_ratio": 2.3995752978623326, + "edge_lengths_px": [ + 30.066593170166016, + 12.529964447021484, + 28.017850875854492, + 12.806248664855957 + ] + }, + "confidence": 0.08751548667261201 + } + ], + "rejected_candidates": [ + { + "image_points_px": [ + [ + 727.0, + 356.0 + ], + [ + 736.0, + 437.0 + ], + [ + 449.0, + 659.0 + ], + [ + 646.0, + 361.0 + ] + ], + "center_px": [ + 639.5, + 453.25 + ], + "area_px": 24199.0 + }, + { + "image_points_px": [ + [ + 618.0, + 695.0 + ], + [ + 685.0, + 690.0 + ], + [ + 687.0, + 719.0 + ], + [ + 620.0, + 724.0 + ] + ], + "center_px": [ + 652.5, + 707.0 + ], + "area_px": 1953.0 + }, + { + "image_points_px": [ + [ + 623.0, + 393.0 + ], + [ + 623.0, + 407.0 + ], + [ + 584.0, + 463.0 + ], + [ + 567.0, + 465.0 + ] + ], + "center_px": [ + 599.25, + 432.0 + ], + "area_px": 829.0 + }, + { + "image_points_px": [ + [ + 819.0, + 762.0 + ], + [ + 778.0, + 772.0 + ], + [ + 760.0, + 748.0 + ], + [ + 802.0, + 740.0 + ] + ], + "center_px": [ + 789.75, + 755.5 + ], + "area_px": 1112.0 + }, + { + "image_points_px": [ + [ + 796.0, + 604.0 + ], + [ + 805.0, + 629.0 + ], + [ + 808.0, + 666.0 + ], + [ + 801.0, + 653.0 + ] + ], + "center_px": [ + 802.5, + 638.0 + ], + "area_px": 268.0 + }, + { + "image_points_px": [ + [ + 207.0, + 768.0 + ], + [ + 194.0, + 787.0 + ], + [ + 155.0, + 788.0 + ], + [ + 170.0, + 770.0 + ] + ], + "center_px": [ + 181.5, + 778.25 + ], + "area_px": 682.0 + }, + { + "image_points_px": [ + [ + 607.0, + 629.0 + ], + [ + 600.0, + 678.0 + ], + [ + 595.0, + 683.0 + ], + [ + 600.0, + 638.0 + ] + ], + "center_px": [ + 600.5, + 657.0 + ], + "area_px": 240.0 + }, + { + "image_points_px": [ + [ + 188.0, + 689.0 + ], + [ + 200.0, + 675.0 + ], + [ + 231.0, + 675.0 + ], + [ + 220.0, + 688.0 + ] + ], + "center_px": [ + 209.75, + 681.75 + ], + "area_px": 419.5 + }, + { + "image_points_px": [ + [ + 680.0, + 573.0 + ], + [ + 679.0, + 586.0 + ], + [ + 642.0, + 587.0 + ], + [ + 645.0, + 575.0 + ] + ], + "center_px": [ + 661.5, + 580.25 + ], + "area_px": 447.0 + }, + { + "image_points_px": [ + [ + 370.0, + 667.0 + ], + [ + 364.0, + 681.0 + ], + [ + 329.0, + 682.0 + ], + [ + 338.0, + 670.0 + ] + ], + "center_px": [ + 350.25, + 675.0 + ], + "area_px": 420.5 + }, + { + "image_points_px": [ + [ + 667.0, + 649.0 + ], + [ + 666.0, + 664.0 + ], + [ + 632.0, + 665.0 + ], + [ + 634.0, + 651.0 + ] + ], + "center_px": [ + 649.75, + 657.25 + ], + "area_px": 483.5 + }, + { + "image_points_px": [ + [ + 262.0, + 656.0 + ], + [ + 252.0, + 671.0 + ], + [ + 222.0, + 671.0 + ], + [ + 231.0, + 659.0 + ] + ], + "center_px": [ + 241.75, + 664.25 + ], + "area_px": 397.5 + }, + { + "image_points_px": [ + [ + 516.0, + 682.0 + ], + [ + 514.0, + 709.0 + ], + [ + 508.0, + 726.0 + ], + [ + 511.0, + 689.0 + ] + ], + "center_px": [ + 512.25, + 701.5 + ], + "area_px": 146.0 + }, + { + "image_points_px": [ + [ + 218.0, + 648.0 + ], + [ + 231.0, + 636.0 + ], + [ + 258.0, + 636.0 + ], + [ + 248.0, + 648.0 + ] + ], + "center_px": [ + 238.75, + 642.0 + ], + "area_px": 342.0 + }, + { + "image_points_px": [ + [ + 963.0, + 608.0 + ], + [ + 930.0, + 611.0 + ], + [ + 925.0, + 599.0 + ], + [ + 956.0, + 597.0 + ] + ], + "center_px": [ + 943.5, + 603.75 + ], + "area_px": 383.0 + }, + { + "image_points_px": [ + [ + 1076.0, + 369.0 + ], + [ + 1073.0, + 378.0 + ], + [ + 1040.0, + 378.0 + ], + [ + 1039.0, + 370.0 + ] + ], + "center_px": [ + 1057.0, + 373.75 + ], + "area_px": 297.0 + }, + { + "image_points_px": [ + [ + 790.0, + 590.0 + ], + [ + 793.0, + 602.0 + ], + [ + 760.0, + 603.0 + ], + [ + 759.0, + 594.0 + ] + ], + "center_px": [ + 775.5, + 597.25 + ], + "area_px": 341.0 + }, + { + "image_points_px": [ + [ + 274.0, + 596.0 + ], + [ + 266.0, + 607.0 + ], + [ + 237.0, + 608.0 + ], + [ + 248.0, + 597.0 + ] + ], + "center_px": [ + 256.25, + 602.0 + ], + "area_px": 293.0 + }, + { + "image_points_px": [ + [ + 303.0, + 576.0 + ], + [ + 295.0, + 586.0 + ], + [ + 268.0, + 587.0 + ], + [ + 277.0, + 577.0 + ] + ], + "center_px": [ + 285.75, + 581.5 + ], + "area_px": 256.5 + }, + { + "image_points_px": [ + [ + 1023.0, + 533.0 + ], + [ + 995.0, + 534.0 + ], + [ + 989.0, + 525.0 + ], + [ + 1016.0, + 523.0 + ] + ], + "center_px": [ + 1005.75, + 528.75 + ], + "area_px": 271.0 + }, + { + "image_points_px": [ + [ + 407.0, + 546.0 + ], + [ + 401.0, + 555.0 + ], + [ + 374.0, + 557.0 + ], + [ + 382.0, + 547.0 + ] + ], + "center_px": [ + 391.0, + 551.25 + ], + "area_px": 236.5 + }, + { + "image_points_px": [ + [ + 1074.0, + 521.0 + ], + [ + 1046.0, + 522.0 + ], + [ + 1041.0, + 514.0 + ], + [ + 1068.0, + 513.0 + ] + ], + "center_px": [ + 1057.25, + 517.5 + ], + "area_px": 225.5 + }, + { + "image_points_px": [ + [ + 1053.0, + 507.0 + ], + [ + 1025.0, + 507.0 + ], + [ + 1021.0, + 500.0 + ], + [ + 1048.0, + 498.0 + ] + ], + "center_px": [ + 1036.75, + 503.0 + ], + "area_px": 224.5 + }, + { + "image_points_px": [ + [ + 474.0, + 552.0 + ], + [ + 469.0, + 560.0 + ], + [ + 444.0, + 562.0 + ], + [ + 449.0, + 553.0 + ] + ], + "center_px": [ + 459.0, + 556.75 + ], + "area_px": 205.0 + }, + { + "image_points_px": [ + [ + 1030.0, + 456.0 + ], + [ + 1055.0, + 455.0 + ], + [ + 1060.0, + 463.0 + ], + [ + 1034.0, + 463.0 + ] + ], + "center_px": [ + 1044.75, + 459.25 + ], + "area_px": 193.5 + }, + { + "image_points_px": [ + [ + 487.0, + 524.0 + ], + [ + 482.0, + 532.0 + ], + [ + 457.0, + 532.0 + ], + [ + 463.0, + 524.0 + ] + ], + "center_px": [ + 472.25, + 528.0 + ], + "area_px": 196.0 + }, + { + "image_points_px": [ + [ + 985.0, + 469.0 + ], + [ + 1010.0, + 467.0 + ], + [ + 1015.0, + 474.0 + ], + [ + 989.0, + 475.0 + ] + ], + "center_px": [ + 999.75, + 471.25 + ], + "area_px": 172.5 + }, + { + "image_points_px": [ + [ + 583.0, + 655.0 + ], + [ + 587.0, + 658.0 + ], + [ + 584.0, + 677.0 + ], + [ + 576.0, + 685.0 + ] + ], + "center_px": [ + 582.5, + 668.75 + ], + "area_px": 134.5 + }, + { + "image_points_px": [ + [ + 936.0, + 484.0 + ], + [ + 911.0, + 485.0 + ], + [ + 907.0, + 478.0 + ], + [ + 930.0, + 476.0 + ] + ], + "center_px": [ + 921.0, + 480.75 + ], + "area_px": 187.5 + }, + { + "image_points_px": [ + [ + 786.0, + 277.0 + ], + [ + 782.0, + 280.0 + ], + [ + 756.0, + 281.0 + ], + [ + 760.0, + 276.0 + ] + ], + "center_px": [ + 771.0, + 278.5 + ], + "area_px": 104.0 + }, + { + "image_points_px": [ + [ + 1264.0, + 69.0 + ], + [ + 1266.0, + 90.0 + ], + [ + 1263.0, + 95.0 + ], + [ + 1260.0, + 76.0 + ] + ], + "center_px": [ + 1263.25, + 82.5 + ], + "area_px": 85.0 + }, + { + "image_points_px": [ + [ + 898.0, + 347.0 + ], + [ + 903.0, + 348.0 + ], + [ + 903.0, + 369.0 + ], + [ + 897.0, + 368.0 + ] + ], + "center_px": [ + 900.25, + 358.0 + ], + "area_px": 116.0 + }, + { + "image_points_px": [ + [ + 900.0, + 850.0 + ], + [ + 904.0, + 868.0 + ], + [ + 903.0, + 872.0 + ], + [ + 899.0, + 855.0 + ] + ], + "center_px": [ + 901.5, + 861.25 + ], + "area_px": 35.5 + }, + { + "image_points_px": [ + [ + 293.0, + 578.0 + ], + [ + 287.0, + 585.0 + ], + [ + 274.0, + 585.0 + ], + [ + 280.0, + 578.0 + ] + ], + "center_px": [ + 283.5, + 581.5 + ], + "area_px": 91.0 + }, + { + "image_points_px": [ + [ + 760.0, + 707.0 + ], + [ + 763.0, + 727.0 + ], + [ + 760.0, + 723.0 + ], + [ + 757.0, + 712.0 + ] + ], + "center_px": [ + 760.0, + 717.25 + ], + "area_px": 48.0 + }, + { + "image_points_px": [ + [ + 1117.0, + 329.0 + ], + [ + 1119.0, + 322.0 + ], + [ + 1133.0, + 323.0 + ], + [ + 1131.0, + 329.0 + ] + ], + "center_px": [ + 1125.0, + 325.75 + ], + "area_px": 92.0 + }, + { + "image_points_px": [ + [ + 1053.0, + 516.0 + ], + [ + 1065.0, + 513.0 + ], + [ + 1071.0, + 520.0 + ], + [ + 1059.0, + 521.0 + ] + ], + "center_px": [ + 1062.0, + 517.5 + ], + "area_px": 84.0 + }, + { + "image_points_px": [ + [ + 912.0, + 282.0 + ], + [ + 911.0, + 285.0 + ], + [ + 894.0, + 285.0 + ], + [ + 895.0, + 282.0 + ] + ], + "center_px": [ + 903.0, + 283.5 + ], + "area_px": 51.0 + }, + { + "image_points_px": [ + [ + 990.0, + 469.0 + ], + [ + 1005.0, + 468.0 + ], + [ + 1008.0, + 471.0 + ], + [ + 991.0, + 471.0 + ] + ], + "center_px": [ + 998.5, + 469.75 + ], + "area_px": 41.0 + } + ] +} \ No newline at end of file diff --git a/test/homing/20260616_120456/cam0_camera_pose.json b/test/homing/20260616_120456/cam0_camera_pose.json new file mode 100644 index 0000000..59aef4c --- /dev/null +++ b/test/homing/20260616_120456/cam0_camera_pose.json @@ -0,0 +1,411 @@ +{ + "schema_version": "1.0", + "created_utc": "2026-06-16T12:05:00Z", + "source": { + "detection_json": "/app/data/homing/20260616_120456/cam0_aruco_detection.json", + "robot_json": "/app/scripts/robot_1781069752019.json" + }, + "camera": { + "camera_id": "cam0", + "camera_matrix": [ + [ + 1424.7584228515625, + 0.0, + 635.95947265625 + ], + [ + 0.0, + 1421.5770263671875, + 482.1744384765625 + ], + [ + 0.0, + 0.0, + 1.0 + ] + ], + "distortion_coefficients": [ + 0.05634751915931702, + 0.33765655755996704, + 0.002130246954038739, + -0.004022662527859211, + -1.182201862335205 + ] + }, + "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": 15, + "used_marker_ids": [ + 55, + 79, + 47, + 54, + 86, + 96, + 84, + 62, + 85, + 105, + 57, + 59, + 48, + 92, + 71 + ], + "history": { + "iters": [ + 0, + 1, + 2, + 3 + ], + "rms": [ + 0.00867338622090616, + 0.0005736213711697816, + 0.0003387058057489281, + 0.00033870238542763406 + ], + "lambda": [ + 0.001, + 0.0005, + 0.00025, + 0.000125 + ] + }, + "residual_rms_px": 0.6950564647542702, + "residual_median_px": 0.40248905261772255, + "residual_max_px": 1.4324357568626296, + "sigma2_normalized": 1.4339913236727992e-07 + }, + "camera_pose": { + "world_to_camera": { + "rotation_matrix": [ + [ + 0.054954398423433304, + -0.995682954788208, + -0.07480252534151077 + ], + [ + -0.31208696961402893, + 0.05403408408164978, + -0.9485157132148743 + ], + [ + 0.9484628438949585, + 0.07547000050544739, + -0.3077702820301056 + ] + ], + "translation_m": [ + -0.027871036902070045, + 0.2804853320121765, + 0.4656999111175537 + ], + "rvec_rad": [ + 1.4158355861217138, + -1.414839573060464, + 0.9451885483658883 + ] + }, + "camera_in_world": { + "position_m": [ + -0.3526315987110138, + -0.07805286347866058, + 0.40728849172592163 + ], + "position_mm": [ + -352.631591796875, + -78.05286407470703, + 407.2884826660156 + ], + "orientation_deg": { + "roll": 166.22206115722656, + "pitch": -71.525146484375, + "yaw": -80.01333618164062 + } + }, + "uncertainty": { + "pose_covariance_6x6": [ + [ + 5.024150406033972e-07, + -2.6272364342807006e-07, + -4.335547550274572e-08, + 3.714638912704353e-08, + 1.63462035841052e-07, + 1.0652181985979162e-07 + ], + [ + -2.627236434280717e-07, + 5.551190890670724e-07, + -9.010350610641584e-08, + -1.9385507269862047e-07, + -1.980878719033606e-07, + -9.31153574198941e-08 + ], + [ + -4.335547550274997e-08, + -9.01035061064162e-08, + 6.53136070312492e-07, + 1.9362202241313713e-07, + -1.146589237690379e-07, + -7.196585886255944e-08 + ], + [ + 3.714638912704331e-08, + -1.9385507269862087e-07, + 1.9362202241313628e-07, + 1.2484560913735146e-07, + 3.2658382583721026e-08, + 3.301097074312566e-08 + ], + [ + 1.6346203584105354e-07, + -1.980878719033603e-07, + -1.1465892376903774e-07, + 3.265838258372065e-08, + 1.23652189246973e-07, + 8.571146080154154e-08 + ], + [ + 1.0652181985979293e-07, + -9.311535741989419e-08, + -7.196585886255985e-08, + 3.301097074312538e-08, + 8.571146080154191e-08, + 1.6707738731885391e-07 + ] + ], + "parameter_std": { + "rvec_std_deg": [ + 0.04061195988417994, + 0.0426889736419385, + 0.04630463517881947 + ], + "tvec_std_m": [ + 0.0003533349814798295, + 0.000351642132354718, + 0.00040875100895148127 + ] + }, + "camera_center_std_m": [ + 0.0004015718950779406, + 0.0007421256472201426, + 0.0006731526149433535 + ], + "camera_center_std_mm": [ + 0.4015718950779406, + 0.7421256472201425, + 0.6731526149433535 + ], + "orientation_std_deg": { + "roll": 0.13494216320251604, + "pitch": 0.04025296957854174, + "yaw": 0.11737953488154021 + } + } + }, + "observations": { + "markers": [ + { + "marker_id": 55, + "observed_center_px": [ + 1136.5, + 888.25 + ], + "projected_center_px": [ + 1136.376220703125, + 888.4700927734375 + ], + "reprojection_error_px": 0.25251166954079585, + "confidence": 0.5219323198445638 + }, + { + "marker_id": 79, + "observed_center_px": [ + 919.0, + 861.25 + ], + "projected_center_px": [ + 919.0020141601562, + 861.0948486328125 + ], + "reprojection_error_px": 0.15516444045362157, + "confidence": 0.46679997653940364 + }, + { + "marker_id": 47, + "observed_center_px": [ + 1151.25, + 822.25 + ], + "projected_center_px": [ + 1150.4693603515625, + 821.73828125 + ], + "reprojection_error_px": 0.9334100598419679, + "confidence": 0.40553614178530284 + }, + { + "marker_id": 54, + "observed_center_px": [ + 1235.25, + 820.25 + ], + "projected_center_px": [ + 1236.1435546875, + 821.3695678710938 + ], + "reprojection_error_px": 1.4324357568626296, + "confidence": 0.11853329759702871 + }, + { + "marker_id": 86, + "observed_center_px": [ + 123.0, + 842.75 + ], + "projected_center_px": [ + 122.65746307373047, + 842.6725463867188 + ], + "reprojection_error_px": 0.35118457834662914, + "confidence": 0.39666742757474877 + }, + { + "marker_id": 96, + "observed_center_px": [ + 954.0, + 802.0 + ], + "projected_center_px": [ + 954.2156982421875, + 801.8694458007812 + ], + "reprojection_error_px": 0.25213117739864394, + "confidence": 0.3314216578838723 + }, + { + "marker_id": 84, + "observed_center_px": [ + 206.75, + 799.0 + ], + "projected_center_px": [ + 207.06143188476562, + 799.0526123046875 + ], + "reprojection_error_px": 0.31584469831421874, + "confidence": 0.29360621858836283 + }, + { + "marker_id": 62, + "observed_center_px": [ + 925.0, + 770.75 + ], + "projected_center_px": [ + 925.062255859375, + 771.1116943359375 + ], + "reprojection_error_px": 0.36701305790910066, + "confidence": 0.25370304094044416 + }, + { + "marker_id": 85, + "observed_center_px": [ + 1120.5, + 687.5 + ], + "projected_center_px": [ + 1119.8026123046875, + 686.31298828125 + ], + "reprojection_error_px": 1.3767158087358151, + "confidence": 0.20441637110846192 + }, + { + "marker_id": 105, + "observed_center_px": [ + 1038.75, + 675.5 + ], + "projected_center_px": [ + 1039.1170654296875, + 675.0737915039062 + ], + "reprojection_error_px": 0.5624861881096861, + "confidence": 0.17259443971051047 + }, + { + "marker_id": 57, + "observed_center_px": [ + 1157.25, + 621.75 + ], + "projected_center_px": [ + 1157.047607421875, + 621.402099609375 + ], + "reprojection_error_px": 0.40248905261772255, + "confidence": 0.15036126370334021 + }, + { + "marker_id": 59, + "observed_center_px": [ + 1027.0, + 613.25 + ], + "projected_center_px": [ + 1026.6114501953125, + 613.2049560546875 + ], + "reprojection_error_px": 0.3911520263682778, + "confidence": 0.11849981411449093 + }, + { + "marker_id": 48, + "observed_center_px": [ + 1066.0, + 578.25 + ], + "projected_center_px": [ + 1065.6326904296875, + 578.4794921875 + ], + "reprojection_error_px": 0.433108513616032, + "confidence": 0.08787391972076787 + }, + { + "marker_id": 92, + "observed_center_px": [ + 892.75, + 608.25 + ], + "projected_center_px": [ + 893.5529174804688, + 608.5789794921875 + ], + "reprojection_error_px": 0.8677004014763569, + "confidence": 0.08649209635185473 + }, + { + "marker_id": 71, + "observed_center_px": [ + 1001.5, + 551.75 + ], + "projected_center_px": [ + 1001.7471313476562, + 552.2847290039062 + ], + "reprojection_error_px": 0.5890747071577294, + "confidence": 0.08751548667261201 + } + ] + }, + "qa": { + "sanity_notes": [] + } +} \ No newline at end of file diff --git a/test/homing/20260616_120456/cam0_debug.jpg b/test/homing/20260616_120456/cam0_debug.jpg new file mode 100644 index 0000000..aeb3197 Binary files /dev/null and b/test/homing/20260616_120456/cam0_debug.jpg differ diff --git a/test/homing/20260616_120456/cam1.jpg b/test/homing/20260616_120456/cam1.jpg new file mode 100644 index 0000000..fa161bd Binary files /dev/null and b/test/homing/20260616_120456/cam1.jpg differ diff --git a/test/homing/20260616_120456/cam1_aruco_detection.json b/test/homing/20260616_120456/cam1_aruco_detection.json new file mode 100644 index 0000000..546790a --- /dev/null +++ b/test/homing/20260616_120456/cam1_aruco_detection.json @@ -0,0 +1,3551 @@ +{ + "schema_version": "1.0", + "created_utc": "2026-06-16T12:05:05Z", + "vision_config": { + "MarkerType": "DICT_4X4_250", + "MarkerSize": 0.025 + }, + "camera": { + "camera_id": "cam1", + "intrinsics_file": "/app/data/calibration/20260610_092149/cam1_calibration.npz", + "camera_matrix": [ + [ + 1367.5723876953125, + 0.0, + 672.1165771484375 + ], + [ + 0.0, + 1372.3011474609375, + 445.8396911621094 + ], + [ + 0.0, + 0.0, + 1.0 + ] + ], + "distortion_coefficients": [ + 0.01016925647854805, + 0.7656787633895874, + -0.0031530377455055714, + -0.00288817984983325, + -2.490830183029175 + ] + }, + "image": { + "image_file": "/app/data/homing/20260616_120456/cam1.jpg", + "image_sha256": "8d228b2de6fc19d47ad805608f21857dbce5c9b60216aec0cac3b28454ee325c", + "width_px": 1280, + "height_px": 960 + }, + "aruco": { + "dictionary": "DICT_4X4_250", + "num_detected_markers": 50, + "num_rejected_candidates": 32 + }, + "detections": [ + { + "observation_id": "a0b25c15-6cf9-4d95-bdb2-11039940c203", + "type": "aruco", + "marker_id": 69, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 1152.0, + 270.0 + ], + [ + 1148.0, + 306.0 + ], + [ + 1112.0, + 300.0 + ], + [ + 1116.0, + 266.0 + ] + ], + "center_px": [ + 1132.0, + 285.5 + ], + "quality": { + "area_px": 1280.0, + "perimeter_px": 143.17414474487305, + "sharpness": { + "laplacian_var": 3153.579681595984 + }, + "contrast": { + "p05": 2.0, + "p95": 186.0, + "dynamic_range": 184.0, + "mean_gray": 65.75862068965517, + "std_gray": 71.36246566748854 + }, + "geometry": { + "distance_to_center_norm": 0.6613129377365112, + "distance_to_border_px": 128.0 + }, + "edge_ratio": 1.0660763184916147, + "edge_lengths_px": [ + 36.22154235839844, + 36.49657440185547, + 34.2344856262207, + 36.22154235839844 + ] + }, + "confidence": 0.8004430063137599 + }, + { + "observation_id": "00fab9c5-26fd-4ef9-9ec9-4f5593a45fd6", + "type": "aruco", + "marker_id": 143, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 464.0, + 412.0 + ], + [ + 427.0, + 417.0 + ], + [ + 422.0, + 383.0 + ], + [ + 459.0, + 379.0 + ] + ], + "center_px": [ + 443.0, + 397.75 + ], + "quality": { + "area_px": 1262.0, + "perimeter_px": 142.29421615600586, + "sharpness": { + "laplacian_var": 2977.826874004352 + }, + "contrast": { + "p05": 2.0, + "p95": 174.0, + "dynamic_range": 172.0, + "mean_gray": 68.39355581127732, + "std_gray": 68.11174568996915 + }, + "geometry": { + "distance_to_center_norm": 0.2668510377407074, + "distance_to_border_px": 379.0 + }, + "edge_ratio": 1.1186358832964587, + "edge_lengths_px": [ + 37.336307525634766, + 34.36568069458008, + 37.2155876159668, + 33.37664031982422 + ] + }, + "confidence": 0.7521065128485288 + }, + { + "observation_id": "46194f60-d9c6-4536-a5e5-58a917ebe0b3", + "type": "aruco", + "marker_id": 200, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 759.0, + 629.0 + ], + [ + 736.0, + 623.0 + ], + [ + 734.0, + 597.0 + ], + [ + 759.0, + 604.0 + ] + ], + "center_px": [ + 747.0, + 613.25 + ], + "quality": { + "area_px": 605.5, + "perimeter_px": 100.80804634094238, + "sharpness": { + "laplacian_var": 3275.4949941042883 + }, + "contrast": { + "p05": 4.0, + "p95": 180.0, + "dynamic_range": 176.0, + "mean_gray": 68.10747663551402, + "std_gray": 63.504121878046554 + }, + "geometry": { + "distance_to_center_norm": 0.2136167734861374, + "distance_to_border_px": 331.0 + }, + "edge_ratio": 1.09705964035354, + "edge_lengths_px": [ + 23.76972770690918, + 26.07680892944336, + 25.961509704589844, + 25.0 + ] + }, + "confidence": 0.36795325597483514 + }, + { + "observation_id": "190ad074-bc10-46f5-a14b-594386db2c15", + "type": "aruco", + "marker_id": 64, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 1180.0, + 409.0 + ], + [ + 1176.0, + 441.0 + ], + [ + 1141.0, + 434.0 + ], + [ + 1144.0, + 402.0 + ] + ], + "center_px": [ + 1160.25, + 421.5 + ], + "quality": { + "area_px": 1160.5, + "perimeter_px": 136.7567253112793, + "sharpness": { + "laplacian_var": 3067.497046393274 + }, + "contrast": { + "p05": 2.0, + "p95": 183.19999999999993, + "dynamic_range": 181.19999999999993, + "mean_gray": 64.14932680538556, + "std_gray": 70.0316922673116 + }, + "geometry": { + "distance_to_center_norm": 0.6544108390808105, + "distance_to_border_px": 100.0 + }, + "edge_ratio": 1.1410665688987016, + "edge_lengths_px": [ + 32.24903106689453, + 35.693138122558594, + 32.140316009521484, + 36.67424011230469 + ] + }, + "confidence": 0.6780206236463221 + }, + { + "observation_id": "230a62f1-ba20-4a56-8290-7dc4c4f30e9d", + "type": "aruco", + "marker_id": 58, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 1080.0, + 351.0 + ], + [ + 1077.0, + 382.0 + ], + [ + 1044.0, + 376.0 + ], + [ + 1046.0, + 344.0 + ] + ], + "center_px": [ + 1061.75, + 363.25 + ], + "quality": { + "area_px": 1071.5, + "perimeter_px": 131.46138954162598, + "sharpness": { + "laplacian_var": 2682.6544361781735 + }, + "contrast": { + "p05": 5.0, + "p95": 187.0, + "dynamic_range": 182.0, + "mean_gray": 70.94743935309972, + "std_gray": 69.89372901753619 + }, + "geometry": { + "distance_to_center_norm": 0.547014057636261, + "distance_to_border_px": 200.0 + }, + "edge_ratio": 1.1145707259240496, + "edge_lengths_px": [ + 31.14482307434082, + 33.541019439697266, + 32.06243896484375, + 34.71310806274414 + ] + }, + "confidence": 0.6409044457372643 + }, + { + "observation_id": "8fb1e2f5-ff3f-4d5c-8bce-aa899040ec35", + "type": "aruco", + "marker_id": 66, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 877.0, + 120.0 + ], + [ + 875.0, + 155.0 + ], + [ + 846.0, + 150.0 + ], + [ + 846.0, + 118.0 + ] + ], + "center_px": [ + 861.0, + 135.75 + ], + "quality": { + "area_px": 1008.5, + "perimeter_px": 127.5494213104248, + "sharpness": { + "laplacian_var": 2337.5826811959023 + }, + "contrast": { + "p05": 9.0, + "p95": 193.0, + "dynamic_range": 184.0, + "mean_gray": 68.27285921625544, + "std_gray": 69.54778982033216 + }, + "geometry": { + "distance_to_center_norm": 0.5113539695739746, + "distance_to_border_px": 118.0 + }, + "edge_ratio": 1.191288588922334, + "edge_lengths_px": [ + 35.05709457397461, + 29.42787742614746, + 32.0, + 31.064449310302734 + ] + }, + "confidence": 0.5643748623006126 + }, + { + "observation_id": "e2ea8fe3-b294-43f7-a235-ae329815e295", + "type": "aruco", + "marker_id": 243, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 543.0, + 655.0 + ], + [ + 518.0, + 646.0 + ], + [ + 530.0, + 612.0 + ], + [ + 556.0, + 621.0 + ] + ], + "center_px": [ + 536.75, + 633.5 + ], + "quality": { + "area_px": 979.5, + "perimeter_px": 126.54035568237305, + "sharpness": { + "laplacian_var": 3716.1819829903984 + }, + "contrast": { + "p05": 36.7, + "p95": 240.29999999999995, + "dynamic_range": 203.59999999999997, + "mean_gray": 114.4088888888889, + "std_gray": 77.95564880268084 + }, + "geometry": { + "distance_to_center_norm": 0.2312426120042801, + "distance_to_border_px": 305.0 + }, + "edge_ratio": 1.369952847951837, + "edge_lengths_px": [ + 26.570659637451172, + 36.055511474609375, + 27.513633728027344, + 36.400550842285156 + ] + }, + "confidence": 0.47665874119410373 + }, + { + "observation_id": "a34987b1-b865-429c-9756-e60e406b4737", + "type": "aruco", + "marker_id": 148, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 490.0, + 348.0 + ], + [ + 466.0, + 360.0 + ], + [ + 461.0, + 326.0 + ], + [ + 487.0, + 315.0 + ] + ], + "center_px": [ + 476.0, + 337.25 + ], + "quality": { + "area_px": 883.5, + "perimeter_px": 122.56576538085938, + "sharpness": { + "laplacian_var": 2067.2377633561446 + }, + "contrast": { + "p05": 6.0, + "p95": 142.0, + "dynamic_range": 136.0, + "mean_gray": 51.018425460636514, + "std_gray": 48.86995695034114 + }, + "geometry": { + "distance_to_center_norm": 0.2717810571193695, + "distance_to_border_px": 315.0 + }, + "edge_ratio": 1.2807333288172131, + "edge_lengths_px": [ + 26.832815170288086, + 34.36568069458008, + 28.23118782043457, + 33.13608169555664 + ] + }, + "confidence": 0.45989277138899404 + }, + { + "observation_id": "949c3d80-0f00-4947-9f9f-c5cc667cf4a4", + "type": "aruco", + "marker_id": 103, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 1001.0, + 377.0 + ], + [ + 999.0, + 406.0 + ], + [ + 968.0, + 401.0 + ], + [ + 970.0, + 371.0 + ] + ], + "center_px": [ + 984.5, + 388.75 + ], + "quality": { + "area_px": 925.5, + "perimeter_px": 122.11141967773438, + "sharpness": { + "laplacian_var": 2156.4390121407982 + }, + "contrast": { + "p05": 15.0, + "p95": 192.0, + "dynamic_range": 177.0, + "mean_gray": 114.59345794392523, + "std_gray": 71.24986628968558 + }, + "geometry": { + "distance_to_center_norm": 0.44547519087791443, + "distance_to_border_px": 279.0 + }, + "edge_ratio": 1.086223538950611, + "edge_lengths_px": [ + 29.068883895874023, + 31.400636672973633, + 30.066593170166016, + 31.575305938720703 + ] + }, + "confidence": 0.5680230430248981 + }, + { + "observation_id": "7891fc6f-6fba-43ea-a5ec-3db488b33e3c", + "type": "aruco", + "marker_id": 95, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 902.0, + 247.0 + ], + [ + 902.0, + 279.0 + ], + [ + 873.0, + 274.0 + ], + [ + 875.0, + 243.0 + ] + ], + "center_px": [ + 888.0, + 260.75 + ], + "quality": { + "area_px": 886.5, + "perimeter_px": 119.78701400756836, + "sharpness": { + "laplacian_var": 2060.06546944 + }, + "contrast": { + "p05": 15.0, + "p95": 192.0, + "dynamic_range": 177.0, + "mean_gray": 86.7136, + "std_gray": 70.68777245775964 + }, + "geometry": { + "distance_to_center_norm": 0.41377559304237366, + "distance_to_border_px": 243.0 + }, + "edge_ratio": 1.1723893255175983, + "edge_lengths_px": [ + 32.0, + 29.42787742614746, + 31.064449310302734, + 27.294687271118164 + ] + }, + "confidence": 0.5040987555384636 + }, + { + "observation_id": "29595fd2-2e9d-4635-8106-1995cfbe6474", + "type": "aruco", + "marker_id": 97, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 761.0, + 115.0 + ], + [ + 762.0, + 147.0 + ], + [ + 735.0, + 144.0 + ], + [ + 735.0, + 112.0 + ] + ], + "center_px": [ + 748.25, + 129.5 + ], + "quality": { + "area_px": 846.5, + "perimeter_px": 117.35428047180176, + "sharpness": { + "laplacian_var": 2437.4451443754765 + }, + "contrast": { + "p05": 10.0, + "p95": 196.0, + "dynamic_range": 186.0, + "mean_gray": 99.98023064250413, + "std_gray": 74.95733836373947 + }, + "geometry": { + "distance_to_center_norm": 0.45854443311691284, + "distance_to_border_px": 112.0 + }, + "edge_ratio": 1.2232540174742184, + "edge_lengths_px": [ + 32.015621185302734, + 27.166154861450195, + 32.0, + 26.172504425048828 + ] + }, + "confidence": 0.46133781313759503 + }, + { + "observation_id": "d51f6ab2-44a1-4441-87f0-56ee8f3c8ced", + "type": "aruco", + "marker_id": 51, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 921.0, + 380.0 + ], + [ + 921.0, + 410.0 + ], + [ + 892.0, + 404.0 + ], + [ + 893.0, + 376.0 + ] + ], + "center_px": [ + 906.75, + 392.5 + ], + "quality": { + "area_px": 829.0, + "perimeter_px": 115.91630744934082, + "sharpness": { + "laplacian_var": 1837.0694082160298 + }, + "contrast": { + "p05": 14.0, + "p95": 188.54999999999995, + "dynamic_range": 174.54999999999995, + "mean_gray": 76.93728813559322, + "std_gray": 65.45471561343477 + }, + "geometry": { + "distance_to_center_norm": 0.3509179949760437, + "distance_to_border_px": 359.0 + }, + "edge_ratio": 1.070745937399992, + "edge_lengths_px": [ + 30.0, + 29.614185333251953, + 28.017850875854492, + 28.284271240234375 + ] + }, + "confidence": 0.5161510750240749 + }, + { + "observation_id": "7d0cf185-7242-45bb-a626-daefa8cfdd82", + "type": "aruco", + "marker_id": 179, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 381.0, + 223.0 + ], + [ + 407.0, + 228.0 + ], + [ + 380.0, + 248.0 + ], + [ + 357.0, + 243.0 + ] + ], + "center_px": [ + 381.25, + 235.5 + ], + "quality": { + "area_px": 617.5, + "perimeter_px": 114.8552017211914, + "sharpness": { + "laplacian_var": 5314.897576958648 + }, + "contrast": { + "p05": 19.0, + "p95": 246.0, + "dynamic_range": 227.0, + "mean_gray": 117.97931034482758, + "std_gray": 86.193458079 + }, + "geometry": { + "distance_to_center_norm": 0.44499263167381287, + "distance_to_border_px": 223.0 + }, + "edge_ratio": 1.427552419014359, + "edge_lengths_px": [ + 26.476404190063477, + 33.60059356689453, + 23.53720474243164, + 31.240999221801758 + ] + }, + "confidence": 0.2883723646035347 + }, + { + "observation_id": "9916e780-bd60-44a5-933e-e331ac89457d", + "type": "aruco", + "marker_id": 144, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 504.0, + 491.0 + ], + [ + 481.0, + 505.0 + ], + [ + 478.0, + 472.0 + ], + [ + 501.0, + 462.0 + ] + ], + "center_px": [ + 491.0, + 482.5 + ], + "quality": { + "area_px": 749.0, + "perimeter_px": 114.29653739929199, + "sharpness": { + "laplacian_var": 2472.0955542343772 + }, + "contrast": { + "p05": 2.0, + "p95": 146.0, + "dynamic_range": 144.0, + "mean_gray": 58.74329501915709, + "std_gray": 56.05227447838598 + }, + "geometry": { + "distance_to_center_norm": 0.18627621233463287, + "distance_to_border_px": 455.0 + }, + "edge_ratio": 1.32122211477065, + "edge_lengths_px": [ + 26.925823211669922, + 33.13608169555664, + 25.079872131347656, + 29.154760360717773 + ] + }, + "confidence": 0.37793292115763005 + }, + { + "observation_id": "9f66bb5e-7f90-4903-954c-c5fadd07d909", + "type": "aruco", + "marker_id": 54, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 719.0, + 149.0 + ], + [ + 720.0, + 180.0 + ], + [ + 695.0, + 176.0 + ], + [ + 694.0, + 146.0 + ] + ], + "center_px": [ + 707.0, + 162.75 + ], + "quality": { + "area_px": 759.0, + "perimeter_px": 111.53012275695801, + "sharpness": { + "laplacian_var": 1795.9815539564306 + }, + "contrast": { + "p05": 8.650000000000002, + "p95": 180.34999999999997, + "dynamic_range": 171.69999999999996, + "mean_gray": 52.264044943820224, + "std_gray": 56.8294275733979 + }, + "geometry": { + "distance_to_center_norm": 0.4053095877170563, + "distance_to_border_px": 146.0 + }, + "edge_ratio": 1.2318076301194547, + "edge_lengths_px": [ + 31.016124725341797, + 25.317977905273438, + 30.01666259765625, + 25.179357528686523 + ] + }, + "confidence": 0.41077842645846463 + }, + { + "observation_id": "cab96425-67e3-4afa-a093-32e50c8aa7f2", + "type": "aruco", + "marker_id": 55, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 787.0, + 246.0 + ], + [ + 786.0, + 275.0 + ], + [ + 761.0, + 271.0 + ], + [ + 761.0, + 241.0 + ] + ], + "center_px": [ + 773.75, + 258.25 + ], + "quality": { + "area_px": 754.5, + "perimeter_px": 110.81161880493164, + "sharpness": { + "laplacian_var": 1900.761349288338 + }, + "contrast": { + "p05": 15.0, + "p95": 191.0, + "dynamic_range": 176.0, + "mean_gray": 88.64772727272727, + "std_gray": 68.08896360300751 + }, + "geometry": { + "distance_to_center_norm": 0.32370445132255554, + "distance_to_border_px": 241.0 + }, + "edge_ratio": 1.1849287534827713, + "edge_lengths_px": [ + 29.017236709594727, + 25.317977905273438, + 30.0, + 26.476404190063477 + ] + }, + "confidence": 0.42449809621175133 + }, + { + "observation_id": "1edbac38-533f-4df2-a5d1-75a949082502", + "type": "aruco", + "marker_id": 132, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 488.0, + 664.0 + ], + [ + 464.0, + 654.0 + ], + [ + 461.0, + 626.0 + ], + [ + 486.0, + 635.0 + ] + ], + "center_px": [ + 474.75, + 644.75 + ], + "quality": { + "area_px": 674.5, + "perimeter_px": 109.7997989654541, + "sharpness": { + "laplacian_var": 2753.7788494099595 + }, + "contrast": { + "p05": 4.0, + "p95": 191.0, + "dynamic_range": 187.0, + "mean_gray": 62.53209109730849, + "std_gray": 69.59656372535066 + }, + "geometry": { + "distance_to_center_norm": 0.2916818857192993, + "distance_to_border_px": 296.0 + }, + "edge_ratio": 1.1180339959951549, + "edge_lengths_px": [ + 26.0, + 28.160255432128906, + 26.570659637451172, + 29.068883895874023 + ] + }, + "confidence": 0.40219409094660064 + }, + { + "observation_id": "a85bbf96-47f5-4852-a6d1-341d6fcdd5d7", + "type": "aruco", + "marker_id": 75, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 1134.0, + 852.0 + ], + [ + 1132.0, + 875.0 + ], + [ + 1102.0, + 864.0 + ], + [ + 1104.0, + 842.0 + ] + ], + "center_px": [ + 1118.0, + 858.25 + ], + "quality": { + "area_px": 696.0, + "perimeter_px": 108.75337982177734, + "sharpness": { + "laplacian_var": 2479.533748302399 + }, + "contrast": { + "p05": 3.0, + "p95": 159.0, + "dynamic_range": 156.0, + "mean_gray": 86.71702127659574, + "std_gray": 59.35126885359286 + }, + "geometry": { + "distance_to_center_norm": 0.761943519115448, + "distance_to_border_px": 85.0 + }, + "edge_ratio": 1.44644851017536, + "edge_lengths_px": [ + 23.0867919921875, + 31.95309066772461, + 22.090721130371094, + 31.62277603149414 + ] + }, + "confidence": 0.32078570148601215 + }, + { + "observation_id": "96296bba-c566-4294-822b-1115922a6c24", + "type": "aruco", + "marker_id": 47, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 719.0, + 205.0 + ], + [ + 720.0, + 235.0 + ], + [ + 696.0, + 230.0 + ], + [ + 694.0, + 202.0 + ] + ], + "center_px": [ + 707.25, + 218.0 + ], + "quality": { + "area_px": 704.5, + "perimeter_px": 107.78265762329102, + "sharpness": { + "laplacian_var": 2181.7247251391555 + }, + "contrast": { + "p05": 10.0, + "p95": 187.0, + "dynamic_range": 177.0, + "mean_gray": 79.95296523517382, + "std_gray": 65.61547398112512 + }, + "geometry": { + "distance_to_center_norm": 0.33811649680137634, + "distance_to_border_px": 202.0 + }, + "edge_ratio": 1.224405235850899, + "edge_lengths_px": [ + 30.01666259765625, + 24.515300750732422, + 28.07133674621582, + 25.179357528686523 + ] + }, + "confidence": 0.3835876006690484 + }, + { + "observation_id": "f8b4cf50-4904-43d0-ae32-540008e01c44", + "type": "aruco", + "marker_id": 210, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 942.0, + 615.0 + ], + [ + 914.0, + 608.0 + ], + [ + 915.0, + 583.0 + ], + [ + 943.0, + 591.0 + ] + ], + "center_px": [ + 928.5, + 599.25 + ], + "quality": { + "area_px": 693.5, + "perimeter_px": 107.02299690246582, + "sharpness": { + "laplacian_var": 2508.481814809439 + }, + "contrast": { + "p05": 7.0, + "p95": 179.0, + "dynamic_range": 172.0, + "mean_gray": 71.33534136546184, + "std_gray": 63.06169284440073 + }, + "geometry": { + "distance_to_center_norm": 0.3902179002761841, + "distance_to_border_px": 337.0 + }, + "edge_ratio": 1.212299753133082, + "edge_lengths_px": [ + 28.861740112304688, + 25.01999282836914, + 29.120439529418945, + 24.020824432373047 + ] + }, + "confidence": 0.38136882576975994 + }, + { + "observation_id": "cc8efca5-de78-468b-b175-a1b8fa6af597", + "type": "aruco", + "marker_id": 129, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 449.0, + 649.0 + ], + [ + 426.0, + 639.0 + ], + [ + 423.0, + 612.0 + ], + [ + 447.0, + 620.0 + ] + ], + "center_px": [ + 436.25, + 630.0 + ], + "quality": { + "area_px": 635.5, + "perimeter_px": 106.61313247680664, + "sharpness": { + "laplacian_var": 3379.8344989669426 + }, + "contrast": { + "p05": 2.0, + "p95": 191.0, + "dynamic_range": 189.0, + "mean_gray": 77.0909090909091, + "std_gray": 73.50566403093096 + }, + "geometry": { + "distance_to_center_norm": 0.31626251339912415, + "distance_to_border_px": 311.0 + }, + "edge_ratio": 1.1590523166798945, + "edge_lengths_px": [ + 25.079872131347656, + 27.166154861450195, + 25.298221588134766, + 29.068883895874023 + ] + }, + "confidence": 0.36552851029214967 + }, + { + "observation_id": "010619b4-7bb2-4ba8-bba2-d4f75dd08a52", + "type": "aruco", + "marker_id": 77, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 1080.0, + 829.0 + ], + [ + 1078.0, + 852.0 + ], + [ + 1049.0, + 840.0 + ], + [ + 1051.0, + 819.0 + ] + ], + "center_px": [ + 1064.5, + 835.0 + ], + "quality": { + "area_px": 660.0, + "perimeter_px": 106.24224853515625, + "sharpness": { + "laplacian_var": 1889.4995930977684 + }, + "contrast": { + "p05": 1.0, + "p95": 159.0, + "dynamic_range": 158.0, + "mean_gray": 57.618101545253865, + "std_gray": 59.057440732630326 + }, + "geometry": { + "distance_to_center_norm": 0.6917202472686768, + "distance_to_border_px": 108.0 + }, + "edge_ratio": 1.4877780175837558, + "edge_lengths_px": [ + 23.0867919921875, + 31.38471031188965, + 21.095022201538086, + 30.675724029541016 + ] + }, + "confidence": 0.295743044190549 + }, + { + "observation_id": "2d619122-bbfd-4b72-b299-4db24ee86572", + "type": "aruco", + "marker_id": 147, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 498.0, + 391.0 + ], + [ + 491.0, + 403.0 + ], + [ + 488.0, + 370.0 + ], + [ + 497.0, + 352.0 + ] + ], + "center_px": [ + 493.5, + 379.0 + ], + "quality": { + "area_px": 318.0, + "perimeter_px": 106.16595363616943, + "sharpness": { + "laplacian_var": 4391.067444570422 + }, + "contrast": { + "p05": 47.0, + "p95": 134.45, + "dynamic_range": 87.44999999999999, + "mean_gray": 79.06349206349206, + "std_gray": 28.046233380850122 + }, + "geometry": { + "distance_to_center_norm": 0.2224271446466446, + "distance_to_border_px": 352.0 + }, + "edge_ratio": 2.808204110540037, + "edge_lengths_px": [ + 13.892443656921387, + 33.13608169555664, + 20.124610900878906, + 39.0128173828125 + ] + }, + "confidence": 0.0754930879861261 + }, + { + "observation_id": "794784bf-f1e0-4f68-bc7d-16aedc34fb1d", + "type": "aruco", + "marker_id": 74, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 994.0, + 751.0 + ], + [ + 992.0, + 774.0 + ], + [ + 966.0, + 765.0 + ], + [ + 967.0, + 742.0 + ] + ], + "center_px": [ + 979.75, + 758.0 + ], + "quality": { + "area_px": 623.0, + "perimeter_px": 102.0826530456543, + "sharpness": { + "laplacian_var": 2337.728571354445 + }, + "contrast": { + "p05": 1.0, + "p95": 159.0, + "dynamic_range": 158.0, + "mean_gray": 73.36902050113895, + "std_gray": 63.09262487501348 + }, + "geometry": { + "distance_to_center_norm": 0.5487401485443115, + "distance_to_border_px": 186.0 + }, + "edge_ratio": 1.2362450886560548, + "edge_lengths_px": [ + 23.0867919921875, + 27.513633728027344, + 23.021728515625, + 28.460498809814453 + ] + }, + "confidence": 0.3359635861403907 + }, + { + "observation_id": "153445f6-4f07-4dfe-b7a3-7f13bf671161", + "type": "aruco", + "marker_id": 85, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 556.0, + 150.0 + ], + [ + 558.0, + 179.0 + ], + [ + 536.0, + 176.0 + ], + [ + 534.0, + 148.0 + ] + ], + "center_px": [ + 546.0, + 163.25 + ], + "quality": { + "area_px": 622.0, + "perimeter_px": 101.43454551696777, + "sharpness": { + "laplacian_var": 2971.5472481052216 + }, + "contrast": { + "p05": 9.600000000000001, + "p95": 195.0, + "dynamic_range": 185.4, + "mean_gray": 120.4688221709007, + "std_gray": 69.60956487559235 + }, + "geometry": { + "distance_to_center_norm": 0.4130045175552368, + "distance_to_border_px": 148.0 + }, + "edge_ratio": 1.315886598917276, + "edge_lengths_px": [ + 29.068883895874023, + 22.203603744506836, + 28.07133674621582, + 22.090721130371094 + ] + }, + "confidence": 0.3151234057766515 + }, + { + "observation_id": "edc930af-0aee-41cb-9eb7-055e8ef9c1c1", + "type": "aruco", + "marker_id": 96, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 697.0, + 320.0 + ], + [ + 698.0, + 347.0 + ], + [ + 675.0, + 343.0 + ], + [ + 674.0, + 316.0 + ] + ], + "center_px": [ + 686.0, + 331.5 + ], + "quality": { + "area_px": 617.0, + "perimeter_px": 100.72749710083008, + "sharpness": { + "laplacian_var": 1711.6523501233848 + }, + "contrast": { + "p05": 5.700000000000003, + "p95": 179.0, + "dynamic_range": 173.3, + "mean_gray": 89.24819277108433, + "std_gray": 67.99598563885212 + }, + "geometry": { + "distance_to_center_norm": 0.1943267583847046, + "distance_to_border_px": 316.0 + }, + "edge_ratio": 1.15734588970726, + "edge_lengths_px": [ + 27.018512725830078, + 23.34523582458496, + 27.018512725830078, + 23.34523582458496 + ] + }, + "confidence": 0.3554108905483531 + }, + { + "observation_id": "e286b58c-8be4-4f68-9c3c-7191eeb475fa", + "type": "aruco", + "marker_id": 52, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 989.0, + 812.0 + ], + [ + 988.0, + 834.0 + ], + [ + 961.0, + 824.0 + ], + [ + 962.0, + 803.0 + ] + ], + "center_px": [ + 975.0, + 818.25 + ], + "quality": { + "area_px": 590.0, + "perimeter_px": 100.29936981201172, + "sharpness": { + "laplacian_var": 2937.9537653696107 + }, + "contrast": { + "p05": 1.0, + "p95": 154.0, + "dynamic_range": 153.0, + "mean_gray": 53.56204379562044, + "std_gray": 57.10299671026457 + }, + "geometry": { + "distance_to_center_norm": 0.5950815081596375, + "distance_to_border_px": 126.0 + }, + "edge_ratio": 1.369512917368109, + "edge_lengths_px": [ + 22.022714614868164, + 28.792360305786133, + 21.02379608154297, + 28.460498809814453 + ] + }, + "confidence": 0.28720673485083303 + }, + { + "observation_id": "fffbcd96-8f3f-4273-bdc2-25ed331a4142", + "type": "aruco", + "marker_id": 215, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 724.0, + 461.0 + ], + [ + 701.0, + 455.0 + ], + [ + 700.0, + 431.0 + ], + [ + 723.0, + 436.0 + ] + ], + "center_px": [ + 712.0, + 445.75 + ], + "quality": { + "area_px": 558.0, + "perimeter_px": 96.34774971008301, + "sharpness": { + "laplacian_var": 1949.6508774614836 + }, + "contrast": { + "p05": 4.0, + "p95": 163.25, + "dynamic_range": 159.25, + "mean_gray": 71.34343434343434, + "std_gray": 63.15375843421278 + }, + "geometry": { + "distance_to_center_norm": 0.09966398030519485, + "distance_to_border_px": 431.0 + }, + "edge_ratio": 1.0629976287398482, + "edge_lengths_px": [ + 23.76972770690918, + 24.020824432373047, + 23.53720474243164, + 25.01999282836914 + ] + }, + "confidence": 0.34995374396177614 + }, + { + "observation_id": "98ddf2c9-f91d-458f-a6d9-1870111e5343", + "type": "aruco", + "marker_id": 204, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 761.0, + 793.0 + ], + [ + 737.0, + 783.0 + ], + [ + 735.0, + 760.0 + ], + [ + 759.0, + 768.0 + ] + ], + "center_px": [ + 748.0, + 776.0 + ], + "quality": { + "area_px": 558.0, + "perimeter_px": 99.46488571166992, + "sharpness": { + "laplacian_var": 2450.5305503809195 + }, + "contrast": { + "p05": 2.0, + "p95": 156.7, + "dynamic_range": 154.7, + "mean_gray": 51.41602067183462, + "std_gray": 56.23354816940243 + }, + "geometry": { + "distance_to_center_norm": 0.3938590884208679, + "distance_to_border_px": 167.0 + }, + "edge_ratio": 1.1261850502572346, + "edge_lengths_px": [ + 26.0, + 23.0867919921875, + 25.298221588134766, + 25.079872131347656 + ] + }, + "confidence": 0.33031871619591346 + }, + { + "observation_id": "16e7f6eb-aab6-4d0b-87de-9d5154cd0aac", + "type": "aruco", + "marker_id": 81, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 949.0, + 760.0 + ], + [ + 948.0, + 782.0 + ], + [ + 923.0, + 773.0 + ], + [ + 923.0, + 751.0 + ] + ], + "center_px": [ + 935.75, + 766.5 + ], + "quality": { + "area_px": 565.5, + "perimeter_px": 98.10700798034668, + "sharpness": { + "laplacian_var": 1934.7089086127548 + }, + "contrast": { + "p05": 1.0, + "p95": 146.54999999999995, + "dynamic_range": 145.54999999999995, + "mean_gray": 54.53589743589744, + "std_gray": 55.62251429043352 + }, + "geometry": { + "distance_to_center_norm": 0.5147060751914978, + "distance_to_border_px": 178.0 + }, + "edge_ratio": 1.2506197149103337, + "edge_lengths_px": [ + 22.022714614868164, + 26.570659637451172, + 22.0, + 27.513633728027344 + ] + }, + "confidence": 0.30145054927990633 + }, + { + "observation_id": "9217a392-8dc3-46b2-9261-a09d76651082", + "type": "aruco", + "marker_id": 62, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 663.0, + 327.0 + ], + [ + 664.0, + 353.0 + ], + [ + 642.0, + 349.0 + ], + [ + 641.0, + 322.0 + ] + ], + "center_px": [ + 652.5, + 337.75 + ], + "quality": { + "area_px": 578.5, + "perimeter_px": 97.95944404602051, + "sharpness": { + "laplacian_var": 1936.7875162760417 + }, + "contrast": { + "p05": 5.0, + "p95": 149.84999999999997, + "dynamic_range": 144.84999999999997, + "mean_gray": 39.802083333333336, + "std_gray": 45.00691377251265 + }, + "geometry": { + "distance_to_center_norm": 0.17849770188331604, + "distance_to_border_px": 322.0 + }, + "edge_ratio": 1.2083046301442684, + "edge_lengths_px": [ + 26.019224166870117, + 22.360679626464844, + 27.018512725830078, + 22.56102752685547 + ] + }, + "confidence": 0.3191799957107001 + }, + { + "observation_id": "ca4aaa9f-dfab-4344-a4eb-6ba501c30489", + "type": "aruco", + "marker_id": 57, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 459.0, + 78.0 + ], + [ + 462.0, + 106.0 + ], + [ + 442.0, + 103.0 + ], + [ + 438.0, + 75.0 + ] + ], + "center_px": [ + 450.25, + 90.5 + ], + "quality": { + "area_px": 563.5, + "perimeter_px": 97.88147926330566, + "sharpness": { + "laplacian_var": 4133.583907010387 + }, + "contrast": { + "p05": 3.0, + "p95": 186.0, + "dynamic_range": 183.0, + "mean_gray": 79.58186397984886, + "std_gray": 68.71469488581769 + }, + "geometry": { + "distance_to_center_norm": 0.5415765643119812, + "distance_to_border_px": 75.0 + }, + "edge_ratio": 1.3985671506994815, + "edge_lengths_px": [ + 28.160255432128906, + 20.2237491607666, + 28.284271240234375, + 21.21320343017578 + ] + }, + "confidence": 0.26860824414385837 + }, + { + "observation_id": "0aee75fb-64ca-44df-9ddc-2219156b96a7", + "type": "aruco", + "marker_id": 105, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 542.0, + 203.0 + ], + [ + 544.0, + 230.0 + ], + [ + 523.0, + 225.0 + ], + [ + 521.0, + 200.0 + ] + ], + "center_px": [ + 532.5, + 214.5 + ], + "quality": { + "area_px": 538.0, + "perimeter_px": 94.95408058166504, + "sharpness": { + "laplacian_var": 1833.5179850260417 + }, + "contrast": { + "p05": 6.0, + "p95": 153.84999999999997, + "dynamic_range": 147.84999999999997, + "mean_gray": 39.583333333333336, + "std_gray": 45.455086960158326 + }, + "geometry": { + "distance_to_center_norm": 0.3580469787120819, + "distance_to_border_px": 200.0 + }, + "edge_ratio": 1.276279313076951, + "edge_lengths_px": [ + 27.073972702026367, + 21.587032318115234, + 25.079872131347656, + 21.21320343017578 + ] + }, + "confidence": 0.28102521367518357 + }, + { + "observation_id": "f8a6f4f5-4830-416a-894d-f2cd5e3685f4", + "type": "aruco", + "marker_id": 201, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 791.0, + 721.0 + ], + [ + 790.0, + 695.0 + ], + [ + 806.0, + 681.0 + ], + [ + 807.0, + 707.0 + ] + ], + "center_px": [ + 798.5, + 701.0 + ], + "quality": { + "area_px": 430.0, + "perimeter_px": 94.55903244018555, + "sharpness": { + "laplacian_var": 1056.3850809950086 + }, + "contrast": { + "p05": 12.0, + "p95": 112.39999999999998, + "dynamic_range": 100.39999999999998, + "mean_gray": 45.277955271565496, + "std_gray": 34.08384783675431 + }, + "geometry": { + "distance_to_center_norm": 0.3399523198604584, + "distance_to_border_px": 239.0 + }, + "edge_ratio": 1.2238413330228028, + "edge_lengths_px": [ + 26.019224166870117, + 21.260292053222656, + 26.019224166870117, + 21.260292053222656 + ] + }, + "confidence": 0.23423515690438398 + }, + { + "observation_id": "e23539e3-5c1b-41a4-9438-4f464582b026", + "type": "aruco", + "marker_id": 101, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 960.0, + 884.0 + ], + [ + 960.0, + 905.0 + ], + [ + 935.0, + 895.0 + ], + [ + 935.0, + 875.0 + ] + ], + "center_px": [ + 947.5, + 889.75 + ], + "quality": { + "area_px": 512.5, + "perimeter_px": 94.4964828491211, + "sharpness": { + "laplacian_var": 2609.9763199397403 + }, + "contrast": { + "p05": 1.0, + "p95": 151.2, + "dynamic_range": 150.2, + "mean_gray": 66.29131652661064, + "std_gray": 56.44321662794188 + }, + "geometry": { + "distance_to_center_norm": 0.6403750777244568, + "distance_to_border_px": 55.0 + }, + "edge_ratio": 1.3462911605834962, + "edge_lengths_px": [ + 21.0, + 26.925823211669922, + 20.0, + 26.570659637451172 + ] + }, + "confidence": 0.25378363660843234 + }, + { + "observation_id": "1fbbcd47-fc91-46c1-a9f6-1e0b9139766f", + "type": "aruco", + "marker_id": 71, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 350.0, + 153.0 + ], + [ + 353.0, + 179.0 + ], + [ + 335.0, + 176.0 + ], + [ + 332.0, + 151.0 + ] + ], + "center_px": [ + 342.5, + 164.75 + ], + "quality": { + "area_px": 451.5, + "perimeter_px": 87.7109203338623, + "sharpness": { + "laplacian_var": 3383.018353704363 + }, + "contrast": { + "p05": 3.0, + "p95": 180.14999999999998, + "dynamic_range": 177.14999999999998, + "mean_gray": 94.0251572327044, + "std_gray": 66.61897190311562 + }, + "geometry": { + "distance_to_center_norm": 0.5418267846107483, + "distance_to_border_px": 151.0 + }, + "edge_ratio": 1.4451347303812638, + "edge_lengths_px": [ + 26.172504425048828, + 18.248287200927734, + 25.179357528686523, + 18.11077117919922 + ] + }, + "confidence": 0.20828507797372528 + }, + { + "observation_id": "7f7873d7-1eba-4dcb-b858-0555dc874ec8", + "type": "aruco", + "marker_id": 78, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 282.0, + 80.0 + ], + [ + 286.0, + 106.0 + ], + [ + 269.0, + 103.0 + ], + [ + 264.0, + 78.0 + ] + ], + "center_px": [ + 275.25, + 91.75 + ], + "quality": { + "area_px": 435.0, + "perimeter_px": 87.1744384765625, + "sharpness": { + "laplacian_var": 4007.4639741201845 + }, + "contrast": { + "p05": 3.0, + "p95": 164.79999999999995, + "dynamic_range": 161.79999999999995, + "mean_gray": 69.13531353135313, + "std_gray": 60.01549448298341 + }, + "geometry": { + "distance_to_center_norm": 0.6658883094787598, + "distance_to_border_px": 78.0 + }, + "edge_ratio": 1.523859486218283, + "edge_lengths_px": [ + 26.305892944335938, + 17.262676239013672, + 25.495098114013672, + 18.11077117919922 + ] + }, + "confidence": 0.1903062602705479 + }, + { + "observation_id": "1b4d307a-dbe1-4389-86e4-f99fa6429906", + "type": "aruco", + "marker_id": 82, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 856.0, + 842.0 + ], + [ + 856.0, + 862.0 + ], + [ + 834.0, + 852.0 + ], + [ + 834.0, + 833.0 + ] + ], + "center_px": [ + 845.0, + 847.25 + ], + "quality": { + "area_px": 429.0, + "perimeter_px": 86.93581962585449, + "sharpness": { + "laplacian_var": 2117.6749220385323 + }, + "contrast": { + "p05": 1.25, + "p95": 143.75, + "dynamic_range": 142.5, + "mean_gray": 65.03921568627452, + "std_gray": 54.917035745487276 + }, + "geometry": { + "distance_to_center_norm": 0.5257399082183838, + "distance_to_border_px": 98.0 + }, + "edge_ratio": 1.2718995746813322, + "edge_lengths_px": [ + 20.0, + 24.166091918945312, + 19.0, + 23.76972770690918 + ] + }, + "confidence": 0.2248605201960664 + }, + { + "observation_id": "31a8df99-8d2f-4119-94a8-94e75d645d7c", + "type": "aruco", + "marker_id": 65, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 306.0, + 133.0 + ], + [ + 309.0, + 159.0 + ], + [ + 292.0, + 154.0 + ], + [ + 289.0, + 130.0 + ] + ], + "center_px": [ + 299.0, + 144.0 + ], + "quality": { + "area_px": 413.0, + "perimeter_px": 85.34199905395508, + "sharpness": { + "laplacian_var": 3378.2087841932134 + }, + "contrast": { + "p05": 3.0, + "p95": 166.0, + "dynamic_range": 163.0, + "mean_gray": 72.13157894736842, + "std_gray": 62.01057679419722 + }, + "geometry": { + "distance_to_center_norm": 0.5984054207801819, + "distance_to_border_px": 130.0 + }, + "edge_ratio": 1.5161324966460838, + "edge_lengths_px": [ + 26.172504425048828, + 17.72004508972168, + 24.1867733001709, + 17.262676239013672 + ] + }, + "confidence": 0.18160242191392414 + }, + { + "observation_id": "9e43bbc3-6d60-4385-ab96-8d8afa4d0fef", + "type": "aruco", + "marker_id": 80, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 254.0, + 85.0 + ], + [ + 258.0, + 111.0 + ], + [ + 242.0, + 108.0 + ], + [ + 238.0, + 83.0 + ] + ], + "center_px": [ + 248.0, + 96.75 + ], + "quality": { + "area_px": 398.0, + "perimeter_px": 84.02720642089844, + "sharpness": { + "laplacian_var": 2256.115396621259 + }, + "contrast": { + "p05": 3.0, + "p95": 159.0, + "dynamic_range": 156.0, + "mean_gray": 60.46289752650177, + "std_gray": 59.058525216869576 + }, + "geometry": { + "distance_to_center_norm": 0.6852743029594421, + "distance_to_border_px": 83.0 + }, + "edge_ratio": 1.6314222210130485, + "edge_lengths_px": [ + 26.305892944335938, + 16.278820037841797, + 25.317977905273438, + 16.124515533447266 + ] + }, + "confidence": 0.16263927873225353 + }, + { + "observation_id": "68e222f4-b0c2-47dd-bf3b-b0ce2fac2c07", + "type": "aruco", + "marker_id": 84, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 684.0, + 743.0 + ], + [ + 685.0, + 762.0 + ], + [ + 666.0, + 754.0 + ], + [ + 664.0, + 735.0 + ] + ], + "center_px": [ + 674.75, + 748.5 + ], + "quality": { + "area_px": 358.5, + "perimeter_px": 80.2874584197998, + "sharpness": { + "laplacian_var": 2725.505380132411 + }, + "contrast": { + "p05": 2.0, + "p95": 151.0, + "dynamic_range": 149.0, + "mean_gray": 64.84674329501915, + "std_gray": 52.59320752625399 + }, + "geometry": { + "distance_to_center_norm": 0.3384242355823517, + "distance_to_border_px": 198.0 + }, + "edge_ratio": 1.132151843661218, + "edge_lengths_px": [ + 19.02629852294922, + 20.615528106689453, + 19.10497283935547, + 21.540658950805664 + ] + }, + "confidence": 0.21110242529580486 + }, + { + "observation_id": "fbcd243b-648d-4c30-ab1c-d3d8c4d13053", + "type": "aruco", + "marker_id": 99, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 190.0, + 92.0 + ], + [ + 195.0, + 116.0 + ], + [ + 179.0, + 113.0 + ], + [ + 175.0, + 90.0 + ] + ], + "center_px": [ + 184.75, + 102.75 + ], + "quality": { + "area_px": 353.0, + "perimeter_px": 79.27210235595703, + "sharpness": { + "laplacian_var": 3269.2144828870937 + }, + "contrast": { + "p05": 3.0, + "p95": 148.0, + "dynamic_range": 145.0, + "mean_gray": 66.05761316872427, + "std_gray": 54.15072674924835 + }, + "geometry": { + "distance_to_center_norm": 0.7390556931495667, + "distance_to_border_px": 90.0 + }, + "edge_ratio": 1.6200166954103503, + "edge_lengths_px": [ + 24.515300750732422, + 16.278820037841797, + 23.34523582458496, + 15.132745742797852 + ] + }, + "confidence": 0.14526599262838052 + }, + { + "observation_id": "00cd5c81-0c6c-45e2-a4fe-2fb387277943", + "type": "aruco", + "marker_id": 87, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 217.0, + 171.0 + ], + [ + 220.0, + 194.0 + ], + [ + 205.0, + 190.0 + ], + [ + 201.0, + 168.0 + ] + ], + "center_px": [ + 210.75, + 180.75 + ], + "quality": { + "area_px": 336.5, + "perimeter_px": 77.35850048065186, + "sharpness": { + "laplacian_var": 2916.080207470825 + }, + "contrast": { + "p05": 3.0, + "p95": 155.0, + "dynamic_range": 152.0, + "mean_gray": 78.72332015810277, + "std_gray": 56.982510055434176 + }, + "geometry": { + "distance_to_center_norm": 0.6540811061859131, + "distance_to_border_px": 168.0 + }, + "edge_ratio": 1.494110095312913, + "edge_lengths_px": [ + 23.194826126098633, + 15.524174690246582, + 22.360679626464844, + 16.278820037841797 + ] + }, + "confidence": 0.15014511583656154 + }, + { + "observation_id": "112681d7-9572-4f6f-aee6-2baa4a05227e", + "type": "aruco", + "marker_id": 70, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 534.0, + 717.0 + ], + [ + 535.0, + 734.0 + ], + [ + 519.0, + 727.0 + ], + [ + 517.0, + 711.0 + ] + ], + "center_px": [ + 526.25, + 722.25 + ], + "quality": { + "area_px": 262.5, + "perimeter_px": 68.64590644836426, + "sharpness": { + "laplacian_var": 2799.9611359850064 + }, + "contrast": { + "p05": 2.0, + "p95": 153.0, + "dynamic_range": 151.0, + "mean_gray": 70.40306122448979, + "std_gray": 55.52280089477055 + }, + "geometry": { + "distance_to_center_norm": 0.33453354239463806, + "distance_to_border_px": 226.0 + }, + "edge_ratio": 1.1180339465027342, + "edge_lengths_px": [ + 17.029386520385742, + 17.464248657226562, + 16.124515533447266, + 18.027755737304688 + ] + }, + "confidence": 0.15652476433958798 + }, + { + "observation_id": "2cab71ac-b680-4946-8d9e-b530879d2943", + "type": "aruco", + "marker_id": 205, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 239.0, + 339.0 + ], + [ + 224.0, + 336.0 + ], + [ + 220.0, + 316.0 + ], + [ + 236.0, + 321.0 + ] + ], + "center_px": [ + 229.75, + 328.0 + ], + "quality": { + "area_px": 280.5, + "perimeter_px": 70.70447731018066, + "sharpness": { + "laplacian_var": 3771.9159204449056 + }, + "contrast": { + "p05": 2.0, + "p95": 142.25, + "dynamic_range": 140.25, + "mean_gray": 58.62135922330097, + "std_gray": 50.505621431784846 + }, + "geometry": { + "distance_to_center_norm": 0.5468789935112, + "distance_to_border_px": 220.0 + }, + "edge_ratio": 1.3333333748957614, + "edge_lengths_px": [ + 15.29705810546875, + 20.39607810974121, + 16.76305389404297, + 18.248287200927734 + ] + }, + "confidence": 0.14024999562815224 + }, + { + "observation_id": "6b051e51-7769-42c9-a4c2-8913ade834c2", + "type": "aruco", + "marker_id": 91, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 452.0, + 704.0 + ], + [ + 454.0, + 720.0 + ], + [ + 439.0, + 715.0 + ], + [ + 436.0, + 698.0 + ] + ], + "center_px": [ + 445.25, + 709.25 + ], + "quality": { + "area_px": 242.0, + "perimeter_px": 66.28658676147461, + "sharpness": { + "laplacian_var": 3098.063919686317 + }, + "contrast": { + "p05": 2.0, + "p95": 144.45, + "dynamic_range": 142.45, + "mean_gray": 61.406976744186046, + "std_gray": 53.51773839969383 + }, + "geometry": { + "distance_to_center_norm": 0.3760051727294922, + "distance_to_border_px": 240.0 + }, + "edge_ratio": 1.0917875281930478, + "edge_lengths_px": [ + 16.124515533447266, + 15.81138801574707, + 17.262676239013672, + 17.0880069732666 + ] + }, + "confidence": 0.147769899515473 + }, + { + "observation_id": "3dc0515a-48e1-4f82-b30b-3b82280f3b6a", + "type": "aruco", + "marker_id": 90, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 506.0, + 717.0 + ], + [ + 507.0, + 735.0 + ], + [ + 491.0, + 727.0 + ], + [ + 490.0, + 711.0 + ] + ], + "center_px": [ + 498.5, + 722.5 + ], + "quality": { + "area_px": 265.0, + "perimeter_px": 69.03552627563477, + "sharpness": { + "laplacian_var": 3151.455487129274 + }, + "contrast": { + "p05": 1.8000000000000007, + "p95": 150.2, + "dynamic_range": 148.39999999999998, + "mean_gray": 65.69543147208122, + "std_gray": 55.68018384065886 + }, + "geometry": { + "distance_to_center_norm": 0.35095515847206116, + "distance_to_border_px": 225.0 + }, + "edge_ratio": 1.1245405102881911, + "edge_lengths_px": [ + 18.027755737304688, + 17.8885440826416, + 16.031219482421875, + 17.0880069732666 + ] + }, + "confidence": 0.1571012027138013 + }, + { + "observation_id": "25577a5d-bba6-4f73-bc9b-cbdfce2806c8", + "type": "aruco", + "marker_id": 207, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 255.0, + 417.0 + ], + [ + 241.0, + 414.0 + ], + [ + 237.0, + 394.0 + ], + [ + 251.0, + 398.0 + ] + ], + "center_px": [ + 246.0, + 405.75 + ], + "quality": { + "area_px": 259.0, + "perimeter_px": 68.69060802459717, + "sharpness": { + "laplacian_var": 3865.9575753075414 + }, + "contrast": { + "p05": 2.0, + "p95": 147.0, + "dynamic_range": 145.0, + "mean_gray": 52.69651741293532, + "std_gray": 51.74009326966062 + }, + "geometry": { + "distance_to_center_norm": 0.5011690258979797, + "distance_to_border_px": 237.0 + }, + "edge_ratio": 1.4245238429544316, + "edge_lengths_px": [ + 14.317821502685547, + 20.39607810974121, + 14.560219764709473, + 19.416488647460938 + ] + }, + "confidence": 0.12121009242538176 + }, + { + "observation_id": "ee87a9be-0a50-48b1-95f1-d33d3ef46c1c", + "type": "aruco", + "marker_id": 93, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 291.0, + 515.0 + ], + [ + 294.0, + 532.0 + ], + [ + 280.0, + 528.0 + ], + [ + 277.0, + 510.0 + ] + ], + "center_px": [ + 285.5, + 521.25 + ], + "quality": { + "area_px": 231.5, + "perimeter_px": 64.93725204467773, + "sharpness": { + "laplacian_var": 2079.041455978584 + }, + "contrast": { + "p05": 1.0, + "p95": 116.85, + "dynamic_range": 115.85, + "mean_gray": 42.176829268292686, + "std_gray": 40.26042297640629 + }, + "geometry": { + "distance_to_center_norm": 0.44611483812332153, + "distance_to_border_px": 277.0 + }, + "edge_ratio": 1.2532975117008374, + "edge_lengths_px": [ + 17.262676239013672, + 14.560219764709473, + 18.248287200927734, + 14.866068840026855 + ] + }, + "confidence": 0.1231418173996764 + }, + { + "observation_id": "c0a73245-8641-4b0e-bc89-918623628c8f", + "type": "aruco", + "marker_id": 104, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 373.0, + 612.0 + ], + [ + 376.0, + 629.0 + ], + [ + 361.0, + 623.0 + ], + [ + 358.0, + 606.0 + ] + ], + "center_px": [ + 367.0, + 617.5 + ], + "quality": { + "area_px": 237.0, + "perimeter_px": 66.83634185791016, + "sharpness": { + "laplacian_var": 2916.34386317186 + }, + "contrast": { + "p05": 2.0, + "p95": 148.7, + "dynamic_range": 146.7, + "mean_gray": 81.1437125748503, + "std_gray": 54.06142829532494 + }, + "geometry": { + "distance_to_center_norm": 0.382089763879776, + "distance_to_border_px": 331.0 + }, + "edge_ratio": 1.068532816253631, + "edge_lengths_px": [ + 17.262676239013672, + 16.155494689941406, + 17.262676239013672, + 16.155494689941406 + ] + }, + "confidence": 0.14786630564511977 + } + ], + "rejected_candidates": [ + { + "image_points_px": [ + [ + 434.0, + 152.0 + ], + [ + 458.0, + 176.0 + ], + [ + 454.0, + 206.0 + ], + [ + 429.0, + 185.0 + ] + ], + "center_px": [ + 443.75, + 179.75 + ], + "area_px": 873.0 + }, + { + "image_points_px": [ + [ + 520.0, + 548.0 + ], + [ + 528.0, + 545.0 + ], + [ + 574.0, + 560.0 + ], + [ + 563.0, + 562.0 + ] + ], + "center_px": [ + 546.25, + 553.75 + ], + "area_px": 249.0 + }, + { + "image_points_px": [ + [ + 612.0, + 641.0 + ], + [ + 631.0, + 649.0 + ], + [ + 618.0, + 681.0 + ], + [ + 600.0, + 674.0 + ] + ], + "center_px": [ + 615.25, + 661.25 + ], + "area_px": 695.0 + }, + { + "image_points_px": [ + [ + 733.0, + 359.0 + ], + [ + 758.0, + 364.0 + ], + [ + 758.0, + 391.0 + ], + [ + 733.0, + 384.0 + ] + ], + "center_px": [ + 745.5, + 374.5 + ], + "area_px": 650.0 + }, + { + "image_points_px": [ + [ + 704.0, + 626.0 + ], + [ + 725.0, + 632.0 + ], + [ + 725.0, + 656.0 + ], + [ + 693.0, + 644.0 + ] + ], + "center_px": [ + 711.75, + 639.5 + ], + "area_px": 606.0 + }, + { + "image_points_px": [ + [ + 724.0, + 681.0 + ], + [ + 771.0, + 696.0 + ], + [ + 761.0, + 697.0 + ], + [ + 728.0, + 687.0 + ] + ], + "center_px": [ + 746.0, + 690.25 + ], + "area_px": 177.5 + }, + { + "image_points_px": [ + [ + 618.0, + 577.0 + ], + [ + 634.0, + 578.0 + ], + [ + 663.0, + 591.0 + ], + [ + 626.0, + 583.0 + ] + ], + "center_px": [ + 635.25, + 582.25 + ], + "area_px": 168.5 + }, + { + "image_points_px": [ + [ + 537.0, + 388.0 + ], + [ + 558.0, + 392.0 + ], + [ + 559.0, + 417.0 + ], + [ + 540.0, + 411.0 + ] + ], + "center_px": [ + 548.5, + 402.0 + ], + "area_px": 470.0 + }, + { + "image_points_px": [ + [ + 831.0, + 862.0 + ], + [ + 854.0, + 871.0 + ], + [ + 854.0, + 890.0 + ], + [ + 832.0, + 881.0 + ] + ], + "center_px": [ + 842.75, + 876.0 + ], + "area_px": 423.0 + }, + { + "image_points_px": [ + [ + 812.0, + 582.0 + ], + [ + 836.0, + 581.0 + ], + [ + 839.0, + 603.0 + ], + [ + 818.0, + 598.0 + ] + ], + "center_px": [ + 826.25, + 591.0 + ], + "area_px": 418.5 + }, + { + "image_points_px": [ + [ + 524.0, + 473.0 + ], + [ + 545.0, + 480.0 + ], + [ + 546.0, + 500.0 + ], + [ + 527.0, + 494.0 + ] + ], + "center_px": [ + 535.5, + 486.75 + ], + "area_px": 397.0 + }, + { + "image_points_px": [ + [ + 146.0, + 40.0 + ], + [ + 161.0, + 40.0 + ], + [ + 166.0, + 65.0 + ], + [ + 150.0, + 63.0 + ] + ], + "center_px": [ + 155.75, + 52.0 + ], + "area_px": 367.5 + }, + { + "image_points_px": [ + [ + 763.0, + 519.0 + ], + [ + 768.0, + 517.0 + ], + [ + 801.0, + 528.0 + ], + [ + 780.0, + 526.0 + ] + ], + "center_px": [ + 778.0, + 522.5 + ], + "area_px": 117.0 + }, + { + "image_points_px": [ + [ + 644.0, + 747.0 + ], + [ + 662.0, + 754.0 + ], + [ + 664.0, + 774.0 + ], + [ + 645.0, + 766.0 + ] + ], + "center_px": [ + 653.75, + 760.25 + ], + "area_px": 349.5 + }, + { + "image_points_px": [ + [ + 372.0, + 432.0 + ], + [ + 390.0, + 438.0 + ], + [ + 392.0, + 457.0 + ], + [ + 375.0, + 451.0 + ] + ], + "center_px": [ + 382.25, + 444.5 + ], + "area_px": 317.5 + }, + { + "image_points_px": [ + [ + 573.0, + 707.0 + ], + [ + 591.0, + 714.0 + ], + [ + 592.0, + 732.0 + ], + [ + 574.0, + 723.0 + ] + ], + "center_px": [ + 582.5, + 719.0 + ], + "area_px": 298.0 + }, + { + "image_points_px": [ + [ + 395.0, + 272.0 + ], + [ + 398.0, + 298.0 + ], + [ + 396.0, + 308.0 + ], + [ + 392.0, + 280.0 + ] + ], + "center_px": [ + 395.25, + 289.5 + ], + "area_px": 99.0 + }, + { + "image_points_px": [ + [ + 932.0, + 669.0 + ], + [ + 935.0, + 667.0 + ], + [ + 954.0, + 672.0 + ], + [ + 966.0, + 679.0 + ] + ], + "center_px": [ + 946.75, + 671.75 + ], + "area_px": 85.5 + }, + { + "image_points_px": [ + [ + 539.0, + 729.0 + ], + [ + 555.0, + 736.0 + ], + [ + 557.0, + 753.0 + ], + [ + 539.0, + 746.0 + ] + ], + "center_px": [ + 547.5, + 741.0 + ], + "area_px": 282.0 + }, + { + "image_points_px": [ + [ + 503.0, + 377.0 + ], + [ + 535.0, + 386.0 + ], + [ + 527.0, + 388.0 + ], + [ + 505.0, + 382.0 + ] + ], + "center_px": [ + 517.5, + 383.25 + ], + "area_px": 117.0 + }, + { + "image_points_px": [ + [ + 364.0, + 560.0 + ], + [ + 379.0, + 566.0 + ], + [ + 383.0, + 583.0 + ], + [ + 367.0, + 577.0 + ] + ], + "center_px": [ + 373.25, + 571.5 + ], + "area_px": 242.5 + }, + { + "image_points_px": [ + [ + 431.0, + 533.0 + ], + [ + 438.0, + 536.0 + ], + [ + 440.0, + 562.0 + ], + [ + 436.0, + 561.0 + ] + ], + "center_px": [ + 436.25, + 548.0 + ], + "area_px": 141.5 + }, + { + "image_points_px": [ + [ + 318.0, + 545.0 + ], + [ + 332.0, + 550.0 + ], + [ + 335.0, + 568.0 + ], + [ + 321.0, + 562.0 + ] + ], + "center_px": [ + 326.5, + 556.25 + ], + "area_px": 228.5 + }, + { + "image_points_px": [ + [ + 418.0, + 529.0 + ], + [ + 423.0, + 533.0 + ], + [ + 426.0, + 559.0 + ], + [ + 421.0, + 556.0 + ] + ], + "center_px": [ + 422.0, + 544.25 + ], + "area_px": 122.0 + }, + { + "image_points_px": [ + [ + 407.0, + 678.0 + ], + [ + 422.0, + 685.0 + ], + [ + 424.0, + 701.0 + ], + [ + 409.0, + 694.0 + ] + ], + "center_px": [ + 415.5, + 689.5 + ], + "area_px": 226.0 + }, + { + "image_points_px": [ + [ + 237.0, + 507.0 + ], + [ + 249.0, + 512.0 + ], + [ + 254.0, + 529.0 + ], + [ + 239.0, + 523.0 + ] + ], + "center_px": [ + 244.75, + 517.75 + ], + "area_px": 203.5 + }, + { + "image_points_px": [ + [ + 491.0, + 555.0 + ], + [ + 495.0, + 576.0 + ], + [ + 492.0, + 581.0 + ], + [ + 489.0, + 563.0 + ] + ], + "center_px": [ + 491.75, + 568.75 + ], + "area_px": 71.5 + }, + { + "image_points_px": [ + [ + 410.0, + 526.0 + ], + [ + 413.0, + 531.0 + ], + [ + 415.0, + 551.0 + ], + [ + 412.0, + 546.0 + ] + ], + "center_px": [ + 412.5, + 538.5 + ], + "area_px": 50.0 + }, + { + "image_points_px": [ + [ + 519.0, + 590.0 + ], + [ + 520.0, + 592.0 + ], + [ + 507.0, + 608.0 + ], + [ + 506.0, + 605.0 + ] + ], + "center_px": [ + 513.0, + 598.75 + ], + "area_px": 48.0 + }, + { + "image_points_px": [ + [ + 484.0, + 396.0 + ], + [ + 485.0, + 414.0 + ], + [ + 482.0, + 416.0 + ], + [ + 482.0, + 398.0 + ] + ], + "center_px": [ + 483.25, + 406.0 + ], + "area_px": 46.0 + }, + { + "image_points_px": [ + [ + 788.0, + 736.0 + ], + [ + 792.0, + 736.0 + ], + [ + 792.0, + 751.0 + ], + [ + 788.0, + 751.0 + ] + ], + "center_px": [ + 790.0, + 743.5 + ], + "area_px": 60.0 + }, + { + "image_points_px": [ + [ + 710.0, + 158.0 + ], + [ + 718.0, + 159.0 + ], + [ + 718.0, + 170.0 + ], + [ + 711.0, + 169.0 + ] + ], + "center_px": [ + 714.25, + 164.0 + ], + "area_px": 82.0 + } + ] +} \ No newline at end of file diff --git a/test/homing/20260616_120456/cam1_camera_pose.json b/test/homing/20260616_120456/cam1_camera_pose.json new file mode 100644 index 0000000..65d84d0 --- /dev/null +++ b/test/homing/20260616_120456/cam1_camera_pose.json @@ -0,0 +1,691 @@ +{ + "schema_version": "1.0", + "created_utc": "2026-06-16T12:05:05Z", + "source": { + "detection_json": "/app/data/homing/20260616_120456/cam1_aruco_detection.json", + "robot_json": "/app/scripts/robot_1781069752019.json" + }, + "camera": { + "camera_id": "cam1", + "camera_matrix": [ + [ + 1367.5723876953125, + 0.0, + 672.1165771484375 + ], + [ + 0.0, + 1372.3011474609375, + 445.8396911621094 + ], + [ + 0.0, + 0.0, + 1.0 + ] + ], + "distortion_coefficients": [ + 0.01016925647854805, + 0.7656787633895874, + -0.0031530377455055714, + -0.00288817984983325, + -2.490830183029175 + ] + }, + "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": 35, + "used_marker_ids": [ + 69, + 64, + 58, + 66, + 103, + 95, + 97, + 51, + 54, + 55, + 75, + 47, + 77, + 74, + 85, + 96, + 52, + 81, + 62, + 57, + 105, + 101, + 71, + 78, + 82, + 65, + 80, + 84, + 99, + 87, + 70, + 91, + 90, + 93, + 104 + ], + "history": { + "iters": [ + 0, + 1, + 2, + 3 + ], + "rms": [ + 0.01669716219734741, + 0.0015530130263999152, + 0.0008983437053381035, + 0.0008983157544106726 + ], + "lambda": [ + 0.001, + 0.0005, + 0.00025, + 0.000125 + ] + }, + "residual_rms_px": 1.7685482048099375, + "residual_median_px": 1.5050116514173932, + "residual_max_px": 3.68734500446118, + "sigma2_normalized": 8.826247430843121e-07 + }, + "camera_pose": { + "world_to_camera": { + "rotation_matrix": [ + [ + -0.8296902179718018, + 0.04856207221746445, + -0.556107759475708 + ], + [ + -0.20650699734687805, + 0.8988339900970459, + 0.3865906596183777 + ], + [ + 0.5186222195625305, + 0.4355906546115875, + -0.7357253432273865 + ] + ], + "translation_m": [ + 0.31146639585494995, + 0.15941768884658813, + 1.010162115097046 + ], + "rvec_rad": [ + 0.11326674166552995, + -2.4843106472248735, + -0.5896093173683601 + ] + }, + "camera_in_world": { + "position_m": [ + -0.23255103826522827, + -0.5984326601028442, + 0.8547813296318054 + ], + "position_mm": [ + -232.55104064941406, + -598.4326782226562, + 854.7813110351562 + ], + "orientation_deg": { + "roll": 149.3720703125, + "pitch": -31.2398738861084, + "yaw": -166.0232696533203 + } + }, + "uncertainty": { + "pose_covariance_6x6": [ + [ + 5.108318008737832e-07, + -2.030876446668622e-07, + 1.847398283306561e-07, + -9.7616015744967e-09, + 9.054207137354404e-08, + 1.6652401795418441e-07 + ], + [ + -2.0308764466685943e-07, + 1.5382020212494465e-06, + -6.297556683785447e-07, + -3.010072505572984e-07, + 1.0689229244008563e-07, + -8.671432148962064e-07 + ], + [ + 1.8473982833065666e-07, + -6.297556683785541e-07, + 2.588424752063583e-06, + -9.193339804491363e-08, + -1.7555965832587911e-07, + 6.037665269982221e-08 + ], + [ + -9.76160157449755e-09, + -3.0100725055729717e-07, + -9.193339804491597e-08, + 1.1789721480957471e-07, + -1.8772945136575335e-08, + 2.1678392569580849e-07 + ], + [ + 9.054207137354437e-08, + 1.0689229244008568e-07, + -1.755596583258787e-07, + -1.877294513657538e-08, + 7.498759148393252e-08, + -4.200084672079684e-08 + ], + [ + 1.6652401795418214e-07, + -8.671432148962051e-07, + 6.037665269981562e-08, + 2.1678392569580904e-07, + -4.200084672079688e-08, + 9.640297784807404e-07 + ] + ], + "parameter_std": { + "rvec_std_deg": [ + 0.0409507250203997, + 0.07106067381441428, + 0.092180785484839 + ], + "tvec_std_m": [ + 0.0003433616385235466, + 0.0002738386230682818, + 0.0009818501812805965 + ] + }, + "camera_center_std_m": [ + 0.0010578573566047088, + 0.0012453368073035017, + 0.001463792458469902 + ], + "camera_center_std_mm": [ + 1.0578573566047087, + 1.2453368073035016, + 1.463792458469902 + ], + "orientation_std_deg": { + "roll": 0.10570612813240464, + "pitch": 0.06594269721083164, + "yaw": 0.053541286201001195 + } + } + }, + "observations": { + "markers": [ + { + "marker_id": 69, + "observed_center_px": [ + 1132.0, + 285.5 + ], + "projected_center_px": [ + 1134.9923095703125, + 285.38287353515625 + ], + "reprojection_error_px": 2.9946010040321855, + "confidence": 0.8004430063137599 + }, + { + "marker_id": 64, + "observed_center_px": [ + 1160.25, + 421.5 + ], + "projected_center_px": [ + 1163.9249267578125, + 421.8023681640625 + ], + "reprojection_error_px": 3.68734500446118, + "confidence": 0.6780206236463221 + }, + { + "marker_id": 58, + "observed_center_px": [ + 1061.75, + 363.25 + ], + "projected_center_px": [ + 1063.72900390625, + 363.04876708984375 + ], + "reprojection_error_px": 1.9892086730865397, + "confidence": 0.6409044457372643 + }, + { + "marker_id": 66, + "observed_center_px": [ + 861.0, + 135.75 + ], + "projected_center_px": [ + 860.8423461914062, + 135.11590576171875 + ], + "reprojection_error_px": 0.6533989794800673, + "confidence": 0.5643748623006126 + }, + { + "marker_id": 103, + "observed_center_px": [ + 984.5, + 388.75 + ], + "projected_center_px": [ + 985.591064453125, + 388.5110778808594 + ], + "reprojection_error_px": 1.1169178214567097, + "confidence": 0.5680230430248981 + }, + { + "marker_id": 95, + "observed_center_px": [ + 888.0, + 260.75 + ], + "projected_center_px": [ + 888.1265258789062, + 260.22412109375 + ], + "reprojection_error_px": 0.5408857754384888, + "confidence": 0.5040987555384636 + }, + { + "marker_id": 97, + "observed_center_px": [ + 748.25, + 129.5 + ], + "projected_center_px": [ + 747.3042602539062, + 128.7545623779297 + ], + "reprojection_error_px": 1.204201360130154, + "confidence": 0.46133781313759503 + }, + { + "marker_id": 51, + "observed_center_px": [ + 906.75, + 392.5 + ], + "projected_center_px": [ + 906.9967041015625, + 392.4247131347656 + ], + "reprojection_error_px": 0.25793608860448214, + "confidence": 0.5161510750240749 + }, + { + "marker_id": 54, + "observed_center_px": [ + 707.0, + 162.75 + ], + "projected_center_px": [ + 706.260498046875, + 162.3862762451172 + ], + "reprojection_error_px": 0.824110495347403, + "confidence": 0.41077842645846463 + }, + { + "marker_id": 55, + "observed_center_px": [ + 773.75, + 258.25 + ], + "projected_center_px": [ + 773.1185913085938, + 257.3814392089844 + ], + "reprojection_error_px": 1.0738131975688514, + "confidence": 0.42449809621175133 + }, + { + "marker_id": 75, + "observed_center_px": [ + 1118.0, + 858.25 + ], + "projected_center_px": [ + 1118.964599609375, + 858.5298461914062 + ], + "reprojection_error_px": 1.0043735845047828, + "confidence": 0.32078570148601215 + }, + { + "marker_id": 47, + "observed_center_px": [ + 707.25, + 218.0 + ], + "projected_center_px": [ + 706.2919921875, + 217.7268829345703 + ], + "reprojection_error_px": 0.9961786487573198, + "confidence": 0.3835876006690484 + }, + { + "marker_id": 77, + "observed_center_px": [ + 1064.5, + 835.0 + ], + "projected_center_px": [ + 1065.1744384765625, + 835.8121337890625 + ], + "reprojection_error_px": 1.0556649800031064, + "confidence": 0.295743044190549 + }, + { + "marker_id": 74, + "observed_center_px": [ + 979.75, + 758.0 + ], + "projected_center_px": [ + 979.26416015625, + 758.2605590820312 + ], + "reprojection_error_px": 0.5512997270124411, + "confidence": 0.3359635861403907 + }, + { + "marker_id": 85, + "observed_center_px": [ + 546.0, + 163.25 + ], + "projected_center_px": [ + 544.5795288085938, + 163.747314453125 + ], + "reprojection_error_px": 1.5050116514173932, + "confidence": 0.3151234057766515 + }, + { + "marker_id": 96, + "observed_center_px": [ + 686.0, + 331.5 + ], + "projected_center_px": [ + 685.0399780273438, + 331.31890869140625 + ], + "reprojection_error_px": 0.9769525321278381, + "confidence": 0.3554108905483531 + }, + { + "marker_id": 52, + "observed_center_px": [ + 975.0, + 818.25 + ], + "projected_center_px": [ + 974.9528198242188, + 818.7924194335938 + ], + "reprojection_error_px": 0.5444674562606238, + "confidence": 0.28720673485083303 + }, + { + "marker_id": 81, + "observed_center_px": [ + 935.75, + 766.5 + ], + "projected_center_px": [ + 935.2142333984375, + 766.4912109375 + ], + "reprojection_error_px": 0.5358386874512324, + "confidence": 0.30145054927990633 + }, + { + "marker_id": 62, + "observed_center_px": [ + 652.5, + 337.75 + ], + "projected_center_px": [ + 651.360107421875, + 337.1482238769531 + ], + "reprojection_error_px": 1.2889878168290758, + "confidence": 0.3191799957107001 + }, + { + "marker_id": 57, + "observed_center_px": [ + 450.25, + 90.5 + ], + "projected_center_px": [ + 449.19036865234375, + 91.7260513305664 + ], + "reprojection_error_px": 1.6205000642145793, + "confidence": 0.26860824414385837 + }, + { + "marker_id": 105, + "observed_center_px": [ + 532.5, + 214.5 + ], + "projected_center_px": [ + 531.2189331054688, + 214.99610900878906 + ], + "reprojection_error_px": 1.3737745582393084, + "confidence": 0.28102521367518357 + }, + { + "marker_id": 101, + "observed_center_px": [ + 947.5, + 889.75 + ], + "projected_center_px": [ + 946.0105590820312, + 889.7289428710938 + ], + "reprojection_error_px": 1.4895897592281464, + "confidence": 0.25378363660843234 + }, + { + "marker_id": 71, + "observed_center_px": [ + 342.5, + 164.75 + ], + "projected_center_px": [ + 342.4768981933594, + 166.27276611328125 + ], + "reprojection_error_px": 1.522941341361428, + "confidence": 0.20828507797372528 + }, + { + "marker_id": 78, + "observed_center_px": [ + 275.25, + 91.75 + ], + "projected_center_px": [ + 276.1173095703125, + 93.466552734375 + ], + "reprojection_error_px": 1.923221043106055, + "confidence": 0.1903062602705479 + }, + { + "marker_id": 82, + "observed_center_px": [ + 845.0, + 847.25 + ], + "projected_center_px": [ + 843.3731079101562, + 846.445556640625 + ], + "reprojection_error_px": 1.8149123919458756, + "confidence": 0.2248605201960664 + }, + { + "marker_id": 65, + "observed_center_px": [ + 299.0, + 144.0 + ], + "projected_center_px": [ + 299.8258361816406, + 145.95309448242188 + ], + "reprojection_error_px": 2.120514903549027, + "confidence": 0.18160242191392414 + }, + { + "marker_id": 80, + "observed_center_px": [ + 248.0, + 96.75 + ], + "projected_center_px": [ + 248.56906127929688, + 98.8924331665039 + ], + "reprojection_error_px": 2.2167206888850366, + "confidence": 0.16263927873225353 + }, + { + "marker_id": 84, + "observed_center_px": [ + 674.75, + 748.5 + ], + "projected_center_px": [ + 673.0452880859375, + 746.7835083007812 + ], + "reprojection_error_px": 2.4191706147838157, + "confidence": 0.21110242529580486 + }, + { + "marker_id": 99, + "observed_center_px": [ + 184.75, + 102.75 + ], + "projected_center_px": [ + 186.11749267578125, + 105.2986068725586 + ], + "reprojection_error_px": 2.892305863695653, + "confidence": 0.14526599262838052 + }, + { + "marker_id": 87, + "observed_center_px": [ + 210.75, + 180.75 + ], + "projected_center_px": [ + 212.3033447265625, + 182.51739501953125 + ], + "reprojection_error_px": 2.352990649068414, + "confidence": 0.15014511583656154 + }, + { + "marker_id": 70, + "observed_center_px": [ + 526.25, + 722.25 + ], + "projected_center_px": [ + 524.888671875, + 720.3948974609375 + ], + "reprojection_error_px": 2.301004062219828, + "confidence": 0.15652476433958798 + }, + { + "marker_id": 91, + "observed_center_px": [ + 445.25, + 709.25 + ], + "projected_center_px": [ + 443.6956787109375, + 707.20751953125 + ], + "reprojection_error_px": 2.566640047778054, + "confidence": 0.147769899515473 + }, + { + "marker_id": 90, + "observed_center_px": [ + 498.5, + 722.5 + ], + "projected_center_px": [ + 497.030517578125, + 720.7365112304688 + ], + "reprojection_error_px": 2.2954893222279336, + "confidence": 0.1571012027138013 + }, + { + "marker_id": 93, + "observed_center_px": [ + 285.5, + 521.25 + ], + "projected_center_px": [ + 286.38006591796875, + 519.7478637695312 + ], + "reprojection_error_px": 1.7409564253182916, + "confidence": 0.1231418173996764 + }, + { + "marker_id": 104, + "observed_center_px": [ + 367.0, + 617.5 + ], + "projected_center_px": [ + 366.587646484375, + 615.7141723632812 + ], + "reprojection_error_px": 1.83281634920599, + "confidence": 0.14786630564511977 + } + ] + }, + "qa": { + "sanity_notes": [] + } +} \ No newline at end of file diff --git a/test/homing/20260616_120456/cam1_debug.jpg b/test/homing/20260616_120456/cam1_debug.jpg new file mode 100644 index 0000000..9dedafd Binary files /dev/null and b/test/homing/20260616_120456/cam1_debug.jpg differ diff --git a/test/homing/20260616_120456/cam2.jpg b/test/homing/20260616_120456/cam2.jpg new file mode 100644 index 0000000..160e01a Binary files /dev/null and b/test/homing/20260616_120456/cam2.jpg differ diff --git a/test/homing/20260616_120456/cam2_aruco_detection.json b/test/homing/20260616_120456/cam2_aruco_detection.json new file mode 100644 index 0000000..885c3fa --- /dev/null +++ b/test/homing/20260616_120456/cam2_aruco_detection.json @@ -0,0 +1,4221 @@ +{ + "schema_version": "1.0", + "created_utc": "2026-06-16T12:05:07Z", + "vision_config": { + "MarkerType": "DICT_4X4_250", + "MarkerSize": 0.025 + }, + "camera": { + "camera_id": "cam2", + "intrinsics_file": "/app/data/calibration/20260610_092149/cam2_calibration.npz", + "camera_matrix": [ + [ + 1388.99072265625, + 0.0, + 933.082763671875 + ], + [ + 0.0, + 1394.8729248046875, + 562.4996948242188 + ], + [ + 0.0, + 0.0, + 1.0 + ] + ], + "distortion_coefficients": [ + 0.019531700760126114, + -0.11213663965463638, + 0.0026758278254419565, + 0.0007694826927036047, + 0.05339815095067024 + ] + }, + "image": { + "image_file": "/app/data/homing/20260616_120456/cam2.jpg", + "image_sha256": "2421b14b219f06b6ea122169cf30cdbf353c8b2ba7352c209c8f2e94a963aec2", + "width_px": 1920, + "height_px": 1080 + }, + "aruco": { + "dictionary": "DICT_4X4_250", + "num_detected_markers": 55, + "num_rejected_candidates": 48 + }, + "detections": [ + { + "observation_id": "3a363eff-3acd-47c3-b120-03c8ed925e4f", + "type": "aruco", + "marker_id": 200, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 1030.0, + 878.0 + ], + [ + 1022.0, + 844.0 + ], + [ + 1060.0, + 839.0 + ], + [ + 1068.0, + 873.0 + ] + ], + "center_px": [ + 1045.0, + 858.5 + ], + "quality": { + "area_px": 1332.0, + "perimeter_px": 146.51206970214844, + "sharpness": { + "laplacian_var": 2956.408982108808 + }, + "contrast": { + "p05": 17.0, + "p95": 192.94999999999993, + "dynamic_range": 175.94999999999993, + "mean_gray": 73.59554140127389, + "std_gray": 65.43555606171644 + }, + "geometry": { + "distance_to_center_norm": 0.2992837429046631, + "distance_to_border_px": 202.0 + }, + "edge_ratio": 1.0973142414793056, + "edge_lengths_px": [ + 34.928497314453125, + 38.327537536621094, + 34.928497314453125, + 38.327537536621094 + ] + }, + "confidence": 0.8092485875357582 + }, + { + "observation_id": "2b245e03-7423-450e-b95a-19cc5fe8bda4", + "type": "aruco", + "marker_id": 146, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 1224.0, + 526.0 + ], + [ + 1220.0, + 487.0 + ], + [ + 1258.0, + 484.0 + ], + [ + 1262.0, + 523.0 + ] + ], + "center_px": [ + 1241.0, + 505.0 + ], + "quality": { + "area_px": 1494.0, + "perimeter_px": 154.6456527709961, + "sharpness": { + "laplacian_var": 2440.223898699202 + }, + "contrast": { + "p05": 16.0, + "p95": 183.0, + "dynamic_range": 167.0, + "mean_gray": 77.30861723446894, + "std_gray": 66.44402578876311 + }, + "geometry": { + "distance_to_center_norm": 0.2570887506008148, + "distance_to_border_px": 484.0 + }, + "edge_ratio": 1.0284995687251206, + "edge_lengths_px": [ + 39.20458984375, + 38.11823654174805, + 39.20458984375, + 38.11823654174805 + ] + }, + "confidence": 0.9684009894477588 + }, + { + "observation_id": "50d89310-6090-4a84-97dc-ee0216a2ecef", + "type": "aruco", + "marker_id": 143, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 1334.0, + 518.0 + ], + [ + 1330.0, + 479.0 + ], + [ + 1368.0, + 476.0 + ], + [ + 1372.0, + 515.0 + ] + ], + "center_px": [ + 1351.0, + 497.0 + ], + "quality": { + "area_px": 1494.0, + "perimeter_px": 154.6456527709961, + "sharpness": { + "laplacian_var": 2205.1396138971327 + }, + "contrast": { + "p05": 19.0, + "p95": 185.0, + "dynamic_range": 166.0, + "mean_gray": 86.46693386773548, + "std_gray": 66.49361782336794 + }, + "geometry": { + "distance_to_center_norm": 0.3571256399154663, + "distance_to_border_px": 476.0 + }, + "edge_ratio": 1.0284995687251206, + "edge_lengths_px": [ + 39.20458984375, + 38.11823654174805, + 39.20458984375, + 38.11823654174805 + ] + }, + "confidence": 0.9684009894477588 + }, + { + "observation_id": "9ae3a676-62ab-4d71-9f2d-39c06496ba5f", + "type": "aruco", + "marker_id": 204, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 781.0, + 899.0 + ], + [ + 779.0, + 864.0 + ], + [ + 819.0, + 859.0 + ], + [ + 822.0, + 893.0 + ] + ], + "center_px": [ + 800.25, + 878.75 + ], + "quality": { + "area_px": 1411.0, + "perimeter_px": 150.93717575073242, + "sharpness": { + "laplacian_var": 2079.165323865878 + }, + "contrast": { + "p05": 10.0, + "p95": 167.0, + "dynamic_range": 157.0, + "mean_gray": 57.774358974358975, + "std_gray": 59.79572370418336 + }, + "geometry": { + "distance_to_center_norm": 0.34003114700317383, + "distance_to_border_px": 181.0 + }, + "edge_ratio": 1.2140098199233664, + "edge_lengths_px": [ + 35.05709457397461, + 40.31128692626953, + 34.13209533691406, + 41.43669891357422 + ] + }, + "confidence": 0.7748427164502225 + }, + { + "observation_id": "852c29d2-2470-4d1a-a2a2-5516e36093e5", + "type": "aruco", + "marker_id": 197, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 1090.0, + 664.0 + ], + [ + 1125.0, + 677.0 + ], + [ + 1092.0, + 703.0 + ], + [ + 1062.0, + 688.0 + ] + ], + "center_px": [ + 1092.25, + 683.0 + ], + "quality": { + "area_px": 1239.5, + "perimeter_px": 149.76740646362305, + "sharpness": { + "laplacian_var": 1888.200504770699 + }, + "contrast": { + "p05": 18.0, + "p95": 133.0, + "dynamic_range": 115.0, + "mean_gray": 72.59883040935672, + "std_gray": 46.53899074379215 + }, + "geometry": { + "distance_to_center_norm": 0.17683860659599304, + "distance_to_border_px": 377.0 + }, + "edge_ratio": 1.2525529204919104, + "edge_lengths_px": [ + 37.336307525634766, + 42.01190185546875, + 33.541019439697266, + 36.878177642822266 + ] + }, + "confidence": 0.6597192979349812 + }, + { + "observation_id": "0eda7d93-47f5-4b7d-878b-89534d086160", + "type": "aruco", + "marker_id": 73, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 509.0, + 1060.0 + ], + [ + 471.0, + 1063.0 + ], + [ + 477.0, + 1028.0 + ], + [ + 513.0, + 1025.0 + ] + ], + "center_px": [ + 492.5, + 1044.0 + ], + "quality": { + "area_px": 1280.0, + "perimeter_px": 144.9814109802246, + "sharpness": { + "laplacian_var": 2097.783422120065 + }, + "contrast": { + "p05": 9.0, + "p95": 155.04999999999995, + "dynamic_range": 146.04999999999995, + "mean_gray": 79.45116279069768, + "std_gray": 60.06164419410345 + }, + "geometry": { + "distance_to_center_norm": 0.6241196990013123, + "distance_to_border_px": 17.0 + }, + "edge_ratio": 1.0820489836015301, + "edge_lengths_px": [ + 38.11823654174805, + 35.510562896728516, + 36.12478256225586, + 35.22782897949219 + ] + }, + "confidence": 0.2681332709796957 + }, + { + "observation_id": "f034bc59-e917-42b5-882e-fc659ddb521d", + "type": "aruco", + "marker_id": 51, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 1288.0, + 1051.0 + ], + [ + 1252.0, + 1055.0 + ], + [ + 1243.0, + 1020.0 + ], + [ + 1278.0, + 1016.0 + ] + ], + "center_px": [ + 1265.25, + 1035.5 + ], + "quality": { + "area_px": 1280.5, + "perimeter_px": 143.98854446411133, + "sharpness": { + "laplacian_var": 2246.688403825787 + }, + "contrast": { + "p05": 28.0, + "p95": 195.0, + "dynamic_range": 167.0, + "mean_gray": 88.42182227221598, + "std_gray": 64.38051966484015 + }, + "geometry": { + "distance_to_center_norm": 0.5283722281455994, + "distance_to_border_px": 25.0 + }, + "edge_ratio": 1.033289643352012, + "edge_lengths_px": [ + 36.22154235839844, + 36.13862228393555, + 35.22782897949219, + 36.400550842285156 + ] + }, + "confidence": 0.4130819814942474 + }, + { + "observation_id": "790c6f29-20d8-4e29-b54f-18c3cce1d651", + "type": "aruco", + "marker_id": 82, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 564.0, + 1057.0 + ], + [ + 526.0, + 1061.0 + ], + [ + 531.0, + 1026.0 + ], + [ + 567.0, + 1023.0 + ] + ], + "center_px": [ + 547.0, + 1041.75 + ], + "quality": { + "area_px": 1262.5, + "perimeter_px": 143.82216262817383, + "sharpness": { + "laplacian_var": 1432.911510533747 + }, + "contrast": { + "p05": 9.0, + "p95": 149.0, + "dynamic_range": 140.0, + "mean_gray": 68.57292882147024, + "std_gray": 58.290742052590204 + }, + "geometry": { + "distance_to_center_norm": 0.5900049805641174, + "distance_to_border_px": 19.0 + }, + "edge_ratio": 1.1194726049351753, + "edge_lengths_px": [ + 38.20994567871094, + 35.35533905029297, + 36.12478256225586, + 34.13209533691406 + ] + }, + "confidence": 0.28570000902510134 + }, + { + "observation_id": "a9974e7f-ad04-47d1-9491-d7cfe93f625b", + "type": "aruco", + "marker_id": 95, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 1430.0, + 1007.0 + ], + [ + 1394.0, + 1012.0 + ], + [ + 1383.0, + 978.0 + ], + [ + 1416.0, + 975.0 + ] + ], + "center_px": [ + 1405.75, + 993.0 + ], + "quality": { + "area_px": 1188.5, + "perimeter_px": 140.14527893066406, + "sharpness": { + "laplacian_var": 2173.682986317668 + }, + "contrast": { + "p05": 34.0, + "p95": 198.0, + "dynamic_range": 164.0, + "mean_gray": 100.16707317073171, + "std_gray": 65.63121386121915 + }, + "geometry": { + "distance_to_center_norm": 0.5769947171211243, + "distance_to_border_px": 68.0 + }, + "edge_ratio": 1.09685756798683, + "edge_lengths_px": [ + 36.34556198120117, + 35.735137939453125, + 33.13608169555664, + 34.928497314453125 + ] + }, + "confidence": 0.7223666558526649 + }, + { + "observation_id": "5564f13f-03c7-4ca6-b1c6-8ac226a66c3b", + "type": "aruco", + "marker_id": 229, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 1025.0, + 629.0 + ], + [ + 1017.0, + 599.0 + ], + [ + 1046.0, + 573.0 + ], + [ + 1053.0, + 604.0 + ] + ], + "center_px": [ + 1035.25, + 601.25 + ], + "quality": { + "area_px": 1060.5, + "perimeter_px": 139.31417846679688, + "sharpness": { + "laplacian_var": 286.56622413635864 + }, + "contrast": { + "p05": 8.0, + "p95": 75.0, + "dynamic_range": 67.0, + "mean_gray": 26.82537517053206, + "std_gray": 24.136877979783392 + }, + "geometry": { + "distance_to_center_norm": 0.08808942139148712, + "distance_to_border_px": 451.0 + }, + "edge_ratio": 1.2544526671956744, + "edge_lengths_px": [ + 31.048349380493164, + 38.94868469238281, + 31.78049659729004, + 37.53664779663086 + ] + }, + "confidence": 0.472008642082659 + }, + { + "observation_id": "f26e066e-deac-46a6-be3a-6327ada94e65", + "type": "aruco", + "marker_id": 66, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 1542.0, + 961.0 + ], + [ + 1509.0, + 965.0 + ], + [ + 1495.0, + 933.0 + ], + [ + 1528.0, + 929.0 + ] + ], + "center_px": [ + 1518.5, + 947.0 + ], + "quality": { + "area_px": 1112.0, + "perimeter_px": 136.34007263183594, + "sharpness": { + "laplacian_var": 2040.027745553597 + }, + "contrast": { + "p05": 40.0, + "p95": 197.0, + "dynamic_range": 157.0, + "mean_gray": 88.69620253164557, + "std_gray": 59.12230499231699 + }, + "geometry": { + "distance_to_center_norm": 0.6274120807647705, + "distance_to_border_px": 115.0 + }, + "edge_ratio": 1.0507485021350529, + "edge_lengths_px": [ + 33.241539001464844, + 34.928497314453125, + 33.241539001464844, + 34.928497314453125 + ] + }, + "confidence": 0.7055288033501755 + }, + { + "observation_id": "40a037c7-58ee-4424-9eda-77d0f935ffaf", + "type": "aruco", + "marker_id": 148, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 1381.0, + 550.0 + ], + [ + 1391.0, + 521.0 + ], + [ + 1428.0, + 519.0 + ], + [ + 1419.0, + 548.0 + ] + ], + "center_px": [ + 1404.75, + 534.5 + ], + "quality": { + "area_px": 1068.5, + "perimeter_px": 136.14678955078125, + "sharpness": { + "laplacian_var": 1586.0196316737681 + }, + "contrast": { + "p05": 20.0, + "p95": 147.0, + "dynamic_range": 127.0, + "mean_gray": 59.56818181818182, + "std_gray": 46.51461047459503 + }, + "geometry": { + "distance_to_center_norm": 0.40381544828414917, + "distance_to_border_px": 492.0 + }, + "edge_ratio": 1.2531955653988343, + "edge_lengths_px": [ + 30.675724029541016, + 37.05401611328125, + 30.364452362060547, + 38.05259704589844 + ] + }, + "confidence": 0.5684135445425317 + }, + { + "observation_id": "d496bc5f-85ea-4b60-a379-fc5898740bca", + "type": "aruco", + "marker_id": 144, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 1217.0, + 562.0 + ], + [ + 1224.0, + 533.0 + ], + [ + 1262.0, + 531.0 + ], + [ + 1255.0, + 560.0 + ] + ], + "center_px": [ + 1239.5, + 546.5 + ], + "quality": { + "area_px": 1088.0, + "perimeter_px": 135.77093124389648, + "sharpness": { + "laplacian_var": 1833.6495178501918 + }, + "contrast": { + "p05": 20.0, + "p95": 152.0, + "dynamic_range": 132.0, + "mean_gray": 71.63414634146342, + "std_gray": 52.55049474537803 + }, + "geometry": { + "distance_to_center_norm": 0.2538241744041443, + "distance_to_border_px": 518.0 + }, + "edge_ratio": 1.2755259169561566, + "edge_lengths_px": [ + 29.832868576049805, + 38.05259704589844, + 29.832868576049805, + 38.05259704589844 + ] + }, + "confidence": 0.5686543281411546 + }, + { + "observation_id": "a3758ae9-8d7a-498e-a3ba-a3b68cf374e5", + "type": "aruco", + "marker_id": 132, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 1049.0, + 534.0 + ], + [ + 1043.0, + 508.0 + ], + [ + 1083.0, + 506.0 + ], + [ + 1090.0, + 532.0 + ] + ], + "center_px": [ + 1066.25, + 520.0 + ], + "quality": { + "area_px": 1066.0, + "perimeter_px": 134.70787239074707, + "sharpness": { + "laplacian_var": 2726.5236833097674 + }, + "contrast": { + "p05": 15.300000000000004, + "p95": 205.0, + "dynamic_range": 189.7, + "mean_gray": 76.75234270414994, + "std_gray": 73.02394743367095 + }, + "geometry": { + "distance_to_center_norm": 0.09815753251314163, + "distance_to_border_px": 506.0 + }, + "edge_ratio": 1.5383669857121811, + "edge_lengths_px": [ + 26.68332862854004, + 40.04996871948242, + 26.925823211669922, + 41.04875183105469 + ] + }, + "confidence": 0.4619617251716217 + }, + { + "observation_id": "db655cd9-caaa-4a8f-8fa5-1c61d1f36a62", + "type": "aruco", + "marker_id": 243, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 1110.0, + 595.0 + ], + [ + 1101.0, + 566.0 + ], + [ + 1130.0, + 582.0 + ], + [ + 1140.0, + 612.0 + ] + ], + "center_px": [ + 1120.25, + 588.75 + ], + "quality": { + "area_px": 713.5, + "perimeter_px": 129.5900993347168, + "sharpness": { + "laplacian_var": 5761.411422902494 + }, + "contrast": { + "p05": 39.0, + "p95": 246.0, + "dynamic_range": 207.0, + "mean_gray": 122.11309523809524, + "std_gray": 74.95817026070073 + }, + "geometry": { + "distance_to_center_norm": 0.15207278728485107, + "distance_to_border_px": 468.0 + }, + "edge_ratio": 1.135600266286124, + "edge_lengths_px": [ + 30.364452362060547, + 33.12099075317383, + 31.62277603149414, + 34.48188018798828 + ] + }, + "confidence": 0.4188680478407166 + }, + { + "observation_id": "805ff194-a526-4db0-81cb-f8b2c3e47695", + "type": "aruco", + "marker_id": 129, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 1039.0, + 493.0 + ], + [ + 1034.0, + 468.0 + ], + [ + 1072.0, + 466.0 + ], + [ + 1078.0, + 492.0 + ] + ], + "center_px": [ + 1055.75, + 479.75 + ], + "quality": { + "area_px": 990.0, + "perimeter_px": 129.24384117126465, + "sharpness": { + "laplacian_var": 3335.475599329708 + }, + "contrast": { + "p05": 13.149999999999999, + "p95": 202.0, + "dynamic_range": 188.85, + "mean_gray": 89.03801169590643, + "std_gray": 76.52592928776879 + }, + "geometry": { + "distance_to_center_norm": 0.10270863771438599, + "distance_to_border_px": 466.0 + }, + "edge_ratio": 1.5302085604200386, + "edge_lengths_px": [ + 25.495098114013672, + 38.05259704589844, + 26.68332862854004, + 39.0128173828125 + ] + }, + "confidence": 0.43131375491640933 + }, + { + "observation_id": "1fbe8f32-b750-4d9c-aad8-55a76c321e17", + "type": "aruco", + "marker_id": 198, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 924.0, + 716.0 + ], + [ + 919.0, + 687.0 + ], + [ + 944.0, + 664.0 + ], + [ + 949.0, + 696.0 + ] + ], + "center_px": [ + 934.0, + 690.75 + ], + "quality": { + "area_px": 870.0, + "perimeter_px": 127.80234718322754, + "sharpness": { + "laplacian_var": 573.738940376187 + }, + "contrast": { + "p05": 5.0, + "p95": 84.0, + "dynamic_range": 79.0, + "mean_gray": 35.148648648648646, + "std_gray": 29.57585640277612 + }, + "geometry": { + "distance_to_center_norm": 0.1388852745294571, + "distance_to_border_px": 364.0 + }, + "edge_ratio": 1.1543672262888542, + "edge_lengths_px": [ + 29.42787742614746, + 33.970577239990234, + 32.38827133178711, + 32.015621185302734 + ] + }, + "confidence": 0.49615926973370456 + }, + { + "observation_id": "fbe20ad0-60d7-4a79-8ea3-3acf3a8c9cad", + "type": "aruco", + "marker_id": 201, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 907.0, + 927.0 + ], + [ + 948.0, + 922.0 + ], + [ + 947.0, + 945.0 + ], + [ + 907.0, + 950.0 + ] + ], + "center_px": [ + 927.25, + 936.0 + ], + "quality": { + "area_px": 929.0, + "perimeter_px": 127.63676834106445, + "sharpness": { + "laplacian_var": 923.2914049586777 + }, + "contrast": { + "p05": 14.0, + "p95": 123.0, + "dynamic_range": 109.0, + "mean_gray": 50.58181818181818, + "std_gray": 40.52972313377277 + }, + "geometry": { + "distance_to_center_norm": 0.36075231432914734, + "distance_to_border_px": 130.0 + }, + "edge_ratio": 1.7958153434421704, + "edge_lengths_px": [ + 41.30375289916992, + 23.021728515625, + 40.31128692626953, + 23.0 + ] + }, + "confidence": 0.34487584461006543 + }, + { + "observation_id": "2ac03200-a5f8-4374-b857-e6ce90a2a86e", + "type": "aruco", + "marker_id": 121, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 1002.0, + 519.0 + ], + [ + 997.0, + 493.0 + ], + [ + 1025.0, + 471.0 + ], + [ + 1032.0, + 497.0 + ] + ], + "center_px": [ + 1014.0, + 495.0 + ], + "quality": { + "area_px": 886.0, + "perimeter_px": 126.21336555480957, + "sharpness": { + "laplacian_var": 494.0605900306243 + }, + "contrast": { + "p05": 6.0, + "p95": 91.0, + "dynamic_range": 85.0, + "mean_gray": 30.58937198067633, + "std_gray": 31.291479134634862 + }, + "geometry": { + "distance_to_center_norm": 0.06381770968437195, + "distance_to_border_px": 471.0 + }, + "edge_ratio": 1.4051059194117883, + "edge_lengths_px": [ + 26.476404190063477, + 35.608985900878906, + 26.925823211669922, + 37.202152252197266 + ] + }, + "confidence": 0.4203716307123197 + }, + { + "observation_id": "eefdd3e4-56c9-4fce-a806-3b533a693600", + "type": "aruco", + "marker_id": 55, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 1365.0, + 882.0 + ], + [ + 1333.0, + 886.0 + ], + [ + 1322.0, + 857.0 + ], + [ + 1354.0, + 854.0 + ] + ], + "center_px": [ + 1343.5, + 869.75 + ], + "quality": { + "area_px": 950.5, + "perimeter_px": 125.48868942260742, + "sharpness": { + "laplacian_var": 1971.9895380207588 + }, + "contrast": { + "p05": 31.0, + "p95": 195.0, + "dynamic_range": 164.0, + "mean_gray": 101.7124802527646, + "std_gray": 64.9571212490005 + }, + "geometry": { + "distance_to_center_norm": 0.45918774604797363, + "distance_to_border_px": 194.0 + }, + "edge_ratio": 1.07199407567839, + "edge_lengths_px": [ + 32.24903106689453, + 31.016124725341797, + 32.140316009521484, + 30.08321762084961 + ] + }, + "confidence": 0.5911102318971898 + }, + { + "observation_id": "ee3b3a81-e694-4ee0-8e7b-0c0be8ac3dc7", + "type": "aruco", + "marker_id": 86, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 586.0, + 868.0 + ], + [ + 552.0, + 871.0 + ], + [ + 555.0, + 843.0 + ], + [ + 589.0, + 841.0 + ] + ], + "center_px": [ + 570.5, + 855.75 + ], + "quality": { + "area_px": 927.5, + "perimeter_px": 123.51727867126465, + "sharpness": { + "laplacian_var": 1297.602920251469 + }, + "contrast": { + "p05": 9.0, + "p95": 156.0, + "dynamic_range": 147.0, + "mean_gray": 72.33333333333333, + "std_gray": 60.82260822557269 + }, + "geometry": { + "distance_to_center_norm": 0.45522239804267883, + "distance_to_border_px": 209.0 + }, + "edge_ratio": 1.2564198176367167, + "edge_lengths_px": [ + 34.13209533691406, + 28.160255432128906, + 34.058773040771484, + 27.166154861450195 + ] + }, + "confidence": 0.49213911198599 + }, + { + "observation_id": "1cf12b87-fde0-40ce-af93-5e86d89af330", + "type": "aruco", + "marker_id": 79, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 1213.0, + 863.0 + ], + [ + 1180.0, + 866.0 + ], + [ + 1173.0, + 838.0 + ], + [ + 1205.0, + 835.0 + ] + ], + "center_px": [ + 1192.75, + 850.5 + ], + "quality": { + "area_px": 932.5, + "perimeter_px": 123.25857734680176, + "sharpness": { + "laplacian_var": 2779.1159278143396 + }, + "contrast": { + "p05": 22.0, + "p95": 184.0, + "dynamic_range": 162.0, + "mean_gray": 101.98420221169036, + "std_gray": 64.6527465273228 + }, + "geometry": { + "distance_to_center_norm": 0.35230717062950134, + "distance_to_border_px": 214.0 + }, + "edge_ratio": 1.1480971544549965, + "edge_lengths_px": [ + 33.13608169555664, + 28.861740112304688, + 32.140316009521484, + 29.120439529418945 + ] + }, + "confidence": 0.5414756619284304 + }, + { + "observation_id": "91c4c121-9442-4237-8f35-3016cf40dccf", + "type": "aruco", + "marker_id": 97, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 1484.0, + 844.0 + ], + [ + 1452.0, + 847.0 + ], + [ + 1441.0, + 820.0 + ], + [ + 1471.0, + 817.0 + ] + ], + "center_px": [ + 1462.0, + 832.0 + ], + "quality": { + "area_px": 873.0, + "perimeter_px": 121.41135215759277, + "sharpness": { + "laplacian_var": 2065.251539663701 + }, + "contrast": { + "p05": 36.8, + "p95": 202.0, + "dynamic_range": 165.2, + "mean_gray": 119.62981574539363, + "std_gray": 66.43319069760392 + }, + "geometry": { + "distance_to_center_norm": 0.5272557735443115, + "distance_to_border_px": 233.0 + }, + "edge_ratio": 1.1024037108130842, + "edge_lengths_px": [ + 32.140316009521484, + 29.154760360717773, + 30.149627685546875, + 29.96664810180664 + ] + }, + "confidence": 0.5279372649886516 + }, + { + "observation_id": "ec9a962d-ac15-43f3-b5c1-10aa605544e9", + "type": "aruco", + "marker_id": 47, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 1369.0, + 809.0 + ], + [ + 1338.0, + 813.0 + ], + [ + 1328.0, + 786.0 + ], + [ + 1359.0, + 783.0 + ] + ], + "center_px": [ + 1348.5, + 797.75 + ], + "quality": { + "area_px": 856.5, + "perimeter_px": 119.05096054077148, + "sharpness": { + "laplacian_var": 2042.676698758028 + }, + "contrast": { + "p05": 32.0, + "p95": 195.0, + "dynamic_range": 163.0, + "mean_gray": 93.06620209059234, + "std_gray": 62.21897774952666 + }, + "geometry": { + "distance_to_center_norm": 0.42328310012817383, + "distance_to_border_px": 267.0 + }, + "edge_ratio": 1.122060881450388, + "edge_lengths_px": [ + 31.256999969482422, + 28.792360305786133, + 31.14482307434082, + 27.85677719116211 + ] + }, + "confidence": 0.5088850430842212 + }, + { + "observation_id": "60fd2977-8b12-4704-bfcf-2f435148f1ea", + "type": "aruco", + "marker_id": 54, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 1427.0, + 805.0 + ], + [ + 1396.0, + 808.0 + ], + [ + 1385.0, + 782.0 + ], + [ + 1416.0, + 780.0 + ] + ], + "center_px": [ + 1406.0, + 793.75 + ], + "quality": { + "area_px": 818.0, + "perimeter_px": 117.75345993041992, + "sharpness": { + "laplacian_var": 1688.99085697811 + }, + "contrast": { + "p05": 37.0, + "p95": 196.5, + "dynamic_range": 159.5, + "mean_gray": 75.3922942206655, + "std_gray": 52.920455890461106 + }, + "geometry": { + "distance_to_center_norm": 0.4658685326576233, + "distance_to_border_px": 272.0 + }, + "edge_ratio": 1.1402930248428094, + "edge_lengths_px": [ + 31.14482307434082, + 28.23118782043457, + 31.064449310302734, + 27.312999725341797 + ] + }, + "confidence": 0.4782396466982758 + }, + { + "observation_id": "cbb21c30-1ade-4691-8f81-f362617ebb7a", + "type": "aruco", + "marker_id": 84, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 635.0, + 812.0 + ], + [ + 603.0, + 815.0 + ], + [ + 605.0, + 789.0 + ], + [ + 637.0, + 786.0 + ] + ], + "center_px": [ + 620.0, + 800.5 + ], + "quality": { + "area_px": 826.0, + "perimeter_px": 116.43424987792969, + "sharpness": { + "laplacian_var": 1994.0451615405038 + }, + "contrast": { + "p05": 7.0, + "p95": 156.0, + "dynamic_range": 149.0, + "mean_gray": 73.52849740932642, + "std_gray": 57.832052114730836 + }, + "geometry": { + "distance_to_center_norm": 0.3888702988624573, + "distance_to_border_px": 265.0 + }, + "edge_ratio": 1.2325248881672715, + "edge_lengths_px": [ + 32.140316009521484, + 26.07680892944336, + 32.140316009521484, + 26.07680892944336 + ] + }, + "confidence": 0.4467793485983816 + }, + { + "observation_id": "e5332b2d-05aa-4839-ab94-3d6b85644de6", + "type": "aruco", + "marker_id": 96, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 1229.0, + 794.0 + ], + [ + 1198.0, + 797.0 + ], + [ + 1190.0, + 772.0 + ], + [ + 1222.0, + 769.0 + ] + ], + "center_px": [ + 1209.75, + 783.0 + ], + "quality": { + "area_px": 810.0, + "perimeter_px": 115.49545860290527, + "sharpness": { + "laplacian_var": 2069.6587921148357 + }, + "contrast": { + "p05": 26.8, + "p95": 183.0, + "dynamic_range": 156.2, + "mean_gray": 94.37088388214904, + "std_gray": 64.51053721848098 + }, + "geometry": { + "distance_to_center_norm": 0.3163633644580841, + "distance_to_border_px": 283.0 + }, + "edge_ratio": 1.2379987287041039, + "edge_lengths_px": [ + 31.14482307434082, + 26.248809814453125, + 32.140316009521484, + 25.961509704589844 + ] + }, + "confidence": 0.43618784694977364 + }, + { + "observation_id": "1930798a-fb3b-47dc-bd3b-8d449e3a4614", + "type": "aruco", + "marker_id": 60, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 603.0, + 786.0 + ], + [ + 571.0, + 789.0 + ], + [ + 574.0, + 764.0 + ], + [ + 605.0, + 760.0 + ] + ], + "center_px": [ + 588.25, + 774.75 + ], + "quality": { + "area_px": 794.5, + "perimeter_px": 114.65348243713379, + "sharpness": { + "laplacian_var": 1483.9369701207406 + }, + "contrast": { + "p05": 9.0, + "p95": 162.0, + "dynamic_range": 153.0, + "mean_gray": 92.23144876325088, + "std_gray": 62.047723001760545 + }, + "geometry": { + "distance_to_center_norm": 0.3991682827472687, + "distance_to_border_px": 291.0 + }, + "edge_ratio": 1.2764549680389752, + "edge_lengths_px": [ + 32.140316009521484, + 25.179357528686523, + 31.256999969482422, + 26.07680892944336 + ] + }, + "confidence": 0.4149513143267376 + }, + { + "observation_id": "d01cb188-92ba-460c-8d9f-cba5d778c0dc", + "type": "aruco", + "marker_id": 72, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 721.0, + 767.0 + ], + [ + 690.0, + 770.0 + ], + [ + 690.0, + 745.0 + ], + [ + 721.0, + 742.0 + ] + ], + "center_px": [ + 705.5, + 756.0 + ], + "quality": { + "area_px": 775.0, + "perimeter_px": 112.28964614868164, + "sharpness": { + "laplacian_var": 1632.1862820861677 + }, + "contrast": { + "p05": 8.0, + "p95": 154.0, + "dynamic_range": 146.0, + "mean_gray": 54.42285714285714, + "std_gray": 54.93955337614302 + }, + "geometry": { + "distance_to_center_norm": 0.30305925011634827, + "distance_to_border_px": 310.0 + }, + "edge_ratio": 1.2457929229736329, + "edge_lengths_px": [ + 31.14482307434082, + 25.0, + 31.14482307434082, + 25.0 + ] + }, + "confidence": 0.41472917138862403 + }, + { + "observation_id": "4cab19e2-ce33-4580-bef2-d4ca8e2bec34", + "type": "aruco", + "marker_id": 62, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 1203.0, + 758.0 + ], + [ + 1172.0, + 761.0 + ], + [ + 1165.0, + 737.0 + ], + [ + 1194.0, + 734.0 + ] + ], + "center_px": [ + 1183.5, + 747.5 + ], + "quality": { + "area_px": 744.0, + "perimeter_px": 110.93159484863281, + "sharpness": { + "laplacian_var": 1848.8428129869842 + }, + "contrast": { + "p05": 23.0, + "p95": 183.0, + "dynamic_range": 160.0, + "mean_gray": 56.28214971209213, + "std_gray": 48.00794727859806 + }, + "geometry": { + "distance_to_center_norm": 0.27688226103782654, + "distance_to_border_px": 319.0 + }, + "edge_ratio": 1.2457929229736329, + "edge_lengths_px": [ + 31.14482307434082, + 25.0, + 29.154760360717773, + 25.63201141357422 + ] + }, + "confidence": 0.398140004533079 + }, + { + "observation_id": "fe52de80-52b9-489d-afc4-df6a06bd5179", + "type": "aruco", + "marker_id": 53, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 699.0, + 723.0 + ], + [ + 667.0, + 725.0 + ], + [ + 668.0, + 703.0 + ], + [ + 699.0, + 700.0 + ] + ], + "center_px": [ + 683.25, + 712.75 + ], + "quality": { + "area_px": 707.5, + "perimeter_px": 108.22997665405273, + "sharpness": { + "laplacian_var": 2286.0421794426657 + }, + "contrast": { + "p05": 6.0, + "p95": 160.0, + "dynamic_range": 154.0, + "mean_gray": 86.56521739130434, + "std_gray": 61.281360681545955 + }, + "geometry": { + "distance_to_center_norm": 0.2961912453174591, + "distance_to_border_px": 355.0 + }, + "edge_ratio": 1.4558804182658518, + "edge_lengths_px": [ + 32.06243896484375, + 22.022714614868164, + 31.14482307434082, + 23.0 + ] + }, + "confidence": 0.3239734944910412 + }, + { + "observation_id": "a8439792-52ee-41ef-91c5-f52788c771a7", + "type": "aruco", + "marker_id": 56, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 753.0, + 706.0 + ], + [ + 723.0, + 709.0 + ], + [ + 724.0, + 686.0 + ], + [ + 753.0, + 683.0 + ] + ], + "center_px": [ + 738.25, + 696.0 + ], + "quality": { + "area_px": 677.0, + "perimeter_px": 105.32611656188965, + "sharpness": { + "laplacian_var": 1696.2318599817008 + }, + "contrast": { + "p05": 8.0, + "p95": 151.0, + "dynamic_range": 143.0, + "mean_gray": 45.696098562628336, + "std_gray": 49.72856554522117 + }, + "geometry": { + "distance_to_center_norm": 0.24615249037742615, + "distance_to_border_px": 371.0 + }, + "edge_ratio": 1.310853377632473, + "edge_lengths_px": [ + 30.149627685546875, + 23.021728515625, + 29.154760360717773, + 23.0 + ] + }, + "confidence": 0.3443049703609756 + }, + { + "observation_id": "abef8fc9-c1c0-4cb0-bf7a-665965e4dd92", + "type": "aruco", + "marker_id": 67, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 630.0, + 695.0 + ], + [ + 600.0, + 697.0 + ], + [ + 602.0, + 676.0 + ], + [ + 632.0, + 672.0 + ] + ], + "center_px": [ + 616.0, + 685.0 + ], + "quality": { + "area_px": 654.0, + "perimeter_px": 104.5138988494873, + "sharpness": { + "laplacian_var": 2110.955544383798 + }, + "contrast": { + "p05": 7.550000000000001, + "p95": 156.0, + "dynamic_range": 148.45, + "mean_gray": 54.67584745762712, + "std_gray": 53.327009339820215 + }, + "geometry": { + "distance_to_center_norm": 0.33892562985420227, + "distance_to_border_px": 383.0 + }, + "edge_ratio": 1.4347219546130165, + "edge_lengths_px": [ + 30.066593170166016, + 21.095022201538086, + 30.265491485595703, + 23.0867919921875 + ] + }, + "confidence": 0.30389163461125196 + }, + { + "observation_id": "8a02627f-d583-426d-a72a-015995b2e32a", + "type": "aruco", + "marker_id": 46, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 732.0, + 672.0 + ], + [ + 702.0, + 675.0 + ], + [ + 703.0, + 653.0 + ], + [ + 732.0, + 650.0 + ] + ], + "center_px": [ + 717.25, + 662.5 + ], + "quality": { + "area_px": 647.5, + "perimeter_px": 103.32710266113281, + "sharpness": { + "laplacian_var": 2567.788206094183 + }, + "contrast": { + "p05": 6.0, + "p95": 158.29999999999995, + "dynamic_range": 152.29999999999995, + "mean_gray": 74.45263157894736, + "std_gray": 60.52047385994831 + }, + "geometry": { + "distance_to_center_norm": 0.24686260521411896, + "distance_to_border_px": 405.0 + }, + "edge_ratio": 1.3704376220703125, + "edge_lengths_px": [ + 30.149627685546875, + 22.022714614868164, + 29.154760360717773, + 22.0 + ] + }, + "confidence": 0.3149845419556931 + }, + { + "observation_id": "6464a668-3527-4540-bd3f-53ea5d13da87", + "type": "aruco", + "marker_id": 85, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 1335.0, + 647.0 + ], + [ + 1307.0, + 649.0 + ], + [ + 1299.0, + 628.0 + ], + [ + 1326.0, + 625.0 + ] + ], + "center_px": [ + 1316.75, + 637.25 + ], + "quality": { + "area_px": 612.5, + "perimeter_px": 101.47942352294922, + "sharpness": { + "laplacian_var": 2183.8399632740848 + }, + "contrast": { + "p05": 25.150000000000002, + "p95": 198.0, + "dynamic_range": 172.85, + "mean_gray": 129.30180180180182, + "std_gray": 66.68305359229697 + }, + "geometry": { + "distance_to_center_norm": 0.3357087969779968, + "distance_to_border_px": 431.0 + }, + "edge_ratio": 1.249158137133488, + "edge_lengths_px": [ + 28.07133674621582, + 22.472204208374023, + 27.166154861450195, + 23.76972770690918 + ] + }, + "confidence": 0.32688682176810563 + }, + { + "observation_id": "e6fea8a8-450b-4091-89d9-dade62202290", + "type": "aruco", + "marker_id": 98, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 575.0, + 652.0 + ], + [ + 546.0, + 655.0 + ], + [ + 548.0, + 634.0 + ], + [ + 577.0, + 631.0 + ] + ], + "center_px": [ + 561.5, + 643.0 + ], + "quality": { + "area_px": 603.0, + "perimeter_px": 100.49956512451172, + "sharpness": { + "laplacian_var": 1906.5717468902108 + }, + "contrast": { + "p05": 8.0, + "p95": 157.0, + "dynamic_range": 149.0, + "mean_gray": 68.3, + "std_gray": 57.14771353948203 + }, + "geometry": { + "distance_to_center_norm": 0.3736843466758728, + "distance_to_border_px": 425.0 + }, + "edge_ratio": 1.3820682472944747, + "edge_lengths_px": [ + 29.154760360717773, + 21.095022201538086, + 29.154760360717773, + 21.095022201538086 + ] + }, + "confidence": 0.29086841462927165 + }, + { + "observation_id": "68ae7a01-34c1-45ca-a709-95d593e43f74", + "type": "aruco", + "marker_id": 68, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 749.0, + 637.0 + ], + [ + 720.0, + 640.0 + ], + [ + 720.0, + 619.0 + ], + [ + 749.0, + 616.0 + ] + ], + "center_px": [ + 734.5, + 628.0 + ], + "quality": { + "area_px": 609.0, + "perimeter_px": 100.30952072143555, + "sharpness": { + "laplacian_var": 2153.168711111111 + }, + "contrast": { + "p05": 5.0, + "p95": 155.0, + "dynamic_range": 150.0, + "mean_gray": 55.60888888888889, + "std_gray": 54.68932791371934 + }, + "geometry": { + "distance_to_center_norm": 0.21976639330387115, + "distance_to_border_px": 440.0 + }, + "edge_ratio": 1.3883219219389415, + "edge_lengths_px": [ + 29.154760360717773, + 21.0, + 29.154760360717773, + 21.0 + ] + }, + "confidence": 0.29243937849297746 + }, + { + "observation_id": "14bfac60-67cf-45b0-a8dc-88e000f72f0d", + "type": "aruco", + "marker_id": 105, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 1274.0, + 633.0 + ], + [ + 1246.0, + 636.0 + ], + [ + 1238.0, + 615.0 + ], + [ + 1266.0, + 613.0 + ] + ], + "center_px": [ + 1256.0, + 624.25 + ], + "quality": { + "area_px": 594.0, + "perimeter_px": 100.24445533752441, + "sharpness": { + "laplacian_var": 1938.0908391545565 + }, + "contrast": { + "p05": 24.0, + "p95": 175.95, + "dynamic_range": 151.95, + "mean_gray": 58.45260663507109, + "std_gray": 45.73897070412443 + }, + "geometry": { + "distance_to_center_norm": 0.27940940856933594, + "distance_to_border_px": 444.0 + }, + "edge_ratio": 1.3073070557609685, + "edge_lengths_px": [ + 28.160255432128906, + 22.472204208374023, + 28.07133674621582, + 21.540658950805664 + ] + }, + "confidence": 0.3029127688517622 + }, + { + "observation_id": "ac335f12-99be-406e-8f3a-b32110da82ea", + "type": "aruco", + "marker_id": 50, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 700.0, + 642.0 + ], + [ + 671.0, + 645.0 + ], + [ + 672.0, + 624.0 + ], + [ + 700.0, + 621.0 + ] + ], + "center_px": [ + 685.75, + 633.0 + ], + "quality": { + "area_px": 597.0, + "perimeter_px": 99.33881187438965, + "sharpness": { + "laplacian_var": 2130.861379774888 + }, + "contrast": { + "p05": 6.0, + "p95": 158.0, + "dynamic_range": 152.0, + "mean_gray": 52.89115646258504, + "std_gray": 54.083809480000056 + }, + "geometry": { + "distance_to_center_norm": 0.2629157304763794, + "distance_to_border_px": 435.0 + }, + "edge_ratio": 1.3883219219389415, + "edge_lengths_px": [ + 29.154760360717773, + 21.02379608154297, + 28.160255432128906, + 21.0 + ] + }, + "confidence": 0.28667702620740154 + }, + { + "observation_id": "8ee28a14-45b9-4374-bb4f-ba1db8350c5f", + "type": "aruco", + "marker_id": 70, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 595.0, + 627.0 + ], + [ + 566.0, + 629.0 + ], + [ + 568.0, + 609.0 + ], + [ + 597.0, + 607.0 + ] + ], + "center_px": [ + 581.5, + 618.0 + ], + "quality": { + "area_px": 576.0, + "perimeter_px": 98.3372688293457, + "sharpness": { + "laplacian_var": 2234.1870434448288 + }, + "contrast": { + "p05": 9.0, + "p95": 159.0, + "dynamic_range": 150.0, + "mean_gray": 73.38235294117646, + "std_gray": 59.17791289709214 + }, + "geometry": { + "distance_to_center_norm": 0.3508576452732086, + "distance_to_border_px": 451.0 + }, + "edge_ratio": 1.4462310797682079, + "edge_lengths_px": [ + 29.068883895874023, + 20.099750518798828, + 29.068883895874023, + 20.099750518798828 + ] + }, + "confidence": 0.2655177345943533 + }, + { + "observation_id": "98944f31-b712-4a6f-920e-66036e187656", + "type": "aruco", + "marker_id": 90, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 579.0, + 594.0 + ], + [ + 550.0, + 595.0 + ], + [ + 554.0, + 576.0 + ], + [ + 581.0, + 575.0 + ] + ], + "center_px": [ + 566.0, + 585.0 + ], + "quality": { + "area_px": 529.0, + "perimeter_px": 94.55721092224121, + "sharpness": { + "laplacian_var": 2044.593473949883 + }, + "contrast": { + "p05": 9.0, + "p95": 158.7, + "dynamic_range": 149.7, + "mean_gray": 73.13695090439276, + "std_gray": 58.895996047209685 + }, + "geometry": { + "distance_to_center_norm": 0.36003464460372925, + "distance_to_border_px": 485.0 + }, + "edge_ratio": 1.5188316127736332, + "edge_lengths_px": [ + 29.017236709594727, + 19.416488647460938, + 27.018512725830078, + 19.10497283935547 + ] + }, + "confidence": 0.23219602732829617 + }, + { + "observation_id": "5e4e236e-7818-418a-81f5-5d122acbcf05", + "type": "aruco", + "marker_id": 91, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 572.0, + 532.0 + ], + [ + 545.0, + 534.0 + ], + [ + 547.0, + 516.0 + ], + [ + 574.0, + 514.0 + ] + ], + "center_px": [ + 559.5, + 524.0 + ], + "quality": { + "area_px": 482.0, + "perimeter_px": 90.36948776245117, + "sharpness": { + "laplacian_var": 1552.8955853911036 + }, + "contrast": { + "p05": 9.0, + "p95": 153.0, + "dynamic_range": 144.0, + "mean_gray": 63.43059490084986, + "std_gray": 55.78546902229135 + }, + "geometry": { + "distance_to_center_norm": 0.36390045285224915, + "distance_to_border_px": 514.0 + }, + "edge_ratio": 1.4949099866670317, + "edge_lengths_px": [ + 27.073972702026367, + 18.11077117919922, + 27.073972702026367, + 18.11077117919922 + ] + }, + "confidence": 0.21495162665262563 + }, + { + "observation_id": "4c09f73c-6955-4817-a57f-40afe54e9d59", + "type": "aruco", + "marker_id": 76, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 751.0, + 545.0 + ], + [ + 724.0, + 547.0 + ], + [ + 725.0, + 529.0 + ], + [ + 751.0, + 527.0 + ] + ], + "center_px": [ + 737.75, + 537.0 + ], + "quality": { + "area_px": 476.0, + "perimeter_px": 89.17853736877441, + "sharpness": { + "laplacian_var": 2502.803433412604 + }, + "contrast": { + "p05": 7.350000000000001, + "p95": 156.0, + "dynamic_range": 148.65, + "mean_gray": 71.566091954023, + "std_gray": 55.536140244285285 + }, + "geometry": { + "distance_to_center_norm": 0.20179718732833862, + "distance_to_border_px": 527.0 + }, + "edge_ratio": 1.5041095945570204, + "edge_lengths_px": [ + 27.073972702026367, + 18.027755737304688, + 26.07680892944336, + 18.0 + ] + }, + "confidence": 0.2109775341382568 + }, + { + "observation_id": "e0883cc7-247d-43af-b36f-4187ac10be22", + "type": "aruco", + "marker_id": 88, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 588.0, + 499.0 + ], + [ + 562.0, + 501.0 + ], + [ + 565.0, + 484.0 + ], + [ + 590.0, + 482.0 + ] + ], + "center_px": [ + 576.25, + 491.5 + ], + "quality": { + "area_px": 428.5, + "perimeter_px": 85.53660011291504, + "sharpness": { + "laplacian_var": 2041.6719640955728 + }, + "contrast": { + "p05": 7.0, + "p95": 153.2, + "dynamic_range": 146.2, + "mean_gray": 70.52681388012618, + "std_gray": 56.87656184514831 + }, + "geometry": { + "distance_to_center_norm": 0.3511747419834137, + "distance_to_border_px": 482.0 + }, + "edge_ratio": 1.523423439987119, + "edge_lengths_px": [ + 26.07680892944336, + 17.262676239013672, + 25.079872131347656, + 17.11724281311035 + ] + }, + "confidence": 0.18751626052772438 + }, + { + "observation_id": "35439da1-d4fe-41b6-99e4-af3248f2d8d8", + "type": "aruco", + "marker_id": 217, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 909.0, + 477.0 + ], + [ + 910.0, + 461.0 + ], + [ + 934.0, + 460.0 + ], + [ + 936.0, + 476.0 + ] + ], + "center_px": [ + 922.25, + 468.5 + ], + "quality": { + "area_px": 408.5, + "perimeter_px": 83.19507217407227, + "sharpness": { + "laplacian_var": 3020.33512784527 + }, + "contrast": { + "p05": 10.0, + "p95": 171.95, + "dynamic_range": 161.95, + "mean_gray": 71.58609271523179, + "std_gray": 59.50489048824385 + }, + "geometry": { + "distance_to_center_norm": 0.07340630888938904, + "distance_to_border_px": 460.0 + }, + "edge_ratio": 1.6853685245502188, + "edge_lengths_px": [ + 16.031219482421875, + 24.020824432373047, + 16.124515533447266, + 27.018512725830078 + ] + }, + "confidence": 0.16158681580102016 + }, + { + "observation_id": "fa2272e0-5b32-4ad5-9fa6-00be401c5f25", + "type": "aruco", + "marker_id": 104, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 673.0, + 450.0 + ], + [ + 648.0, + 452.0 + ], + [ + 650.0, + 436.0 + ], + [ + 674.0, + 434.0 + ] + ], + "center_px": [ + 661.25, + 443.0 + ], + "quality": { + "area_px": 389.0, + "perimeter_px": 81.31879615783691, + "sharpness": { + "laplacian_var": 2518.51297014466 + }, + "contrast": { + "p05": 8.200000000000001, + "p95": 153.0, + "dynamic_range": 144.8, + "mean_gray": 82.33684210526316, + "std_gray": 56.84443724911041 + }, + "geometry": { + "distance_to_center_norm": 0.28517115116119385, + "distance_to_border_px": 434.0 + }, + "edge_ratio": 1.564439446347021, + "edge_lengths_px": [ + 25.079872131347656, + 16.124515533447266, + 24.083189010620117, + 16.031219482421875 + ] + }, + "confidence": 0.16576757504988693 + }, + { + "observation_id": "3a34b003-5c9b-4d6a-b816-dbbd1cdc9cbb", + "type": "aruco", + "marker_id": 100, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 743.0, + 460.0 + ], + [ + 718.0, + 462.0 + ], + [ + 719.0, + 446.0 + ], + [ + 743.0, + 444.0 + ] + ], + "center_px": [ + 730.75, + 453.0 + ], + "quality": { + "area_px": 391.0, + "perimeter_px": 81.19428062438965, + "sharpness": { + "laplacian_var": 2771.684662919302 + }, + "contrast": { + "p05": 6.0, + "p95": 149.7, + "dynamic_range": 143.7, + "mean_gray": 74.56445993031359, + "std_gray": 55.2618271349869 + }, + "geometry": { + "distance_to_center_norm": 0.2226177304983139, + "distance_to_border_px": 444.0 + }, + "edge_ratio": 1.5674920082092285, + "edge_lengths_px": [ + 25.079872131347656, + 16.031219482421875, + 24.083189010620117, + 16.0 + ] + }, + "confidence": 0.16629537203475994 + }, + { + "observation_id": "4624d653-af90-4ba5-91de-96d2c58e9ea9", + "type": "aruco", + "marker_id": 65, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 1224.0, + 421.0 + ], + [ + 1200.0, + 422.0 + ], + [ + 1194.0, + 407.0 + ], + [ + 1218.0, + 406.0 + ] + ], + "center_px": [ + 1209.0, + 414.0 + ], + "quality": { + "area_px": 366.0, + "perimeter_px": 80.3526382446289, + "sharpness": { + "laplacian_var": 3623.8896518166093 + }, + "contrast": { + "p05": 14.0, + "p95": 184.45, + "dynamic_range": 170.45, + "mean_gray": 88.77941176470588, + "std_gray": 64.42787704736553 + }, + "geometry": { + "distance_to_center_norm": 0.25336021184921265, + "distance_to_border_px": 406.0 + }, + "edge_ratio": 1.4868516807058025, + "edge_lengths_px": [ + 24.020824432373047, + 16.155494689941406, + 24.020824432373047, + 16.155494689941406 + ] + }, + "confidence": 0.1641051378333676 + }, + { + "observation_id": "439b491e-3e1d-4cb3-b90a-743a2a9729bb", + "type": "aruco", + "marker_id": 94, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 740.0, + 413.0 + ], + [ + 716.0, + 413.0 + ], + [ + 717.0, + 400.0 + ], + [ + 741.0, + 398.0 + ] + ], + "center_px": [ + 728.5, + 406.0 + ], + "quality": { + "area_px": 335.0, + "perimeter_px": 76.1548900604248, + "sharpness": { + "laplacian_var": 2532.7827083333336 + }, + "contrast": { + "p05": 7.0, + "p95": 147.0, + "dynamic_range": 140.0, + "mean_gray": 59.1125, + "std_gray": 52.20927290322413 + }, + "geometry": { + "distance_to_center_norm": 0.24284730851650238, + "distance_to_border_px": 398.0 + }, + "edge_ratio": 1.8470963280654908, + "edge_lengths_px": [ + 24.0, + 13.03840446472168, + 24.083189010620117, + 15.033296585083008 + ] + }, + "confidence": 0.12091049607966889 + }, + { + "observation_id": "7969dac3-f889-433c-a779-8c41bd754f79", + "type": "aruco", + "marker_id": 80, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 1246.0, + 380.0 + ], + [ + 1222.0, + 381.0 + ], + [ + 1217.0, + 368.0 + ], + [ + 1239.0, + 366.0 + ] + ], + "center_px": [ + 1231.0, + 373.75 + ], + "quality": { + "area_px": 319.5, + "perimeter_px": 75.69241046905518, + "sharpness": { + "laplacian_var": 4135.047877974719 + }, + "contrast": { + "p05": 14.0, + "p95": 181.0, + "dynamic_range": 167.0, + "mean_gray": 74.95798319327731, + "std_gray": 63.552055677266964 + }, + "geometry": { + "distance_to_center_norm": 0.2886466681957245, + "distance_to_border_px": 366.0 + }, + "edge_ratio": 1.7245946483711645, + "edge_lengths_px": [ + 24.020824432373047, + 13.928388595581055, + 22.090721130371094, + 15.65247631072998 + ] + }, + "confidence": 0.12350728340782749 + }, + { + "observation_id": "d4e186e2-e7d6-410e-8097-8be54abc17bd", + "type": "aruco", + "marker_id": 93, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 769.0, + 374.0 + ], + [ + 746.0, + 375.0 + ], + [ + 746.0, + 361.0 + ], + [ + 769.0, + 360.0 + ] + ], + "center_px": [ + 757.5, + 367.5 + ], + "quality": { + "area_px": 322.0, + "perimeter_px": 74.04345703125, + "sharpness": { + "laplacian_var": 2553.2633887349953 + }, + "contrast": { + "p05": 6.350000000000001, + "p95": 135.0, + "dynamic_range": 128.65, + "mean_gray": 54.76315789473684, + "std_gray": 45.96934574172703 + }, + "geometry": { + "distance_to_center_norm": 0.24151013791561127, + "distance_to_border_px": 360.0 + }, + "edge_ratio": 1.6444091796875, + "edge_lengths_px": [ + 23.021728515625, + 14.0, + 23.021728515625, + 14.0 + ] + }, + "confidence": 0.1305433400143518 + }, + { + "observation_id": "e644a666-cce2-43c1-a05b-47b8a9923b22", + "type": "aruco", + "marker_id": 87, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 1141.0, + 341.0 + ], + [ + 1118.0, + 342.0 + ], + [ + 1114.0, + 329.0 + ], + [ + 1136.0, + 328.0 + ] + ], + "center_px": [ + 1127.25, + 335.0 + ], + "quality": { + "area_px": 297.0, + "perimeter_px": 72.57430267333984, + "sharpness": { + "laplacian_var": 4289.743035098056 + }, + "contrast": { + "p05": 12.0, + "p95": 178.14999999999998, + "dynamic_range": 166.14999999999998, + "mean_gray": 97.85321100917432, + "std_gray": 62.19631920553613 + }, + "geometry": { + "distance_to_center_norm": 0.24020123481750488, + "distance_to_border_px": 328.0 + }, + "edge_ratio": 1.6925910884846744, + "edge_lengths_px": [ + 23.021728515625, + 13.601470947265625, + 22.022714614868164, + 13.928388595581055 + ] + }, + "confidence": 0.11698041029937327 + }, + { + "observation_id": "489a1ddb-5d84-49fa-8659-6e4cd7cb1c54", + "type": "aruco", + "marker_id": 205, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 979.0, + 341.0 + ], + [ + 976.0, + 328.0 + ], + [ + 999.0, + 327.0 + ], + [ + 1001.0, + 340.0 + ] + ], + "center_px": [ + 988.75, + 334.0 + ], + "quality": { + "area_px": 295.0, + "perimeter_px": 71.53905391693115, + "sharpness": { + "laplacian_var": 5730.497697715685 + }, + "contrast": { + "p05": 10.0, + "p95": 173.5, + "dynamic_range": 163.5, + "mean_gray": 78.55450236966824, + "std_gray": 58.07562169429531 + }, + "geometry": { + "distance_to_center_norm": 0.18883822858333588, + "distance_to_border_px": 327.0 + }, + "edge_ratio": 1.7503096028209095, + "edge_lengths_px": [ + 13.34166431427002, + 23.021728515625, + 13.152946472167969, + 22.022714614868164 + ] + }, + "confidence": 0.11236107392069736 + }, + { + "observation_id": "1baa9824-de62-458c-bf5b-6d3dbf881adb", + "type": "aruco", + "marker_id": 49, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 753.0, + 334.0 + ], + [ + 731.0, + 336.0 + ], + [ + 731.0, + 322.0 + ], + [ + 753.0, + 321.0 + ] + ], + "center_px": [ + 742.0, + 328.25 + ], + "quality": { + "area_px": 297.0, + "perimeter_px": 71.11343574523926, + "sharpness": { + "laplacian_var": 2420.7212770426377 + }, + "contrast": { + "p05": 7.0, + "p95": 140.0, + "dynamic_range": 133.0, + "mean_gray": 45.47826086956522, + "std_gray": 44.311133821538625 + }, + "geometry": { + "distance_to_center_norm": 0.2759183645248413, + "distance_to_border_px": 321.0 + }, + "edge_ratio": 1.6992862407977765, + "edge_lengths_px": [ + 22.090721130371094, + 14.0, + 22.022714614868164, + 13.0 + ] + }, + "confidence": 0.11651950992496915 + }, + { + "observation_id": "2abbb7a3-66f6-42ce-a2e9-c594dc1cc898", + "type": "aruco", + "marker_id": 99, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 1207.0, + 326.0 + ], + [ + 1187.0, + 328.0 + ], + [ + 1181.0, + 316.0 + ], + [ + 1202.0, + 314.0 + ] + ], + "center_px": [ + 1194.25, + 321.0 + ], + "quality": { + "area_px": 257.0, + "perimeter_px": 67.61118030548096, + "sharpness": { + "laplacian_var": 4610.491653189332 + }, + "contrast": { + "p05": 13.5, + "p95": 180.0, + "dynamic_range": 166.5, + "mean_gray": 87.81151832460733, + "std_gray": 60.882223209491066 + }, + "geometry": { + "distance_to_center_norm": 0.29114025831222534, + "distance_to_border_px": 314.0 + }, + "edge_ratio": 1.6226940155029297, + "edge_lengths_px": [ + 20.099750518798828, + 13.416407585144043, + 21.095022201538086, + 13.0 + ] + }, + "confidence": 0.10558573070242767 + } + ], + "rejected_candidates": [ + { + "image_points_px": [ + [ + 1043.0, + 661.0 + ], + [ + 1035.0, + 677.0 + ], + [ + 1003.0, + 705.0 + ], + [ + 986.0, + 706.0 + ] + ], + "center_px": [ + 1016.75, + 687.25 + ], + "area_px": 498.0 + }, + { + "image_points_px": [ + [ + 1371.0, + 555.0 + ], + [ + 1313.0, + 561.0 + ], + [ + 1336.0, + 549.0 + ], + [ + 1365.0, + 547.0 + ] + ], + "center_px": [ + 1346.25, + 553.0 + ], + "area_px": 401.0 + }, + { + "image_points_px": [ + [ + 146.0, + 56.0 + ], + [ + 166.0, + 102.0 + ], + [ + 166.0, + 113.0 + ], + [ + 148.0, + 73.0 + ] + ], + "center_px": [ + 156.5, + 86.0 + ], + "area_px": 223.0 + }, + { + "image_points_px": [ + [ + 948.0, + 500.0 + ], + [ + 952.0, + 520.0 + ], + [ + 920.0, + 523.0 + ], + [ + 917.0, + 502.0 + ] + ], + "center_px": [ + 934.25, + 511.25 + ], + "area_px": 654.5 + }, + { + "image_points_px": [ + [ + 1562.0, + 487.0 + ], + [ + 1529.0, + 490.0 + ], + [ + 1512.0, + 484.0 + ], + [ + 1549.0, + 482.0 + ] + ], + "center_px": [ + 1538.0, + 485.75 + ], + "area_px": 230.0 + }, + { + "image_points_px": [ + [ + 1311.0, + 556.0 + ], + [ + 1308.0, + 561.0 + ], + [ + 1267.0, + 563.0 + ], + [ + 1277.0, + 556.0 + ] + ], + "center_px": [ + 1290.75, + 559.0 + ], + "area_px": 218.5 + }, + { + "image_points_px": [ + [ + 1822.0, + 341.0 + ], + [ + 1845.0, + 340.0 + ], + [ + 1859.0, + 354.0 + ], + [ + 1835.0, + 355.0 + ] + ], + "center_px": [ + 1840.25, + 347.5 + ], + "area_px": 342.5 + }, + { + "image_points_px": [ + [ + 1660.0, + 365.0 + ], + [ + 1683.0, + 365.0 + ], + [ + 1695.0, + 380.0 + ], + [ + 1671.0, + 381.0 + ] + ], + "center_px": [ + 1677.25, + 372.75 + ], + "area_px": 370.0 + }, + { + "image_points_px": [ + [ + 1674.0, + 348.0 + ], + [ + 1697.0, + 348.0 + ], + [ + 1709.0, + 362.0 + ], + [ + 1685.0, + 363.0 + ] + ], + "center_px": [ + 1691.25, + 355.25 + ], + "area_px": 346.5 + }, + { + "image_points_px": [ + [ + 1671.0, + 348.0 + ], + [ + 1648.0, + 349.0 + ], + [ + 1637.0, + 334.0 + ], + [ + 1661.0, + 333.0 + ] + ], + "center_px": [ + 1654.25, + 341.0 + ], + "area_px": 363.0 + }, + { + "image_points_px": [ + [ + 1724.0, + 346.0 + ], + [ + 1748.0, + 346.0 + ], + [ + 1759.0, + 360.0 + ], + [ + 1735.0, + 360.0 + ] + ], + "center_px": [ + 1741.5, + 353.0 + ], + "area_px": 336.0 + }, + { + "image_points_px": [ + [ + 1785.0, + 327.0 + ], + [ + 1808.0, + 326.0 + ], + [ + 1820.0, + 340.0 + ], + [ + 1798.0, + 342.0 + ] + ], + "center_px": [ + 1802.75, + 333.75 + ], + "area_px": 345.0 + }, + { + "image_points_px": [ + [ + 1813.0, + 357.0 + ], + [ + 1835.0, + 357.0 + ], + [ + 1848.0, + 372.0 + ], + [ + 1831.0, + 373.0 + ] + ], + "center_px": [ + 1831.75, + 364.75 + ], + "area_px": 310.0 + }, + { + "image_points_px": [ + [ + 1796.0, + 311.0 + ], + [ + 1818.0, + 310.0 + ], + [ + 1831.0, + 324.0 + ], + [ + 1808.0, + 324.0 + ] + ], + "center_px": [ + 1813.25, + 317.25 + ], + "area_px": 310.0 + }, + { + "image_points_px": [ + [ + 1749.0, + 313.0 + ], + [ + 1770.0, + 312.0 + ], + [ + 1783.0, + 326.0 + ], + [ + 1759.0, + 326.0 + ] + ], + "center_px": [ + 1765.25, + 319.25 + ], + "area_px": 309.5 + }, + { + "image_points_px": [ + [ + 1760.0, + 297.0 + ], + [ + 1783.0, + 297.0 + ], + [ + 1794.0, + 310.0 + ], + [ + 1771.0, + 310.0 + ] + ], + "center_px": [ + 1777.0, + 303.5 + ], + "area_px": 299.0 + }, + { + "image_points_px": [ + [ + 1805.0, + 295.0 + ], + [ + 1783.0, + 295.0 + ], + [ + 1771.0, + 282.0 + ], + [ + 1792.0, + 281.0 + ] + ], + "center_px": [ + 1787.75, + 288.25 + ], + "area_px": 296.5 + }, + { + "image_points_px": [ + [ + 1664.0, + 302.0 + ], + [ + 1687.0, + 301.0 + ], + [ + 1697.0, + 315.0 + ], + [ + 1674.0, + 315.0 + ] + ], + "center_px": [ + 1680.5, + 308.25 + ], + "area_px": 315.5 + }, + { + "image_points_px": [ + [ + 1629.0, + 288.0 + ], + [ + 1652.0, + 288.0 + ], + [ + 1662.0, + 301.0 + ], + [ + 1639.0, + 301.0 + ] + ], + "center_px": [ + 1645.5, + 294.5 + ], + "area_px": 299.0 + }, + { + "image_points_px": [ + [ + 1651.0, + 318.0 + ], + [ + 1674.0, + 318.0 + ], + [ + 1684.0, + 331.0 + ], + [ + 1661.0, + 331.0 + ] + ], + "center_px": [ + 1667.5, + 324.5 + ], + "area_px": 299.0 + }, + { + "image_points_px": [ + [ + 1235.0, + 392.0 + ], + [ + 1259.0, + 390.0 + ], + [ + 1265.0, + 404.0 + ], + [ + 1241.0, + 406.0 + ] + ], + "center_px": [ + 1250.0, + 398.0 + ], + "area_px": 348.0 + }, + { + "image_points_px": [ + [ + 1616.0, + 304.0 + ], + [ + 1639.0, + 304.0 + ], + [ + 1648.0, + 317.0 + ], + [ + 1625.0, + 318.0 + ] + ], + "center_px": [ + 1632.0, + 310.75 + ], + "area_px": 315.0 + }, + { + "image_points_px": [ + [ + 1713.0, + 300.0 + ], + [ + 1735.0, + 299.0 + ], + [ + 1746.0, + 312.0 + ], + [ + 1723.0, + 312.0 + ] + ], + "center_px": [ + 1729.25, + 305.75 + ], + "area_px": 286.5 + }, + { + "image_points_px": [ + [ + 1736.0, + 270.0 + ], + [ + 1759.0, + 269.0 + ], + [ + 1769.0, + 281.0 + ], + [ + 1747.0, + 282.0 + ] + ], + "center_px": [ + 1752.75, + 275.5 + ], + "area_px": 280.5 + }, + { + "image_points_px": [ + [ + 1595.0, + 276.0 + ], + [ + 1618.0, + 276.0 + ], + [ + 1627.0, + 288.0 + ], + [ + 1604.0, + 289.0 + ] + ], + "center_px": [ + 1611.0, + 282.25 + ], + "area_px": 292.0 + }, + { + "image_points_px": [ + [ + 1748.0, + 255.0 + ], + [ + 1769.0, + 254.0 + ], + [ + 1781.0, + 266.0 + ], + [ + 1759.0, + 267.0 + ] + ], + "center_px": [ + 1764.25, + 260.5 + ], + "area_px": 269.5 + }, + { + "image_points_px": [ + [ + 1709.0, + 299.0 + ], + [ + 1688.0, + 299.0 + ], + [ + 1677.0, + 287.0 + ], + [ + 1700.0, + 286.0 + ] + ], + "center_px": [ + 1693.5, + 292.75 + ], + "area_px": 280.0 + }, + { + "image_points_px": [ + [ + 1690.0, + 272.0 + ], + [ + 1712.0, + 271.0 + ], + [ + 1722.0, + 284.0 + ], + [ + 1700.0, + 284.0 + ] + ], + "center_px": [ + 1706.0, + 277.75 + ], + "area_px": 280.0 + }, + { + "image_points_px": [ + [ + 1702.0, + 257.0 + ], + [ + 1723.0, + 257.0 + ], + [ + 1734.0, + 268.0 + ], + [ + 1712.0, + 269.0 + ] + ], + "center_px": [ + 1717.75, + 262.75 + ], + "area_px": 252.5 + }, + { + "image_points_px": [ + [ + 1757.0, + 240.0 + ], + [ + 1735.0, + 240.0 + ], + [ + 1725.0, + 229.0 + ], + [ + 1746.0, + 228.0 + ] + ], + "center_px": [ + 1740.75, + 234.25 + ], + "area_px": 252.5 + }, + { + "image_points_px": [ + [ + 1656.0, + 259.0 + ], + [ + 1678.0, + 259.0 + ], + [ + 1687.0, + 271.0 + ], + [ + 1665.0, + 271.0 + ] + ], + "center_px": [ + 1671.5, + 265.0 + ], + "area_px": 264.0 + }, + { + "image_points_px": [ + [ + 1575.0, + 249.0 + ], + [ + 1598.0, + 249.0 + ], + [ + 1606.0, + 260.0 + ], + [ + 1584.0, + 261.0 + ] + ], + "center_px": [ + 1590.75, + 254.75 + ], + "area_px": 263.0 + }, + { + "image_points_px": [ + [ + 1589.0, + 235.0 + ], + [ + 1611.0, + 235.0 + ], + [ + 1620.0, + 246.0 + ], + [ + 1598.0, + 246.0 + ] + ], + "center_px": [ + 1604.5, + 240.5 + ], + "area_px": 242.0 + }, + { + "image_points_px": [ + [ + 1622.0, + 247.0 + ], + [ + 1644.0, + 247.0 + ], + [ + 1653.0, + 258.0 + ], + [ + 1631.0, + 258.0 + ] + ], + "center_px": [ + 1637.5, + 252.5 + ], + "area_px": 242.0 + }, + { + "image_points_px": [ + [ + 1752.0, + 391.0 + ], + [ + 1751.0, + 400.0 + ], + [ + 1738.0, + 423.0 + ], + [ + 1736.0, + 418.0 + ] + ], + "center_px": [ + 1744.25, + 408.0 + ], + "area_px": 114.0 + }, + { + "image_points_px": [ + [ + 1668.0, + 245.0 + ], + [ + 1689.0, + 245.0 + ], + [ + 1699.0, + 256.0 + ], + [ + 1677.0, + 256.0 + ] + ], + "center_px": [ + 1683.25, + 250.5 + ], + "area_px": 236.5 + }, + { + "image_points_px": [ + [ + 1680.0, + 231.0 + ], + [ + 1702.0, + 231.0 + ], + [ + 1711.0, + 242.0 + ], + [ + 1690.0, + 242.0 + ] + ], + "center_px": [ + 1695.75, + 236.5 + ], + "area_px": 236.5 + }, + { + "image_points_px": [ + [ + 1647.0, + 219.0 + ], + [ + 1669.0, + 219.0 + ], + [ + 1678.0, + 230.0 + ], + [ + 1657.0, + 230.0 + ] + ], + "center_px": [ + 1662.75, + 224.5 + ], + "area_px": 236.5 + }, + { + "image_points_px": [ + [ + 1557.0, + 223.0 + ], + [ + 1579.0, + 223.0 + ], + [ + 1587.0, + 234.0 + ], + [ + 1565.0, + 235.0 + ] + ], + "center_px": [ + 1572.0, + 228.75 + ], + "area_px": 257.0 + }, + { + "image_points_px": [ + [ + 1714.0, + 243.0 + ], + [ + 1735.0, + 243.0 + ], + [ + 1745.0, + 254.0 + ], + [ + 1724.0, + 254.0 + ] + ], + "center_px": [ + 1729.5, + 248.5 + ], + "area_px": 231.0 + }, + { + "image_points_px": [ + [ + 1692.0, + 217.0 + ], + [ + 1713.0, + 217.0 + ], + [ + 1723.0, + 228.0 + ], + [ + 1702.0, + 228.0 + ] + ], + "center_px": [ + 1707.5, + 222.5 + ], + "area_px": 231.0 + }, + { + "image_points_px": [ + [ + 1635.0, + 233.0 + ], + [ + 1657.0, + 233.0 + ], + [ + 1665.0, + 245.0 + ], + [ + 1644.0, + 244.0 + ] + ], + "center_px": [ + 1650.25, + 238.75 + ], + "area_px": 243.0 + }, + { + "image_points_px": [ + [ + 998.0, + 537.0 + ], + [ + 1002.0, + 552.0 + ], + [ + 1001.0, + 572.0 + ], + [ + 996.0, + 545.0 + ] + ], + "center_px": [ + 999.25, + 551.5 + ], + "area_px": 94.5 + }, + { + "image_points_px": [ + [ + 1602.0, + 221.0 + ], + [ + 1624.0, + 221.0 + ], + [ + 1632.0, + 232.0 + ], + [ + 1610.0, + 232.0 + ] + ], + "center_px": [ + 1617.0, + 226.5 + ], + "area_px": 242.0 + }, + { + "image_points_px": [ + [ + 1159.0, + 544.0 + ], + [ + 1125.0, + 547.0 + ], + [ + 1127.0, + 544.0 + ], + [ + 1156.0, + 541.0 + ] + ], + "center_px": [ + 1141.75, + 544.0 + ], + "area_px": 96.0 + }, + { + "image_points_px": [ + [ + 913.0, + 334.0 + ], + [ + 915.0, + 346.0 + ], + [ + 892.0, + 348.0 + ], + [ + 891.0, + 335.0 + ] + ], + "center_px": [ + 902.75, + 340.75 + ], + "area_px": 283.5 + }, + { + "image_points_px": [ + [ + 1218.0, + 296.0 + ], + [ + 1238.0, + 295.0 + ], + [ + 1244.0, + 308.0 + ], + [ + 1223.0, + 309.0 + ] + ], + "center_px": [ + 1230.75, + 302.0 + ], + "area_px": 272.0 + }, + { + "image_points_px": [ + [ + 1645.0, + 276.0 + ], + [ + 1664.0, + 274.0 + ], + [ + 1672.0, + 284.0 + ], + [ + 1653.0, + 286.0 + ] + ], + "center_px": [ + 1658.5, + 280.0 + ], + "area_px": 206.0 + } + ] +} \ No newline at end of file diff --git a/test/homing/20260616_120456/cam2_camera_pose.json b/test/homing/20260616_120456/cam2_camera_pose.json new file mode 100644 index 0000000..12663a1 --- /dev/null +++ b/test/homing/20260616_120456/cam2_camera_pose.json @@ -0,0 +1,747 @@ +{ + "schema_version": "1.0", + "created_utc": "2026-06-16T12:05:07Z", + "source": { + "detection_json": "/app/data/homing/20260616_120456/cam2_aruco_detection.json", + "robot_json": "/app/scripts/robot_1781069752019.json" + }, + "camera": { + "camera_id": "cam2", + "camera_matrix": [ + [ + 1388.99072265625, + 0.0, + 933.082763671875 + ], + [ + 0.0, + 1394.8729248046875, + 562.4996948242188 + ], + [ + 0.0, + 0.0, + 1.0 + ] + ], + "distortion_coefficients": [ + 0.019531700760126114, + -0.11213663965463638, + 0.0026758278254419565, + 0.0007694826927036047, + 0.05339815095067024 + ] + }, + "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": 39, + "used_marker_ids": [ + 73, + 51, + 82, + 95, + 66, + 55, + 86, + 79, + 97, + 47, + 54, + 84, + 96, + 60, + 72, + 62, + 53, + 56, + 67, + 46, + 85, + 98, + 68, + 105, + 50, + 70, + 90, + 91, + 76, + 88, + 104, + 100, + 65, + 94, + 80, + 93, + 87, + 49, + 99 + ], + "history": { + "iters": [ + 0, + 1, + 2, + 3 + ], + "rms": [ + 0.010459464703921952, + 0.000600512883123414, + 0.0002694619125775263, + 0.0002694585232559286 + ], + "lambda": [ + 0.001, + 0.0005, + 0.00025, + 0.000125 + ] + }, + "residual_rms_px": 0.5308468666027378, + "residual_median_px": 0.442470638660156, + "residual_max_px": 1.0184954029835627, + "sigma2_normalized": 7.865855373327773e-08 + }, + "camera_pose": { + "world_to_camera": { + "rotation_matrix": [ + [ + -0.11123913526535034, + -0.9937126636505127, + -0.012687010690569878 + ], + [ + -0.6987926959991455, + 0.08728941529989243, + -0.7099784016609192 + ], + [ + 0.7066220045089722, + -0.07011179625988007, + -0.7041091322898865 + ] + ], + "translation_m": [ + 0.06501124799251556, + 0.4216889441013336, + 0.7629748582839966 + ], + "rvec_rad": [ + 1.6611880808196222, + -1.8674322262849752, + 0.7656557967967812 + ] + }, + "camera_in_world": { + "position_m": [ + -0.2372298538684845, + 0.08128705620765686, + 0.8374323844909668 + ], + "position_mm": [ + -237.2298583984375, + 81.28705596923828, + 837.432373046875 + ], + "orientation_deg": { + "roll": -174.31349182128906, + "pitch": -44.96072769165039, + "yaw": -99.04487609863281 + } + }, + "uncertainty": { + "pose_covariance_6x6": [ + [ + 7.70808885712673e-08, + -5.051963537309151e-08, + 6.275184896470588e-09, + 8.219944671662197e-09, + 3.0401303313197284e-08, + 4.050671454678838e-08 + ], + [ + -5.051963537309112e-08, + 1.190708779865382e-07, + -7.710624609173114e-09, + -3.60891791637598e-08, + -3.822077534280391e-08, + -5.7320708312388815e-08 + ], + [ + 6.275184896470584e-09, + -7.710624609173487e-09, + 3.4448589627302786e-07, + 6.347555001744274e-08, + -3.73214863209708e-08, + -3.6939829357622016e-08 + ], + [ + 8.219944671662068e-09, + -3.6089179163759805e-08, + 6.34755500174426e-08, + 2.5430604878286124e-08, + 2.514907754778194e-09, + 7.848306963852704e-09 + ], + [ + 3.040130331319718e-08, + -3.8220775342803935e-08, + -3.732148632097092e-08, + 2.514907754778194e-09, + 2.366305405059915e-08, + 3.099727891165752e-08 + ], + [ + 4.050671454678818e-08, + -5.732070831238883e-08, + -3.6939829357622505e-08, + 7.848306963852644e-09, + 3.0997278911657537e-08, + 6.82205068714338e-08 + ] + ], + "parameter_std": { + "rvec_std_deg": [ + 0.015907282309253958, + 0.019770853151942665, + 0.033628566543559106 + ], + "tvec_std_m": [ + 0.00015946976164240708, + 0.00015382800151662619, + 0.00026119055662759673 + ] + }, + "camera_center_std_m": [ + 0.00030722285641275344, + 0.0005444062391567311, + 0.00035845833746427834 + ], + "camera_center_std_mm": [ + 0.30722285641275343, + 0.544406239156731, + 0.35845833746427835 + ], + "orientation_std_deg": { + "roll": 0.03168101724253478, + "pitch": 0.023469916191750515, + "yaw": 0.01918342103865859 + } + } + }, + "observations": { + "markers": [ + { + "marker_id": 73, + "observed_center_px": [ + 492.5, + 1044.0 + ], + "projected_center_px": [ + 492.4930114746094, + 1043.94873046875 + ], + "reprojection_error_px": 0.051743640398894786, + "confidence": 0.2681332709796957 + }, + { + "marker_id": 51, + "observed_center_px": [ + 1265.25, + 1035.5 + ], + "projected_center_px": [ + 1265.3367919921875, + 1036.1767578125 + ], + "reprojection_error_px": 0.6823005105433091, + "confidence": 0.4130819814942474 + }, + { + "marker_id": 82, + "observed_center_px": [ + 547.0, + 1041.75 + ], + "projected_center_px": [ + 547.1077880859375, + 1041.7156982421875 + ], + "reprojection_error_px": 0.11311446441148582, + "confidence": 0.28570000902510134 + }, + { + "marker_id": 95, + "observed_center_px": [ + 1405.75, + 993.0 + ], + "projected_center_px": [ + 1406.1728515625, + 993.415771484375 + ], + "reprojection_error_px": 0.5930171760818419, + "confidence": 0.7223666558526649 + }, + { + "marker_id": 66, + "observed_center_px": [ + 1518.5, + 947.0 + ], + "projected_center_px": [ + 1519.346923828125, + 947.2127075195312 + ], + "reprojection_error_px": 0.8732264651916143, + "confidence": 0.7055288033501755 + }, + { + "marker_id": 55, + "observed_center_px": [ + 1343.5, + 869.75 + ], + "projected_center_px": [ + 1343.1153564453125, + 870.1083374023438 + ], + "reprojection_error_px": 0.5256960700643504, + "confidence": 0.5911102318971898 + }, + { + "marker_id": 86, + "observed_center_px": [ + 570.5, + 855.75 + ], + "projected_center_px": [ + 570.8598022460938, + 855.154541015625 + ], + "reprojection_error_px": 0.6957219691565115, + "confidence": 0.49213911198599 + }, + { + "marker_id": 79, + "observed_center_px": [ + 1192.75, + 850.5 + ], + "projected_center_px": [ + 1192.2608642578125, + 850.8606567382812 + ], + "reprojection_error_px": 0.6077228456730802, + "confidence": 0.5414756619284304 + }, + { + "marker_id": 97, + "observed_center_px": [ + 1462.0, + 832.0 + ], + "projected_center_px": [ + 1462.5380859375, + 832.4049072265625 + ], + "reprojection_error_px": 0.6734139427260099, + "confidence": 0.5279372649886516 + }, + { + "marker_id": 47, + "observed_center_px": [ + 1348.5, + 797.75 + ], + "projected_center_px": [ + 1348.350341796875, + 797.6093139648438 + ], + "reprojection_error_px": 0.20540238131674465, + "confidence": 0.5088850430842212 + }, + { + "marker_id": 54, + "observed_center_px": [ + 1406.0, + 793.75 + ], + "projected_center_px": [ + 1406.117919921875, + 793.9895629882812 + ], + "reprojection_error_px": 0.2670122344186656, + "confidence": 0.4782396466982758 + }, + { + "marker_id": 84, + "observed_center_px": [ + 620.0, + 800.5 + ], + "projected_center_px": [ + 620.1146240234375, + 800.3106689453125 + ], + "reprojection_error_px": 0.2213253600879973, + "confidence": 0.4467793485983816 + }, + { + "marker_id": 96, + "observed_center_px": [ + 1209.75, + 783.0 + ], + "projected_center_px": [ + 1209.1610107421875, + 782.8501586914062 + ], + "reprojection_error_px": 0.6077505767826198, + "confidence": 0.43618784694977364 + }, + { + "marker_id": 60, + "observed_center_px": [ + 588.25, + 774.75 + ], + "projected_center_px": [ + 588.4884033203125, + 774.8460693359375 + ], + "reprojection_error_px": 0.2570320222141527, + "confidence": 0.4149513143267376 + }, + { + "marker_id": 72, + "observed_center_px": [ + 705.5, + 756.0 + ], + "projected_center_px": [ + 705.5302124023438, + 756.4302978515625 + ], + "reprojection_error_px": 0.4313571957376901, + "confidence": 0.41472917138862403 + }, + { + "marker_id": 62, + "observed_center_px": [ + 1183.5, + 747.5 + ], + "projected_center_px": [ + 1183.393798828125, + 747.59423828125 + ], + "reprojection_error_px": 0.14198430392327666, + "confidence": 0.398140004533079 + }, + { + "marker_id": 53, + "observed_center_px": [ + 683.25, + 712.75 + ], + "projected_center_px": [ + 683.28271484375, + 713.240478515625 + ], + "reprojection_error_px": 0.4915683424421169, + "confidence": 0.3239734944910412 + }, + { + "marker_id": 56, + "observed_center_px": [ + 738.25, + 696.0 + ], + "projected_center_px": [ + 737.8375244140625, + 696.041748046875 + ], + "reprojection_error_px": 0.4145829330934417, + "confidence": 0.3443049703609756 + }, + { + "marker_id": 67, + "observed_center_px": [ + 616.0, + 685.0 + ], + "projected_center_px": [ + 616.3634033203125, + 684.5353393554688 + ], + "reprojection_error_px": 0.58989108129412, + "confidence": 0.30389163461125196 + }, + { + "marker_id": 46, + "observed_center_px": [ + 717.25, + 662.5 + ], + "projected_center_px": [ + 716.9480590820312, + 662.5203247070312 + ], + "reprojection_error_px": 0.30262420864781714, + "confidence": 0.3149845419556931 + }, + { + "marker_id": 85, + "observed_center_px": [ + 1316.75, + 637.25 + ], + "projected_center_px": [ + 1316.73291015625, + 636.42822265625 + ], + "reprojection_error_px": 0.8219550264218871, + "confidence": 0.32688682176810563 + }, + { + "marker_id": 98, + "observed_center_px": [ + 561.5, + 643.0 + ], + "projected_center_px": [ + 561.7496948242188, + 642.4434204101562 + ], + "reprojection_error_px": 0.6100232332233498, + "confidence": 0.29086841462927165 + }, + { + "marker_id": 68, + "observed_center_px": [ + 734.5, + 628.0 + ], + "projected_center_px": [ + 734.5006103515625, + 627.9244995117188 + ], + "reprojection_error_px": 0.07550295530465688, + "confidence": 0.29243937849297746 + }, + { + "marker_id": 105, + "observed_center_px": [ + 1256.0, + 624.25 + ], + "projected_center_px": [ + 1255.47509765625, + 623.591796875 + ], + "reprojection_error_px": 0.8418751832866965, + "confidence": 0.3029127688517622 + }, + { + "marker_id": 50, + "observed_center_px": [ + 685.75, + 633.0 + ], + "projected_center_px": [ + 685.4552001953125, + 632.6983032226562 + ], + "reprojection_error_px": 0.4218149716444313, + "confidence": 0.28667702620740154 + }, + { + "marker_id": 70, + "observed_center_px": [ + 581.5, + 618.0 + ], + "projected_center_px": [ + 581.670166015625, + 617.6889038085938 + ], + "reprojection_error_px": 0.3545945757920754, + "confidence": 0.2655177345943533 + }, + { + "marker_id": 90, + "observed_center_px": [ + 566.0, + 585.0 + ], + "projected_center_px": [ + 566.2715454101562, + 584.881103515625 + ], + "reprojection_error_px": 0.29643428238592895, + "confidence": 0.23219602732829617 + }, + { + "marker_id": 91, + "observed_center_px": [ + 559.5, + 524.0 + ], + "projected_center_px": [ + 560.0989379882812, + 523.4891967773438 + ], + "reprojection_error_px": 0.787176375460037, + "confidence": 0.21495162665262563 + }, + { + "marker_id": 76, + "observed_center_px": [ + 737.75, + 537.0 + ], + "projected_center_px": [ + 737.5767211914062, + 536.794677734375 + ], + "reprojection_error_px": 0.26866852861668133, + "confidence": 0.2109775341382568 + }, + { + "marker_id": 88, + "observed_center_px": [ + 576.25, + 491.5 + ], + "projected_center_px": [ + 576.6868286132812, + 491.4295654296875 + ], + "reprojection_error_px": 0.442470638660156, + "confidence": 0.18751626052772438 + }, + { + "marker_id": 104, + "observed_center_px": [ + 661.25, + 443.0 + ], + "projected_center_px": [ + 661.183837890625, + 443.0474853515625 + ], + "reprojection_error_px": 0.08143883183078994, + "confidence": 0.16576757504988693 + }, + { + "marker_id": 100, + "observed_center_px": [ + 730.75, + 453.0 + ], + "projected_center_px": [ + 730.3933715820312, + 452.9394836425781 + ], + "reprojection_error_px": 0.361726496152142, + "confidence": 0.16629537203475994 + }, + { + "marker_id": 65, + "observed_center_px": [ + 1209.0, + 414.0 + ], + "projected_center_px": [ + 1208.3629150390625, + 413.75823974609375 + ], + "reprojection_error_px": 0.6814141676114097, + "confidence": 0.1641051378333676 + }, + { + "marker_id": 94, + "observed_center_px": [ + 728.5, + 406.0 + ], + "projected_center_px": [ + 728.5389404296875, + 406.2892150878906 + ], + "reprojection_error_px": 0.291824817532418, + "confidence": 0.12091049607966889 + }, + { + "marker_id": 80, + "observed_center_px": [ + 1231.0, + 373.75 + ], + "projected_center_px": [ + 1230.5965576171875, + 373.7982482910156 + ], + "reprojection_error_px": 0.40631718378054876, + "confidence": 0.12350728340782749 + }, + { + "marker_id": 93, + "observed_center_px": [ + 757.5, + 367.5 + ], + "projected_center_px": [ + 757.3904418945312, + 368.3028869628906 + ], + "reprojection_error_px": 0.8103273743701577, + "confidence": 0.1305433400143518 + }, + { + "marker_id": 87, + "observed_center_px": [ + 1127.25, + 335.0 + ], + "projected_center_px": [ + 1126.9609375, + 334.5552673339844 + ], + "reprojection_error_px": 0.5304189600001262, + "confidence": 0.11698041029937327 + }, + { + "marker_id": 49, + "observed_center_px": [ + 742.0, + 328.25 + ], + "projected_center_px": [ + 742.1221923828125, + 329.2611389160156 + ], + "reprojection_error_px": 1.0184954029835627, + "confidence": 0.11651950992496915 + }, + { + "marker_id": 99, + "observed_center_px": [ + 1194.25, + 321.0 + ], + "projected_center_px": [ + 1193.8394775390625, + 320.6575012207031 + ], + "reprojection_error_px": 0.5346345525253963, + "confidence": 0.10558573070242767 + } + ] + }, + "qa": { + "sanity_notes": [] + } +} \ No newline at end of file diff --git a/test/homing/20260616_120456/cam2_debug.jpg b/test/homing/20260616_120456/cam2_debug.jpg new file mode 100644 index 0000000..4b25ad4 Binary files /dev/null and b/test/homing/20260616_120456/cam2_debug.jpg differ diff --git a/test/homing/20260616_120456/state_Arm1.json b/test/homing/20260616_120456/state_Arm1.json new file mode 100644 index 0000000..f848d79 --- /dev/null +++ b/test/homing/20260616_120456/state_Arm1.json @@ -0,0 +1,37 @@ +{ + "status": "ok", + "link": "Arm1", + "joint": "y", + "joint_origin_world_mm": [ + 299.24409288922095, + 101.1, + 71.2 + ], + "joint_axis_world": [ + -1.0, + 0.0, + 0.0 + ], + "mean_angle_deg": 42.11971851018807, + "circular_variance": 0.0, + "circular_std_deg": 0.0, + "num_pairs_used": 1, + "num_markers_matched": 2, + "per_pair": [ + { + "marker_ids": [ + 197, + 243 + ], + "skipped": false, + "angle_deg": 42.11971851018807, + "baseline_model_mm": 35.0, + "baseline_obs_mm": 32.87599167028967, + "weight": 1150.6597084601385 + } + ], + "accumulated_state": { + "x": 189.24409288922092, + "y": 42.11971851018807 + } +} \ No newline at end of file