heap_scene_mjcf — DRIVE granular op

• 데이터 종류: scalar × scalar → table

• 호출: 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'(구현을 직접 호출하려면 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', 원장에서 가져오려면 opsdrive.get("heap_scene_mjcf"))

사용법

평바닥 호퍼(정사각형 오리피스, 변 orifice_d)에 강체 구를 쌓은 장면의 MJCF 문자열(mujoco 불필요, 대장에 등재).

구는 원통 빈(반경 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 / 구멍이 빈에 들어가지 않음 / 구가 빈에 들어가지 않음 / 해법·원뿔의 철자 오류.

참고(샘플 데이터·문헌)

• 샘플 데이터 카탈로그(DL URL / 라이선스) —— 2-D 는 skimage.data(BSD/public)+ 합성, 3-D 는 실데이터 소스(Stanford/PDS 등)의 DL URL.

• 연산자의 내력·참고문헌 —— 이 연산자 족의 바탕이 된 연구/기법의 출처.

• 알고리즘의 정전(저자·연도)과 용도는 위의 패밀리 사용 가이드에 적혀 있습니다.

실행 가능한 예제(이 연산자를 실제로 호출하는 검증된 샘플)

• poc_granular_heap_repose — py -3.11 examples/poc_granular_heap_repose.py

타입이 이어지는 다음 연산자(table 를 입력으로 받는 것)

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 연산자 레지스트리. 이 op 노트는 tools/opdocs.py md 가 자동 생성합니다(직접 편집하지 마세요).*

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