Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
38 commits
Select commit Hold shift + click to select a range
7b7d80d
early sign of life. Cartpole and Ant are training.
AntoineRichard Jan 27, 2026
86169ed
removing sensors
AntoineRichard Jan 27, 2026
6050eef
removing old files.
AntoineRichard Jan 27, 2026
44160c8
added thin wrapper to allow usage of object_X mehtods on RigidObjectC…
AntoineRichard Jan 27, 2026
1e6f4f0
All tests for the assets are passing.
AntoineRichard Jan 28, 2026
39be136
Doc + test update
AntoineRichard Jan 28, 2026
6711a05
Now uses root_view instead of root_physx_view
AntoineRichard Jan 28, 2026
080c5b7
More doc
AntoineRichard Jan 28, 2026
24f5d87
pre-commits.
AntoineRichard Jan 28, 2026
23d2375
fixing failing doc
AntoineRichard Jan 28, 2026
4b981d2
Fixing doc build errors
AntoineRichard Jan 28, 2026
252633e
Fix multi-rotor + wrench composer tests.
AntoineRichard Jan 28, 2026
64c758e
Fixing issues here and here.
AntoineRichard Jan 28, 2026
e9ae031
Fixing more issues.
AntoineRichard Jan 28, 2026
03fd801
pre-commits
AntoineRichard Jan 28, 2026
2bc7c41
Fixing failing doc build.
AntoineRichard Jan 28, 2026
ac8c2e5
Addressing last doc bits
AntoineRichard Jan 28, 2026
da06657
should fix some of the failing mimic tests.
AntoineRichard Jan 29, 2026
32a6f41
Merge branch 'develop' into antoiner/multi-backend
AntoineRichard Jan 29, 2026
69be8a4
Initial commit
AntoineRichard Jan 29, 2026
28f62c9
Iterating.
AntoineRichard Jan 29, 2026
aa98401
Should be ready
AntoineRichard Jan 29, 2026
2b06fc4
pre-commits
AntoineRichard Jan 29, 2026
618af8a
Update tendon property references to fixed values
kellyguo11 Jan 29, 2026
2d430dc
bumped version number
AntoineRichard Jan 30, 2026
db416d9
more precise warning.
AntoineRichard Jan 30, 2026
84513ff
Merge branch 'develop' into antoiner/multi-backend
AntoineRichard Jan 30, 2026
ca95f90
bumped the version in the extension.toml
AntoineRichard Jan 30, 2026
46324c3
made the warning much more explicit in term of deprecation date. This…
AntoineRichard Jan 30, 2026
52bd9ba
merge updated base
AntoineRichard Jan 30, 2026
0c1e41b
Merge branch 'develop' of github.com:isaac-sim/IsaacLab into antoiner…
kellyguo11 Jan 30, 2026
08136f7
Merge pull request #7 from kellyguo11/resolve_conflicts
AntoineRichard Feb 2, 2026
f381c56
Deprecation cycle for default.
AntoineRichard Feb 2, 2026
389d931
fixed failing doc
AntoineRichard Feb 2, 2026
a4f4971
pre-commits
AntoineRichard Feb 2, 2026
3e760e2
Made sure the assets output and ingest xyzw quaternions
AntoineRichard Feb 2, 2026
a030fa5
applied quaternion change to sensors
AntoineRichard Feb 2, 2026
2713515
Merge branch 'develop' into antoiner/multi-backend-sensor
kellyguo11 Feb 3, 2026
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
51 changes: 51 additions & 0 deletions docs/source/migration/migrating_to_isaaclab_3-0.rst
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,57 @@ The following asset classes remain in the ``isaaclab`` package and can still be

These classes now inherit from new abstract base classes but maintain full backward compatibility.

The following sensor classes also remain in the ``isaaclab`` package with unchanged imports:

- :class:`~isaaclab.sensors.ContactSensor`, :class:`~isaaclab.sensors.ContactSensorCfg`, :class:`~isaaclab.sensors.ContactSensorData`
- :class:`~isaaclab.sensors.Imu`, :class:`~isaaclab.sensors.ImuCfg`, :class:`~isaaclab.sensors.ImuData`
- :class:`~isaaclab.sensors.FrameTransformer`, :class:`~isaaclab.sensors.FrameTransformerCfg`, :class:`~isaaclab.sensors.FrameTransformerData`

These sensor classes now use factory patterns that automatically instantiate the appropriate backend
implementation (PhysX by default), maintaining full backward compatibility.

If you need to import the PhysX sensor implementations directly (e.g., for type hints or subclassing),
you can import from ``isaaclab_physx.sensors``:

.. code-block:: python

# Direct PhysX implementation imports
from isaaclab_physx.sensors import ContactSensor, ContactSensorData
from isaaclab_physx.sensors import Imu, ImuData
from isaaclab_physx.sensors import FrameTransformer, FrameTransformerData


Sensor Pose Properties Deprecation
----------------------------------

