obstacle_fit_doublet — DRIVE swarmflow op

• Data kinds: table → table

• Call: import fullseye as fs; fs.ledger.obstacle_fit_doublet(field, speed=None, upstream_only: 'bool' = False, exclude_margin: 'float' = 1.25, min_explained: 'float' = 0.5, min_radius=None) -> 'dict' (implementation को सीधे call करना हो तो import swarmflow; swarmflow.obstacle_fit_doublet(field, speed=None, upstream_only: 'bool' = False, exclude_margin: 'float' = 1.25, min_explained: 'float' = 0.5, min_radius=None) -> 'dict', registry से लेना हो तो opsdrive.get("obstacle_fit_doublet"))

उपयोग

velocity field पर cylinder के चारों ओर potential flow u − i v = U (1 − R²/(z − z_c)²) fit करता है (implementation 2, 2-D nonlinear least squares)।

अज्ञात राशियाँ (x_c, y_c, R², U) हैं। प्रारंभ बिंदु 2 हैं: stagnation_from_centerline, और ग्रिड के नोड्स को केंद्र के उम्मीदवार मानकर की गई मोटी खोज (U स्थिर करने पर मॉडल R² में रैखिक होता है, इसलिए संवृत रूप में हल होता है)। जिसका व्याख्यात अंश बड़ा हो, उसे लिया जाता है। वृत्त के exclude_margin गुने के भीतर के ग्रिड बिंदु उपयोग नहीं किए जाते (क्योंकि ग्रिड पर स्थानांतरित करने वाला कर्नेल दीवार के पार जाकर गति को औसत कर देता है) —— पुनः अनुमान करके 3 बार दोहराया जाता है। upstream_only होने पर केवल टक्कर बिंदु से ऊपरी धारा (x < x_c − R) के ग्रिड से फ़िट किया जाता है (क्या "टकराने से पहले" पता चल सकता है)।

निर्णय: केवल एकसमान प्रवाह वाले मॉडल (u, v स्थिर) के अवशेष RSS₀ के सापेक्ष, बेलन मॉडल से घटा अंश 1 − RSS₁/RSS₀ (विक्षोभ का वह अंश जो बेलन से समझाया जा सकता है) min_explained या अधिक हो, त्रिज्या min_radius (डिफ़ॉल्ट = 2 ग्रिड अंतराल) या अधिक हो, और केंद्र क्षेत्र के भीतर हो —— इन 3 से detected। नकारात्मक निर्णय (कोई बाधा नहीं) इस अंश के छोटे होने से आता है। ★त्रिज्या की निचली सीमा विभेदन की सीमा है: swarm_field_from_tracks का ग्रिड व्यष्टियों के अंतराल s पर है, इसलिए डिफ़ॉल्ट रूप से R < 2s वाली बाधा को "मौजूद" नहीं कहा जाता। अस्वीकृति उचित है, यह माप से पुष्ट किया गया (एकसमान बिखेरे गए कण, R = 0.6 m: R/s ≈ 5 पर केंद्र और त्रिज्या दोनों 2 % के भीतर, R/s ≈ 2.5 पर 5 % के भीतर, R/s ≈ 1.2 पर त्रिज्या 48 % छोटी आती है)।

Returns:

dict: center, radius, speed, stagnation, explained, detected, n_used, rms_residual

(m/s), rms_null (m/s)।

संदर्भ (sample data, साहित्य)

• 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 के स्रोत।

• Algorithm का मानक स्रोत (लेखक, वर्ष) और उपयोग ऊपर की family usage guide में दिए गए हैं।

चलाए जा सकने वाले उदाहरण (verified samples जो सच में यह op call करते हैं)

• poc_swarm_obstacle_from_flow — py -3.11 examples/poc_swarm_obstacle_from_flow.py

वे अगले ops जिनसे type जुड़ता है (table को input के रूप में लेते हैं)

course_layout · course_occupancy · course_contains · world_build · world_camera · world_move · lidar_scan · rss_longitudinal_same

इसी category के (swarmflow)

sph_kernel · sph_density_pressure · swarm_simulate · swarm_render_overhead · swarm_field_from_tracks · swarm_field_from_piv · potential_flow_cylinder · velocity_deficit_map


*Provenance: swarmflow.py — DRIVE operator registry. यह per-op note tools/opdocs.py md से अपने-आप generate होता है (हाथ से edit न करें)।*

© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.