Skip to content

Commit 5da46fa

Browse files
authored
Add logging with Rerun.io (#19)
1 parent af3d694 commit 5da46fa

3 files changed

Lines changed: 231 additions & 7 deletions

File tree

nodes/simulation/simulation/go2_scene.py

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,20 @@
1-
import time
21
import os
2+
import time
33
from dataclasses import dataclass, field
44
from pathlib import Path
5+
56
import carb.input
67
import numpy as np
78
import omni.kit.commands
89
from isaacsim import SimulationApp
910
from isaacsim.core.api import World
11+
from isaacsim.core.prims import SingleXFormPrim
1012
from isaacsim.core.utils import stage as stage_utils
1113
from omni.isaac.core.utils.prims import get_prim_at_path
12-
from isaacsim.core.prims import SingleXFormPrim
1314
from pxr import Gf, Sdf, UsdGeom
15+
from usd_rerun_logger.usd_logger import UsdRerunLogger
1416

1517
from simulation.camera_manager import CameraManager
16-
1718
from simulation.environments.pyramid import create_stepped_pyramid
1819
from simulation.environments.rails import create_rails
1920
from simulation.follow_camera import FollowCamera
@@ -175,6 +176,8 @@ def __init__(
175176
window_size=200, update_interval=100
176177
) # 1-second window for 200Hz, update every 100 steps
177178
self.log_rtf = False
179+
self._simulation_time = 0.0
180+
self.logger = None
178181

179182
def initialize(self):
180183
self.world = World(
@@ -215,6 +218,7 @@ def initialize_scene(self):
215218
self.world.reset()
216219
self.go2.reset()
217220
self.go2.initialize()
221+
self._simulation_time = 0.0
218222

219223
if demo_config.robot_position is not None:
220224
# Set the initial robot position in every possible way. I'm confuesed how the reset prcedure works in Isaac,
@@ -253,11 +257,16 @@ def initialize_scene(self):
253257
self.camera_manager.link_waypoint_mission(self.waypoint_mission)
254258

255259
# TODO: find a better way to separate artefacts outputs per test run
256-
self.camera_manager.start_writers(
257-
output_dir=OUTPUT_DIR
258-
/ f"{self.current_scene.name}_{int(self.difficulty * 100)}",
260+
run_dir = OUTPUT_DIR / f"{self.current_scene.name}_{int(self.difficulty * 100)}"
261+
262+
self.logger = UsdRerunLogger(
263+
self.world.stage,
264+
save_path=str(run_dir / "simulation.rrd"),
265+
application_id="go2-demo",
259266
)
260267

268+
self.camera_manager.start_writers(output_dir=run_dir)
269+
261270
def load_next_scene(self):
262271
print("Loading next scene...")
263272
current_index = (
@@ -283,6 +292,7 @@ def reload_scene(self):
283292
self.load_scene(self.current_scene)
284293

285294
def on_physics_step(self, step_size) -> None:
295+
self._simulation_time += step_size
286296
rtf = self._rtf_calculator.step(step_size)
287297
if rtf is not None and self.log_rtf:
288298
print(f"Real-Time Factor (RTF): {rtf:.2f}")
@@ -335,6 +345,8 @@ def step(self):
335345

336346
# Prevent the RTF from going above 1.0 (faster than real-time)
337347
self.steady_rate.sleep()
348+
if self.logger:
349+
self.logger.log_stage()
338350

339351
def get_rtf(self) -> float:
340352
return self._rtf_calculator.rtf

pyproject.toml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ dependencies = [
1111
"dataflow",
1212
"dora-rs>=0.3.13",
1313
"typer>=0.20.0",
14+
"usd-rerun-logger>=0.3.0",
1415
]
1516

1617
[tool.uv.sources]
@@ -30,4 +31,4 @@ members = ["nodes/*", "msgs", "dataflow"]
3031
dev = [
3132
"ruff >=0.14.3",
3233
"pre-commit",
33-
]
34+
]

0 commit comments

Comments
 (0)