heap_scene_mjcf — DRIVE granular op

• Data kinds: scalar × scalar → table

• Call: 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' (implementation को सीधे call करना हो तो 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', registry से लेना हो तो opsdrive.get("heap_scene_mjcf"))

उपयोग

समतल तले वाले hopper (चौकोर छेद, भुजा orifice_d) में rigid गोलों के ढेर वाले scene का MJCF string (mujoco आवश्यक नहीं, ledger में दर्ज)।

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

球は円筒ビン(半径 bin_radius、底板は高さ orifice_height)の中に層で積む。底板の孔から流れ落ちて平面に山を作る(山が孔に届くと止まる —— 実際のホッパ下の山と同じ)。孔は 4 枚の板で囲った正方形(Beverloo の式は円孔の D₀; 正方形は等価直径で比べる)。摩擦は (mu_slide, 0.005, mu_roll·R): MuJoCo の転がり摩擦係数は長さの単位(トルク / 法線力)なので、DEM の無次元 μ_r(Sunday ほか 2020 の 0.09)に半径を掛ける。底板は 粗い台(平面の滑り摩擦 base_slide 既定 1.0、転がり base_roll [m] 既定 0.01; 安息角の実験で底に紙やすりを貼るのと同じ役)。滑らかな台(μ 0.16)だと最初に落ちた球が転がって逃げ、山ができなかった(実測: 1,200 個が半径 0.15 m の単層に広がった)。転がり抵抗は滑り摩擦の限界 μ_s g で飽和する(1 球の実測: 転がり係数 0.01 でも 0.1 でも 1 m/s から 0.32 m 走る = 減速 1.6 m/s²)ので、底を止めるのは滑り摩擦のほう。contact_tc = 軟接触の時定数 [s] (solref)。

2·timestep 以上に取る: 0.004 s で timestep 2 ms(= 限界)、半径 3.5 mm・2,000 個が発散した(最大速度 12.6 m/s、実測)。解法は既定 CG + 楕円錐(Newton は密な山で 700 球が 280 s 超 → 打ち切り、実測)。

返り: xml(文字列)、positions(初期中心 (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 / 孔がビンに収まらない / 球がビンに入らない / 解法・錐の綴り違い。

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

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

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

इसी category के (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. यह per-op note tools/opdocs.py md से अपने-आप generate होता है (हाथ से edit न करें)।*

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