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
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 = "0.40.14"
version = "0.40.15"

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

0.40.15 (2025-07-08)
~~~~~~~~~~~~~~~~~~~~

Added
^^^^^

* Added ability to set platform height independent of object height for trimesh terrains.


0.40.14 (2025-07-01)
~~~~~~~~~~~~~~~~~~~~

Expand Down Expand Up @@ -37,6 +46,7 @@ Changed
Added
^^^^^


* Added unit test for :func:`~isaaclab.utils.math.quat_inv`.

Fixed
Expand Down
7 changes: 4 additions & 3 deletions source/isaaclab/isaaclab/terrains/trimesh/mesh_terrains.py
Original file line number Diff line number Diff line change
Expand Up @@ -773,6 +773,7 @@ def repeated_objects_terrain(
# -- common parameters
num_objects = cp_0.num_objects + int(difficulty * (cp_1.num_objects - cp_0.num_objects))
height = cp_0.height + difficulty * (cp_1.height - cp_0.height)
platform_height = cfg.platform_height if cfg.platform_height >= 0.0 else height
# -- object specific parameters
# note: SIM114 requires duplicated logical blocks under a single body.
if isinstance(cfg, MeshRepeatedBoxesTerrainCfg):
Expand Down Expand Up @@ -808,7 +809,7 @@ def repeated_objects_terrain(
# initialize list of meshes
meshes_list = list()
# compute quantities
origin = np.asarray((0.5 * cfg.size[0], 0.5 * cfg.size[1], 0.5 * height))
origin = np.asarray((0.5 * cfg.size[0], 0.5 * cfg.size[1], 0.5 * platform_height))
platform_corners = np.asarray([
[origin[0] - cfg.platform_width / 2, origin[1] - cfg.platform_width / 2],
[origin[0] + cfg.platform_width / 2, origin[1] + cfg.platform_width / 2],
Expand Down Expand Up @@ -851,8 +852,8 @@ def repeated_objects_terrain(
ground_plane = make_plane(cfg.size, height=0.0, center_zero=False)
meshes_list.append(ground_plane)
# generate a platform in the middle
dim = (cfg.platform_width, cfg.platform_width, 0.5 * height)
pos = (0.5 * cfg.size[0], 0.5 * cfg.size[1], 0.25 * height)
dim = (cfg.platform_width, cfg.platform_width, 0.5 * platform_height)
pos = (0.5 * cfg.size[0], 0.5 * cfg.size[1], 0.25 * platform_height)
platform = trimesh.creation.box(dim, trimesh.transformations.translation_matrix(pos))
meshes_list.append(platform)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,10 @@ class MeshPyramidStairsTerrainCfg(SubTerrainBaseCfg):
"""The width of the steps (in m)."""
platform_width: float = 1.0
"""The width of the square platform at the center of the terrain. Defaults to 1.0."""
platform_height: float = -1.0
"""The height of the platform. Defaults to -1.0.

If the value is negative, the height is the same as the object height."""
holes: bool = False
"""If True, the terrain will have holes in the steps. Defaults to False.

Expand Down