pose_graph op• Data kinds: pose → table
• Call: import fullseye as fs; fs.ledger.optimize_pose_graph(poses_init, edges, fix_first=True, max_iter=200) (to call the implementation directly, import pose_graph; pose_graph.optimize_pose_graph(poses_init, edges, fix_first=True, max_iter=200); from the registry, ops3d.get("optimize_pose_graph"))
Optimise the global poses from relative-pose constraints and loop closures. → dict{poses, rmse, cost}.
Optimises the initial estimate poses_init (N,6)=[rvec|t] (with drift) so as to satisfy the relative pose constraints in edges. fix_first=True fixes the first node to remove the gauge.
• edges: list of (i, j, rvec_ij, t_ij[, w_rot, w_trans]). (rvec_ij, t_ij) is the measurement of "j seen from i" = T_i⁻¹ ∘ T_j (same convention as relative_pose). Odometry (i, i+1) and loop closures (distant i, j) can be mixed in the same form. A weight multiplies the residual by sqrt(w) (1 if omitted).
• Each edge's residual is measured⁻¹ ∘ predicted turned into 6 dimensions (rotation vector + translation), minimised with scipy.optimize.least_squares(method="lm") (max_nfev = max_iter × number of parameters).
• Returns: poses (N,6) (with fix_first the first stays at its initial value), rmse = mean_edge_error(poses, edges), cost = final cost (1/2 of the sum of the 2nd powers of the residuals).
fail-closed: fewer than 2 nodes, 0 edges, or an edge index outside [0, N) (silent wrap-around of negative indices is also rejected) raise ValueError. With fix_first=False the gauge remains and the solution is not unique (LM returns 1 solution near the initial value). Rotation is in rad and translation in coordinate units; since both are placed in the same residual vector, align them with weights when the units differ greatly. Neither 3D points nor observed pixels are used (optimising with those included is bundle_adjust).
• Sample-data catalog (download URLs / licences) — 2-D uses skimage.data (BSD/public domain) plus synthetic images; 3-D lists download URLs for real data sources (Stanford, PDS, …).
• Operator provenance and references — the sources of the research/methods this op family came from.
• pose_graph_slam — py -3.11 examples_3d/pose_graph_slam.py
table as input)fuse_to_voxel · mesh_select_lod
pose_graph)relative_pose · mean_edge_error
*Provenance: pose_graph.py — 3D operator registry. This per-op note is generated by tools/opdocs.py md (do not hand-edit).*
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.