Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 0 additions & 33 deletions source/isaaclab/changelog.d/benchmark-scope-profiling.major.rst

This file was deleted.

This file was deleted.

1 change: 0 additions & 1 deletion source/isaaclab/changelog.d/core-cleanup-comments.skip

This file was deleted.

1 change: 0 additions & 1 deletion source/isaaclab/changelog.d/core-cleanup-imports.skip

This file was deleted.

This file was deleted.

15 changes: 0 additions & 15 deletions source/isaaclab/changelog.d/core-cleanup-utils-fixes.rst

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
Added
^^^^^

* Added a configurable ``OpenCvFisheyeDistortionCfg.max_fov`` angular domain for Newton,
preserving the existing 180-degree default. Documented that RTX/OVRTX's native OpenCV
schema does not consume this setting and can clip rectangular sensor corners to its image circle.
19 changes: 0 additions & 19 deletions source/isaaclab/changelog.d/sdp-transform-publication.major.rst

This file was deleted.

17 changes: 0 additions & 17 deletions source/isaaclab/changelog.d/shared-delay-buffer.minor.rst

This file was deleted.

This file was deleted.

8 changes: 0 additions & 8 deletions source/isaaclab/changelog.d/visualizer-error-reason.rst

This file was deleted.

9 changes: 0 additions & 9 deletions source/isaaclab/changelog.d/wrench-fast-paths.minor.rst

This file was deleted.

121 changes: 121 additions & 0 deletions source/isaaclab/docs/CHANGELOG.rst
Original file line number Diff line number Diff line change
@@ -1,6 +1,127 @@
Changelog
---------

28.0.0 (2026-09-24)
~~~~~~~~~~~~~~~~~~~

Added
^^^^^

* Added :func:`~isaaclab.benchmark.stepping.profile_physics_steps` and
:func:`~isaaclab.benchmark.stepping.profile_renderers` context managers for synchronized
runtime benchmark timings. Wrappers recorded complete calls after warmup and restored
the original methods when measurement ended, including on failure.
* Added :class:`~isaaclab.sim.MeshFileCfg` and :func:`~isaaclab.sim.spawn_from_mesh` to spawn a mesh from a
mesh file (e.g. ``.obj``, ``.stl``, ``.fbx``) or from in-memory triangle data
(:class:`~isaaclab.sim.MeshFileCfg.TriangleMeshCfg` or a :class:`trimesh.Trimesh` through
:class:`~isaaclab.sim.MeshFileCfg.TrimeshObjectCfg`), with optional collision, mesh collision
approximation, rigid body, mass, and material properties.
* Added :meth:`~isaaclab.utils.wrench_composer.WrenchComposer.get_forces_and_torques`, which returns the
cheapest representation of the buffered external wrench a consumer can accept, along with an
``is_global`` boolean matching the asset API. Consumers that can apply a world-frame wrench at the
center of mass opt in with the new ``supports_world_at_com``
constructor argument. Wrenches that are already local-frame, or already global-frame at the center of
mass, are now submitted without composing them through the body poses.
* Added ``delay_min_lag`` and ``delay_max_lag`` to ``ObservationTermCfg``. Lags were sampled per environment
at initialization and reset, then held for the episode by default, matching the delayed PD actuator's lag policy.
* Added ``delay_hold_prob`` for optional per-sample lag resampling. ``DelayBuffer`` owned the sampling;
retaining a lag kept latency constant as frames advanced. The default of 1.0 preserved the existing policy.
* Applied delay after observation modifiers, noise, clipping, and scaling, before history. Recorded samples
advanced only with ``update_history=True``; extra reads left delay history unchanged.
* Shared ``DelayBuffer`` between observations and existing delayed actuators, retaining the actuator API and
physics-step behavior. Added optional non-recording reads and replaced history shifting with device-indexed
ring storage, including CUDA graph replay and isolated partial resets.

Changed
^^^^^^^

