Skip to content

クイックスタート

この手順では、最小の MuJoCo model を fibril_sim で検証して実行します。 ROS 2 node や custom extension は使わず、Model、Manifest、Plan、Instance の関係だけを確認します。

ビルド

ROS 2 workspace のルートで Fibril Simulation を build し、install space を source します。

1
2
3
colcon build --symlink-install --merge-install --cmake-args -DCMAKE_EXPORT_COMPILE_COMMANDS=ON
source install/setup.bash
cd src/fibril_simulation

CLI が利用できることを確認します。

fibril_sim --help

最小の MuJoCo model

model.xml は自由落下する球と床だけを定義します。 physics timestep は MJCF の <option timestep="..."> に明示します。

<mujoco model="fibril_sim_quickstart">
  <option timestep="0.002" gravity="0 0 -9.81"/>
  <worldbody>
    <geom name="floor" type="plane" size="2 2 0.1"/>
    <body name="ball" pos="0 0 0.5">
      <freejoint name="ball_joint"/>
      <geom type="sphere" size="0.05" mass="1"/>
    </body>
  </worldbody>
</mujoco>

最小の SimulationManifest

manifest.yaml は model の場所、physics timestep、execution mode、episode seed を指定します。

1
2
3
4
5
6
7
8
schema_version:
  major: 3
  minor: 0
model:
  path: model.xml
runtime:
  mode: deterministic_ci
  episode_seed: 42

相対パスの model.path は Manifest ファイルがあるディレクトリを基準に解決されます。 ROS 2 package に置いた model は package:// URI でも参照できます。

Manifest を検証する

最初に validate を実行します。 このコマンドは Manifest の YAML 形式だけを見るのではなく、MuJoCo model の parse と compile、object binding、Component と schedule の整合性まで確認して SimulationPlan を構築します。

fibril_sim validate examples/quickstart/manifest.yaml

正常であれば、Plan の schema version とともに valid が表示されます。 CI から扱う場合は --json を指定できます。

fibril_sim validate examples/quickstart/manifest.yaml --json

解決された Plan を確認する

inspect は Manifest から解決された Component、schedule、binding、provenance などを表示します。 設定値が意図した実行条件になっているかを確認するときは、source YAML だけでなくこの出力を使います。

fibril_sim inspect examples/quickstart/manifest.yaml

machine-readable な Plan が必要な場合は --json を付けます。

fibril_sim inspect examples/quickstart/manifest.yaml --json

Simulation を実行する

run は Plan から一つの SimulationInstance を生成し、指定した physics step 数だけ進めます。

fibril_sim run examples/quickstart/manifest.yaml --steps 500

この例では MJCF の timestep を 2 ms にしているので、500 step で EpisodeTime は 1 s 進みます。 wall-clock と同じ速度で動かすことは、この deterministic_ci の例の目的ではありません。

Rangefinder を追加する

Component を追加すると、MuJoCo object と virtual hardware の対応が Manifest に現れます。 次の model には前方を向いた site と壁があります。

<mujoco model="fibril_sim_rangefinder_quickstart">
  <option timestep="0.001"/>
  <worldbody>
    <geom name="wall" type="box" pos="2 0 0.5" size="0.05 1 0.5"/>
    <body name="sensor_body" pos="0 0 0.5">
      <site name="front_rangefinder" pos="0 0 0"
            quat="0.7071067811865476 0 0.7071067811865475 0" size="0.01"/>
    </body>
  </worldbody>
  <sensor>
    <rangefinder name="front_rangefinder_sensor" site="front_rangefinder"/>
  </sensor>
</mujoco>

MJCF ではその site を参照する native rangefinder sensor を定義し、Manifest は sensor 名を fibril_sim/rangefinder に binding します。

schema_version:
  major: 3
  minor: 0
model:
  path: rangefinder_model.xml
components:
  - id: front_lrf
    type: fibril_sim/rangefinder
    config:
      sensor: front_rangefinder_sensor
      period_s: 0.01
      latency_s: 0.002
      range_min: 0.05
      range_max: 10.0
      resolution: 0.001
runtime:
  mode: deterministic_ci
  episode_seed: 42

この Manifest も同じ CLI で検証できます。

fibril_sim validate examples/quickstart/rangefinder_manifest.yaml
fibril_sim inspect examples/quickstart/rangefinder_manifest.yaml

period_s は sensor acquisition の nominal period、latency_s は acquisition から controller-visible delivery までの transport latency です。 Component ごとの設定は Component reference で確認できます。

次に読むページ

自分の robot model を載せる場合は Simulation を作る に進んでください。 Fibril Component が MuJoCo object をどう参照するかは MuJoCo と Fibril で説明しています。