tilt_wedge_retained — DRIVE scoop op

• Data kinds: scalar × scalar × scalar × scalar → table

• Call: import fullseye as fs; fs.ledger.tilt_wedge_retained(theta_deg: 'float', phi_deg: 'float', L: 'float', h0: 'float') -> 'dict' (to call the implementation directly, import scoop; scoop.tilt_wedge_retained(theta_deg: 'float', phi_deg: 'float', L: 'float', h0: 'float') -> 'dict'; from the registry, opsdrive.get("tilt_wedge_retained"))

Usage

Amount retained when powder heaped flat to depth h0 in a container with no wall at the mouth (floor length L, back wall perpendicular to the floor and tall enough) is tilted by θ with the mouth lowered (2-D cross-section, quasi-static, own derivation).

The front at the mouth is from the start a slope at the angle of repose φ (there is no wall at the mouth, so no vertical cliff stands). When tilted, the slope through the mouth keeps φ from the horizontal, i.e. φ − θ seen from the floor. The flat surface at the back stays parallel to the floor (stable for θ < φ). Retained cross-section A(θ) = ∫₀ᴸ min(h₀, x tan(φ − θ)) dx, poured-out fraction F = 1 − A(θ) / A(0). Pouring starts at θ = 0⁺ (spills immediately from the front wedge), the angle at which the slope reaches the back wall is θ_b = φ − atan(h₀ / L), and everything pours out at θ ≥ φ. The formula calls granular's spoon_tilt_dispense(lip="open") (the retained cross-section formula lives in only one place, in granular). For reference it also returns, for a vessel with a rim at the mouth (lip="wall", initial amount L h₀, no spilling until θ_c), the fraction F_lip_wall and theta_c_lip_wall_deg (to compare which one fits MuJoCo's open-mouthed trough).

Returns: A, A0, fraction, theta_back_deg, F_lip_wall, theta_c_lip_wall_deg. Raises ValueError: θ outside [0, 90), φ outside (0, 90), L / h0 ≤ 0.

References (sample data, literature)

• 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.

• The canonical algorithm (author, year) and its uses are named in the family usage guide above.

Runnable examples (verified samples that actually call this op)

• poc_powder_scoop_pour — py -3.11 examples/poc_powder_scoop_pour.py

Ops the type connects to (they accept table as input)

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

Same category (scoop)

spoon_bowl_volume · scoop_synth_side · revolution_volume_side · two_view_volume · scoop_volume_read · scoop_count · scoop_image_limit · tilt_pour_rate


*Provenance: scoop.py — DRIVE 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.