* Restricted scope capture to tasks with a non-``None`` ``benchmark_mode``. To collect timings,
enable ``ISAACLAB_PHYSICS_PROFILE=1`` or ``ISAACLAB_RENDER_PROFILE=1`` for such a task.
Other tasks continued to produce standard runtime reports without scope profiling.

* Included scalar physics and render profiling summaries in ``BenchmarkResult.bundle.extra``
without changing schema version 1.4. Schema and OmniPerf output included each scope's mean,
standard deviation, maximum time per call [ms], and call count. Consumers should read
``physics_mean_ms``, ``physics_std_ms``, ``physics_max_ms``, ``physics_calls``, and the
corresponding ``render_*`` keys for these summaries. Raw ordered samples remained in
``<output_path>/profile_timings.json`` as ``timings_ms`` pairs for local analysis instead
of parsing printed timer lines; use ``--output_path`` to select the output directory.

* **Breaking:** Moved render profiling into the runtime benchmark through
:func:`~isaaclab.benchmark.stepping.profile_renderers`. To collect render timings with
``ISAACLAB_RENDER_PROFILE=1``, use the runtime benchmark; normal simulation runs no longer
allocate render timers. Scene updates and output readback remained outside the timed scope.
* Changed ``isaaclab benchmark training_multigpu`` to accept ``--check_success`` for RSL-RL and RL-Games.
The success metric is now summed across ranks before each convergence check, so every rank stops at
the same iteration.
* Changed :func:`~isaaclab.terrains.utils.create_prim_from_mesh` to spawn the terrain mesh with
:class:`~isaaclab.sim.MeshFileCfg`. The authored USD is unchanged, except that the ``translation`` and
``orientation`` keyword arguments now apply to the root prim instead of its ``mesh`` child prim; the
resulting world pose is the same.
* **Breaking:** Added ``transforms_version`` to scene-data backends. Custom backends must initialize
it to zero and increment it after native pose writes or buffer swaps. SDP reads the existing
``transforms`` property through ``get_transforms(output_format)`` without resetting the version. Backends
publishing multiple native formats may override that method and ``native_transform_formats``.
``SceneDataProvider.get_transforms`` bound shared,
read-only arrays by default: matching layouts aliased native data and other layouts converted
once per publication. Callers requiring their own writable or preallocated arrays must pass
``allow_passthrough=False``; this wrote directly into the supplied arrays without a staging copy.
* Routed rigid Fabric conversion through SDP while the Kit rendering integration owned destination binding and
GPU hierarchy propagation, preserving native PhysX publication and authored scale. Converted rigid destinations
became Fabric-only reset-stack roots so nested bodies retained their absolute physics poses.
Transform freshness no longer depended on the physics-step counter;
``RenderContext.reset_scene_state_cadence`` remained available for geometry updates.
``SimulationContext.fabric_cfg`` declared the shared native Fabric stage/device without allocating bindings.
* Used native Warp structs for Fabric transform bindings, relying on the project-managed Warp
dependency selected by Isaac Lab's Kit launch configuration.

Deprecated
^^^^^^^^^^

* Deprecated ``isaaclab.renderers.render_context.RENDER_PROFILE_SCOPE``; use
:data:`~isaaclab.benchmark.stepping.RENDER_PROFILE_SCOPE` instead.

Removed
^^^^^^^

* **Breaking:** Removed ``CameraRenderSpec.camera_path_relative_to_env_0``. Remove this argument
from render-spec constructors and use the absolute paths in ``camera_prim_paths`` instead.
OVRTX derived cloned camera paths from the authored source camera internally.

Fixed
^^^^^

