Skip to content

Prescribed State Component

fibril_sim/prescribed_pose と fibril_sim/prescribed_trajectory は、MuJoCo mocap body の pose に continuous authority を与えます。 static object と time-varying object を同じ prescribed-state runtime contract で扱います。

MuJoCo 側の要件

body は MuJoCo mocap body を参照する必要があります。 通常の dynamic body を name だけ指定して強制的に kinematic object へ変換する Component ではありません。

固定 pose

1
2
3
4
5
6
7
components:
  - id: target_pose
    type: fibril_sim/prescribed_pose
    config:
      body: target
      position: [1.0, 0.0, 0.5]
      quaternion: [1.0, 0.0, 0.0, 0.0]
Field Type Required Meaning
body string yes mocap body name
position double[3] yes world position
quaternion double[4] yes orientation quaternion

quaternion は non-zero norm が必要で、Component construction で正規化されます。

Trajectory の指定

components:
  - id: target_trajectory
    type: fibril_sim/prescribed_trajectory
    config:
      body: target
      keyframes:
        - time_s: 0.0
          position: [0.0, 0.0, 0.5]
          quaternion: [1.0, 0.0, 0.0, 0.0]
        - time_s: 1.0
          position: [1.0, 0.0, 0.5]
          quaternion: [1.0, 0.0, 0.0, 0.0]

keyframes は空にできません。 各 keyframe は time_s、position、quaternion を持ち、time は非負かつ狭義単調増加である必要があります。

runtime は keyframe 間を physics boundary 上で補間し、trajectory の前後では endpoint pose を保持します。

State authority の扱い

prescribed Component は自分が所有する MocapPose StateClaim と continuous schedule を Plan へ提供します。 Manifest から別に StateClaim や schedule を重複定義する必要はありません。

completed physics boundary では prescribed source が t + dt の authoritative pose に戻された後で post-physics snapshot が作られます。 そのため、接続された dynamic child は motion に物理的に反応しながら、prescribed source 自体は completed boundary で一 tick 遅れません。