Package の責務境界
package boundary は repository の整理都合ではなく、runtime dependency と責務の contract です。 特に core runtime へ ROS 2、pluginlib、ament lookup を持ち込まないことが headless test と integration の共通化に効きます。
| Package | Responsibility |
|---|---|
fibril_mujoco_vendor |
pinned MuJoCo runtime と CMake export(ForteFibre/external_repo にあり、部内 apt リポジトリから入れる) |
iceoryx2_vendor |
pinned iceoryx2 C++ runtime と same-host IPC transport dependency(同上) |
fibril_sim_core |
exact simulation time、schedule、named RNG、latency queue、transaction/deferred primitive、provenance hashing |
fibril_sim_mujoco |
Manifest、Builder、Plan、Instance、MuJoCo construction、binding、runtime lifecycle、state authority、Device/ActuatorDriver/Domain contract |
fibril_sim_models |
standard virtual hardware、reduced-order physical model、MuJoCo model plugin、generic profile catalog、reusable MJCF preset |
fibril_sim_runtime |
SimulationRuntime、SimulationHost owner thread、same-host typed IPC SimulationServer / SimulationConnection boundary、runtime control |
fibril_sim_ament |
ament resource resolution、native MuJoCo package:// Resource Provider、pluginlib extension loader、standard ament-backed SimulationPlan composition |
fibril_sim_description |
MJCF を正本とした ROS 向け kinematic description と URDF projection |
fibril_sim_trace |
semantic trace の MCAP persistence |
fibril_sim_diagnostics |
D1/D2 comparison、first-divergence report、replay diagnostics、named trace signal query contract |
fibril_sim_msgs |
simulation-specific ROS message definition |
fibril_sim_ros |
/clock、DeviceOutput publisher、ingress-only subscription、rosbag2 adapter |
fibril_sim_testing |
reusable fixture、bench asset、SIL bench、architecture acceptance test |
fibril_sim_calibration |
calibration request contract、recorded episode alignment、rollout objective、parameter sweep、Ceres integration、held-out validation、caller-supplied Plan/decoder に対する calibration execution |
fibril_sim_experiment |
canonical model に対する explicit parameter variant 実験、trace-derived metric、result manifest |
fibril_sim_cli |
C++ executable frontend / composition root。fibril_sim command surface、argument parsing、human/versioned JSON presentation、exit-code mapping |
fibril_sim_render |
optional EGL offscreen rendered camera extension |
fibril_sim_viewer |
SimulationConnection から runtime-owned presentation と copied render state を受け取る optional interactive debug viewer |
fibril_sim_video |
SimulationConnection の render state を使う optional headless MP4 recorder |
compatible_sim/* |
production-facing ROS API を維持し、Fibril Simulation IPC を hardware transport の代わりに使う simulated driver adapter |
Simulation subsystem 固有の public / cross-package identifier は fibril_sim_* または fibril-sim-* を使います。
fibril_* は Fibril 全体または simulation 以外にも成立する component の名前として扱い、fibril_viewer、fibril_ros_frame__* のように sim を省略して simulation 固有の意味を Fibril 全体へ広げる命名は行いません。
Core dependency guard の役割
fibril_sim_core、fibril_sim_mujoco、fibril_sim_runtime、fibril_sim_models は ROS 2、pluginlib、ament-index integration API に依存させません。
fibril_sim_core、fibril_sim_mujoco、fibril_sim_runtime が reusable runtime、fibril_sim_models が reusable-model layer です。
fibril_sim_models は fibril_sim_mujoco の public runtime contract を利用できますが、fibril_sim_mujoco は fibril_sim_models に依存させません。
この境界には semantic dependency も含みます。
runtime は model plugin の具体名を見て actuator command semantics を決めず、plugin-backed actuator を generic PluginDefined として公開します。
model plugin 固有の attribute calibration も named plugin instance + attribute の generic MuJoCo overlay target で表現します。
これにより runtime が tire、attachment、motor、sensor など具体的な model catalog を知る構造を防ぎます。
resource lookup を core に入れると model identity と filesystem layout が ament environment に依存します。 pluginlib を core に入れると reusable runtime が plugin mechanism の lifecycle に依存します。 ROS を runtime に入れると active-state ownership が executor callback model と結び付きます。
ament/pluginlib integration は fibril_sim_ament、ROS integration は fibril_sim_ros の adapter boundary で接続します。
standard ROS composition root は Plan 構築を fibril_sim_ament に委譲し、SimulationRuntime に構築済み Plan を渡します。
これにより FibrilSimulationNode は ROS parameter、/clock、ROS frontend、service/topic 変換に責務を限定し、runtime 側へ rclcpp lifecycle を持ち込みません。
compatible simulated driver、viewer、recorder などの simulation-side client は、同一 process / 別 process を問わず fibril_sim_runtime::SimulationConnection を使用します。
MCU や production driver の実 bus interface を再現する場合は、Fibril Simulation IPC の先に SocketCAN、PTY などを置きます。
compatible_sim/* は production-facing ROS API を維持した hardware-driver-compatible adapter 群です。
これらは SimulationConnection を Fibril 側の境界として使い、active SimulationHost や MuJoCo state を直接参照しません。
fibril_sim_models は built-in profile catalog の logical resource name を定義できますが、ament index から package share path を検索しません。
filesystem path は headless caller が明示し、ROS 2 integration では fibril_sim_ament が MuJoCo の package:// ResourceProvider を登録した後に同じ logical URI を使用します。
このため Component profile catalog、physical-model profile、MJCF preset は package resource として配布しつつ、model library 自体を ament lookup へ依存させません。
profile の ownership は model と同じ基準で決めます。
複数 robot で同じ意味を持つ device nominal property、material/surface interaction、generic mechanism preset は fibril_sim_models に置き、特定 robot の mounting offset、個体補正、installed-system effective parameter、task threshold は consumer 側に置きます。
Optional dependency の扱い
rendering は fibril_sim_render に隔離します。
core camera と test fixture が EGL/OpenGL を要求しないため、headless CI に graphics dependency を強制しません。
calibration も SimulationInstance lifecycle を再利用する上位 package です。
optimizer を core runtime の責務へ取り込みません。
calibration package は request parsing と fit orchestration を所有しますが、standard component catalog や ament-backed Plan の選択は所有しません。
fibril_sim_cli は private composition として standard model decoder と candidate Plan builder を接続し、その generic calibration API を呼びます。
fibril_sim_cli は install/export される C++ library API を持ちません。
CLI を外して別 frontend を作る場合に再実装したくなる selector、schema、experiment runner、generic calibration execution は CLI package の外に置きます。