granular op• Data kinds: scalar × scalar → table
• Call: import fullseye as fs; fs.ledger.heap_synth_cone(phi_deg: 'float', radius_px: 'float', pitch: 'float' = 0.001, *, toe_round_px: 'float' = 0.0, apex_blunt_px: 'float' = 0.0, ground_tilt_deg: 'float' = 0.0, margin_px: 'int' = 12, supersample: 'int' = 8, noise: 'float' = 0.0, seed: 'int | None' = None) -> 'dict' (to call the implementation directly, import granular; granular.heap_synth_cone(phi_deg: 'float', radius_px: 'float', pitch: 'float' = 0.001, *, toe_round_px: 'float' = 0.0, apex_blunt_px: 'float' = 0.0, ground_tilt_deg: 'float' = 0.0, margin_px: 'int' = 12, supersample: 'int' = 8, noise: 'float' = 0.0, seed: 'int | None' = None) -> 'dict'; from the registry, opsdrive.get("heap_synth_cone"))
Synthesizes a conical heap with a known angle of repose (side image = anti-aliased coverage, heightmap = height at cell centers).
• radius_px: radius to the toe [px] (without rounding). Height H = R tan φ.
• ground_tilt_deg: tilt of the reference plane (shear type: z' = z + x tan β). The trap when the heightmap's reference plane (datum) is tilted (on uneven ground the angle of repose gets added to —— the same gate as the existing PoC poc_stockpile_volume). It differs from a camera roll (rotation type) at first order, not second order (with β = 5 degrees and φ = 30 degrees, 1.4 degrees: atan(tan φ + tan β) vs φ + β), so it is treated as a separate thing.
• noise: amplitude of uniform noise added to the coverage (a stand-in for edge jitter).
• Returns: side (coverage (rows, cols)), heightmap [m], ground (reference plane [m], same shape), truth (phi_deg, R_px, H_px, toe_px, V (numerical solid-of-revolution integral [m³]), V_cone (closed form), ground_tilt_deg), pitch. The powder height in column x of the side image (column sum of coverage) is exactly c(x) [px] (sub-pixel).
Raises ValueError: out of range, overlapping arcs.
• 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.
• poc_granular_heap_repose — py -3.11 examples/poc_granular_heap_repose.py
table as input)course_layout · course_occupancy · course_contains · world_build · world_camera · world_move · lidar_scan · rss_longitudinal_same
granular)heap_volume_cone · heap_mass · heap_volume_heightmap · beverloo_rate · beverloo_fit · discharge_synth · dispense_mass_from_video · hopper_discharge_rate
*Provenance: granular.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.