The ``pose_w``, ``pos_w``, and ``quat_w`` properties on :class:`~isaaclab.sensors.ContactSensorData`
and :class:`~isaaclab.sensors.ImuData` are deprecated and will be removed in a future release.

If you need to track sensor poses in world frame, please use a dedicated sensor such as
:class:`~isaaclab.sensors.FrameTransformer` instead.

**Before (deprecated):**

.. code-block:: python

# Using pose properties directly on sensor data
sensor_pos = contact_sensor.data.pos_w
sensor_quat = contact_sensor.data.quat_w

**After (recommended):**

.. code-block:: python

# Use FrameTransformer to track sensor pose
frame_transformer = FrameTransformer(FrameTransformerCfg(
prim_path="{ENV_REGEX_NS}/Robot/base",
target_frames=[
FrameTransformerCfg.FrameCfg(prim_path="{ENV_REGEX_NS}/Robot/sensor_link"),
],
))
sensor_pos = frame_transformer.data.target_pos_w
sensor_quat = frame_transformer.data.target_quat_w


``root_physx_view`` Deprecation
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Expand Down
2 changes: 1 addition & 1 deletion source/isaaclab/config/extension.toml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
[package]

# Note: Semantic Versioning is used: https://semver.org/
version = "2.0.0"
version = "2.1.0"

# Description
title = "Isaac Lab framework for Robot Learning"
Expand Down
34 changes: 34 additions & 0 deletions source/isaaclab/docs/CHANGELOG.rst
Original file line number Diff line number Diff line change
@@ -1,6 +1,40 @@
Changelog
---------

2.1.0 (2026-02-02)
~~~~~~~~~~~~~~~~~~~

Added
^^^^^

* Added :class:`~isaaclab.sensors.contact_sensor.BaseContactSensor` and
:class:`~isaaclab.sensors.contact_sensor.BaseContactSensorData` abstract base classes that define
the interface for contact sensors. These classes provide a backend-agnostic API for contact sensing.
* Added :class:`~isaaclab.sensors.imu.BaseImu` and :class:`~isaaclab.sensors.imu.BaseImuData` abstract
base classes that define the interface for IMU sensors. These classes provide a backend-agnostic
API for inertial measurement.
* Added :class:`~isaaclab.sensors.frame_transformer.BaseFrameTransformer` and
:class:`~isaaclab.sensors.frame_transformer.BaseFrameTransformerData` abstract base classes that
define the interface for frame transformer sensors. These classes provide a backend-agnostic API
for coordinate frame transformations.

Changed
^^^^^^^

* Refactored the sensor classes (:class:`~isaaclab.sensors.ContactSensor`,
:class:`~isaaclab.sensors.Imu`, :class:`~isaaclab.sensors.FrameTransformer`) to follow the
multi-backend architecture. The classes now act as factory wrappers that instantiate the
appropriate backend-specific implementation (PhysX by default).
* Refactored the sensor data classes (:class:`~isaaclab.sensors.ContactSensorData`,
:class:`~isaaclab.sensors.ImuData`, :class:`~isaaclab.sensors.FrameTransformerData`) to use the
factory pattern for backend-specific instantiation.
* Moved PhysX-specific sensor tests to the ``isaaclab_physx`` package:

* ``test_contact_sensor.py`` → ``isaaclab_physx/test/sensors/``
* ``test_imu.py`` → ``isaaclab_physx/test/sensors/``
* ``test_frame_transformer.py`` → ``isaaclab_physx/test/sensors/``


2.0.0 (2026-01-30)
~~~~~~~~~~~~~~~~~~

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -166,7 +166,7 @@ def body_names(self) -> list[str]:
def root_view(self):
"""Root view for the asset.

Note:
.. note::
Use this view with caution. It requires handling of tensors in a specific way.
"""
raise NotImplementedError()
Expand Down Expand Up @@ -203,7 +203,7 @@ def write_data_to_sim(self) -> None:
If any explicit actuators are present, then the actuator models are used to compute the
joint commands. Otherwise, the joint commands are directly set into the simulation.

Note:
.. note::
We write external wrench to the simulation here since this function is called before the simulation step.
This ensures that the external wrench is applied at every simulation step.
"""
Expand Down Expand Up @@ -1107,7 +1107,7 @@ def _apply_actuator_model(self) -> None:
def _validate_cfg(self) -> None:
"""Validate the configuration after processing.

Note:
.. note::
This function should be called only after the configuration has been processed and the buffers have been
created. Otherwise, some settings that are altered during processing may not be validated.
For instance, the actuator models may change the joint max velocity limits.
Expand All @@ -1118,7 +1118,8 @@ def _validate_cfg(self) -> None:
def _log_articulation_info(self) -> None:
"""Log information about the articulation.

Note: We purposefully read the values from the simulator to ensure that the values are configured as expected.
.. note::
We purposefully read the values from the simulator to ensure that the values are configured as expected.
"""
raise NotImplementedError()

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -590,7 +590,7 @@ def projected_gravity_b(self) -> torch.Tensor:
def heading_w(self) -> torch.Tensor:
"""Yaw heading of the base frame (in radians). Shape is (num_instances,).
Note:
.. note::
This quantity is computed by assuming that the forward-direction of the base
frame is along x-direction, i.e. :math:`(1, 0, 0)`.
"""
Expand Down
6 changes: 3 additions & 3 deletions source/isaaclab/isaaclab/assets/asset_base.py
Original file line number Diff line number Diff line change
Expand Up @@ -155,7 +155,7 @@ def set_visibility(self, visible: bool, env_ids: Sequence[int] | None = None):
It is useful for toggling the visibility of the asset in the simulator. For instance, one can
hide the asset when it is not being used to reduce the rendering overhead.

