fullseye

swarm_simulate — DRIVE swarmflow op

使い方

障害物のある周期の流路を流れる群れ(SPH の弱圧縮流体として動く個体)。障害物は個体には「ぶつかる壁」として効くだけ。

個体 i の加速度 = (U e_x − v_i)/τ(自由流の速さへ戻る)− Σ_j m (p_i/ρ_i² + p_j/ρ_j²) ∇W_ij(圧力 = 押し合い) − Σ_j m Π_ij ∇W_ij(Monaghan の人工粘性、近づく組だけ)+ 揺らぎ(標準偏差 noise [m/s²] の白色)。 壁: 円の内側に入った個体は表面へ戻し、内向きの速度だけ消す(滑る壁)。周期境界(x も y も)。積分は symplectic Euler、 刻みは CFL 0.25 h/(c + U)。U τ ≪ R・c ≫ U のとき定常の流れは円柱まわりのポテンシャル流に近い(module docstring の導出)。

Args: obstacle: (xc, yc, R) [m] か None(障害物なし)。 speed: 自由流の速さ U [m/s]。 box: 流路の大きさ (Lx, Ly) [m]、中心が原点。 spacing: 初期の格子の間隔 [m] (個体の間隔)。 h_factor: h = h_factor × spacing。 tau: 速さへ戻る時定数 [s]。 c: 音速 [m/s] (押し合いの硬さ)。 alpha: 人工粘性の係数。 t_warm: 記録の前に流す時間 [s] (定常に近づける)。 n_frames: 記録するコマ数(≥ 2)。 frame_dt: コマの間隔 [s]。 noise: 加速度の揺らぎ [m/s²]。 seed: 乱数の種。 Returns: dict: frames (T, N, 2) 位置 [m] (箱の中へ折り返し済み)、velocities (T, N, 2)、t (T,)、box、 obstacle、h、dt、rho0、density_range(記録の間の ρ/ρ₀ の 1〜99 % 点)、n_agents、 t_total(流した時間)、t_wake_reenters(障害物の後ろの空洞が箱の右端から左端へ回り込み始める時刻 (Lx/2 − x_c − R)/U。これより長く流すと、上流の端に空洞の個体が入ってきて自由流が汚れる)。

★障害物の後ろには個体の入らない空洞が長く伸びる(押し合いの圧力は引っ張らないほど弱く、抵抗で U に戻るだけなので 横から埋まらない)。俯瞰の映像では障害物の所の「穴」と空洞そのものが見える —— 速度だけで推定するという主張は、 推定がこの穴を使わない(速度場の欠測として捨てる)という意味で、映像に障害物の手がかりが無いという意味ではない。

参考(サンプルデータ・文献)

実行できる例(この op を実際に呼ぶ検証済みサンプル)

型が繋がる次の op(table を入力に取れる)

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

同カテゴリ(swarmflow)

sph_kernel · sph_density_pressure · swarm_render_overhead · swarm_field_from_tracks · swarm_field_from_piv · potential_flow_cylinder · velocity_deficit_map · stagnation_from_centerline


Provenance: swarmflow.py — DRIVE operator registry. この per-op ノートは tools/opdocs.py md が自動生成(手編集しない)。

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