granular op• Datenarten: scalar × scalar → table
• Aufruf: import fullseye as fs; fs.ledger.heap_scene_mjcf(n_spheres: 'int' = 1200, radius: 'float' = 0.004, *, mu_slide: 'float' = 0.16, mu_roll: 'float' = 0.09, density: 'float' = 2500.0, orifice_d: 'float' = 0.048, orifice_height: 'float' = 0.06, bin_radius: 'float' = 0.05, timestep: 'float' = 0.0015, base_roll: 'float' = 0.01, base_slide: 'float' = 1.0, solver_iterations: 'int' = 50, solver: 'str' = 'CG', cone: 'str' = 'elliptic', condim: 'int' = 6, contact_tc: 'float' = 0.006, seed: 'int' = 0) -> 'dict' (die Implementierung direkt: import granular; granular.heap_scene_mjcf(n_spheres: 'int' = 1200, radius: 'float' = 0.004, *, mu_slide: 'float' = 0.16, mu_roll: 'float' = 0.09, density: 'float' = 2500.0, orifice_d: 'float' = 0.048, orifice_height: 'float' = 0.06, bin_radius: 'float' = 0.05, timestep: 'float' = 0.0015, base_roll: 'float' = 0.01, base_slide: 'float' = 1.0, solver_iterations: 'int' = 50, solver: 'str' = 'CG', cone: 'str' = 'elliptic', condim: 'int' = 6, contact_tc: 'float' = 0.006, seed: 'int' = 0) -> 'dict'; aus dem Register: opsdrive.get("heap_scene_mjcf"))
MJCF-String einer Szene mit Starrkörperkugeln in einem Flachbodentrichter (quadratische Auslauföffnung, Kantenlänge orifice_d) (kein mujoco nötig, im Register geführt).
Die Kugeln werden lagenweise in einem zylindrischen Behälter gestapelt (Radius bin_radius, Bodenplatte in Höhe orifice_height). Sie fließen durch das Loch in der Bodenplatte und bilden auf einer Ebene einen Haufen (er stoppt, sobald der Haufen das Loch erreicht —— wie ein realer Haufen unter einem Trichter). Das Loch ist ein von 4 Platten umschlossenes Quadrat (die Beverloo-Formel nutzt das D₀ eines runden Lochs; ein Quadrat wird über seinen Äquivalentdurchmesser verglichen). Reibung ist (mu_slide, 0.005, mu_roll·R): Der Rollreibungskoeffizient von MuJoCo hat die Einheit einer Länge (Drehmoment / Normalkraft), daher wird das dimensionslose DEM-μ_r (0.09 aus Sunday et al. 2020) mit dem Radius multipliziert. Die Unterlage ist ein rauer Tisch (Gleitreibung der Ebene base_slide Standard 1.0, Rollen base_roll [m] Standard 0.01; dieselbe Rolle wie Schleifpapier am Boden bei Schüttwinkelexperimenten). Auf einem glatten Tisch (μ 0.16) rollten die ersten fallenden Kugeln weg und es bildete sich kein Haufen (gemessen: 1,200 Kugeln breiteten sich zu einer einlagigen Schicht mit Radius 0.15 m aus). Der Rollwiderstand sättigt an der Gleitreibungsgrenze μ_s g (Messung an einer Kugel: mit Rollkoeffizient 0.01 wie 0.1 rollt sie aus 1 m/s 0.32 m = Verzögerung 1.6 m/s²), daher hält die Gleitreibung den Boden fest. contact_tc = Zeitkonstante des weichen Kontakts [s] (solref).
Mindestens 2·timestep wählen: Mit 0.004 s bei timestep 2 ms (= Grenze) divergierten 2,000 Kugeln mit Radius 3.5 mm (Höchstgeschwindigkeit 12.6 m/s, gemessen). Standard-Löser ist CG + elliptischer Kegel (Newton brauchte im dichten Haufen mit 700 Kugeln über 280 s → abgebrochen, gemessen).
Rückgabe: xml (String), positions (Anfangsmittelpunkte (n, 3)), info (n, radius, mu_slide, mu_roll, orifice_d, bin_radius, orifice_height, timestep, mass_each, mass_total, column_top, bulk_density_bin). Raises ValueError: contact_tc < 2 timestep / Loch passt nicht in den Behälter / Kugeln passen nicht in den Behälter / falsch geschriebener Löser oder Kegel.
• Katalog der Beispieldaten (Download-URLs / Lizenzen) — 2-D nutzt skimage.data (BSD/Public Domain) plus synthetische Bilder, 3-D nennt Download-URLs echter Datenquellen (Stanford, PDS, …).
• Herkunft und Literatur der Operatoren — die Quellen der Forschung/Verfahren, auf denen diese Operatorfamilie beruht.
• Der kanonische Algorithmus (Autor, Jahr) und seine Anwendungen stehen im Familienleitfaden oben.
• poc_granular_heap_repose — py -3.11 examples/poc_granular_heap_repose.py
table als Eingabe)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. Diese Notiz wird von tools/opdocs.py md erzeugt (nicht von Hand bearbeiten).*
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.