fly_tau_from_expansion — FLYVISION looming op

• Data kinds: signal → signal

• Call: import fullseye as fs; fs.ledger.fly_tau_from_expansion(theta_signal, dt_s, shape='sphere') (implementation को सीधे call करना हो तो import flyvision; flyvision.fly_tau_from_expansion(theta_signal, dt_s, shape='sphere'), registry से लेना हो तो opsflyvision.get("fly_tau_from_expansion"))

उपयोग

optical expansion से time-to-contact — tau margin।

> नीचे का विस्तृत विवरण मूल text में है — सारांश और headings का अनुवाद हो चुका है।

From the subtended angle and its rate::

shape="disk": tau = sin(theta) / theta'

shape="sphere": tau = 2*tan(theta/2) / theta'

theta_signal is the full subtended angle over time, radians.

★ The two object models differ by 33% at a 60-degree subtense (sin 60 = 0.866 vs 2 tan 30 = 1.155); using the wrong one silently mis-times a landing, so the model is a required, named choice rather than a default guess.

theta_signal: the full subtended angle per sample, radians.

dt_s: the sample interval, seconds.

shape: "disk" (a frontal circular disk) or "sphere".

Returns a 1-D float64 array of the time-to-contact per sample, seconds. Non-expanding samples (theta' <= 0) return NaN — a documented non-finite, because a contracting or static angle has no time-to-contact and inventing one would be a plausible-wrong number. (The registry op tb_fly_tau_from_expansion must return a finite signal, so it replaces those NaN by the signal fallback without recording a fallback event — backend_safe.NONFINITE_BY_DESIGN; call this function directly to keep the NaN.)

Ground truth: for the model's own object geometry (theta = 2 asin(l/d) for a sphere, theta = 2 atan(l/d) for a disk) approaching at speed |v|, the returned tau equals the true distance-over-speed d/|v| (pinned in the tests).

Raises ValueError: a non-1-D / empty / too-short (< 3) / non-finite *theta_signal*, a signal over MAX_SIGNAL_POINTS, a non-positive *dt_s*, and an unknown *shape*. A non-expanding angle is not an error — it is the documented NaN return above.

उपयोग की विस्तृत guide

• fly_vision family guide

संदर्भ (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_fly_vision — py -3.11 examples/poc_fly_vision.py

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

fly_hex_quantize · fly_emd_response · fly_lgmd_eta · fly_dsi

इसी category के (looming)

fly_lgmd_eta


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

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