Note:
.. note::
This operation uses the PXR API to set the visibility of the prims. Thus, the operation
may have an overhead if the number of prims is large.

Expand Down Expand Up @@ -304,7 +304,7 @@ def safe_callback(callback_name, event, obj_ref):
def _initialize_callback(self, event):
"""Initializes the scene elements.

Note:
.. note::
PhysX handles are only enabled once the simulator starts playing. Hence, this function needs to be
called whenever the simulator "plays" from a "stop" state.
"""
Expand Down Expand Up @@ -334,7 +334,7 @@ def _on_prim_deletion(self, prim_path: str) -> None:
Args:
prim_path: The path to the prim that is being deleted.

Note:
.. note::
This function is called when the prim is deleted.
"""
if prim_path == "/":
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@ def body_names(self) -> list[str]:
def root_view(self):
"""Root view for the asset.
Note:
.. note::
Use this view with caution. It requires handling of tensors in a specific way.
"""
raise NotImplementedError()
Expand Down Expand Up @@ -123,7 +123,7 @@ def reset(self, env_ids: Sequence[int] | None = None) -> None:
def write_data_to_sim(self) -> None:
"""Write external wrench to the simulation.
Note:
.. note::
We write external wrench to the simulation here since this function is called before the simulation step.
This ensures that the external wrench is applied at every simulation step.
"""
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -288,7 +288,7 @@ def projected_gravity_b(self) -> torch.Tensor:
def heading_w(self) -> torch.Tensor:
"""Yaw heading of the base frame (in radians). Shape is (num_instances,).
Note:
.. note::
This quantity is computed by assuming that the forward-direction of the base
frame is along x-direction, i.e. :math:`(1, 0, 0)`.
"""
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,7 @@ def body_names(self) -> list[str]:
def root_view(self):
"""Root view for the rigid object collection.
Note:
.. note::
Use this view with caution. It requires handling of tensors in a specific way.
"""
raise NotImplementedError()
Expand Down Expand Up @@ -122,7 +122,7 @@ def reset(self, env_ids: Sequence[int] | None = None, object_ids: slice | torch.
def write_data_to_sim(self) -> None:
"""Write external wrench to the simulation.
Note:
.. note::
We write external wrench to the simulation here since this function is called before the simulation step.
This ensures that the external wrench is applied at every simulation step.
"""
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -217,7 +217,7 @@ def projected_gravity_b(self) -> torch.Tensor:
def heading_w(self) -> torch.Tensor:
"""Yaw heading of the base frame (in radians). Shape is (num_instances, num_bodies).

Note:
.. note::
This quantity is computed by assuming that the forward-direction of the base
frame is along x-direction, i.e. :math:`(1, 0, 0)`.
"""
Expand Down
2 changes: 1 addition & 1 deletion source/isaaclab/isaaclab/sensors/camera/camera.py
Original file line number Diff line number Diff line change
Expand Up @@ -577,7 +577,7 @@ def _update_intrinsic_matrices(self, env_ids: Sequence[int]):
Also called calibration matrix. This matrix works for linear depth images. We assume square pixels.
Note:
.. note::
The calibration matrix projects points in the 3D scene onto an imaginary screen of the camera.
The coordinates of points on the image plane are in the homogeneous representation.
"""
Expand Down
2 changes: 1 addition & 1 deletion source/isaaclab/isaaclab/sensors/camera/camera_cfg.py
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ class OffsetCfg:
offset: OffsetCfg = OffsetCfg()
"""The offset pose of the sensor's frame from the sensor's parent frame. Defaults to identity.

Note:
.. note::
The parent frame is the frame the sensor attaches to. For example, the parent frame of a
camera at path ``/World/envs/env_0/Robot/Camera`` is ``/World/envs/env_0/Robot``.
"""
Expand Down
4 changes: 4 additions & 0 deletions source/isaaclab/isaaclab/sensors/contact_sensor/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,10 @@

"""Sub-module for rigid contact sensor."""

from .base_contact_sensor import BaseContactSensor
from .base_contact_sensor_data import BaseContactSensorData
from .contact_sensor import ContactSensor
from .contact_sensor_cfg import ContactSensorCfg
from .contact_sensor_data import ContactSensorData

__all__ = ["BaseContactSensor", "BaseContactSensorData", "ContactSensor", "ContactSensorCfg", "ContactSensorData"]
Loading
Loading