From da5d2f3e9187fa4690e6667fe8b294cae49016d6 Mon Sep 17 00:00:00 2001 From: Steven Palma Date: Sat, 18 Oct 2025 01:35:02 +0200 Subject: [PATCH] chore(dependencies): upgrade rerun (#2237) * chore(dependencies): upgrade rerun Co-authored-by: Ben Zhang * test(utils): fix rerun scalars --------- Co-authored-by: Ben Zhang --- pyproject.toml | 2 +- src/lerobot/scripts/lerobot_dataset_viz.py | 16 ++++++++-------- src/lerobot/utils/visualization_utils.py | 12 ++++++------ tests/utils/test_visualization_utils.py | 6 +++--- 4 files changed, 18 insertions(+), 18 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 1d0ac6ea0..cc950958e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -82,7 +82,7 @@ dependencies = [ "draccus==0.10.0", # TODO: Remove == "gymnasium>=1.0.0", - "rerun-sdk>=0.21.0,<0.23.0", # TODO: Bumb dependency + "rerun-sdk>=0.24.0,<0.27.0", # Support dependencies "deepdiff>=7.0.1,<9.0.0", diff --git a/src/lerobot/scripts/lerobot_dataset_viz.py b/src/lerobot/scripts/lerobot_dataset_viz.py index 55708d9a9..12273cb1d 100644 --- a/src/lerobot/scripts/lerobot_dataset_viz.py +++ b/src/lerobot/scripts/lerobot_dataset_viz.py @@ -141,15 +141,15 @@ def visualize_dataset( gc.collect() if mode == "distant": - rr.serve(open_browser=False, web_port=web_port, ws_port=ws_port) + rr.serve_web_viewer(open_browser=False, web_port=web_port) logging.info("Logging to Rerun") for batch in tqdm.tqdm(dataloader, total=len(dataloader)): # iterate over the batch for i in range(len(batch["index"])): - rr.set_time_sequence("frame_index", batch["frame_index"][i].item()) - rr.set_time_seconds("timestamp", batch["timestamp"][i].item()) + rr.set_time("frame_index", sequence=batch["frame_index"][i].item()) + rr.set_time("timestamp", timestamp=batch["timestamp"][i].item()) # display each camera image for key in dataset.meta.camera_keys: @@ -159,21 +159,21 @@ def visualize_dataset( # display each dimension of action space (e.g. actuators command) if ACTION in batch: for dim_idx, val in enumerate(batch[ACTION][i]): - rr.log(f"{ACTION}/{dim_idx}", rr.Scalar(val.item())) + rr.log(f"{ACTION}/{dim_idx}", rr.Scalars(val.item())) # display each dimension of observed state space (e.g. agent position in joint space) if OBS_STATE in batch: for dim_idx, val in enumerate(batch[OBS_STATE][i]): - rr.log(f"state/{dim_idx}", rr.Scalar(val.item())) + rr.log(f"state/{dim_idx}", rr.Scalars(val.item())) if DONE in batch: - rr.log(DONE, rr.Scalar(batch[DONE][i].item())) + rr.log(DONE, rr.Scalars(batch[DONE][i].item())) if REWARD in batch: - rr.log(REWARD, rr.Scalar(batch[REWARD][i].item())) + rr.log(REWARD, rr.Scalars(batch[REWARD][i].item())) if "next.success" in batch: - rr.log("next.success", rr.Scalar(batch["next.success"][i].item())) + rr.log("next.success", rr.Scalars(batch["next.success"][i].item())) if mode == "local" and save: # save .rrd locally diff --git a/src/lerobot/utils/visualization_utils.py b/src/lerobot/utils/visualization_utils.py index 95fdb178a..991b10247 100644 --- a/src/lerobot/utils/visualization_utils.py +++ b/src/lerobot/utils/visualization_utils.py @@ -46,7 +46,7 @@ def log_rerun_data( This function iterates through the provided observation and action dictionaries and sends their contents to the Rerun viewer. It handles different data types appropriately: - - Scalar values (floats, ints) are logged as `rr.Scalar`. + - Scalars values (floats, ints) are logged as `rr.Scalars`. - 3D NumPy arrays that resemble images (e.g., with 1, 3, or 4 channels first) are transposed from CHW to HWC format and logged as `rr.Image`. - 1D NumPy arrays are logged as a series of individual scalars, with each element indexed. @@ -65,7 +65,7 @@ def log_rerun_data( key = k if str(k).startswith(OBS_PREFIX) else f"{OBS_STR}.{k}" if _is_scalar(v): - rr.log(key, rr.Scalar(float(v))) + rr.log(key, rr.Scalars(float(v))) elif isinstance(v, np.ndarray): arr = v # Convert CHW -> HWC when needed @@ -73,7 +73,7 @@ def log_rerun_data( arr = np.transpose(arr, (1, 2, 0)) if arr.ndim == 1: for i, vi in enumerate(arr): - rr.log(f"{key}_{i}", rr.Scalar(float(vi))) + rr.log(f"{key}_{i}", rr.Scalars(float(vi))) else: rr.log(key, rr.Image(arr), static=True) @@ -84,13 +84,13 @@ def log_rerun_data( key = k if str(k).startswith("action.") else f"action.{k}" if _is_scalar(v): - rr.log(key, rr.Scalar(float(v))) + rr.log(key, rr.Scalars(float(v))) elif isinstance(v, np.ndarray): if v.ndim == 1: for i, vi in enumerate(v): - rr.log(f"{key}_{i}", rr.Scalar(float(vi))) + rr.log(f"{key}_{i}", rr.Scalars(float(vi))) else: # Fall back to flattening higher-dimensional arrays flat = v.flatten() for i, vi in enumerate(flat): - rr.log(f"{key}_{i}", rr.Scalar(float(vi))) + rr.log(f"{key}_{i}", rr.Scalars(float(vi))) diff --git a/tests/utils/test_visualization_utils.py b/tests/utils/test_visualization_utils.py index 08a827570..f573de166 100644 --- a/tests/utils/test_visualization_utils.py +++ b/tests/utils/test_visualization_utils.py @@ -45,7 +45,7 @@ def mock_rerun(monkeypatch): calls.append((key, obj, kwargs)) dummy_rr = SimpleNamespace( - Scalar=DummyScalar, + Scalars=DummyScalar, Image=DummyImage, log=dummy_log, init=lambda *a, **k: None, @@ -109,9 +109,9 @@ def test_log_rerun_data_envtransition_scalars_and_image(mock_rerun): vu.log_rerun_data(observation=obs_data, action=action_data) # We expect: - # - observation.state.temperature -> Scalar + # - observation.state.temperature -> Scalars # - observation.camera -> Image (HWC) with static=True - # - action.throttle -> Scalar + # - action.throttle -> Scalars # - action.vector_0, action.vector_1 -> Scalars expected_keys = { f"{OBS_STATE}.temperature",