Tools
Isaac Sim の RTF と物理ステップ
RTF (実時間比) は設定値でなく 1 フレームの所要時間の結果。フレームが遅くなっても物理 dt は変わらない。速くする手段と精度を決める設定の切り分け
要点: RTF = (描画 dt) / (1 フレームの壁時計)。物理の刻み幅は timeStepsPerSecond で固定で、RTF が下がっても 1 ステップの dt は変わらない。
数字
- 描画 dt 既定 1/60 s。1 フレームで sim 時刻がこの量だけ進む
- 物理 dt = 1 /
timeStepsPerSecond(PhysxSceneAPI)。120 Hz なら 1 フレームに 2 ステップ (8.33 ms 固定) - 1 フレーム 16.7 ms で RTF 1.0。37 ms なら RTF 0.45
- RTF の測り方: sim 時刻 (
/clockまたは header.stamp) と受信壁時計の差分の比。bag なら両方が入っている
「遅いと物理が細かくなる」は誤り
フレームが遅くなっても物理は同じ dt を同じ回数だけ回す。変わるのは 1 ステップにかける壁時計だけ。精度を決めるのは次の 2 つで、どちらも上げると RTF は下がる。
timeStepsPerSecond- ソルバ反復数 (
solverPositionIterationCount/solverVelocityIterationCount)、TGS/PGS の選択
描画を軽くしても物理精度は変わらず、RTF だけ上がる。
速くする手段
- headless で起動する、または viewport を閉じる (GUI 描画を削る)
- センサカメラの解像度と更新レートを下げる (viewport とは別にレンダが走る)
- 不要な拡張 (Stage Editor 等) を読まない experience (
isaacsim.exp.base.python.kit) を使う
timeStepsPerSecond を下げるのは最後。関節ドライブの減衰特性が変わり、60 Hz 未満では受動振動が出る。
ROS 側への影響
use_sim_time=true なら制御周期・タイムアウト・bag の header.stamp は sim 時間基準。RTF の変動は壁時計の待ち時間だけを変え、結果には影響しない。壁時計基準のタイマ (std::chrono, rclcpp::WallTimer) を制御に使っていると RTF に依存する 。
関連
最終更新: