scoop op• Data kinds: scalar × scalar → table
• Call: import fullseye as fs; fs.ledger.scoop_scene_mjcf(n_spheres: 'int' = 500, radius: 'float' = 0.002, *, a: 'float' = 0.03, h: 'float' = 0.012, rim_height: 'float' = 0.1, mu_slide: 'float' = 0.16, mu_roll: 'float' = 0.09, density: 'float' = 2500.0, bowl_mu: 'float' = 0.5, tile: 'float' = 0.006, drop_gap: 'float' = 0.0003, timestep: 'float' = 0.0015, contact_tc: 'float' = 0.006, solver_iterations: 'int' = 50, solver: 'str' = 'CG', cone: 'str' = 'elliptic', condim: 'int' = 6, seed: 'int' = 0) -> 'dict' (to call the implementation directly, import scoop; scoop.scoop_scene_mjcf(n_spheres: 'int' = 500, radius: 'float' = 0.002, *, a: 'float' = 0.03, h: 'float' = 0.012, rim_height: 'float' = 0.1, mu_slide: 'float' = 0.16, mu_roll: 'float' = 0.09, density: 'float' = 2500.0, bowl_mu: 'float' = 0.5, tile: 'float' = 0.006, drop_gap: 'float' = 0.0003, timestep: 'float' = 0.0015, contact_tc: 'float' = 0.006, solver_iterations: 'int' = 50, solver: 'str' = 'CG', cone: 'str' = 'elliptic', condim: 'int' = 6, seed: 'int' = 0) -> 'dict'; from the registry, opsdrive.get("scoop_scene_mjcf"))
MJCF string of a scene in which a spherical-cap bowl (rim radius a, depth h, rim height rim_height) is tiled with thin plates, and n_spheres rigid spheres are stacked on a grid inside the bowl and released from directly above (no mujoco needed, listed in the ledger).
The bowl is made of 2 mm thick plates tangent to a spherical inner surface (radius R = (a² + h²) / 2h), arranged in azimuth for each latitude ring (tile = the nominal plate edge length, overlapped by a factor of 1.35 so no gaps form). The spheres are stacked in layers on a staggered grid from the bottom (kept r + drop_gap away from the bowl's inner surface), and above the rim they are stacked inside the rim's cylinder — when released, the column above the rim collapses into a heap, and overflowing spheres roll off the rim and scatter on the floor (height 0). Dropping them from above made them bounce and even throw the bowl's contents out (only 172 of 500 remained and no heap formed, measured), so this imitates the quiet state right after scooping up. The friction convention is the same as granular's heap_scene_mjcf (rolling friction is dimensionless μ_r × radius).
Returns: xml, positions (initial centres), info (n, radius, a, h, R, rim_height, bottom_height, mass_each, timestep, n_tiles, V_struck). Raises ValueError: contact_tc < 2 timestep / h > a / misspelling / spheres do not fit.
• 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_powder_scoop_pour — py -3.11 examples/poc_powder_scoop_pour.py
table as input)course_layout · course_occupancy · course_contains · world_build · world_camera · world_move · lidar_scan · rss_longitudinal_same
scoop)spoon_bowl_volume · scoop_synth_side · revolution_volume_side · two_view_volume · scoop_volume_read · scoop_count · scoop_image_limit · tilt_wedge_retained
*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.