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) (implementation को सीधे call करना हो तो import pose_graph; pose_graph.optimize_pose_graph(poses_init, edges, fix_first=True, max_iter=200), registry से लेना हो तो ops3d.get("optimize_pose_graph"))
relative pose constraints + loop closures से global poses optimise करता है। → dict{poses, rmse, cost}।
poses_init (N,6)=[rvec|t] के initial estimate (drift सहित) को इस तरह optimise करता है कि edges की relative pose constraints पूरी हों। fix_first=True पहले node को स्थिर करके gauge हटाता है।
• edges: (i, j, rvec_ij, t_ij[, w_rot, w_trans]) की list। (rvec_ij, t_ij) "i से देखा गया j" = T_i⁻¹ ∘ T_j का measurement है (relative_pose जैसा ही convention)। Odometry (i, i+1) और loop closure (दूर के i, j) को एक ही रूप में मिलाया जा सकता है। Weight residual को sqrt(w) से गुणा करता है (न देने पर 1)।
• हर edge का residual measured⁻¹ ∘ predicted को rotation vector + translation के 6 dimensions में बदलकर बनता है, और scipy.optimize.least_squares(method="lm") से minimise होता है (max_nfev = max_iter × parameters की संख्या)।
• Return value: poses (N,6) (fix_first होने पर पहला initial value पर ही रहता है), rmse = mean_edge_error(poses, edges), cost = अंतिम cost (residuals के 2 घात के योग का 1/2)।
fail-closed: nodes की संख्या < 2, 0 edges, या edge का index [0, N) से बाहर हो (negative index का चुपचाप wrap-around भी अस्वीकार) तो ValueError। fix_first=False करने पर gauge बना रहता है और हल अद्वितीय नहीं होता (LM initial value के पास का 1 हल लौटाता है)। Rotation rad में और translation coordinate की इकाई में है; दोनों को एक ही residual vector में रखा जाता है, इसलिए इकाइयाँ बहुत अलग हों तो weights से बराबर करें। न 3D points और न observed pixels इस्तेमाल होते हैं (उन्हें शामिल करके optimise करना bundle_adjust है)।
• Sample data catalog (DL URL / license) — 2-D के लिए skimage.data (BSD/public) + synthetic, 3-D के लिए real data sources (Stanford/PDS आदि) के DL URL।
• Operators का स्रोत और संदर्भ — इस op family के मूल research/methods के स्रोत।
• pose_graph_slam — py -3.11 examples_3d/pose_graph_slam.py
table को input के रूप में लेते हैं)fuse_to_voxel · mesh_select_lod
pose_graph)relative_pose · mean_edge_error
*Provenance: pose_graph.py — 3D operator registry. यह per-op note tools/opdocs.py md से अपने-आप generate होता है (हाथ से edit न करें)।*
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.