* Fixed ``--visualizer newton`` (the deprecated alias for ``newton_gl``) always raising
``RuntimeError: Explicitly requested visualizer(s) [...] could not be configured`` even though it
resolved successfully. :meth:`SimulationContext._resolve_visualizer_cfgs` compared the raw,
possibly-aliased CLI string against the resolved config's canonical ``visualizer_type``, which
never matched for an aliased request.
* Fixed :func:`~isaaclab.utils.math.unproject_depth` building homogeneous pixel coordinates as
``(1, u, v)`` instead of ``(u, v, 1)``, which returned wrong points and turned the first image row
into ``inf``/``nan``. This also affected :func:`~isaaclab.sensors.camera.utils.create_pointcloud_from_depth`
and :func:`~isaaclab.sensors.camera.utils.create_pointcloud_from_rgbd`.
* Fixed :func:`~isaaclab.sensors.camera.utils.create_pointcloud_from_rgbd` raising a ``TypeError`` when
``rgb`` is a color tuple or ``None``.
* Fixed :func:`~isaaclab.utils.math.quat_slerp` negating the caller's ``q2`` tensor in place when
taking the shorter arc.
* Fixed :func:`~isaaclab.utils.sensors.convert_camera_intrinsics_to_usd` not warning about aperture
offsets when the principal point is left of or above the image center.
* Fixed :meth:`~isaaclab.utils.datasets.HDF5DatasetFileHandler.create` failing when ``file_path`` is a
bare file name without a directory.
* Fixed the built-in :class:`~isaaclab.terrains.MeshRepeatedBoxesTerrainCfg`,
:class:`~isaaclab.terrains.MeshRepeatedCylindersTerrainCfg`, and
:class:`~isaaclab.terrains.MeshRepeatedPyramidsTerrainCfg` raising ``ValueError`` with their default
``object_type``. The resolvable ``"module:function"`` default was looked up as ``make_<object_type>``
instead of being called.
* Fixed :func:`~isaaclab.sim.schemas.modify_articulation_root_properties` looking up the existing fixed
joint on the current stage instead of the ``stage`` argument when ``fix_root_link`` is set.
* Fixed :func:`~isaaclab.sim.utils.queries.find_global_fixed_joint_prim` raising ``AttributeError`` for an
:class:`pxr.Sdf.Path` argument.
* Fixed :class:`~isaaclab.sim.converters.MeshConverter` raising ``ValueError`` for mesh file names with
more than one dot.
* Fixed ``DelayBuffer.set_time_lag`` subset updates to accept both supported integer dtypes.


27.0.1 (2026-09-23)
~~~~~~~~~~~~~~~~~~~

Expand Down
4 changes: 4 additions & 0 deletions source/isaaclab/isaaclab/sim/spawners/sensors/sensors_cfg.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@

from __future__ import annotations

import math
from collections.abc import Callable
from dataclasses import MISSING
from typing import Literal
Expand Down Expand Up @@ -132,6 +133,9 @@ class OpenCvFisheyeDistortionCfg(OpenCvDistortionCfg):
k4: float = 0.0
"""Fourth fisheye distortion coefficient. Defaults to 0.0."""

max_fov: float = math.pi
"""Full angular domain for Newton's inverse fisheye model [rad]. Defaults to pi (180 degrees)."""


@configclass
class PinholeCameraCfg(SpawnerCfg):
Expand Down
2 changes: 1 addition & 1 deletion source/isaaclab/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ build-backend = "setuptools.build_meta"

[project]
name = "isaaclab"
version = "27.0.1"
version = "28.0.0"
description = "Extension providing main framework interfaces and abstractions for robot learning."
license = {text = "BSD-3-Clause"}
authors = [{name = "Isaac Lab Project Developers"}]
Expand Down
7 changes: 0 additions & 7 deletions source/isaaclab_newton/changelog.d/fixed-joint-wrench.rst

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
Fixed
^^^^^

* Replaced the fixed 180-degree OpenCV fisheye ray limit with the camera's configured
``max_fov``. Calibrated rays beyond the forward hemisphere can now be rendered without
changing the existing default or introducing per-frame ray generation.
Loading
Loading