From cd17461370b72d34ac6fd95309bbffe1589cc3ad Mon Sep 17 00:00:00 2001 From: Maximilian Krause Date: Wed, 19 Aug 2026 11:43:19 -0700 Subject: [PATCH 01/34] Add Newton tablecloth demos --- scripts/demos/newton_tablecloth.py | 298 +++++++++ scripts/demos/newton_tablecloth_h1.py | 622 ++++++++++++++++++ .../max-newton-tablecloth-demos.skip | 1 + .../test/app/standalone_script_cases.py | 10 + 4 files changed, 931 insertions(+) create mode 100644 scripts/demos/newton_tablecloth.py create mode 100644 scripts/demos/newton_tablecloth_h1.py create mode 100644 source/isaaclab/changelog.d/max-newton-tablecloth-demos.skip diff --git a/scripts/demos/newton_tablecloth.py b/scripts/demos/newton_tablecloth.py new file mode 100644 index 000000000000..9bee2fbdbeda --- /dev/null +++ b/scripts/demos/newton_tablecloth.py @@ -0,0 +1,298 @@ +# Copyright (c) 2022-2026, The Isaac Lab Project Developers (https://github.com/isaac-sim/IsaacLab/blob/main/CONTRIBUTORS.md). +# All rights reserved. +# +# SPDX-License-Identifier: BSD-3-Clause + +"""Run the classic tablecloth trick at five pull speeds with Newton VBD. + +.. code-block:: bash + + uv run python scripts/demos/newton_tablecloth.py --device cuda:0 +""" + +import argparse + +from isaaclab.app import add_launcher_args, launch_simulation + +parser = argparse.ArgumentParser(description="Compare five Newton VBD tablecloth pull speeds.") +parser.add_argument("--max_steps", type=int, default=-1, help="Stop after this many frames; negative runs forever.") +add_launcher_args(parser) +parser.set_defaults(visualizer=["newton_gl"]) +args_cli = parser.parse_args() + +import newton +import numpy as np +import warp as wp +from isaaclab_newton.physics import ( + NewtonCfg, + NewtonCollisionPipelineCfg, + NewtonManager, + NewtonShapeCfg, + NewtonSoftContactCfg, + VBDSolverCfg, +) + +import isaaclab.sim as sim_utils +from isaaclab.utils.configclass import configclass + +FPS = 60 +SUBSTEPS = 25 +SETTLE_TIME = 0.5 +PULL_DISTANCE = 1.25 +# Newton 1.5 needs a slightly sharper final pull than Newton main to retain the glass. +PULL_SPEEDS = (0.5, 1.0, 2.0, 4.0, 8.0) + +TABLE_HALF_WIDTH = 0.50 +TABLE_HALF_DEPTH = 0.36 +TABLE_TOP_Z = 0.75 +TABLETOP_HALF_HEIGHT = 0.04 +LANE_SPACING = 0.95 + +CLOTH_WIDTH = 1.08 +CLOTH_DEPTH = 0.70 +CLOTH_RESOLUTION = 24 +CLOTH_PARTICLE_RADIUS = 0.0005 + + +@configclass +class _TableclothVBDSolverCfg(VBDSolverCfg): + """VBD options required by the rigid-soft tablecloth scene.""" + + iterations: int = 15 + rigid_contact_hard: bool = False + rigid_body_contact_buffer_size: int = 512 + rigid_body_particle_contact_buffer_size: int = 8192 + + +@configclass +class _TableclothCollisionCfg(NewtonCollisionPipelineCfg): + """Full-surface collision with stable resting-contact correspondence.""" + + broad_phase: str = "nxn" + soft_contact_margin: float = 0.005 + enable_rigid_soft_full_surface_contact: bool = True + contact_matching: str = "sticky" + + +@wp.kernel +def _advance_time(elapsed: wp.array(dtype=float), dt: float): + elapsed[0] += dt + + +@wp.kernel +def _advance_pull( + distance: wp.array(dtype=float), speed: wp.array(dtype=float), elapsed: wp.array(dtype=float), dt: float +): + lane = wp.tid() + if elapsed[0] >= SETTLE_TIME: + distance[lane] = wp.min(distance[lane] + speed[lane] * dt, PULL_DISTANCE) + + +@wp.kernel +def _move_pulled_edge( + particle_indices: wp.array(dtype=wp.int32), + lane_indices: wp.array(dtype=wp.int32), + rest_positions: wp.array(dtype=wp.vec3), + pull_speeds: wp.array(dtype=float), + pull_distances: wp.array(dtype=float), + elapsed: wp.array(dtype=float), + particle_q_0: wp.array(dtype=wp.vec3), + particle_q_1: wp.array(dtype=wp.vec3), + particle_qd_0: wp.array(dtype=wp.vec3), + particle_qd_1: wp.array(dtype=wp.vec3), +): + i = wp.tid() + lane = lane_indices[i] + distance = pull_distances[lane] + descent = 0.0 + descent_velocity = 0.0 + if distance > 0.10: + descent = 0.30 * wp.clamp((distance - 0.10) / (PULL_DISTANCE - 0.10), 0.0, 1.0) + velocity = 0.0 + if elapsed[0] >= SETTLE_TIME and distance < PULL_DISTANCE: + velocity = pull_speeds[lane] + if distance > 0.10: + descent_velocity = 0.30 * pull_speeds[lane] / (PULL_DISTANCE - 0.10) + position = rest_positions[i] + wp.vec3(distance, 0.0, -descent) + linear_velocity = wp.vec3(velocity, 0.0, -descent_velocity) + index = particle_indices[i] + particle_q_0[index] = position + particle_q_1[index] = position + particle_qd_0[index] = linear_velocity + particle_qd_1[index] = linear_velocity + + +def _collision_cfgs(density: float, friction: float) -> tuple[newton.ModelBuilder.ShapeConfig, ...]: + """Create separate rigid-support and cloth-contact representations.""" + rigid = newton.ModelBuilder.ShapeConfig( + density=density, + ke=1.0e5, + kd=1.0e2, + mu=friction, + margin=0.002, + has_particle_collision=False, + ) + cloth = rigid.copy() + cloth.density = 0.0 + cloth.ke = 1.0e3 + cloth.kd = 1.0e1 + cloth.has_shape_collision = False + cloth.has_particle_collision = True + cloth.is_visible = False + return rigid, cloth + + +def _add_table(builder: newton.ModelBuilder, lane_y: float) -> None: + rigid_cfg, cloth_cfg = _collision_cfgs(0.0, 0.70) + color = (0.46, 0.24, 0.10) + tabletop = wp.transform(wp.vec3(0.0, lane_y, TABLE_TOP_Z - TABLETOP_HALF_HEIGHT), wp.quat_identity()) + for cfg in (rigid_cfg, cloth_cfg): + builder.add_shape_box( + -1, + xform=tabletop, + hx=TABLE_HALF_WIDTH, + hy=TABLE_HALF_DEPTH, + hz=TABLETOP_HALF_HEIGHT, + cfg=cfg, + color=color, + ) + leg_half_height = 0.5 * (TABLE_TOP_Z - 2.0 * TABLETOP_HALF_HEIGHT) + for x_sign, y_sign in ((-1, -1), (-1, 1), (1, -1), (1, 1)): + xform = wp.transform( + wp.vec3( + x_sign * (TABLE_HALF_WIDTH - 0.07), + lane_y + y_sign * (TABLE_HALF_DEPTH - 0.07), + leg_half_height, + ), + wp.quat_identity(), + ) + for cfg in (rigid_cfg, cloth_cfg): + builder.add_shape_box(-1, xform=xform, hx=0.035, hy=0.035, hz=leg_half_height, cfg=cfg, color=color) + + +def _add_tableware(builder: newton.ModelBuilder, lane_y: float, z_base: float) -> None: + def add_cylinder(position, radius, half_height, density, color): + body = builder.add_body(xform=wp.transform(wp.vec3(*position), wp.quat_identity())) + for cfg in _collision_cfgs(density, 0.70): + builder.add_shape_cylinder(body, radius=radius, half_height=half_height, cfg=cfg, color=color) + return body + + add_cylinder((-0.22, lane_y - 0.08, z_base + 0.012), 0.105, 0.012, 2400.0, (0.92, 0.91, 0.82)) + add_cylinder((0.02, lane_y + 0.12, z_base + 0.050), 0.050, 0.050, 2500.0, (0.52, 0.78, 0.90)) + body = builder.add_body(xform=wp.transform(wp.vec3(0.22, lane_y - 0.11, z_base + 0.006), wp.quat_identity())) + for cfg in _collision_cfgs(8000.0, 0.70): + builder.add_shape_box(body, hx=0.110, hy=0.016, hz=0.006, cfg=cfg, color=(0.72, 0.74, 0.76)) + + +def _build_scene(builder: newton.ModelBuilder) -> tuple[np.ndarray, np.ndarray, np.ndarray]: + lane_centers = (np.arange(len(PULL_SPEEDS), dtype=np.float32) - 0.5 * (len(PULL_SPEEDS) - 1)) * LANE_SPACING + pulled_indices = [] + pulled_lanes = [] + pulled_rest = [] + dim_x = CLOTH_RESOLUTION + cell_x = CLOTH_WIDTH / dim_x + dim_y = round(CLOTH_DEPTH / cell_x) + cell_y = CLOTH_DEPTH / dim_y + particle_mass = 0.24 * CLOTH_WIDTH * CLOTH_DEPTH / ((dim_x + 1) * (dim_y + 1)) + cloth_z = TABLE_TOP_Z + CLOTH_PARTICLE_RADIUS + 0.002 + + for lane, lane_y in enumerate(lane_centers): + _add_table(builder, float(lane_y)) + start = builder.particle_count + builder.add_cloth_grid( + pos=wp.vec3(-0.5 * CLOTH_WIDTH, float(lane_y - 0.5 * CLOTH_DEPTH), cloth_z), + rot=wp.quat_identity(), + vel=wp.vec3(0.0), + dim_x=dim_x, + dim_y=dim_y, + cell_x=cell_x, + cell_y=cell_y, + mass=particle_mass, + fix_right=True, + tri_ke=5.0e4, + tri_ka=5.0e4, + tri_kd=5.0e1, + edge_ke=0.10, + edge_kd=1.0e-3, + particle_radius=CLOTH_PARTICLE_RADIUS, + ) + for y in range(dim_y + 1): + index = start + y * (dim_x + 1) + dim_x + pulled_indices.append(index) + pulled_lanes.append(lane) + pulled_rest.append(builder.particle_q[index]) + _add_tableware(builder, float(lane_y), cloth_z + CLOTH_PARTICLE_RADIUS) + + builder.add_ground_plane(cfg=newton.ModelBuilder.ShapeConfig(ke=1.0e5, kd=1.0e2, mu=0.70)) + builder.color(include_bending=True) + return ( + np.asarray(pulled_indices, dtype=np.int32), + np.asarray(pulled_lanes, dtype=np.int32), + np.asarray(pulled_rest, dtype=np.float32), + ) + + +def main() -> None: + """Launch the five-speed tablecloth demo.""" + newton.use_coord_layout_targets = True + physics_cfg = NewtonCfg( + num_substeps=SUBSTEPS, + collision_decimation=1, + default_shape_cfg=NewtonShapeCfg(gap=0.001, ke=1.0e5, kd=1.0e2, mu=0.70), + soft_contact_cfg=NewtonSoftContactCfg(soft_contact_ke=1.0e5, soft_contact_kd=1.0e2, soft_contact_mu=0.10), + collision_cfg=_TableclothCollisionCfg(), + solver_cfg=_TableclothVBDSolverCfg(), + ) + with launch_simulation(cfg=physics_cfg, launcher_args=args_cli) as resolved_physics_cfg: + sim = sim_utils.SimulationContext( + sim_utils.SimulationCfg(dt=1.0 / FPS, device=args_cli.device, physics=resolved_physics_cfg) + ) + sim.set_camera_view(eye=(2.8, -5.2, 2.4), target=(0.1, 0.0, 0.65)) + builder = NewtonManager.create_builder(gravity=(0.0, 0.0, -9.81)) + pulled_indices, pulled_lanes, pulled_rest = _build_scene(builder) + NewtonManager.set_builder(builder) + device = args_cli.device + indices_wp = wp.array(pulled_indices, dtype=wp.int32, device=device) + lanes_wp = wp.array(pulled_lanes, dtype=wp.int32, device=device) + rest_wp = wp.array(pulled_rest, dtype=wp.vec3, device=device) + speeds_wp = wp.array(PULL_SPEEDS, dtype=float, device=device) + distances_wp = wp.zeros(len(PULL_SPEEDS), dtype=float, device=device) + elapsed_wp = wp.zeros(1, dtype=float, device=device) + + def update_pulled_edge(_state: newton.State) -> None: + """Advance and prescribe the pulled edge before every solver substep.""" + wp.launch(_advance_time, dim=1, inputs=[elapsed_wp, 1.0 / (FPS * SUBSTEPS)]) + wp.launch( + _advance_pull, + dim=len(PULL_SPEEDS), + inputs=[distances_wp, speeds_wp, elapsed_wp, 1.0 / (FPS * SUBSTEPS)], + ) + wp.launch( + _move_pulled_edge, + dim=len(pulled_indices), + inputs=[ + indices_wp, + lanes_wp, + rest_wp, + speeds_wp, + distances_wp, + elapsed_wp, + NewtonManager.get_state_0().particle_q, + NewtonManager.get_state_1().particle_q, + NewtonManager.get_state_0().particle_qd, + NewtonManager.get_state_1().particle_qd, + ], + ) + + NewtonManager.register_state_force_callback(update_pulled_edge) + sim.reset() + print("[INFO]: Setup complete. Five Newton VBD tablecloth pulls are ready.", flush=True) + + step = 0 + while sim.is_headless_or_exist_active_visualizer() and (args_cli.max_steps < 0 or step < args_cli.max_steps): + sim.step() + step += 1 + + +if __name__ == "__main__": + main() diff --git a/scripts/demos/newton_tablecloth_h1.py b/scripts/demos/newton_tablecloth_h1.py new file mode 100644 index 000000000000..acdfe346e480 --- /dev/null +++ b/scripts/demos/newton_tablecloth_h1.py @@ -0,0 +1,622 @@ +# Copyright (c) 2022-2026, The Isaac Lab Project Developers (https://github.com/isaac-sim/IsaacLab/blob/main/CONTRIBUTORS.md). +# All rights reserved. +# +# SPDX-License-Identifier: BSD-3-Clause + +"""Have a Unitree H1 perform the tablecloth trick with Newton VBD and Newton IK. + +The motion sequence uses Isaac Lab's GPU-resident Warp state-machine pattern. + +.. code-block:: bash + + uv run python scripts/demos/newton_tablecloth_h1.py --device cuda:0 +""" + +import argparse + +from isaaclab.app import add_launcher_args, launch_simulation + +parser = argparse.ArgumentParser(description="Newton VBD H1 tablecloth trick.") +parser.add_argument("--max_steps", type=int, default=-1, help="Stop after this many frames; negative runs forever.") +parser.add_argument("--pull_speed", type=float, default=0.80, help="Task-space pull speed [m/s].") +add_launcher_args(parser) +parser.set_defaults(visualizer=["newton_gl"]) +args_cli = parser.parse_args() + +import newton +import newton.utils +import numpy as np +import warp as wp +from isaaclab_newton.ik import ( + NewtonIKJointLimitObjectiveCfg, + NewtonIKPoseObjectiveCfg, + NewtonIKSolver, + NewtonIKSolverCfg, +) +from isaaclab_newton.physics import ( + NewtonCfg, + NewtonCollisionPipelineCfg, + NewtonManager, + NewtonShapeCfg, + NewtonSoftContactCfg, + VBDSolverCfg, +) + +import isaaclab.sim as sim_utils +from isaaclab.utils.configclass import configclass + +FPS = 60 +SUBSTEPS = 16 +TABLE_TOP_Z = 1.09 +RIGID_GAP = 0.001 +PULL_DISTANCE = 0.40 +PULL_RAMP_TIME = 0.25 + +SETTLE_END = wp.constant(0.50) +APPROACH_END = wp.constant(1.30) +DESCEND_END = wp.constant(1.90) +INSERT_END = wp.constant(2.40) +PRELIFT_END = wp.constant(3.00) +CLOSE_END = wp.constant(3.40) +LIFT_END = wp.constant(3.90) +PULL_START = wp.constant(4.50) + +STATE_SETTLE = wp.constant(0) +STATE_APPROACH = wp.constant(1) +STATE_DESCEND = wp.constant(2) +STATE_INSERT = wp.constant(3) +STATE_PRELIFT = wp.constant(4) +STATE_CLOSE = wp.constant(5) +STATE_LIFT = wp.constant(6) +STATE_PINCH = wp.constant(7) +STATE_PULL = wp.constant(8) +STATE_HOLD = wp.constant(9) + +GROUP_LEFT_THUMB = wp.constant(0) +GROUP_RIGHT_THUMB = wp.constant(1) +GROUP_LEFT_INDEX = wp.constant(2) +GROUP_RIGHT_INDEX = wp.constant(3) +GROUP_OTHER = wp.constant(4) + +HAND_OFFSETS = ((0.146273, -0.068447, 0.028077), (0.148808, 0.068652, 0.026675)) +HAND_ROTATIONS = ((-0.09, 0.46, 0.03, 0.88), (0.09023, 0.46115, -0.03008, 0.88221)) +THUMB_CLOSED_VALUES = ( + (1.273907, 0.160957, 0.369535, 0.892908), + (1.192278, 0.195421, 0.400690, 0.679765), +) + + +@configclass +class _H1VBDSolverCfg(VBDSolverCfg): + """Unified AVBD/VBD settings matching the standalone Newton demo.""" + + iterations: int = 10 + rigid_contact_hard: bool = False + rigid_contact_history: bool = True + rigid_body_contact_buffer_size: int = 512 + rigid_body_particle_contact_buffer_size: int = 8192 + rigid_joint_linear_ke: float = 1.0e6 + rigid_joint_angular_ke: float = 1.0e6 + rigid_joint_linear_kd: float = 1.0e2 + rigid_joint_angular_kd: float = 1.0e2 + + +@configclass +class _H1CollisionCfg(NewtonCollisionPipelineCfg): + """H1 full-surface soft contact and rigid correspondence settings.""" + + broad_phase: str = "sap" + soft_contact_margin: float = 0.008 + enable_rigid_soft_full_surface_contact: bool = True + contact_matching: str = "latest" + + +@wp.func +def _smoothstep(value: float) -> float: + u = wp.clamp(value, 0.0, 1.0) + return u * u * (3.0 - 2.0 * u) + + +@wp.kernel +def _infer_state_machine( + sim_time: float, + dt: float, + pull_speed: float, + keyframes: wp.array(dtype=wp.vec3), + left_target: wp.array(dtype=wp.vec3), + right_target: wp.array(dtype=wp.vec3), + finger_fractions: wp.array(dtype=float), + state: wp.array(dtype=wp.int32), + pull_distance: wp.array(dtype=float), +): + """Advance the single H1 task-space state machine entirely in Warp.""" + left = keyframes[0] + right = keyframes[1] + left_thumb = 0.0 + right_thumb = 0.0 + left_index = 0.0 + right_index = 0.0 + other = 0.0 + next_state = STATE_SETTLE + + if sim_time < SETTLE_END: + pass + elif sim_time < APPROACH_END: + next_state = STATE_APPROACH + u = _smoothstep((sim_time - SETTLE_END) / (APPROACH_END - SETTLE_END)) + left = wp.lerp(keyframes[0], keyframes[2], u) + right = wp.lerp(keyframes[1], keyframes[3], u) + other = 0.80 * u + elif sim_time < DESCEND_END: + next_state = STATE_DESCEND + u = _smoothstep((sim_time - APPROACH_END) / (DESCEND_END - APPROACH_END)) + left = wp.lerp(keyframes[2], keyframes[4], u) + right = wp.lerp(keyframes[3], keyframes[5], u) + left_index = 0.75 * u + right_index = 0.75 * u + other = 0.80 + elif sim_time < INSERT_END: + next_state = STATE_INSERT + u = _smoothstep((sim_time - DESCEND_END) / (INSERT_END - DESCEND_END)) + left = wp.lerp(keyframes[4], keyframes[6], u) + right = wp.lerp(keyframes[5], keyframes[7], u) + left_index = 0.75 + right_index = 0.75 + other = 0.80 + elif sim_time < PRELIFT_END: + next_state = STATE_PRELIFT + u = _smoothstep((sim_time - INSERT_END) / (PRELIFT_END - INSERT_END)) + left = wp.lerp(keyframes[6], keyframes[8], u) + right = wp.lerp(keyframes[7], keyframes[9], u) + left_index = wp.lerp(0.75, 0.737080, u) + right_index = wp.lerp(0.75, 0.713855, u) + other = 0.80 + elif sim_time < CLOSE_END: + next_state = STATE_CLOSE + left = keyframes[8] + right = keyframes[9] + u = _smoothstep((sim_time - PRELIFT_END) / (CLOSE_END - PRELIFT_END)) + left_thumb = u + right_thumb = u + left_index = 0.737080 + right_index = 0.713855 + other = 0.80 + elif sim_time < LIFT_END: + next_state = STATE_LIFT + u = _smoothstep((sim_time - CLOSE_END) / (LIFT_END - CLOSE_END)) + left = wp.lerp(keyframes[8], keyframes[10], u) + right = wp.lerp(keyframes[9], keyframes[11], u) + left_thumb = 1.0 + right_thumb = 1.0 + left_index = 0.737080 + right_index = 0.713855 + other = 0.80 + elif sim_time < PULL_START: + next_state = STATE_PINCH + left = keyframes[10] + right = keyframes[11] + left_thumb = 1.0 + right_thumb = 1.0 + left_index = 0.737080 + right_index = 0.713855 + other = 0.80 + else: + speed_ramp = _smoothstep((sim_time - PULL_START) / PULL_RAMP_TIME) + distance = wp.min(pull_distance[0] + speed_ramp * pull_speed * dt, PULL_DISTANCE) + pull_distance[0] = distance + drop = 0.0 + if distance > 0.08: + drop = 0.175 * _smoothstep((distance - 0.08) / (PULL_DISTANCE - 0.08)) + offset = wp.vec3(-distance, 0.0, -drop) + left = keyframes[10] + offset + right = keyframes[11] + offset + left_thumb = 1.0 + right_thumb = 1.0 + left_index = 0.737080 + right_index = 0.713855 + other = 0.80 + next_state = STATE_PULL if distance < PULL_DISTANCE else STATE_HOLD + + left_target[0] = left + right_target[0] = right + finger_fractions[0] = left_thumb + finger_fractions[1] = right_thumb + finger_fractions[2] = left_index + finger_fractions[3] = right_index + finger_fractions[4] = other + state[0] = next_state + + +@wp.kernel +def _set_finger_targets( + joint_q: wp.array(dtype=float), + finger_indices: wp.array(dtype=wp.int32), + closed_values: wp.array(dtype=float), + finger_groups: wp.array(dtype=wp.int32), + fractions: wp.array(dtype=float), +): + i = wp.tid() + joint_q[finger_indices[i]] = fractions[finger_groups[i]] * closed_values[i] + + +@wp.kernel +def _update_control_targets( + desired_q: wp.array(dtype=float), + previous_q: wp.array(dtype=float), + inv_dt: float, + target_q: wp.array(dtype=float), + target_qd: wp.array(dtype=float), +): + i = wp.tid() + delta = wp.clamp(desired_q[i] - previous_q[i], -40.0 / inv_dt, 40.0 / inv_dt) + target_q[i] = previous_q[i] + delta + target_qd[i] = delta * inv_dt + previous_q[i] = target_q[i] + + +def _find_suffix(labels: list[str], suffix: str) -> int: + matches = [index for index, label in enumerate(labels) if label.endswith(f"/{suffix}")] + if len(matches) != 1: + raise ValueError(f"Expected one label ending in '/{suffix}', found {len(matches)}") + return matches[0] + + +def _unit_quat(values: tuple[float, float, float, float]) -> tuple[float, float, float, float]: + values_np = np.asarray(values, dtype=np.float32) + values_np /= np.linalg.norm(values_np) + return tuple(float(value) for value in values_np) + + +def _add_h1(builder: newton.ModelBuilder) -> tuple[dict[str, int], list[int]]: + body_start = builder.body_count + joint_start = builder.joint_count + dof_start = builder.joint_dof_count + shape_start = builder.shape_count + sdf_defaults = ( + builder.default_shape_cfg.force_sdf, + builder.default_shape_cfg.sdf_max_resolution, + builder.default_shape_cfg.sdf_target_voxel_size, + ) + builder.default_shape_cfg.configure_sdf(max_resolution=64) + try: + builder.add_mjcf( + newton.utils.download_asset("unitree_h1") / "mjcf/h1_with_hand.xml", + xform=wp.transform(wp.vec3(-0.75, 0.0, 0.0), wp.quat_identity()), + floating=False, + enable_self_collisions=False, + ctrl_direct=False, + parse_visuals=True, + parse_sites=True, + collider_classes=("collision",), + no_class_as_colliders=True, + ) + finally: + ( + builder.default_shape_cfg.force_sdf, + builder.default_shape_cfg.sdf_max_resolution, + builder.default_shape_cfg.sdf_target_voxel_size, + ) = sdf_defaults + + for dof in range(dof_start, builder.joint_dof_count): + builder.joint_target_ke[dof] = 5.0e4 + builder.joint_target_kd[dof] = 5.0e2 + torso_dof = builder.joint_qd_start[_find_suffix(builder.joint_label, "torso_joint")] + builder.joint_target_ke[torso_dof] = 2.0e5 + builder.joint_target_kd[torso_dof] = 2.0e3 + finger_tokens = tuple( + f"/{side}_{digit}_" for side in ("L", "R") for digit in ("thumb", "index", "middle", "ring", "pinky") + ) + for joint in range(joint_start, builder.joint_count): + if any(token in builder.joint_label[joint] for token in finger_tokens): + dof = builder.joint_qd_start[joint] + builder.joint_target_ke[dof] = 4.0e4 + builder.joint_target_kd[dof] = 1.0e2 + + bodies = { + "torso": _find_suffix(builder.body_label, "torso_link"), + "left_hand": _find_suffix(builder.body_label, "left_hand_link"), + "right_hand": _find_suffix(builder.body_label, "right_hand_link"), + } + shape_flag = int(newton.ShapeFlags.COLLIDE_SHAPES) + particle_flag = int(newton.ShapeFlags.COLLIDE_PARTICLES) + grasp_tokens = ("/L_thumb_", "/L_index_", "/R_thumb_", "/R_index_") + grasp_bodies = { + body + for body in range(body_start, builder.body_count) + if any(token in builder.body_label[body] for token in grasp_tokens) + } + robot_shapes = [] + grasp_shape_count = 0 + for shape in range(shape_start, builder.shape_count): + if not int(builder.shape_flags[shape]) & shape_flag: + continue + builder.shape_flags[shape] |= particle_flag + builder.shape_gap[shape] = RIGID_GAP + builder.shape_material_ke[shape] = 1.0e3 + builder.shape_material_kd[shape] = 1.0e-2 + builder.shape_material_mu[shape] = 0.50 + builder.shape_margin[shape] = 0.002 + builder.shape_sdf_padding[shape] = 0.012 + builder.shape_sdf_max_resolution[shape] = 64 + builder.shape_sdf_target_voxel_size[shape] = None + robot_shapes.append(shape) + if builder.shape_body[shape] in grasp_bodies: + builder.shape_material_ke[shape] = 8.0e3 + builder.shape_material_kd[shape] = 2.0e1 + builder.shape_material_mu[shape] = 200.0 + builder.shape_sdf_max_resolution[shape] = 128 + grasp_shape_count += 1 + if grasp_shape_count != 12: + raise RuntimeError(f"Expected 12 H1 thumb/index colliders, found {grasp_shape_count}") + return bodies, robot_shapes + + +def _add_table(builder: newton.ModelBuilder) -> None: + cfg = newton.ModelBuilder.ShapeConfig(ke=1.0e4, kd=1.0e1, mu=0.25, gap=RIGID_GAP, has_particle_collision=True) + color = (0.46, 0.24, 0.10) + builder.add_shape_box( + -1, + xform=wp.transform(wp.vec3(0.0, 0.0, TABLE_TOP_Z - 0.04), wp.quat_identity()), + hx=0.20, + hy=0.36, + hz=0.04, + cfg=cfg, + color=color, + ) + for x_sign, y_sign in ((-1, -1), (-1, 1), (1, -1), (1, 1)): + builder.add_shape_box( + -1, + xform=wp.transform(wp.vec3(x_sign * 0.15, y_sign * 0.30, 0.505), wp.quat_identity()), + hx=0.03, + hy=0.03, + hz=0.505, + cfg=cfg, + color=color, + ) + + +def _add_cloth_and_tableware(builder: newton.ModelBuilder) -> None: + resolution = 24 + width = 0.46 + depth = 0.70 + cell_x = width / resolution + dim_y = round(depth / cell_x) + cell_y = depth / dim_y + cloth_z = TABLE_TOP_Z + 0.003 + builder.add_cloth_grid( + pos=wp.vec3(-0.24, -0.5 * depth, cloth_z), + rot=wp.quat_identity(), + vel=wp.vec3(0.0), + dim_x=resolution, + dim_y=dim_y, + cell_x=cell_x, + cell_y=cell_y, + mass=0.24 * width * depth / ((resolution + 1) * (dim_y + 1)), + tri_ke=5.0e4, + tri_ka=5.0e4, + tri_kd=5.0e1, + edge_ke=0.10, + edge_kd=1.0e-3, + particle_radius=0.001, + ) + object_cfg = newton.ModelBuilder.ShapeConfig( + density=2400.0, + ke=1.0e4, + kd=1.0e1, + mu=0.04, + gap=RIGID_GAP, + has_particle_collision=True, + ) + plate = builder.add_body(xform=wp.transform(wp.vec3(0.045, -0.08, cloth_z + 0.008), wp.quat_identity())) + builder.add_shape_cylinder(plate, radius=0.065, half_height=0.008, cfg=object_cfg, color=(0.92, 0.91, 0.82)) + glass = builder.add_body(xform=wp.transform(wp.vec3(0.04, 0.11, cloth_z + 0.045), wp.quat_identity())) + glass_cfg = object_cfg.copy() + glass_cfg.density = 2500.0 + builder.add_shape_cylinder(glass, radius=0.032, half_height=0.045, cfg=glass_cfg, color=(0.52, 0.78, 0.90)) + fork = builder.add_body(xform=wp.transform(wp.vec3(0.08, -0.20, cloth_z + 0.004), wp.quat_identity())) + fork_cfg = object_cfg.copy() + fork_cfg.density = 8000.0 + builder.add_shape_box(fork, hx=0.060, hy=0.009, hz=0.004, cfg=fork_cfg, color=(0.72, 0.74, 0.76)) + + +def _finger_data(model: newton.Model) -> tuple[list[int], list[float], list[int]]: + q_starts = model.joint_q_start.numpy() + indices = [] + values = [] + groups = [] + for side_index, side in enumerate(("L", "R")): + thumb = THUMB_CLOSED_VALUES[side_index] + entries = ( + ("thumb_proximal_yaw_joint", thumb[0]), + ("thumb_proximal_pitch_joint", thumb[1]), + ("thumb_intermediate_joint", thumb[2]), + ("thumb_distal_joint", thumb[3]), + ("index_proximal_joint", 1.2), + ("index_intermediate_joint", 1.2), + ("middle_proximal_joint", 1.0), + ("middle_intermediate_joint", 1.0), + ("ring_proximal_joint", 1.0), + ("ring_intermediate_joint", 1.0), + ("pinky_proximal_joint", 1.0), + ("pinky_intermediate_joint", 1.0), + ) + for suffix, value in entries: + indices.append(int(q_starts[_find_suffix(model.joint_label, f"{side}_{suffix}")])) + values.append(value) + if suffix.startswith("thumb_"): + groups.append(GROUP_LEFT_THUMB if side == "L" else GROUP_RIGHT_THUMB) + elif suffix.startswith("index_"): + groups.append(GROUP_LEFT_INDEX if side == "L" else GROUP_RIGHT_INDEX) + else: + groups.append(GROUP_OTHER) + return indices, values, groups + + +def _make_ik(model: newton.Model, bodies: dict[str, int]) -> NewtonIKSolver: + objectives = [ + NewtonIKPoseObjectiveCfg( + body_name="left_hand", + body_offset_pos=HAND_OFFSETS[0], + use_relative_mode=False, + position_weight=5.0, + rotation_weight=0.2, + ), + NewtonIKPoseObjectiveCfg( + body_name="right_hand", + body_offset_pos=HAND_OFFSETS[1], + use_relative_mode=False, + position_weight=5.0, + rotation_weight=0.2, + ), + NewtonIKPoseObjectiveCfg( + body_name="torso", + use_relative_mode=False, + position_weight=50.0, + rotation_weight=50.0, + ), + NewtonIKJointLimitObjectiveCfg(weight=1.0), + ] + return NewtonIKSolver( + NewtonIKSolverCfg(iterations=24, lambda_initial=0.1), + model=model, + num_envs=1, + device=str(model.device), + objectives=objectives, + link_resolver=bodies.__getitem__, + ) + + +def main() -> None: + """Launch the H1 tablecloth demo.""" + if not np.isfinite(args_cli.pull_speed) or args_cli.pull_speed <= 0.0: + raise ValueError("--pull_speed must be finite and positive") + newton.use_coord_layout_targets = True + physics_cfg = NewtonCfg( + num_substeps=SUBSTEPS, + collision_decimation=1, + # Newton 1.5 allocates VBD contact history lazily, outside graph-safe initialization. + use_cuda_graph=False, + default_shape_cfg=NewtonShapeCfg(gap=RIGID_GAP, ke=1.0e4, kd=1.0e1, mu=0.25), + soft_contact_cfg=NewtonSoftContactCfg(soft_contact_ke=1.0e3, soft_contact_kd=1.0e-2, soft_contact_mu=0.25), + collision_cfg=_H1CollisionCfg(), + solver_cfg=_H1VBDSolverCfg(), + ) + with launch_simulation(cfg=physics_cfg, launcher_args=args_cli) as resolved_physics_cfg: + sim = sim_utils.SimulationContext( + sim_utils.SimulationCfg(dt=1.0 / FPS, device=args_cli.device, physics=resolved_physics_cfg) + ) + sim.set_camera_view(eye=(-1.65, -1.80, 1.58), target=(-0.08, 0.0, 1.05)) + builder = NewtonManager.create_builder(gravity=(0.0, 0.0, -9.81)) + bodies, robot_shapes = _add_h1(builder) + robot_coord_count = builder.joint_coord_count + _add_table(builder) + _add_cloth_and_tableware(builder) + ground = builder.add_ground_plane( + cfg=newton.ModelBuilder.ShapeConfig(ke=1.0e4, kd=1.0e1, mu=0.25, gap=RIGID_GAP) + ) + for shape in robot_shapes: + builder.add_shape_collision_filter_pair(shape, ground) + builder.color(include_bending=True) + NewtonManager.set_builder(builder) + sim.reset() + + model = NewtonManager.get_model() + device = model.device + ik_solver = _make_ik(model, bodies) + left_objective = ik_solver.objectives_by_name["left_hand"] + right_objective = ik_solver.objectives_by_name["right_hand"] + torso_objective = ik_solver.objectives_by_name["torso"] + initial_body_q = NewtonManager.get_state_0().body_q.numpy() + torso_objective.position_objective.set_target_position(0, wp.vec3(*initial_body_q[bodies["torso"], :3])) + torso_objective.rotation_objective.set_target_rotation(0, wp.quat(*initial_body_q[bodies["torso"], 3:])) + left_objective.rotation_objective.set_target_rotation(0, wp.quat(*_unit_quat(HAND_ROTATIONS[0]))) + right_objective.rotation_objective.set_target_rotation(0, wp.quat(*_unit_quat(HAND_ROTATIONS[1]))) + + grasp_y = 0.24 + keyframes = wp.array( + [ + (-0.48, grasp_y, 1.24), + (-0.48, -grasp_y, 1.24), + (-0.30, grasp_y, 1.16), + (-0.30, -grasp_y, 1.16), + (-0.30, grasp_y, 1.050), + (-0.30, -grasp_y, 1.052), + (-0.225, grasp_y, 1.050), + (-0.225, -grasp_y, 1.052), + (-0.195, grasp_y, 1.110), + (-0.195, -grasp_y, 1.110), + (-0.195, grasp_y, 1.115), + (-0.195, -grasp_y, 1.115), + ], + dtype=wp.vec3, + device=device, + ) + state = wp.zeros(1, dtype=wp.int32, device=device) + pull_distance = wp.zeros(1, dtype=float, device=device) + fractions = wp.zeros(5, dtype=float, device=device) + finger_indices, closed_values, finger_groups = _finger_data(model) + finger_indices_wp = wp.array(finger_indices, dtype=wp.int32, device=device) + closed_values_wp = wp.array(closed_values, dtype=float, device=device) + finger_groups_wp = wp.array(finger_groups, dtype=wp.int32, device=device) + ik_seed = wp.clone(model.joint_q).reshape((1, model.joint_coord_count)) + control = NewtonManager.get_control() + + # Start from the solved rest pose instead of spending the settle phase moving out of the MJCF default. + left_objective.position_objective.set_target_position(0, wp.vec3(-0.48, grasp_y, 1.24)) + right_objective.position_objective.set_target_position(0, wp.vec3(-0.48, -grasp_y, 1.24)) + ik_solver.cfg.iterations = 48 + solved = ik_solver.solve(ik_seed) + solved_flat = solved.reshape((-1,)) + wp.copy(model.joint_q, solved_flat) + for newton_state in (NewtonManager.get_state_0(), NewtonManager.get_state_1()): + newton.eval_fk(model, solved_flat, model.joint_qd, newton_state) + newton_state.body_qd.zero_() + previous_targets = wp.clone(solved_flat[:robot_coord_count]) + wp.copy(control.joint_target_q, previous_targets, count=robot_coord_count) + control.joint_target_qd.zero_() + ik_solver.cfg.iterations = 24 + wp.copy(ik_seed, solved) + + print("[INFO]: Setup complete. H1 Newton VBD tablecloth state machine is ready.", flush=True) + step = 0 + while sim.is_headless_or_exist_active_visualizer() and (args_cli.max_steps < 0 or step < args_cli.max_steps): + wp.launch( + _infer_state_machine, + dim=1, + inputs=[ + step / FPS, + 1.0 / FPS, + args_cli.pull_speed, + keyframes, + left_objective.position_objective.target_positions, + right_objective.position_objective.target_positions, + fractions, + state, + pull_distance, + ], + ) + solved = ik_solver.solve(ik_seed) + solved_flat = solved.reshape((-1,)) + wp.launch( + _set_finger_targets, + dim=len(finger_indices), + inputs=[solved_flat, finger_indices_wp, closed_values_wp, finger_groups_wp, fractions], + ) + wp.copy(ik_seed, solved) + wp.launch( + _update_control_targets, + dim=robot_coord_count, + inputs=[ + solved_flat, + previous_targets, + float(FPS), + control.joint_target_q, + control.joint_target_qd, + ], + ) + sim.step() + step += 1 + + +if __name__ == "__main__": + main() diff --git a/source/isaaclab/changelog.d/max-newton-tablecloth-demos.skip b/source/isaaclab/changelog.d/max-newton-tablecloth-demos.skip new file mode 100644 index 000000000000..687a8fdd0586 --- /dev/null +++ b/source/isaaclab/changelog.d/max-newton-tablecloth-demos.skip @@ -0,0 +1 @@ +Test-only: registered the Newton tablecloth demos with standalone-script smoke coverage. diff --git a/source/isaaclab/test/app/standalone_script_cases.py b/source/isaaclab/test/app/standalone_script_cases.py index 02228049ff67..5f43f9b2ca9d 100644 --- a/source/isaaclab/test/app/standalone_script_cases.py +++ b/source/isaaclab/test/app/standalone_script_cases.py @@ -207,6 +207,16 @@ class SmokeResult: fixed_physics_backend="newton_xpbd", visualizers=("newton_gl",), ), + "scripts/demos/newton_tablecloth.py": ScriptOverride( + args=("--max_steps", "2"), + fixed_physics_backend="newton_vbd", + visualizers=("newton_gl",), + ), + "scripts/demos/newton_tablecloth_h1.py": ScriptOverride( + args=("--max_steps", "2"), + fixed_physics_backend="newton_vbd", + visualizers=("newton_gl",), + ), "scripts/demos/sensors/cameras.py": ScriptOverride(args=("--num_envs", "1"), startup_timeout=900.0), "scripts/demos/sensors/multi_mesh_raycaster.py": ScriptOverride( args=("--flat_ground",), From 61c663b895397a082a84c92d6217cfdce3dd94e0 Mon Sep 17 00:00:00 2001 From: Maximilian Krause Date: Mon, 14 Sep 2026 10:26:28 +0200 Subject: [PATCH 02/34] Refine Newton tablecloth demos --- .../concepts/solver-tuning/tune_vbd.rst | 45 + docs/source/features/record_video.rst | 3 + scripts/demos/newton_tablecloth.py | 805 +++++++++---- scripts/demos/newton_tablecloth_h1.py | 1058 ++++++++++++----- .../video-recorder-bitrate.minor.rst | 4 + .../isaaclab/envs/utils/video_recorder.py | 8 +- .../isaaclab/envs/utils/video_recorder_cfg.py | 6 + .../test/app/standalone_script_cases.py | 1 + .../isaaclab/test/envs/test_video_recorder.py | 8 +- .../max-vbd-tablecloth-demos.minor.rst | 10 + .../physics/newton_collision_cfg.py | 9 + .../isaaclab_newton/physics/vbd_manager.py | 4 +- .../physics/vbd_manager_cfg.py | 32 + .../test/physics/test_vbd_core.py | 68 +- 14 files changed, 1531 insertions(+), 530 deletions(-) create mode 100644 source/isaaclab/changelog.d/video-recorder-bitrate.minor.rst create mode 100644 source/isaaclab_newton/changelog.d/max-vbd-tablecloth-demos.minor.rst diff --git a/docs/source/concepts/solver-tuning/tune_vbd.rst b/docs/source/concepts/solver-tuning/tune_vbd.rst index 543f8243d578..11c5bf6adc64 100644 --- a/docs/source/concepts/solver-tuning/tune_vbd.rst +++ b/docs/source/concepts/solver-tuning/tune_vbd.rst @@ -22,6 +22,31 @@ rigid-body scenes, the named-entry coupling options are: * :class:`~isaaclab_contrib.coupling.CouplerAdmmCfg` for linearized ADMM coupling between named solver entries. +Run the Standalone Tablecloth Demos +----------------------------------- + +Two focused scripts demonstrate standalone VBD before the task and coupling +examples below: + +* ``scripts/demos/newton_tablecloth.py`` compares five pull speeds side by side + and shows how to configure full-surface contact while controlling deformable + kinematic targets through Isaac Lab. +* ``scripts/demos/newton_tablecloth_h1.py`` adds an articulated H1 with dexterous + hands, Newton IK, and a GPU-resident manipulation state machine. Isaac Lab's + MJCF importer converts and caches the H1-with-hands asset on the first run. + +Run them with the lightweight Newton GL visualizer: + +.. code-block:: bash + + uv run python scripts/demos/newton_tablecloth.py --device cuda:0 --visualizer newton_gl + uv run --extra importers python scripts/demos/newton_tablecloth_h1.py --device cuda:0 --visualizer newton_gl + +Both scripts declare their ground, tables, cloth, and tableware with +``InteractiveSceneCfg`` and use the standard scene write/step/update lifecycle. +The H1 script additionally uses Isaac Lab's ``Articulation`` command buffers; +its Newton-native code is limited to the VBD physics configuration and IK solve. + Start from a Supported Deformable Task -------------------------------------- @@ -181,11 +206,31 @@ Core Solve - Description * - ``iterations`` - Default: ``10``. Number of VBD iterations per substep. Increasing this value improves deformation and contact convergence, especially for stiff materials or rigid gripper contacts, but increases runtime. + * - ``rigid_compliant_alm`` + - Default: ``None``. Set to ``True`` for Newton's recommended compliant-ALM formulation for rigid joints and body-body contacts. ``False`` explicitly selects the deprecated legacy AVBD path; ``None`` retains that legacy behavior during Newton's migration window. + * - ``rigid_contact_history`` + - Default: ``False``. Retains the numeric body-body contact warm start between steps. Requires ``contact_matching="latest"`` or ``"sticky"`` and buffers allocated before CUDA graph capture, so leave it disabled when the scene is stable without history. + * - ``rigid_body_contact_buffer_size`` + - Default: ``64``. Per-body capacity for body-body contacts. Increase it if Newton reports a body-contact buffer overflow. * - ``rigid_body_particle_contact_buffer_size`` - Default: ``256``. Per-body capacity for particle, edge, and face soft contacts. Increase it if Newton reports a per-body contact buffer overflow. + * - ``rigid_joint_linear_ke`` / ``rigid_joint_angular_ke`` + - Defaults: ``1.0e5`` [N/m] and ``1.0e5`` [N*m/rad]. Structural rigid-joint material stiffness used by VBD. + * - ``rigid_joint_linear_kd`` / ``rigid_joint_angular_kd`` + - Defaults: ``0.0`` [N*s/m] and ``0.0`` [N*m*s/rad]. Structural rigid-joint damping used by VBD. * - ``integrate_with_external_rigid_solver`` - Default: ``False``. Set to ``True`` only when a manual manager integrates rigid bodies in the shared model. Proxy-coupled entries use partitioned model views and leave this ``False``. +Contact Scheduling +^^^^^^^^^^^^^^^^^^ + +:attr:`~isaaclab_newton.physics.NewtonCfg.collision_decimation` controls how +often the collision pipeline refreshes contacts within a physics tick. ``0`` +runs collision once per tick. A positive value ``k`` re-runs it every ``k`` +solver substeps. Use ``1`` for fast or thin rigid-soft interactions that can +cross the contact band within one substep; increase it only after verifying that +the cheaper, staler contact set does not cause tunneling or ejection. + Self-Contact ^^^^^^^^^^^^ diff --git a/docs/source/features/record_video.rst b/docs/source/features/record_video.rst index 4047b4be3692..ab8c8d426c8f 100644 --- a/docs/source/features/record_video.rst +++ b/docs/source/features/record_video.rst @@ -252,6 +252,9 @@ Clip control * - ``fps`` - ``None`` - Output frame rate; ``None`` resolves from ``env.metadata["render_fps"]`` or ``1 / step_dt`` + * - ``video_bitrate`` + - ``None`` + - Encoder target bitrate such as ``"20M"``; ``None`` uses the encoder default * - ``output_dir`` - ``"videos"`` - Directory for output files (created on demand) diff --git a/scripts/demos/newton_tablecloth.py b/scripts/demos/newton_tablecloth.py index 9bee2fbdbeda..29ddab2b09b8 100644 --- a/scripts/demos/newton_tablecloth.py +++ b/scripts/demos/newton_tablecloth.py @@ -3,295 +3,672 @@ # # SPDX-License-Identifier: BSD-3-Clause -"""Run the classic tablecloth trick at five pull speeds with Newton VBD. +"""Compare the classic tablecloth trick at five pull speeds with Newton VBD. + +The demo follows Isaac Lab's direct-workflow pattern: an +``InteractiveSceneCfg`` declares the ground, tables, cloths, and tableware; +``DeformableObject`` exposes the cloth's kinematic targets; and a graph-safe +callback updates the pulled edges at the VBD substep rate. Only the physics +configuration and substep controller are Newton-specific. .. code-block:: bash + # Newton GL is the default visualizer. uv run python scripts/demos/newton_tablecloth.py --device cuda:0 + + # Run the complete comparison without rendering. + uv run python scripts/demos/newton_tablecloth.py --device cuda:0 --visualizer none --max_steps 240 + + # Record the complete comparison as a 60 FPS MP4 through Isaac Sim Kit. + uv run --extra isaacsim --extra video python scripts/demos/newton_tablecloth.py \ + --device cuda:0 --visualizer kit --video """ import argparse +from collections.abc import Callable +from dataclasses import MISSING from isaaclab.app import add_launcher_args, launch_simulation parser = argparse.ArgumentParser(description="Compare five Newton VBD tablecloth pull speeds.") parser.add_argument("--max_steps", type=int, default=-1, help="Stop after this many frames; negative runs forever.") +parser.add_argument("--video", action="store_true", help="Record the complete demo to videos/newton_tablecloth/.") add_launcher_args(parser) parser.set_defaults(visualizer=["newton_gl"]) args_cli = parser.parse_args() -import newton -import numpy as np import warp as wp from isaaclab_newton.physics import ( NewtonCfg, NewtonCollisionPipelineCfg, - NewtonManager, NewtonShapeCfg, NewtonSoftContactCfg, VBDSolverCfg, ) +from isaaclab_newton.sim.schemas import NewtonCollisionCfg, NewtonDeformableBodyPropertiesCfg +from isaaclab_newton.sim.spawners.materials import NewtonMaterialCfg, NewtonSurfaceDeformableBodyMaterialCfg import isaaclab.sim as sim_utils -from isaaclab.utils.configclass import configclass +from isaaclab.assets import ( + AssetBaseCfg, + DeformableObject, + DeformableObjectCfg, + RigidObjectCfg, + RigidObjectCollectionCfg, +) +from isaaclab.physics import PhysicsEvent +from isaaclab.scene import InteractiveSceneCfg +from isaaclab.sim.schemas import UsdPhysicsCollisionCfg, UsdPhysicsRigidBodyCfg +from isaaclab.sim.spawners.materials import UsdPhysicsRigidBodyMaterialCfg +from isaaclab.utils import configclass +from isaaclab.utils.assets import ISAAC_NUCLEUS_DIR FPS = 60 SUBSTEPS = 25 +VIDEO_STEPS = 240 +VIDEO_OUTPUT_DIR = "videos/newton_tablecloth" +VIDEO_RESOLUTION = (1920, 1080) +VIDEO_BITRATE = "20M" SETTLE_TIME = 0.5 PULL_DISTANCE = 1.25 -# Newton 1.5 needs a slightly sharper final pull than Newton main to retain the glass. -PULL_SPEEDS = (0.5, 1.0, 2.0, 4.0, 8.0) +PULL_RAMP_TIME = 0.40 +PULL_DESCENT_START = 0.95 +PULL_SPEEDS = (0.5, 1.0, 1.5, 2.0, 4.0) -TABLE_HALF_WIDTH = 0.50 -TABLE_HALF_DEPTH = 0.36 +# Match the scaled, rotated countertop rather than its slightly smaller nominal dimensions. +TABLE_HALF_WIDTH = 0.5168 +TABLE_HALF_DEPTH = 0.2629 TABLE_TOP_Z = 0.75 -TABLETOP_HALF_HEIGHT = 0.04 -LANE_SPACING = 0.95 +TABLETOP_HALF_HEIGHT = 0.025 CLOTH_WIDTH = 1.08 CLOTH_DEPTH = 0.70 -CLOTH_RESOLUTION = 24 CLOTH_PARTICLE_RADIUS = 0.0005 +TABLEWARE_CLEARANCE = 0.008 +LANE_SPACING = 0.95 + +KITCHEN_ISLAND_USD = ( + f"{ISAAC_NUCLEUS_DIR}/SimReady/Residential/Kitchen/Counters/Island_A01/sm_fixture_island_a01_01.usd" +) +BOWL_USD = f"{ISAAC_NUCLEUS_DIR}/SimReady/Residential/Kitchen/Dishware/Bowl_G01/sm_kitchenware_bowl_g01_01.usd" +WINE_GLASS_USD = ( + f"{ISAAC_NUCLEUS_DIR}/SimReady/Residential/Furnishing/Kitchen/Kitchenware/Dishware/Glass_Wine_A01/" + "sm_dishware_glass_wine_a01_01.usd" +) +FORK_USD = f"{ISAAC_NUCLEUS_DIR}/SimReady/Residential/Kitchen/Utensils/Fork_K01/sm_kitchenware_fork_k01_01.usd" + +KITCHEN_ISLAND_HEIGHT = 0.900409 +KITCHEN_ISLAND_SCALE = (TABLE_TOP_Z / KITCHEN_ISLAND_HEIGHT,) * 3 +KITCHEN_ISLAND_ROTATION = (0.0, 0.0, -0.70710678, 0.70710678) +BOWL_LOCAL_Z_MIN = 0.000001783 +BOWL_LOCAL_RADIUS = 0.052765541 +BOWL_LOCAL_HEIGHT = 0.043569469 +WINE_GLASS_LOCAL_Z_MIN = 0.000358 +FORK_LOCAL_Z_MIN = 0.000127 +BOWL_SCALE = 1.35 +FORK_SCALE = 0.85 +FORK_ROTATION = KITCHEN_ISLAND_ROTATION +FORK_CENTER_OF_MASS = (0.0, 0.0092, 0.0089) +FORK_DIAGONAL_INERTIA = (1.86e-4, 6.2e-6, 1.90e-4) +# A base-only collision proxy would otherwise give the tall glass a flat-disk inertia. +WINE_GLASS_CENTER_OF_MASS = (0.0, 0.0, 0.04) +WINE_GLASS_DIAGONAL_INERTIA = (3.0e-3, 3.0e-3, 5.0e-4) + + +def _rigid_material( + *, density: float | None, friction: float, contact_stiffness: float, contact_damping: float +) -> list[UsdPhysicsRigidBodyMaterialCfg | NewtonMaterialCfg]: + """Return solver-common friction and Newton compliant-contact material fragments.""" + return [ + UsdPhysicsRigidBodyMaterialCfg( + static_friction=friction, + dynamic_friction=friction, + restitution=0.0, + density=density, + ), + NewtonMaterialCfg(contact_stiffness=contact_stiffness, contact_damping=contact_damping), + ] + + +def _collision_properties() -> list[UsdPhysicsCollisionCfg | NewtonCollisionCfg]: + """Return collision properties shared by cloth-contacting rigid shapes.""" + return [ + UsdPhysicsCollisionCfg(collision_enabled=True), + NewtonCollisionCfg(contact_margin=0.002, contact_gap=0.001), + ] + + +def _tabletop_collider_cfg(size: tuple[float, float, float]) -> sim_utils.CuboidCfg: + """Create the low-cost collision proxy underneath the kitchen-island visual.""" + return sim_utils.CuboidCfg( + size=size, + visible=False, + collision_props=_collision_properties(), + physics_material=_rigid_material( + density=None, + friction=1.00, + contact_stiffness=1.0e5, + contact_damping=1.0e2, + ), + ) + + +def _spawn_visual_table_from_usd( + prim_path: str, + cfg: sim_utils.UsdFileCfg, + translation: tuple[float, float, float] | None = None, + orientation: tuple[float, float, float, float] | None = None, + **kwargs, +): + """Spawn a visual-only island and remove material inputs unsupported by Newton GL.""" + prim = sim_utils.spawn_from_usd(prim_path, cfg, translation, orientation, **kwargs) + from pxr import UsdShade # noqa: PLC0415 + + for root in sim_utils.find_matching_prims(prim_path): + for child in sim_utils.get_all_matching_child_prims(root.GetPath()): + physics_binding = child.GetRelationship("material:binding:physics") + if physics_binding: + physics_binding.SetTargets([]) + if child.IsA(UsdShade.Shader): + shader = UsdShade.Shader(child) + if shader.GetIdAttr().Get() == "UsdPreviewSurface": + for input_name in ("metallic", "roughness"): + shader.GetInput(input_name).DisconnectSource() + return prim @configclass -class _TableclothVBDSolverCfg(VBDSolverCfg): - """VBD options required by the rigid-soft tablecloth scene.""" +class _VisualTableUsdFileCfg(sim_utils.UsdFileCfg): + """USD spawner config for a visual-only SimReady kitchen island.""" - iterations: int = 15 - rigid_contact_hard: bool = False - rigid_body_contact_buffer_size: int = 512 - rigid_body_particle_contact_buffer_size: int = 8192 + func: Callable | str = _spawn_visual_table_from_usd + + +def _spawn_tableware_from_usd( + prim_path: str, + cfg: sim_utils.UsdFileCfg, + translation: tuple[float, float, float] | None = None, + orientation: tuple[float, float, float, float] | None = None, + **kwargs, +): + """Spawn one tableware USD and prepare its authored collider for Newton VBD.""" + prim = sim_utils.spawn_from_usd(prim_path, cfg, translation, orientation, **kwargs) + from pxr import Gf, UsdPhysics, UsdShade # noqa: PLC0415 + + for root in sim_utils.find_matching_prims(prim_path): + root_path = root.GetPath().pathString + for child in sim_utils.get_all_matching_child_prims(root_path): + physics_binding = child.GetRelationship("material:binding:physics") + if physics_binding: + physics_binding.SetTargets([]) + if child.IsA(UsdShade.Shader): + shader = UsdShade.Shader(child) + shader_id = shader.GetIdAttr().Get() + if shader_id == "UsdPreviewSurface": + for input_name in ("metallic", "roughness"): + shader.GetInput(input_name).DisconnectSource() + if cfg.visual_color is not None: + shader.GetInput("diffuseColor").Set(Gf.Vec3f(*cfg.visual_color)) + if cfg.visual_opacity is not None: + shader.GetInput("opacity").Set(cfg.visual_opacity) + if cfg.visual_roughness is not None: + shader.GetInput("roughness").Set(cfg.visual_roughness) + elif shader_id == "mdl:OmniGlass": + if cfg.visual_color is not None: + shader.GetInput("glass_color").Set(Gf.Vec3f(*cfg.visual_color)) + if cfg.visual_opacity is not None: + shader.GetInput("cutout_opacity").Set(cfg.visual_opacity) + if cfg.visual_roughness is not None: + shader.GetInput("frosting_roughness").Set(cfg.visual_roughness) + mesh_colliders = sim_utils.get_all_matching_child_prims( + root_path, + predicate=lambda prim: prim.HasAPI(UsdPhysics.CollisionAPI), + ) + if len(mesh_colliders) != 1: + raise RuntimeError(f"Expected one SimReady tableware mesh collider, found {len(mesh_colliders)}") + UsdPhysics.CollisionAPI(mesh_colliders[0]).CreateCollisionEnabledAttr(False) + + bodies = sim_utils.get_all_matching_child_prims( + root_path, + predicate=lambda prim: prim.HasAPI(UsdPhysics.RigidBodyAPI), + ) + if len(bodies) != 1: + raise RuntimeError(f"Expected one SimReady tableware rigid body, found {len(bodies)}") + body = bodies[0] + mass_api = UsdPhysics.MassAPI.Apply(body) + mass_api.CreateMassAttr(cfg.mass) + mass_api.CreateDensityAttr(0.0) + if cfg.center_of_mass is not None: + mass_api.CreateCenterOfMassAttr(cfg.center_of_mass) + if cfg.diagonal_inertia is not None: + mass_api.CreateDiagonalInertiaAttr(cfg.diagonal_inertia) + mass_api.CreatePrincipalAxesAttr(Gf.Quatf(1.0, Gf.Vec3f(0.0))) + cfg.collision_proxy_cfg.func( + f"{body.GetPath()}/CollisionProxy", + cfg.collision_proxy_cfg, + translation=cfg.collision_proxy_position, + orientation=(0.0, 0.0, 0.0, 1.0), + ) + for index, (proxy_cfg, proxy_position) in enumerate( + zip(cfg.additional_collision_proxy_cfgs, cfg.additional_collision_proxy_positions, strict=True), start=1 + ): + proxy_cfg.func( + f"{body.GetPath()}/CollisionProxy{index}", + proxy_cfg, + translation=proxy_position, + orientation=(0.0, 0.0, 0.0, 1.0), + ) + return prim @configclass -class _TableclothCollisionCfg(NewtonCollisionPipelineCfg): - """Full-surface collision with stable resting-contact correspondence.""" +class _TablewareUsdFileCfg(sim_utils.UsdFileCfg): + """USD spawner config for SimReady visuals with an analytic collision proxy.""" + + func: Callable | str = _spawn_tableware_from_usd + mass: float = MISSING + collision_proxy_cfg: sim_utils.ShapeCfg = MISSING + collision_proxy_position: tuple[float, float, float] = MISSING + additional_collision_proxy_cfgs: tuple[sim_utils.ShapeCfg, ...] = () + additional_collision_proxy_positions: tuple[tuple[float, float, float], ...] = () + center_of_mass: tuple[float, float, float] | None = None + diagonal_inertia: tuple[float, float, float] | None = None + visual_color: tuple[float, float, float] | None = None + visual_opacity: float | None = None + visual_roughness: float | None = None + + +def _rigid_object_cfg( + usd_path: str, + position: tuple[float, float, float], + mass: float, + collision_proxy_cfg: sim_utils.ShapeCfg, + collision_proxy_position: tuple[float, float, float], + orientation: tuple[float, float, float, float] = (0.0, 0.0, 0.0, 1.0), + scale: tuple[float, float, float] | None = None, + center_of_mass: tuple[float, float, float] | None = None, + diagonal_inertia: tuple[float, float, float] | None = None, + additional_collision_proxy_cfgs: tuple[sim_utils.ShapeCfg, ...] = (), + additional_collision_proxy_positions: tuple[tuple[float, float, float], ...] = (), + visual_color: tuple[float, float, float] | None = None, + visual_opacity: float | None = None, + visual_roughness: float | None = None, +) -> RigidObjectCfg: + """Create one dynamic SimReady tableware object with demo-tuned physical properties.""" + return RigidObjectCfg( + prim_path="", + spawn=_TablewareUsdFileCfg( + usd_path=usd_path, + scale=scale, + make_uninstanceable=True, + rigid_props=[UsdPhysicsRigidBodyCfg(rigid_body_enabled=True, kinematic_enabled=False)], + mass=mass, + collision_proxy_cfg=collision_proxy_cfg, + collision_proxy_position=collision_proxy_position, + additional_collision_proxy_cfgs=additional_collision_proxy_cfgs, + additional_collision_proxy_positions=additional_collision_proxy_positions, + center_of_mass=center_of_mass, + diagonal_inertia=diagonal_inertia, + visual_color=visual_color, + visual_opacity=visual_opacity, + visual_roughness=visual_roughness, + ), + init_state=RigidObjectCfg.InitialStateCfg(pos=position, rot=orientation), + ) - broad_phase: str = "nxn" - soft_contact_margin: float = 0.005 - enable_rigid_soft_full_surface_contact: bool = True - contact_matching: str = "sticky" +@configclass +class TableclothSceneCfg(InteractiveSceneCfg): + """One Isaac Lab scene containing five side-by-side tablecloth trials.""" -@wp.kernel -def _advance_time(elapsed: wp.array(dtype=float), dt: float): - elapsed[0] += dt + ground = AssetBaseCfg( + prim_path="/World/defaultGroundPlane", + spawn=sim_utils.GroundPlaneCfg(), + collision_group=-1, + ) + + def __post_init__(self) -> None: + """Declare the repeated trials along one row while keeping every asset configurable.""" + super().__post_init__() + lane_centers = [(lane - 0.5 * (len(PULL_SPEEDS) - 1)) * LANE_SPACING for lane in range(len(PULL_SPEEDS))] + tableware: dict[str, RigidObjectCfg] = {} + cloth_z = TABLE_TOP_Z + CLOTH_PARTICLE_RADIUS + 0.002 + + for lane, lane_y in enumerate(lane_centers): + lane_path = f"{{ENV_REGEX_NS}}/Lane{lane}" + setattr( + self, + f"table_{lane}", + AssetBaseCfg( + prim_path=f"{lane_path}/Table", + spawn=_VisualTableUsdFileCfg( + usd_path=KITCHEN_ISLAND_USD, + scale=KITCHEN_ISLAND_SCALE, + variants={"Physics": "none"}, + make_uninstanceable=True, + rigid_props=sim_utils.NewtonRigidBodyPropertiesCfg(rigid_body_enabled=False), + collision_props=sim_utils.NewtonCollisionPropertiesCfg(collision_enabled=False), + ), + init_state=AssetBaseCfg.InitialStateCfg(pos=(0.0, lane_y, 0.0), rot=KITCHEN_ISLAND_ROTATION), + ), + ) + setattr( + self, + f"tabletop_collider_{lane}", + AssetBaseCfg( + prim_path=f"{lane_path}/TabletopCollider", + spawn=_tabletop_collider_cfg( + (2.0 * TABLE_HALF_WIDTH, 2.0 * TABLE_HALF_DEPTH, 2.0 * TABLETOP_HALF_HEIGHT) + ), + init_state=AssetBaseCfg.InitialStateCfg(pos=(0.0, lane_y, TABLE_TOP_Z - TABLETOP_HALF_HEIGHT)), + ), + ) + + setattr( + self, + f"cloth_{lane}", + DeformableObjectCfg( + prim_path=f"{lane_path}/Cloth", + spawn=sim_utils.MeshRectangleCfg( + size=(CLOTH_WIDTH, CLOTH_DEPTH), + edge_refinement=24, + deformable_props=NewtonDeformableBodyPropertiesCfg(), + visual_material=sim_utils.PreviewSurfaceCfg(diffuse_color=(0.76, 0.05, 0.05)), + physics_material=NewtonSurfaceDeformableBodyMaterialCfg( + density=0.24, + particle_radius=CLOTH_PARTICLE_RADIUS, + tri_ke=5.0e4, + tri_ka=5.0e4, + tri_kd=5.0e1, + edge_ke=0.10, + edge_kd=1.0e-3, + ), + ), + init_state=DeformableObjectCfg.InitialStateCfg(pos=(0.0, lane_y, cloth_z)), + ), + ) + + tableware[f"bowl_{lane}"] = _rigid_object_cfg( + BOWL_USD, + (-0.22, lane_y - 0.08, cloth_z + TABLEWARE_CLEARANCE - BOWL_SCALE * BOWL_LOCAL_Z_MIN), + 0.45, + sim_utils.CylinderCfg( + radius=BOWL_LOCAL_RADIUS, + height=BOWL_LOCAL_HEIGHT, + visible=False, + collision_props=_collision_properties(), + physics_material=_rigid_material( + density=None, + friction=0.70, + contact_stiffness=1.0e3, + contact_damping=1.0e1, + ), + ), + (0.0, 0.0, BOWL_LOCAL_Z_MIN + 0.5 * BOWL_LOCAL_HEIGHT), + scale=(BOWL_SCALE,) * 3, + ).replace(prim_path=f"{lane_path}/Bowl") + tableware[f"glass_{lane}"] = _rigid_object_cfg( + WINE_GLASS_USD, + (0.02, lane_y + 0.12, cloth_z + TABLEWARE_CLEARANCE - WINE_GLASS_LOCAL_Z_MIN), + 0.35, + sim_utils.CylinderCfg( + radius=0.035, + height=0.006, + visible=False, + collision_props=_collision_properties(), + physics_material=_rigid_material( + density=None, + friction=0.70, + contact_stiffness=1.0e3, + contact_damping=1.0e1, + ), + ), + (0.0, 0.0, 0.003), + center_of_mass=WINE_GLASS_CENTER_OF_MASS, + diagonal_inertia=WINE_GLASS_DIAGONAL_INERTIA, + # Approximate the 22.7 cm visual with cheap base, stem, and cup shapes. + additional_collision_proxy_cfgs=( + sim_utils.CylinderCfg( + radius=0.004, + height=0.096, + visible=False, + collision_props=_collision_properties(), + physics_material=_rigid_material( + density=None, + friction=0.70, + contact_stiffness=1.0e3, + contact_damping=1.0e1, + ), + ), + sim_utils.CapsuleCfg( + radius=0.041, + height=0.045, + visible=False, + collision_props=_collision_properties(), + physics_material=_rigid_material( + density=None, + friction=0.70, + contact_stiffness=1.0e3, + contact_damping=1.0e1, + ), + ), + ), + additional_collision_proxy_positions=((0.0, 0.0, 0.054), (0.0, 0.0, 0.165)), + visual_color=(0.55, 0.75, 0.90), + visual_opacity=0.90, + visual_roughness=0.12, + ).replace(prim_path=f"{lane_path}/Glass") + tableware[f"fork_{lane}"] = _rigid_object_cfg( + FORK_USD, + (0.10, lane_y - 0.11, cloth_z + TABLEWARE_CLEARANCE - FORK_SCALE * FORK_LOCAL_Z_MIN), + 0.07, + sim_utils.CuboidCfg( + size=(0.014, 0.160, 0.003), + visible=False, + collision_props=_collision_properties(), + physics_material=_rigid_material( + density=None, + friction=0.70, + contact_stiffness=1.0e3, + contact_damping=1.0e1, + ), + ), + (0.0, 0.0092, 0.0016), + FORK_ROTATION, + scale=(FORK_SCALE,) * 3, + center_of_mass=FORK_CENTER_OF_MASS, + diagonal_inertia=FORK_DIAGONAL_INERTIA, + ).replace(prim_path=f"{lane_path}/Fork") + + self.tableware = RigidObjectCollectionCfg(rigid_objects=tableware) + self.light = AssetBaseCfg( + prim_path="/World/Light", + spawn=sim_utils.DomeLightCfg(intensity=2500.0, color=(0.75, 0.75, 0.75)), + ) @wp.kernel def _advance_pull( - distance: wp.array(dtype=float), speed: wp.array(dtype=float), elapsed: wp.array(dtype=float), dt: float + speeds: wp.array(dtype=float), + elapsed: wp.array(dtype=float), + distances: wp.array(dtype=float), + dt: float, ): - lane = wp.tid() + env_id = wp.tid() if elapsed[0] >= SETTLE_TIME: - distance[lane] = wp.min(distance[lane] + speed[lane] * dt, PULL_DISTANCE) + ramp_u = wp.clamp((elapsed[0] - SETTLE_TIME) / PULL_RAMP_TIME, 0.0, 1.0) + ramp = ramp_u * ramp_u * (3.0 - 2.0 * ramp_u) + distances[env_id] = wp.min(distances[env_id] + ramp * speeds[env_id] * dt, PULL_DISTANCE) @wp.kernel -def _move_pulled_edge( - particle_indices: wp.array(dtype=wp.int32), - lane_indices: wp.array(dtype=wp.int32), - rest_positions: wp.array(dtype=wp.vec3), - pull_speeds: wp.array(dtype=float), - pull_distances: wp.array(dtype=float), - elapsed: wp.array(dtype=float), - particle_q_0: wp.array(dtype=wp.vec3), - particle_q_1: wp.array(dtype=wp.vec3), - particle_qd_0: wp.array(dtype=wp.vec3), - particle_qd_1: wp.array(dtype=wp.vec3), +def _advance_time(elapsed: wp.array(dtype=float), dt: float): + elapsed[0] += dt + + +@wp.kernel +def _update_pulled_edge( + rest_positions: wp.array2d(dtype=wp.vec3f), + distances: wp.array(dtype=float), + lane: int, + targets: wp.array2d(dtype=wp.vec4f), ): - i = wp.tid() - lane = lane_indices[i] - distance = pull_distances[lane] - descent = 0.0 - descent_velocity = 0.0 - if distance > 0.10: - descent = 0.30 * wp.clamp((distance - 0.10) / (PULL_DISTANCE - 0.10), 0.0, 1.0) - velocity = 0.0 - if elapsed[0] >= SETTLE_TIME and distance < PULL_DISTANCE: - velocity = pull_speeds[lane] - if distance > 0.10: - descent_velocity = 0.30 * pull_speeds[lane] / (PULL_DISTANCE - 0.10) - position = rest_positions[i] + wp.vec3(distance, 0.0, -descent) - linear_velocity = wp.vec3(velocity, 0.0, -descent_velocity) - index = particle_indices[i] - particle_q_0[index] = position - particle_q_1[index] = position - particle_qd_0[index] = linear_velocity - particle_qd_1[index] = linear_velocity - - -def _collision_cfgs(density: float, friction: float) -> tuple[newton.ModelBuilder.ShapeConfig, ...]: - """Create separate rigid-support and cloth-contact representations.""" - rigid = newton.ModelBuilder.ShapeConfig( - density=density, - ke=1.0e5, - kd=1.0e2, - mu=friction, - margin=0.002, - has_particle_collision=False, - ) - cloth = rigid.copy() - cloth.density = 0.0 - cloth.ke = 1.0e3 - cloth.kd = 1.0e1 - cloth.has_shape_collision = False - cloth.has_particle_collision = True - cloth.is_visible = False - return rigid, cloth - - -def _add_table(builder: newton.ModelBuilder, lane_y: float) -> None: - rigid_cfg, cloth_cfg = _collision_cfgs(0.0, 0.70) - color = (0.46, 0.24, 0.10) - tabletop = wp.transform(wp.vec3(0.0, lane_y, TABLE_TOP_Z - TABLETOP_HALF_HEIGHT), wp.quat_identity()) - for cfg in (rigid_cfg, cloth_cfg): - builder.add_shape_box( - -1, - xform=tabletop, - hx=TABLE_HALF_WIDTH, - hy=TABLE_HALF_DEPTH, - hz=TABLETOP_HALF_HEIGHT, - cfg=cfg, - color=color, + env_id, node_id = wp.tid() + rest = rest_positions[env_id, node_id] + if rest[0] >= 0.5 * CLOTH_WIDTH - 1.0e-4: + distance = distances[lane] + descent = 0.0 + if distance > PULL_DESCENT_START: + descent = 0.30 * wp.clamp((distance - PULL_DESCENT_START) / (PULL_DISTANCE - PULL_DESCENT_START), 0.0, 1.0) + targets[env_id, node_id] = wp.vec4f(rest[0] + distance, rest[1], rest[2] - descent, 0.0) + + +class _TableclothPullController: + """Advance the five cloth edges at the VBD solver-substep rate.""" + + def __init__(self, cloths: list[DeformableObject], device: str, solver_dt: float): + from isaaclab_newton.physics import NewtonManager # noqa: PLC0415 + + self._cloths = cloths + self._solver_dt = solver_dt + self._speeds = wp.array(PULL_SPEEDS, dtype=float, device=device) + self._distances = wp.zeros(len(PULL_SPEEDS), dtype=float, device=device) + self._elapsed = wp.zeros(1, dtype=float, device=device) + self._rest_positions = [] + self._targets = [] + self._physics_ready_handle = NewtonManager.register_callback( + self._on_physics_ready, + PhysicsEvent.PHYSICS_READY, + order=100, + name="tablecloth_pull_controller", ) - leg_half_height = 0.5 * (TABLE_TOP_Z - 2.0 * TABLETOP_HALF_HEIGHT) - for x_sign, y_sign in ((-1, -1), (-1, 1), (1, -1), (1, 1)): - xform = wp.transform( - wp.vec3( - x_sign * (TABLE_HALF_WIDTH - 0.07), - lane_y + y_sign * (TABLE_HALF_DEPTH - 0.07), - leg_half_height, - ), - wp.quat_identity(), - ) - for cfg in (rigid_cfg, cloth_cfg): - builder.add_shape_box(-1, xform=xform, hx=0.035, hy=0.035, hz=leg_half_height, cfg=cfg, color=color) - - -def _add_tableware(builder: newton.ModelBuilder, lane_y: float, z_base: float) -> None: - def add_cylinder(position, radius, half_height, density, color): - body = builder.add_body(xform=wp.transform(wp.vec3(*position), wp.quat_identity())) - for cfg in _collision_cfgs(density, 0.70): - builder.add_shape_cylinder(body, radius=radius, half_height=half_height, cfg=cfg, color=color) - return body - - add_cylinder((-0.22, lane_y - 0.08, z_base + 0.012), 0.105, 0.012, 2400.0, (0.92, 0.91, 0.82)) - add_cylinder((0.02, lane_y + 0.12, z_base + 0.050), 0.050, 0.050, 2500.0, (0.52, 0.78, 0.90)) - body = builder.add_body(xform=wp.transform(wp.vec3(0.22, lane_y - 0.11, z_base + 0.006), wp.quat_identity())) - for cfg in _collision_cfgs(8000.0, 0.70): - builder.add_shape_box(body, hx=0.110, hy=0.016, hz=0.006, cfg=cfg, color=(0.72, 0.74, 0.76)) - - -def _build_scene(builder: newton.ModelBuilder) -> tuple[np.ndarray, np.ndarray, np.ndarray]: - lane_centers = (np.arange(len(PULL_SPEEDS), dtype=np.float32) - 0.5 * (len(PULL_SPEEDS) - 1)) * LANE_SPACING - pulled_indices = [] - pulled_lanes = [] - pulled_rest = [] - dim_x = CLOTH_RESOLUTION - cell_x = CLOTH_WIDTH / dim_x - dim_y = round(CLOTH_DEPTH / cell_x) - cell_y = CLOTH_DEPTH / dim_y - particle_mass = 0.24 * CLOTH_WIDTH * CLOTH_DEPTH / ((dim_x + 1) * (dim_y + 1)) - cloth_z = TABLE_TOP_Z + CLOTH_PARTICLE_RADIUS + 0.002 - - for lane, lane_y in enumerate(lane_centers): - _add_table(builder, float(lane_y)) - start = builder.particle_count - builder.add_cloth_grid( - pos=wp.vec3(-0.5 * CLOTH_WIDTH, float(lane_y - 0.5 * CLOTH_DEPTH), cloth_z), - rot=wp.quat_identity(), - vel=wp.vec3(0.0), - dim_x=dim_x, - dim_y=dim_y, - cell_x=cell_x, - cell_y=cell_y, - mass=particle_mass, - fix_right=True, - tri_ke=5.0e4, - tri_ka=5.0e4, - tri_kd=5.0e1, - edge_ke=0.10, - edge_kd=1.0e-3, - particle_radius=CLOTH_PARTICLE_RADIUS, + + def _on_physics_ready(self, _event) -> None: + """Bind asset buffers before the solver CUDA graph is captured.""" + from isaaclab_newton.physics import NewtonManager # noqa: PLC0415 + + self._elapsed.zero_() + self._distances.zero_() + self._rest_positions = [wp.clone(cloth.data.nodal_pos_w.warp) for cloth in self._cloths] + self._targets = [cloth.data.nodal_kinematic_target.warp for cloth in self._cloths] + NewtonManager.register_state_force_callback(self._update) + + def _update(self, _state) -> None: + """Move and enforce each kinematic edge immediately before a solver substep.""" + wp.launch(_advance_time, dim=1, inputs=[self._elapsed, self._solver_dt]) + wp.launch( + _advance_pull, + dim=len(PULL_SPEEDS), + inputs=[self._speeds, self._elapsed, self._distances, self._solver_dt], ) - for y in range(dim_y + 1): - index = start + y * (dim_x + 1) + dim_x - pulled_indices.append(index) - pulled_lanes.append(lane) - pulled_rest.append(builder.particle_q[index]) - _add_tableware(builder, float(lane_y), cloth_z + CLOTH_PARTICLE_RADIUS) - - builder.add_ground_plane(cfg=newton.ModelBuilder.ShapeConfig(ke=1.0e5, kd=1.0e2, mu=0.70)) - builder.color(include_bending=True) - return ( - np.asarray(pulled_indices, dtype=np.int32), - np.asarray(pulled_lanes, dtype=np.int32), - np.asarray(pulled_rest, dtype=np.float32), + for lane, cloth in enumerate(self._cloths): + wp.launch( + _update_pulled_edge, + dim=(cloth.num_instances, cloth.max_sim_vertices_per_body), + inputs=[self._rest_positions[lane], self._distances, lane, self._targets[lane]], + ) + cloth.write_data_to_sim() + + +class _StandaloneVideoTarget: + """Expose the simulation fields expected by Isaac Lab's step-driven recorder.""" + + metadata = {"render_fps": FPS} + + def __init__(self, sim): + self.sim = sim + self.step_dt = sim.get_physics_dt() + + +def _create_video_recorder(sim, video_length: int): + """Create a 60 FPS viewport recorder when ``--video`` is enabled.""" + if not args_cli.video: + return None + + from isaaclab.envs.utils.video_recorder import VideoRecorder # noqa: PLC0415 + from isaaclab.envs.utils.video_recorder_cfg import VideoRecorderCfg # noqa: PLC0415 + + print(f"[INFO]: Recording {video_length / FPS:.1f} s to {VIDEO_OUTPUT_DIR}/", flush=True) + return VideoRecorder( + VideoRecorderCfg( + source="visualizer", + output_dir=VIDEO_OUTPUT_DIR, + output_filename_prefix="newton_tablecloth", + fps=FPS, + video_bitrate=VIDEO_BITRATE, + video_length=video_length, + ), + _StandaloneVideoTarget(sim), ) def main() -> None: """Launch the five-speed tablecloth demo.""" - newton.use_coord_layout_targets = True + if args_cli.video and "none" in (args_cli.visualizer or []): + raise ValueError("--video requires a capture-capable visualizer; omit --visualizer none") + if args_cli.video and "kit" in (args_cli.visualizer or []): + args_cli.enable_cameras = True + max_steps = VIDEO_STEPS if args_cli.video and args_cli.max_steps < 0 else args_cli.max_steps + physics_cfg = NewtonCfg( num_substeps=SUBSTEPS, + # Fast cloth can cross the contact band within one frame, so collide on every substep. collision_decimation=1, default_shape_cfg=NewtonShapeCfg(gap=0.001, ke=1.0e5, kd=1.0e2, mu=0.70), - soft_contact_cfg=NewtonSoftContactCfg(soft_contact_ke=1.0e5, soft_contact_kd=1.0e2, soft_contact_mu=0.10), - collision_cfg=_TableclothCollisionCfg(), - solver_cfg=_TableclothVBDSolverCfg(), + # Use a polished cloth/tableware interface so realistic lightweight props are not kicked by a fast pull. + soft_contact_cfg=NewtonSoftContactCfg(soft_contact_ke=2.0e4, soft_contact_kd=2.0e1, soft_contact_mu=0.03), + collision_cfg=NewtonCollisionPipelineCfg( + broad_phase="nxn", + soft_contact_margin=0.005, + enable_rigid_soft_full_surface_contact=True, + ), + solver_cfg=VBDSolverCfg( + iterations=15, + rigid_compliant_alm=True, + rigid_body_contact_buffer_size=512, + rigid_body_particle_contact_buffer_size=8192, + ), ) with launch_simulation(cfg=physics_cfg, launcher_args=args_cli) as resolved_physics_cfg: - sim = sim_utils.SimulationContext( - sim_utils.SimulationCfg(dt=1.0 / FPS, device=args_cli.device, physics=resolved_physics_cfg) - ) - sim.set_camera_view(eye=(2.8, -5.2, 2.4), target=(0.1, 0.0, 0.65)) - builder = NewtonManager.create_builder(gravity=(0.0, 0.0, -9.81)) - pulled_indices, pulled_lanes, pulled_rest = _build_scene(builder) - NewtonManager.set_builder(builder) - device = args_cli.device - indices_wp = wp.array(pulled_indices, dtype=wp.int32, device=device) - lanes_wp = wp.array(pulled_lanes, dtype=wp.int32, device=device) - rest_wp = wp.array(pulled_rest, dtype=wp.vec3, device=device) - speeds_wp = wp.array(PULL_SPEEDS, dtype=float, device=device) - distances_wp = wp.zeros(len(PULL_SPEEDS), dtype=float, device=device) - elapsed_wp = wp.zeros(1, dtype=float, device=device) - - def update_pulled_edge(_state: newton.State) -> None: - """Advance and prescribe the pulled edge before every solver substep.""" - wp.launch(_advance_time, dim=1, inputs=[elapsed_wp, 1.0 / (FPS * SUBSTEPS)]) - wp.launch( - _advance_pull, - dim=len(PULL_SPEEDS), - inputs=[distances_wp, speeds_wp, elapsed_wp, 1.0 / (FPS * SUBSTEPS)], - ) - wp.launch( - _move_pulled_edge, - dim=len(pulled_indices), - inputs=[ - indices_wp, - lanes_wp, - rest_wp, - speeds_wp, - distances_wp, - elapsed_wp, - NewtonManager.get_state_0().particle_q, - NewtonManager.get_state_1().particle_q, - NewtonManager.get_state_0().particle_qd, - NewtonManager.get_state_1().particle_qd, - ], + from isaaclab.scene import InteractiveScene # noqa: PLC0415 + + default_visualizer_cfg = None + if args_cli.video and "kit" in (args_cli.visualizer or []): + from isaaclab_visualizers.kit import KitVisualizerCfg # noqa: PLC0415 + + default_visualizer_cfg = KitVisualizerCfg( + window_width=VIDEO_RESOLUTION[0], window_height=VIDEO_RESOLUTION[1] ) - NewtonManager.register_state_force_callback(update_pulled_edge) + sim = sim_utils.SimulationContext( + sim_utils.SimulationCfg( + dt=1.0 / FPS, + device=args_cli.device, + physics=resolved_physics_cfg, + default_visualizer_cfg=default_visualizer_cfg, + ) + ) + sim.set_camera_view(eye=(3.61, -5.225, 2.8825), target=(0.0, 0.0, 0.40)) + scene = InteractiveScene(TableclothSceneCfg(num_envs=1, env_spacing=1.0)) + cloths = [scene[f"cloth_{lane}"] for lane in range(len(PULL_SPEEDS))] + _pull_controller = _TableclothPullController(cloths, scene.device, sim.get_physics_dt() / SUBSTEPS) sim.reset() - print("[INFO]: Setup complete. Five Newton VBD tablecloth pulls are ready.", flush=True) + sim_dt = sim.get_physics_dt() + video_recorder = _create_video_recorder(sim, max_steps) + + print("[INFO]: Setup complete. Five side-by-side Isaac Lab tablecloth trials are ready.", flush=True) step = 0 - while sim.is_headless_or_exist_active_visualizer() and (args_cli.max_steps < 0 or step < args_cli.max_steps): - sim.step() - step += 1 + try: + while sim.is_headless_or_exist_active_visualizer() and (max_steps < 0 or step < max_steps): + sim.step() + scene.update(sim_dt) + if video_recorder is not None: + video_recorder.step() + step += 1 + finally: + if video_recorder is not None: + video_recorder.close() if __name__ == "__main__": diff --git a/scripts/demos/newton_tablecloth_h1.py b/scripts/demos/newton_tablecloth_h1.py index acdfe346e480..8c22ebdaf6b0 100644 --- a/scripts/demos/newton_tablecloth_h1.py +++ b/scripts/demos/newton_tablecloth_h1.py @@ -5,61 +5,132 @@ """Have a Unitree H1 perform the tablecloth trick with Newton VBD and Newton IK. -The motion sequence uses Isaac Lab's GPU-resident Warp state-machine pattern. +An ``InteractiveSceneCfg`` declares the stock Isaac Lab ground plane, H1 +articulation, table, cloth, and tableware. The runtime controls H1 through Isaac +Lab's articulation command buffers and standard scene write/step/update loop. A +GPU-resident Warp state machine generates hand targets, and ``NewtonIKSolver`` +converts them to joint targets without CPU copies in the simulation loop. + +The first run downloads the H1-with-hands MJCF from ``newton-assets`` and uses +Isaac Lab's MJCF converter. In a minimal uv installation, enable the existing +``importers`` extra for that conversion. .. code-block:: bash - uv run python scripts/demos/newton_tablecloth_h1.py --device cuda:0 + # Newton GL is the default visualizer. + uv run --extra importers python scripts/demos/newton_tablecloth_h1.py --device cuda:0 + + # Run the complete state machine without rendering. + uv run --extra importers python scripts/demos/newton_tablecloth_h1.py \ + --device cuda:0 --visualizer none --max_steps 312 + + # Record the complete state machine as a 60 FPS MP4 through Isaac Sim Kit. + uv run --extra isaacsim --extra importers --extra video python scripts/demos/newton_tablecloth_h1.py \ + --device cuda:0 --visualizer kit --video """ +from __future__ import annotations + import argparse +import os +import tempfile +from collections.abc import Callable +from dataclasses import MISSING +from typing import TYPE_CHECKING from isaaclab.app import add_launcher_args, launch_simulation parser = argparse.ArgumentParser(description="Newton VBD H1 tablecloth trick.") parser.add_argument("--max_steps", type=int, default=-1, help="Stop after this many frames; negative runs forever.") parser.add_argument("--pull_speed", type=float, default=0.80, help="Task-space pull speed [m/s].") +parser.add_argument("--video", action="store_true", help="Record the complete demo to videos/newton_tablecloth_h1/.") add_launcher_args(parser) parser.set_defaults(visualizer=["newton_gl"]) args_cli = parser.parse_args() -import newton -import newton.utils import numpy as np import warp as wp -from isaaclab_newton.ik import ( - NewtonIKJointLimitObjectiveCfg, - NewtonIKPoseObjectiveCfg, - NewtonIKSolver, - NewtonIKSolverCfg, -) from isaaclab_newton.physics import ( NewtonCfg, NewtonCollisionPipelineCfg, - NewtonManager, NewtonShapeCfg, NewtonSoftContactCfg, VBDSolverCfg, ) +from isaaclab_newton.sim.schemas import ( + NewtonCollisionCfg, + NewtonDeformableBodyPropertiesCfg, + NewtonSDFCollisionCfg, +) +from isaaclab_newton.sim.spawners.materials import NewtonMaterialCfg, NewtonSurfaceDeformableBodyMaterialCfg import isaaclab.sim as sim_utils -from isaaclab.utils.configclass import configclass +from isaaclab.actuators import ImplicitActuatorCfg +from isaaclab.assets import Articulation, ArticulationCfg, AssetBaseCfg, DeformableObjectCfg, RigidObjectCfg +from isaaclab.scene import InteractiveSceneCfg +from isaaclab.sim.converters import MjcfConverter, MjcfConverterCfg +from isaaclab.sim.schemas import UsdPhysicsCollisionCfg, UsdPhysicsRigidBodyCfg +from isaaclab.sim.spawners.materials import UsdPhysicsRigidBodyMaterialCfg +from isaaclab.utils import configclass +from isaaclab.utils.assets import ISAAC_NUCLEUS_DIR + +if TYPE_CHECKING: + from isaaclab_newton.ik import NewtonIKSolver + from newton import Model FPS = 60 SUBSTEPS = 16 +VIDEO_STEPS = 312 +VIDEO_OUTPUT_DIR = "videos/newton_tablecloth_h1" +VIDEO_RESOLUTION = (1920, 1080) +VIDEO_BITRATE = "20M" TABLE_TOP_Z = 1.09 RIGID_GAP = 0.001 +TABLEWARE_CLEARANCE = 0.008 +CLOTH_Z = TABLE_TOP_Z + 0.002 PULL_DISTANCE = 0.40 -PULL_RAMP_TIME = 0.25 +PULL_RAMP_TIME = wp.constant(0.25) + +KITCHEN_ISLAND_USD = ( + f"{ISAAC_NUCLEUS_DIR}/SimReady/Residential/Kitchen/Counters/Island_A01/sm_fixture_island_a01_01.usd" +) +BOWL_USD = f"{ISAAC_NUCLEUS_DIR}/SimReady/Residential/Kitchen/Dishware/Bowl_G01/sm_kitchenware_bowl_g01_01.usd" +WINE_GLASS_USD = ( + f"{ISAAC_NUCLEUS_DIR}/SimReady/Residential/Furnishing/Kitchen/Kitchenware/Dishware/Glass_Wine_A01/" + "sm_dishware_glass_wine_a01_01.usd" +) +FORK_USD = f"{ISAAC_NUCLEUS_DIR}/SimReady/Residential/Kitchen/Utensils/Fork_K01/sm_kitchenware_fork_k01_01.usd" + +# Dimensions measured from the SimReady assets. Non-uniform scaling turns the kitchen island into a compact, +# H1-height serving table without changing the manipulation geometry used by the state machine. +KITCHEN_ISLAND_SIZE = (0.631293, 1.240893, 0.900409) +KITCHEN_ISLAND_SCALE = ( + 0.40 / KITCHEN_ISLAND_SIZE[0], + 0.72 / KITCHEN_ISLAND_SIZE[1], + TABLE_TOP_Z / KITCHEN_ISLAND_SIZE[2], +) +BOWL_LOCAL_Z_MIN = 0.000001783 +BOWL_LOCAL_RADIUS = 0.052765541 +BOWL_LOCAL_HEIGHT = 0.043569469 +WINE_GLASS_LOCAL_Z_MIN = 0.000358 +FORK_LOCAL_Z_MIN = 0.000127 +BOWL_SCALE = 1.35 +FORK_SCALE = 0.85 +FORK_ROTATION = (0.0, 0.0, -0.70710678, 0.70710678) +FORK_CENTER_OF_MASS = (0.0, 0.0092, 0.0089) +FORK_DIAGONAL_INERTIA = (1.86e-4, 6.2e-6, 1.90e-4) +# A base-only collision proxy would otherwise give the tall glass a flat-disk inertia. +WINE_GLASS_CENTER_OF_MASS = (0.0, 0.0, 0.04) +WINE_GLASS_DIAGONAL_INERTIA = (3.0e-3, 3.0e-3, 5.0e-4) -SETTLE_END = wp.constant(0.50) -APPROACH_END = wp.constant(1.30) -DESCEND_END = wp.constant(1.90) -INSERT_END = wp.constant(2.40) -PRELIFT_END = wp.constant(3.00) -CLOSE_END = wp.constant(3.40) -LIFT_END = wp.constant(3.90) -PULL_START = wp.constant(4.50) +SETTLE_DURATION = wp.constant(0.50) +APPROACH_DURATION = wp.constant(0.80) +DESCEND_DURATION = wp.constant(0.60) +INSERT_DURATION = wp.constant(0.50) +PRELIFT_DURATION = wp.constant(0.60) +CLOSE_DURATION = wp.constant(0.40) +LIFT_DURATION = wp.constant(0.50) +PINCH_DURATION = wp.constant(0.60) STATE_SETTLE = wp.constant(0) STATE_APPROACH = wp.constant(1) @@ -77,6 +148,8 @@ GROUP_LEFT_INDEX = wp.constant(2) GROUP_RIGHT_INDEX = wp.constant(3) GROUP_OTHER = wp.constant(4) +LEFT_INDEX_PINCH = wp.constant(0.737080) +RIGHT_INDEX_PINCH = wp.constant(0.713855) HAND_OFFSETS = ((0.146273, -0.068447, 0.028077), (0.148808, 0.068652, 0.026675)) HAND_ROTATIONS = ((-0.09, 0.46, 0.03, 0.88), (0.09023, 0.46115, -0.03008, 0.88221)) @@ -86,31 +159,6 @@ ) -@configclass -class _H1VBDSolverCfg(VBDSolverCfg): - """Unified AVBD/VBD settings matching the standalone Newton demo.""" - - iterations: int = 10 - rigid_contact_hard: bool = False - rigid_contact_history: bool = True - rigid_body_contact_buffer_size: int = 512 - rigid_body_particle_contact_buffer_size: int = 8192 - rigid_joint_linear_ke: float = 1.0e6 - rigid_joint_angular_ke: float = 1.0e6 - rigid_joint_linear_kd: float = 1.0e2 - rigid_joint_angular_kd: float = 1.0e2 - - -@configclass -class _H1CollisionCfg(NewtonCollisionPipelineCfg): - """H1 full-surface soft contact and rigid correspondence settings.""" - - broad_phase: str = "sap" - soft_contact_margin: float = 0.008 - enable_rigid_soft_full_surface_contact: bool = True - contact_matching: str = "latest" - - @wp.func def _smoothstep(value: float) -> float: u = wp.clamp(value, 0.0, 1.0) @@ -119,7 +167,6 @@ def _smoothstep(value: float) -> float: @wp.kernel def _infer_state_machine( - sim_time: float, dt: float, pull_speed: float, keyframes: wp.array(dtype=wp.vec3), @@ -127,9 +174,38 @@ def _infer_state_machine( right_target: wp.array(dtype=wp.vec3), finger_fractions: wp.array(dtype=float), state: wp.array(dtype=wp.int32), + state_time: wp.array(dtype=float), pull_distance: wp.array(dtype=float), ): """Advance the single H1 task-space state machine entirely in Warp.""" + current_state = state[0] + elapsed = state_time[0] + dt + + if current_state == STATE_SETTLE and elapsed >= SETTLE_DURATION: + current_state = STATE_APPROACH + elapsed = 0.0 + elif current_state == STATE_APPROACH and elapsed >= APPROACH_DURATION: + current_state = STATE_DESCEND + elapsed = 0.0 + elif current_state == STATE_DESCEND and elapsed >= DESCEND_DURATION: + current_state = STATE_INSERT + elapsed = 0.0 + elif current_state == STATE_INSERT and elapsed >= INSERT_DURATION: + current_state = STATE_PRELIFT + elapsed = 0.0 + elif current_state == STATE_PRELIFT and elapsed >= PRELIFT_DURATION: + current_state = STATE_CLOSE + elapsed = 0.0 + elif current_state == STATE_CLOSE and elapsed >= CLOSE_DURATION: + current_state = STATE_LIFT + elapsed = 0.0 + elif current_state == STATE_LIFT and elapsed >= LIFT_DURATION: + current_state = STATE_PINCH + elapsed = 0.0 + elif current_state == STATE_PINCH and elapsed >= PINCH_DURATION: + current_state = STATE_PULL + elapsed = 0.0 + left = keyframes[0] right = keyframes[1] left_thumb = 0.0 @@ -137,71 +213,63 @@ def _infer_state_machine( left_index = 0.0 right_index = 0.0 other = 0.0 - next_state = STATE_SETTLE - if sim_time < SETTLE_END: + if current_state == STATE_SETTLE: pass - elif sim_time < APPROACH_END: - next_state = STATE_APPROACH - u = _smoothstep((sim_time - SETTLE_END) / (APPROACH_END - SETTLE_END)) + elif current_state == STATE_APPROACH: + u = _smoothstep(elapsed / APPROACH_DURATION) left = wp.lerp(keyframes[0], keyframes[2], u) right = wp.lerp(keyframes[1], keyframes[3], u) other = 0.80 * u - elif sim_time < DESCEND_END: - next_state = STATE_DESCEND - u = _smoothstep((sim_time - APPROACH_END) / (DESCEND_END - APPROACH_END)) + elif current_state == STATE_DESCEND: + u = _smoothstep(elapsed / DESCEND_DURATION) left = wp.lerp(keyframes[2], keyframes[4], u) right = wp.lerp(keyframes[3], keyframes[5], u) left_index = 0.75 * u right_index = 0.75 * u other = 0.80 - elif sim_time < INSERT_END: - next_state = STATE_INSERT - u = _smoothstep((sim_time - DESCEND_END) / (INSERT_END - DESCEND_END)) + elif current_state == STATE_INSERT: + u = _smoothstep(elapsed / INSERT_DURATION) left = wp.lerp(keyframes[4], keyframes[6], u) right = wp.lerp(keyframes[5], keyframes[7], u) left_index = 0.75 right_index = 0.75 other = 0.80 - elif sim_time < PRELIFT_END: - next_state = STATE_PRELIFT - u = _smoothstep((sim_time - INSERT_END) / (PRELIFT_END - INSERT_END)) + elif current_state == STATE_PRELIFT: + u = _smoothstep(elapsed / PRELIFT_DURATION) left = wp.lerp(keyframes[6], keyframes[8], u) right = wp.lerp(keyframes[7], keyframes[9], u) - left_index = wp.lerp(0.75, 0.737080, u) - right_index = wp.lerp(0.75, 0.713855, u) + left_index = wp.lerp(0.75, LEFT_INDEX_PINCH, u) + right_index = wp.lerp(0.75, RIGHT_INDEX_PINCH, u) other = 0.80 - elif sim_time < CLOSE_END: - next_state = STATE_CLOSE + elif current_state == STATE_CLOSE: left = keyframes[8] right = keyframes[9] - u = _smoothstep((sim_time - PRELIFT_END) / (CLOSE_END - PRELIFT_END)) + u = _smoothstep(elapsed / CLOSE_DURATION) left_thumb = u right_thumb = u - left_index = 0.737080 - right_index = 0.713855 + left_index = LEFT_INDEX_PINCH + right_index = RIGHT_INDEX_PINCH other = 0.80 - elif sim_time < LIFT_END: - next_state = STATE_LIFT - u = _smoothstep((sim_time - CLOSE_END) / (LIFT_END - CLOSE_END)) + elif current_state == STATE_LIFT: + u = _smoothstep(elapsed / LIFT_DURATION) left = wp.lerp(keyframes[8], keyframes[10], u) right = wp.lerp(keyframes[9], keyframes[11], u) left_thumb = 1.0 right_thumb = 1.0 - left_index = 0.737080 - right_index = 0.713855 + left_index = LEFT_INDEX_PINCH + right_index = RIGHT_INDEX_PINCH other = 0.80 - elif sim_time < PULL_START: - next_state = STATE_PINCH + elif current_state == STATE_PINCH: left = keyframes[10] right = keyframes[11] left_thumb = 1.0 right_thumb = 1.0 - left_index = 0.737080 - right_index = 0.713855 + left_index = LEFT_INDEX_PINCH + right_index = RIGHT_INDEX_PINCH other = 0.80 - else: - speed_ramp = _smoothstep((sim_time - PULL_START) / PULL_RAMP_TIME) + elif current_state == STATE_PULL: + speed_ramp = _smoothstep(elapsed / PULL_RAMP_TIME) distance = wp.min(pull_distance[0] + speed_ramp * pull_speed * dt, PULL_DISTANCE) pull_distance[0] = distance drop = 0.0 @@ -212,10 +280,22 @@ def _infer_state_machine( right = keyframes[11] + offset left_thumb = 1.0 right_thumb = 1.0 - left_index = 0.737080 - right_index = 0.713855 + left_index = LEFT_INDEX_PINCH + right_index = RIGHT_INDEX_PINCH + other = 0.80 + if distance >= PULL_DISTANCE: + current_state = STATE_HOLD + else: + distance = pull_distance[0] + drop = 0.175 * _smoothstep((distance - 0.08) / (PULL_DISTANCE - 0.08)) + offset = wp.vec3(-distance, 0.0, -drop) + left = keyframes[10] + offset + right = keyframes[11] + offset + left_thumb = 1.0 + right_thumb = 1.0 + left_index = LEFT_INDEX_PINCH + right_index = RIGHT_INDEX_PINCH other = 0.80 - next_state = STATE_PULL if distance < PULL_DISTANCE else STATE_HOLD left_target[0] = left right_target[0] = right @@ -224,7 +304,8 @@ def _infer_state_machine( finger_fractions[2] = left_index finger_fractions[3] = right_index finger_fractions[4] = other - state[0] = next_state + state[0] = current_state + state_time[0] = elapsed @wp.kernel @@ -243,14 +324,14 @@ def _set_finger_targets( def _update_control_targets( desired_q: wp.array(dtype=float), previous_q: wp.array(dtype=float), - inv_dt: float, + dt: float, target_q: wp.array(dtype=float), target_qd: wp.array(dtype=float), ): i = wp.tid() - delta = wp.clamp(desired_q[i] - previous_q[i], -40.0 / inv_dt, 40.0 / inv_dt) + delta = wp.clamp(desired_q[i] - previous_q[i], -40.0 * dt, 40.0 * dt) target_q[i] = previous_q[i] + delta - target_qd[i] = delta * inv_dt + target_qd[i] = delta / dt previous_q[i] = target_q[i] @@ -267,160 +348,429 @@ def _unit_quat(values: tuple[float, float, float, float]) -> tuple[float, float, return tuple(float(value) for value in values_np) -def _add_h1(builder: newton.ModelBuilder) -> tuple[dict[str, int], list[int]]: - body_start = builder.body_count - joint_start = builder.joint_count - dof_start = builder.joint_dof_count - shape_start = builder.shape_count - sdf_defaults = ( - builder.default_shape_cfg.force_sdf, - builder.default_shape_cfg.sdf_max_resolution, - builder.default_shape_cfg.sdf_target_voxel_size, +def _rigid_material( + *, density: float | None, friction: float, contact_stiffness: float, contact_damping: float +) -> list[UsdPhysicsRigidBodyMaterialCfg | NewtonMaterialCfg]: + """Return solver-common friction and Newton compliant-contact material fragments.""" + return [ + UsdPhysicsRigidBodyMaterialCfg( + static_friction=friction, + dynamic_friction=friction, + restitution=0.0, + density=density, + ), + NewtonMaterialCfg(contact_stiffness=contact_stiffness, contact_damping=contact_damping), + ] + + +def _collision_properties() -> list[UsdPhysicsCollisionCfg | NewtonCollisionCfg]: + """Return collision properties shared by cloth-contacting rigid shapes.""" + return [ + UsdPhysicsCollisionCfg(collision_enabled=True), + NewtonCollisionCfg(contact_margin=0.002, contact_gap=RIGID_GAP), + ] + + +def _tabletop_collider_cfg(size: tuple[float, float, float]) -> sim_utils.CuboidCfg: + """Create the low-cost collision proxy underneath the kitchen-island visual.""" + return sim_utils.CuboidCfg( + size=size, + visible=False, + collision_props=_collision_properties(), + physics_material=_rigid_material( + density=None, + friction=0.35, + contact_stiffness=1.0e4, + contact_damping=1.0e1, + ), ) - builder.default_shape_cfg.configure_sdf(max_resolution=64) - try: - builder.add_mjcf( - newton.utils.download_asset("unitree_h1") / "mjcf/h1_with_hand.xml", - xform=wp.transform(wp.vec3(-0.75, 0.0, 0.0), wp.quat_identity()), - floating=False, - enable_self_collisions=False, - ctrl_direct=False, - parse_visuals=True, - parse_sites=True, - collider_classes=("collision",), - no_class_as_colliders=True, + + +def _spawn_visual_table_from_usd( + prim_path: str, + cfg: sim_utils.UsdFileCfg, + translation: tuple[float, float, float] | None = None, + orientation: tuple[float, float, float, float] | None = None, + **kwargs, +): + """Spawn a visual-only island and remove material inputs unsupported by Newton GL.""" + prim = sim_utils.spawn_from_usd(prim_path, cfg, translation, orientation, **kwargs) + from pxr import UsdShade # noqa: PLC0415 + + for root in sim_utils.find_matching_prims(prim_path): + for child in sim_utils.get_all_matching_child_prims(root.GetPath()): + physics_binding = child.GetRelationship("material:binding:physics") + if physics_binding: + physics_binding.SetTargets([]) + if child.IsA(UsdShade.Shader): + shader = UsdShade.Shader(child) + if shader.GetIdAttr().Get() == "UsdPreviewSurface": + for input_name in ("metallic", "roughness"): + shader.GetInput(input_name).DisconnectSource() + return prim + + +@configclass +class _VisualTableUsdFileCfg(sim_utils.UsdFileCfg): + """USD spawner config for a visual-only SimReady kitchen island.""" + + func: Callable | str = _spawn_visual_table_from_usd + + +def _spawn_tableware_from_usd( + prim_path: str, + cfg: sim_utils.UsdFileCfg, + translation: tuple[float, float, float] | None = None, + orientation: tuple[float, float, float, float] | None = None, + **kwargs, +): + """Spawn one tableware USD and prepare its authored collider for Newton VBD.""" + prim = sim_utils.spawn_from_usd(prim_path, cfg, translation, orientation, **kwargs) + from pxr import Gf, UsdPhysics, UsdShade # noqa: PLC0415 + + for root in sim_utils.find_matching_prims(prim_path): + root_path = root.GetPath().pathString + for child in sim_utils.get_all_matching_child_prims(root_path): + physics_binding = child.GetRelationship("material:binding:physics") + if physics_binding: + physics_binding.SetTargets([]) + if child.IsA(UsdShade.Shader): + shader = UsdShade.Shader(child) + shader_id = shader.GetIdAttr().Get() + if shader_id == "UsdPreviewSurface": + for input_name in ("metallic", "roughness"): + shader.GetInput(input_name).DisconnectSource() + if cfg.visual_color is not None: + shader.GetInput("diffuseColor").Set(Gf.Vec3f(*cfg.visual_color)) + if cfg.visual_opacity is not None: + shader.GetInput("opacity").Set(cfg.visual_opacity) + if cfg.visual_roughness is not None: + shader.GetInput("roughness").Set(cfg.visual_roughness) + elif shader_id == "mdl:OmniGlass": + if cfg.visual_color is not None: + shader.GetInput("glass_color").Set(Gf.Vec3f(*cfg.visual_color)) + if cfg.visual_opacity is not None: + shader.GetInput("cutout_opacity").Set(cfg.visual_opacity) + if cfg.visual_roughness is not None: + shader.GetInput("frosting_roughness").Set(cfg.visual_roughness) + mesh_colliders = sim_utils.get_all_matching_child_prims( + root_path, + predicate=lambda prim: prim.HasAPI(UsdPhysics.CollisionAPI), ) - finally: - ( - builder.default_shape_cfg.force_sdf, - builder.default_shape_cfg.sdf_max_resolution, - builder.default_shape_cfg.sdf_target_voxel_size, - ) = sdf_defaults - - for dof in range(dof_start, builder.joint_dof_count): - builder.joint_target_ke[dof] = 5.0e4 - builder.joint_target_kd[dof] = 5.0e2 - torso_dof = builder.joint_qd_start[_find_suffix(builder.joint_label, "torso_joint")] - builder.joint_target_ke[torso_dof] = 2.0e5 - builder.joint_target_kd[torso_dof] = 2.0e3 - finger_tokens = tuple( - f"/{side}_{digit}_" for side in ("L", "R") for digit in ("thumb", "index", "middle", "ring", "pinky") + if len(mesh_colliders) != 1: + raise RuntimeError(f"Expected one SimReady tableware mesh collider, found {len(mesh_colliders)}") + UsdPhysics.CollisionAPI(mesh_colliders[0]).CreateCollisionEnabledAttr(False) + + bodies = sim_utils.get_all_matching_child_prims( + root_path, + predicate=lambda prim: prim.HasAPI(UsdPhysics.RigidBodyAPI), + ) + if len(bodies) != 1: + raise RuntimeError(f"Expected one SimReady tableware rigid body, found {len(bodies)}") + body = bodies[0] + mass_api = UsdPhysics.MassAPI.Apply(body) + mass_api.CreateMassAttr(cfg.mass) + mass_api.CreateDensityAttr(0.0) + if cfg.center_of_mass is not None: + mass_api.CreateCenterOfMassAttr(cfg.center_of_mass) + if cfg.diagonal_inertia is not None: + mass_api.CreateDiagonalInertiaAttr(cfg.diagonal_inertia) + mass_api.CreatePrincipalAxesAttr(Gf.Quatf(1.0, Gf.Vec3f(0.0))) + cfg.collision_proxy_cfg.func( + f"{body.GetPath()}/CollisionProxy", + cfg.collision_proxy_cfg, + translation=cfg.collision_proxy_position, + orientation=(0.0, 0.0, 0.0, 1.0), + ) + return prim + + +@configclass +class _TablewareUsdFileCfg(sim_utils.UsdFileCfg): + """USD spawner config for SimReady visuals with one analytic support collider.""" + + func: Callable | str = _spawn_tableware_from_usd + mass: float = MISSING + collision_proxy_cfg: sim_utils.ShapeCfg = MISSING + collision_proxy_position: tuple[float, float, float] = MISSING + center_of_mass: tuple[float, float, float] | None = None + diagonal_inertia: tuple[float, float, float] | None = None + visual_color: tuple[float, float, float] | None = None + visual_opacity: float | None = None + visual_roughness: float | None = None + + +def _rigid_object_cfg( + usd_path: str, + position: tuple[float, float, float], + mass: float, + collision_proxy_cfg: sim_utils.ShapeCfg, + collision_proxy_position: tuple[float, float, float], + orientation: tuple[float, float, float, float] = (0.0, 0.0, 0.0, 1.0), + scale: tuple[float, float, float] | None = None, + center_of_mass: tuple[float, float, float] | None = None, + diagonal_inertia: tuple[float, float, float] | None = None, + visual_color: tuple[float, float, float] | None = None, + visual_opacity: float | None = None, + visual_roughness: float | None = None, +) -> RigidObjectCfg: + """Create one dynamic SimReady tableware object with demo-tuned physical properties.""" + return RigidObjectCfg( + prim_path="", + spawn=_TablewareUsdFileCfg( + usd_path=usd_path, + scale=scale, + make_uninstanceable=True, + rigid_props=[UsdPhysicsRigidBodyCfg(rigid_body_enabled=True, kinematic_enabled=False)], + mass=mass, + collision_proxy_cfg=collision_proxy_cfg, + collision_proxy_position=collision_proxy_position, + center_of_mass=center_of_mass, + diagonal_inertia=diagonal_inertia, + visual_color=visual_color, + visual_opacity=visual_opacity, + visual_roughness=visual_roughness, + ), + init_state=RigidObjectCfg.InitialStateCfg(pos=position, rot=orientation), ) - for joint in range(joint_start, builder.joint_count): - if any(token in builder.joint_label[joint] for token in finger_tokens): - dof = builder.joint_qd_start[joint] - builder.joint_target_ke[dof] = 4.0e4 - builder.joint_target_kd[dof] = 1.0e2 - - bodies = { - "torso": _find_suffix(builder.body_label, "torso_link"), - "left_hand": _find_suffix(builder.body_label, "left_hand_link"), - "right_hand": _find_suffix(builder.body_label, "right_hand_link"), - } - shape_flag = int(newton.ShapeFlags.COLLIDE_SHAPES) - particle_flag = int(newton.ShapeFlags.COLLIDE_PARTICLES) - grasp_tokens = ("/L_thumb_", "/L_index_", "/R_thumb_", "/R_index_") - grasp_bodies = { - body - for body in range(body_start, builder.body_count) - if any(token in builder.body_label[body] for token in grasp_tokens) - } - robot_shapes = [] - grasp_shape_count = 0 - for shape in range(shape_start, builder.shape_count): - if not int(builder.shape_flags[shape]) & shape_flag: - continue - builder.shape_flags[shape] |= particle_flag - builder.shape_gap[shape] = RIGID_GAP - builder.shape_material_ke[shape] = 1.0e3 - builder.shape_material_kd[shape] = 1.0e-2 - builder.shape_material_mu[shape] = 0.50 - builder.shape_margin[shape] = 0.002 - builder.shape_sdf_padding[shape] = 0.012 - builder.shape_sdf_max_resolution[shape] = 64 - builder.shape_sdf_target_voxel_size[shape] = None - robot_shapes.append(shape) - if builder.shape_body[shape] in grasp_bodies: - builder.shape_material_ke[shape] = 8.0e3 - builder.shape_material_kd[shape] = 2.0e1 - builder.shape_material_mu[shape] = 200.0 - builder.shape_sdf_max_resolution[shape] = 128 - grasp_shape_count += 1 - if grasp_shape_count != 12: - raise RuntimeError(f"Expected 12 H1 thumb/index colliders, found {grasp_shape_count}") - return bodies, robot_shapes - - -def _add_table(builder: newton.ModelBuilder) -> None: - cfg = newton.ModelBuilder.ShapeConfig(ke=1.0e4, kd=1.0e1, mu=0.25, gap=RIGID_GAP, has_particle_collision=True) - color = (0.46, 0.24, 0.10) - builder.add_shape_box( - -1, - xform=wp.transform(wp.vec3(0.0, 0.0, TABLE_TOP_Z - 0.04), wp.quat_identity()), - hx=0.20, - hy=0.36, - hz=0.04, - cfg=cfg, - color=color, + + +def _convert_h1_asset() -> str: + """Convert and cache the downloaded H1-with-hands MJCF through Isaac Lab.""" + import newton.utils # noqa: PLC0415 + + converter_cfg = MjcfConverterCfg( + asset_path=str(newton.utils.download_asset("unitree_h1") / "mjcf/h1_with_hand.xml"), + usd_dir=os.path.join(tempfile.gettempdir(), "IsaacLab", "newton_tablecloth_h1_vbd"), + usd_file_name="h1_with_hand.usda", + fix_base=True, + self_collision=False, + robot_type="Humanoid", + # The demo drives VBD through Isaac Lab actuators, so it does not need + # the importer's extra MuJoCo/PhysX payload conversion or layered asset transform. + run_asset_transformer=False, + run_multi_physics_conversion=False, ) - for x_sign, y_sign in ((-1, -1), (-1, 1), (1, -1), (1, 1)): - builder.add_shape_box( - -1, - xform=wp.transform(wp.vec3(x_sign * 0.15, y_sign * 0.30, 0.505), wp.quat_identity()), - hx=0.03, - hy=0.03, - hz=0.505, - cfg=cfg, - color=color, + return MjcfConverter(converter_cfg).usd_path + + +@configclass +class _H1ArticulationCfg(ArticulationCfg): + """H1 configuration that provisions the imported hand meshes for cloth contact.""" + + def _post_spawn(self, stage) -> None: + """Select SDF collision for meshes and bind the fingertip contact material.""" + super()._post_spawn(stage) + from pxr import UsdGeom, UsdPhysics # noqa: PLC0415 + + from isaaclab.sim.schemas import apply_namespaced # noqa: PLC0415 + from isaaclab.sim.spawners.materials.physics_materials import ( # noqa: PLC0415 + spawn_rigid_body_material_from_fragments, + ) + + root_path = self.spawn.spawn_path if self.spawn is not None and self.spawn.spawn_path else self.prim_path + meshes = sim_utils.get_all_matching_child_prims( + root_path, + predicate=lambda prim: prim.IsA(UsdGeom.Mesh), + stage=stage, + ) + for mesh in meshes: + mesh_path = mesh.GetPath().pathString + if "/left_hand_link/" in mesh_path or "/right_hand_link/" in mesh_path: + usd_mesh = UsdGeom.Mesh(mesh) + usd_mesh.CreateDisplayColorAttr([(0.0100228, 0.0100228, 0.0100228)]) + usd_mesh.CreateDisplayOpacityAttr([1.0]) + + mesh_colliders = [mesh for mesh in meshes if mesh.HasAPI(UsdPhysics.CollisionAPI)] + for collider in mesh_colliders: + collider.RemoveAppliedSchema("NewtonMeshCollisionAPI") + UsdPhysics.MeshCollisionAPI(collider).GetApproximationAttr().Set("none") + apply_namespaced( + NewtonSDFCollisionCfg(sdf_max_resolution=64, sdf_padding=0.012), + collider.GetPath().pathString, + stage, + ) + + grasp_material_path = f"{root_path}/GraspMaterial" + spawn_rigid_body_material_from_fragments( + grasp_material_path, + _rigid_material( + density=None, + friction=200.0, + contact_stiffness=8.0e3, + contact_damping=2.0e1, + ), + stage=stage, + ) + grasp_roots = {"L_thumb_proximal_base", "L_index_proximal", "R_thumb_proximal_base", "R_index_proximal"} + finger_prims = sim_utils.get_all_matching_child_prims( + root_path, + predicate=lambda prim: prim.GetName() in grasp_roots, + stage=stage, ) + if len(finger_prims) != len(grasp_roots): + raise RuntimeError(f"Expected {len(grasp_roots)} H1 grasp roots, found {len(finger_prims)}") + for prim in finger_prims: + sim_utils.bind_physics_material(prim.GetPath(), grasp_material_path, stage=stage) -def _add_cloth_and_tableware(builder: newton.ModelBuilder) -> None: - resolution = 24 - width = 0.46 - depth = 0.70 - cell_x = width / resolution - dim_y = round(depth / cell_x) - cell_y = depth / dim_y - cloth_z = TABLE_TOP_Z + 0.003 - builder.add_cloth_grid( - pos=wp.vec3(-0.24, -0.5 * depth, cloth_z), - rot=wp.quat_identity(), - vel=wp.vec3(0.0), - dim_x=resolution, - dim_y=dim_y, - cell_x=cell_x, - cell_y=cell_y, - mass=0.24 * width * depth / ((resolution + 1) * (dim_y + 1)), - tri_ke=5.0e4, - tri_ka=5.0e4, - tri_kd=5.0e1, - edge_ke=0.10, - edge_kd=1.0e-3, - particle_radius=0.001, +def _h1_articulation_cfg(usd_path: str) -> ArticulationCfg: + """Create the Isaac Lab articulation configuration for H1.""" + return _H1ArticulationCfg( + prim_path="{ENV_REGEX_NS}/Robot", + spawn=sim_utils.UsdFileCfg( + usd_path=usd_path, + make_uninstanceable=True, + fix_root_link=True, + collision_props=_collision_properties(), + physics_material=_rigid_material( + density=None, + friction=0.50, + contact_stiffness=1.0e3, + contact_damping=1.0e-2, + ), + ), + init_state=ArticulationCfg.InitialStateCfg(pos=(-0.75, 0.0, 0.0)), + actuators={ + "body": ImplicitActuatorCfg( + joint_names_expr=[r"(?!torso_joint$)(?![LR]_(?:thumb|index|middle|ring|pinky)_).+"], + stiffness=5.0e4, + damping=5.0e2, + ), + "torso": ImplicitActuatorCfg( + joint_names_expr=["torso_joint"], + stiffness=2.0e5, + damping=2.0e3, + ), + "fingers": ImplicitActuatorCfg( + joint_names_expr=[r"[LR]_(?:thumb|index|middle|ring|pinky)_.+"], + stiffness=4.0e4, + damping=1.0e2, + ), + }, ) - object_cfg = newton.ModelBuilder.ShapeConfig( - density=2400.0, - ke=1.0e4, - kd=1.0e1, - mu=0.04, - gap=RIGID_GAP, - has_particle_collision=True, + + +@configclass +class H1TableclothSceneCfg(InteractiveSceneCfg): + """Isaac Lab scene for the H1 tablecloth manipulation sequence.""" + + ground = AssetBaseCfg( + prim_path="/World/defaultGroundPlane", + spawn=sim_utils.GroundPlaneCfg(), + collision_group=-1, + ) + + robot: ArticulationCfg = MISSING + + table = AssetBaseCfg( + prim_path="{ENV_REGEX_NS}/Table", + spawn=_VisualTableUsdFileCfg( + usd_path=KITCHEN_ISLAND_USD, + scale=KITCHEN_ISLAND_SCALE, + variants={"Physics": "none"}, + make_uninstanceable=True, + rigid_props=sim_utils.NewtonRigidBodyPropertiesCfg(rigid_body_enabled=False), + collision_props=sim_utils.NewtonCollisionPropertiesCfg(collision_enabled=False), + ), + ) + tabletop_collider = AssetBaseCfg( + prim_path="{ENV_REGEX_NS}/Tabletop", + spawn=_tabletop_collider_cfg((0.40, 0.72, 0.08)), + init_state=AssetBaseCfg.InitialStateCfg(pos=(0.0, 0.0, TABLE_TOP_Z - 0.04)), ) - plate = builder.add_body(xform=wp.transform(wp.vec3(0.045, -0.08, cloth_z + 0.008), wp.quat_identity())) - builder.add_shape_cylinder(plate, radius=0.065, half_height=0.008, cfg=object_cfg, color=(0.92, 0.91, 0.82)) - glass = builder.add_body(xform=wp.transform(wp.vec3(0.04, 0.11, cloth_z + 0.045), wp.quat_identity())) - glass_cfg = object_cfg.copy() - glass_cfg.density = 2500.0 - builder.add_shape_cylinder(glass, radius=0.032, half_height=0.045, cfg=glass_cfg, color=(0.52, 0.78, 0.90)) - fork = builder.add_body(xform=wp.transform(wp.vec3(0.08, -0.20, cloth_z + 0.004), wp.quat_identity())) - fork_cfg = object_cfg.copy() - fork_cfg.density = 8000.0 - builder.add_shape_box(fork, hx=0.060, hy=0.009, hz=0.004, cfg=fork_cfg, color=(0.72, 0.74, 0.76)) - - -def _finger_data(model: newton.Model) -> tuple[list[int], list[float], list[int]]: - q_starts = model.joint_q_start.numpy() + + cloth = DeformableObjectCfg( + prim_path="{ENV_REGEX_NS}/Cloth", + spawn=sim_utils.MeshRectangleCfg( + size=(0.46, 0.70), + edge_refinement=24, + deformable_props=NewtonDeformableBodyPropertiesCfg(), + visual_material=sim_utils.PreviewSurfaceCfg(diffuse_color=(0.76, 0.05, 0.05)), + physics_material=NewtonSurfaceDeformableBodyMaterialCfg( + density=0.24, + particle_radius=0.001, + tri_ke=5.0e4, + tri_ka=5.0e4, + tri_kd=5.0e1, + edge_ke=0.10, + edge_kd=1.0e-3, + ), + ), + init_state=DeformableObjectCfg.InitialStateCfg(pos=(-0.01, 0.0, CLOTH_Z)), + ) + + bowl = _rigid_object_cfg( + BOWL_USD, + (0.08, -0.07, CLOTH_Z + TABLEWARE_CLEARANCE - BOWL_SCALE * BOWL_LOCAL_Z_MIN), + 0.45, + sim_utils.CylinderCfg( + radius=BOWL_LOCAL_RADIUS, + height=BOWL_LOCAL_HEIGHT, + visible=False, + collision_props=_collision_properties(), + physics_material=_rigid_material( + density=None, + friction=0.08, + contact_stiffness=1.0e4, + contact_damping=1.0e1, + ), + ), + (0.0, 0.0, BOWL_LOCAL_Z_MIN + 0.5 * BOWL_LOCAL_HEIGHT), + scale=(BOWL_SCALE,) * 3, + ).replace(prim_path="{ENV_REGEX_NS}/Bowl") + glass = _rigid_object_cfg( + WINE_GLASS_USD, + (0.10, 0.13, CLOTH_Z + TABLEWARE_CLEARANCE - WINE_GLASS_LOCAL_Z_MIN), + 0.35, + sim_utils.CylinderCfg( + radius=0.040, + height=0.006, + visible=False, + collision_props=_collision_properties(), + physics_material=_rigid_material( + density=None, + friction=0.01, + contact_stiffness=1.0e4, + contact_damping=1.0e1, + ), + ), + (0.0, 0.0, 0.003), + center_of_mass=WINE_GLASS_CENTER_OF_MASS, + diagonal_inertia=WINE_GLASS_DIAGONAL_INERTIA, + visual_color=(0.55, 0.75, 0.90), + visual_opacity=0.90, + visual_roughness=0.12, + ).replace(prim_path="{ENV_REGEX_NS}/Glass") + fork = _rigid_object_cfg( + FORK_USD, + (0.04, -0.22, CLOTH_Z + TABLEWARE_CLEARANCE - FORK_SCALE * FORK_LOCAL_Z_MIN), + 0.07, + sim_utils.CuboidCfg( + size=(0.014, 0.160, 0.003), + visible=False, + collision_props=_collision_properties(), + physics_material=_rigid_material( + density=None, + friction=0.50, + contact_stiffness=1.0e4, + contact_damping=1.0e1, + ), + ), + (0.0, 0.0092, 0.0016), + FORK_ROTATION, + scale=(FORK_SCALE,) * 3, + center_of_mass=FORK_CENTER_OF_MASS, + diagonal_inertia=FORK_DIAGONAL_INERTIA, + ).replace(prim_path="{ENV_REGEX_NS}/Fork") + + light = AssetBaseCfg( + prim_path="/World/Light", + spawn=sim_utils.DomeLightCfg(intensity=2500.0, color=(0.75, 0.75, 0.75)), + ) + + +def _finger_data(robot: Articulation) -> tuple[list[int], list[float], list[int]]: indices = [] values = [] groups = [] @@ -441,7 +791,11 @@ def _finger_data(model: newton.Model) -> tuple[list[int], list[float], list[int] ("pinky_intermediate_joint", 1.0), ) for suffix, value in entries: - indices.append(int(q_starts[_find_suffix(model.joint_label, f"{side}_{suffix}")])) + joint_name = f"{side}_{suffix}" + joint_ids, _ = robot.find_joints(joint_name) + if len(joint_ids) != 1: + raise ValueError(f"Expected one H1 joint named '{joint_name}', found {len(joint_ids)}") + indices.append(joint_ids[0]) values.append(value) if suffix.startswith("thumb_"): groups.append(GROUP_LEFT_THUMB if side == "L" else GROUP_RIGHT_THUMB) @@ -452,7 +806,14 @@ def _finger_data(model: newton.Model) -> tuple[list[int], list[float], list[int] return indices, values, groups -def _make_ik(model: newton.Model, bodies: dict[str, int]) -> NewtonIKSolver: +def _make_ik(model: Model, bodies: dict[str, int]) -> NewtonIKSolver: + from isaaclab_newton.ik import ( # noqa: PLC0415 + NewtonIKJointLimitObjectiveCfg, + NewtonIKPoseObjectiveCfg, + NewtonIKSolver, + NewtonIKSolverCfg, + ) + objectives = [ NewtonIKPoseObjectiveCfg( body_name="left_hand", @@ -486,49 +847,129 @@ def _make_ik(model: newton.Model, bodies: dict[str, int]) -> NewtonIKSolver: ) +class _StandaloneVideoTarget: + """Expose the simulation fields expected by Isaac Lab's step-driven recorder.""" + + metadata = {"render_fps": FPS} + + def __init__(self, sim): + self.sim = sim + self.step_dt = sim.get_physics_dt() + + +def _create_video_recorder(sim, video_length: int): + """Create a 60 FPS viewport recorder when ``--video`` is enabled.""" + if not args_cli.video: + return None + + from isaaclab.envs.utils.video_recorder import VideoRecorder # noqa: PLC0415 + from isaaclab.envs.utils.video_recorder_cfg import VideoRecorderCfg # noqa: PLC0415 + + print(f"[INFO]: Recording {video_length / FPS:.1f} s to {VIDEO_OUTPUT_DIR}/", flush=True) + return VideoRecorder( + VideoRecorderCfg( + source="visualizer", + output_dir=VIDEO_OUTPUT_DIR, + output_filename_prefix="newton_tablecloth_h1", + fps=FPS, + video_bitrate=VIDEO_BITRATE, + video_length=video_length, + ), + _StandaloneVideoTarget(sim), + ) + + def main() -> None: """Launch the H1 tablecloth demo.""" if not np.isfinite(args_cli.pull_speed) or args_cli.pull_speed <= 0.0: raise ValueError("--pull_speed must be finite and positive") - newton.use_coord_layout_targets = True + if args_cli.video and "none" in (args_cli.visualizer or []): + raise ValueError("--video requires a capture-capable visualizer; omit --visualizer none") + if args_cli.video and "kit" in (args_cli.visualizer or []): + args_cli.enable_cameras = True + max_steps = VIDEO_STEPS if args_cli.video and args_cli.max_steps < 0 else args_cli.max_steps + physics_cfg = NewtonCfg( num_substeps=SUBSTEPS, + # Robot, tableware, and cloth all move quickly during the pull, so collide every substep. collision_decimation=1, - # Newton 1.5 allocates VBD contact history lazily, outside graph-safe initialization. - use_cuda_graph=False, - default_shape_cfg=NewtonShapeCfg(gap=RIGID_GAP, ke=1.0e4, kd=1.0e1, mu=0.25), - soft_contact_cfg=NewtonSoftContactCfg(soft_contact_ke=1.0e3, soft_contact_kd=1.0e-2, soft_contact_mu=0.25), - collision_cfg=_H1CollisionCfg(), - solver_cfg=_H1VBDSolverCfg(), + default_shape_cfg=NewtonShapeCfg(gap=RIGID_GAP, ke=1.0e4, kd=1.0e1, mu=0.35), + # Material mixing keeps the cloth planted on the high-friction table while + # allowing it to slide under the lower-friction tableware. The same table + # material gives the objects more grip after the cloth clears them. + soft_contact_cfg=NewtonSoftContactCfg(soft_contact_ke=1.0e3, soft_contact_kd=1.0e-2, soft_contact_mu=0.35), + collision_cfg=NewtonCollisionPipelineCfg( + broad_phase="sap", + soft_contact_margin=0.008, + enable_rigid_soft_full_surface_contact=True, + ), + solver_cfg=VBDSolverCfg( + iterations=15, + rigid_compliant_alm=True, + # History is unnecessary here and prevents CUDA graph capture. + rigid_contact_history=False, + rigid_body_contact_buffer_size=512, + rigid_body_particle_contact_buffer_size=8192, + rigid_joint_linear_ke=1.0e6, + rigid_joint_angular_ke=1.0e6, + rigid_joint_linear_kd=1.0e2, + rigid_joint_angular_kd=1.0e2, + ), ) with launch_simulation(cfg=physics_cfg, launcher_args=args_cli) as resolved_physics_cfg: + from isaaclab_newton.physics import NewtonManager # noqa: PLC0415 + + from isaaclab.scene import InteractiveScene # noqa: PLC0415 + + default_visualizer_cfg = None + if args_cli.video and "kit" in (args_cli.visualizer or []): + from isaaclab_visualizers.kit import KitVisualizerCfg # noqa: PLC0415 + + default_visualizer_cfg = KitVisualizerCfg( + window_width=VIDEO_RESOLUTION[0], window_height=VIDEO_RESOLUTION[1] + ) + + h1_usd_path = _convert_h1_asset() sim = sim_utils.SimulationContext( - sim_utils.SimulationCfg(dt=1.0 / FPS, device=args_cli.device, physics=resolved_physics_cfg) + sim_utils.SimulationCfg( + dt=1.0 / FPS, + device=args_cli.device, + physics=resolved_physics_cfg, + default_visualizer_cfg=default_visualizer_cfg, + ) ) - sim.set_camera_view(eye=(-1.65, -1.80, 1.58), target=(-0.08, 0.0, 1.05)) - builder = NewtonManager.create_builder(gravity=(0.0, 0.0, -9.81)) - bodies, robot_shapes = _add_h1(builder) - robot_coord_count = builder.joint_coord_count - _add_table(builder) - _add_cloth_and_tableware(builder) - ground = builder.add_ground_plane( - cfg=newton.ModelBuilder.ShapeConfig(ke=1.0e4, kd=1.0e1, mu=0.25, gap=RIGID_GAP) + sim.set_camera_view(eye=(-2.435, -2.70, 1.725), target=(-0.08, 0.0, 0.93)) + scene = InteractiveScene( + H1TableclothSceneCfg( + num_envs=1, + env_spacing=1.0, + robot=_h1_articulation_cfg(h1_usd_path), + ) ) - for shape in robot_shapes: - builder.add_shape_collision_filter_pair(shape, ground) - builder.color(include_bending=True) - NewtonManager.set_builder(builder) sim.reset() + sim_dt = sim.get_physics_dt() + robot: Articulation = scene["robot"] model = NewtonManager.get_model() + if model.joint_coord_count < robot.num_joints: + raise RuntimeError( + "Newton IK cannot address every H1 joint; " + f"the model has {model.joint_coord_count} coordinates and H1 exposes {robot.num_joints} joints" + ) + bodies = { + "torso": _find_suffix(model.body_label, "torso_link"), + "left_hand": _find_suffix(model.body_label, "left_hand_link"), + "right_hand": _find_suffix(model.body_label, "right_hand_link"), + } device = model.device ik_solver = _make_ik(model, bodies) left_objective = ik_solver.objectives_by_name["left_hand"] right_objective = ik_solver.objectives_by_name["right_hand"] torso_objective = ik_solver.objectives_by_name["torso"] - initial_body_q = NewtonManager.get_state_0().body_q.numpy() - torso_objective.position_objective.set_target_position(0, wp.vec3(*initial_body_q[bodies["torso"], :3])) - torso_objective.rotation_objective.set_target_rotation(0, wp.quat(*initial_body_q[bodies["torso"], 3:])) + torso_ids, _ = robot.find_bodies("torso_link") + initial_torso_pose = robot.data.body_link_pose_w.torch[0, torso_ids[0]].cpu().numpy() + torso_objective.position_objective.set_target_position(0, wp.vec3(*initial_torso_pose[:3])) + torso_objective.rotation_objective.set_target_rotation(0, wp.quat(*initial_torso_pose[3:])) left_objective.rotation_objective.set_target_rotation(0, wp.quat(*_unit_quat(HAND_ROTATIONS[0]))) right_objective.rotation_objective.set_target_rotation(0, wp.quat(*_unit_quat(HAND_ROTATIONS[1]))) @@ -552,14 +993,16 @@ def main() -> None: device=device, ) state = wp.zeros(1, dtype=wp.int32, device=device) + state_time = wp.zeros(1, dtype=float, device=device) pull_distance = wp.zeros(1, dtype=float, device=device) fractions = wp.zeros(5, dtype=float, device=device) - finger_indices, closed_values, finger_groups = _finger_data(model) + finger_indices, closed_values, finger_groups = _finger_data(robot) finger_indices_wp = wp.array(finger_indices, dtype=wp.int32, device=device) closed_values_wp = wp.array(closed_values, dtype=float, device=device) finger_groups_wp = wp.array(finger_groups, dtype=wp.int32, device=device) ik_seed = wp.clone(model.joint_q).reshape((1, model.joint_coord_count)) - control = NewtonManager.get_control() + target_q = robot.actuators.target_command.position.warp.reshape((-1,)) + target_qd = robot.actuators.target_command.velocity.warp.reshape((-1,)) # Start from the solved rest pose instead of spending the settle phase moving out of the MJCF default. left_objective.position_objective.set_target_position(0, wp.vec3(-0.48, grasp_y, 1.24)) @@ -567,55 +1010,64 @@ def main() -> None: ik_solver.cfg.iterations = 48 solved = ik_solver.solve(ik_seed) solved_flat = solved.reshape((-1,)) - wp.copy(model.joint_q, solved_flat) - for newton_state in (NewtonManager.get_state_0(), NewtonManager.get_state_1()): - newton.eval_fk(model, solved_flat, model.joint_qd, newton_state) - newton_state.body_qd.zero_() - previous_targets = wp.clone(solved_flat[:robot_coord_count]) - wp.copy(control.joint_target_q, previous_targets, count=robot_coord_count) - control.joint_target_qd.zero_() + robot_position = solved_flat[: robot.num_joints].reshape((1, robot.num_joints)) + robot.write_joint_position_to_sim_index(position=robot_position) + robot.write_joint_velocity_to_sim_index(velocity=wp.zeros_like(robot_position)) + sim.forward() + previous_targets = wp.clone(solved_flat[: robot.num_joints]) + wp.copy(target_q, previous_targets) + target_qd.zero_() ik_solver.cfg.iterations = 24 wp.copy(ik_seed, solved) - print("[INFO]: Setup complete. H1 Newton VBD tablecloth state machine is ready.", flush=True) + video_recorder = _create_video_recorder(sim, max_steps) + print("[INFO]: Setup complete. H1 Isaac Lab tablecloth state machine is ready.", flush=True) step = 0 - while sim.is_headless_or_exist_active_visualizer() and (args_cli.max_steps < 0 or step < args_cli.max_steps): - wp.launch( - _infer_state_machine, - dim=1, - inputs=[ - step / FPS, - 1.0 / FPS, - args_cli.pull_speed, - keyframes, - left_objective.position_objective.target_positions, - right_objective.position_objective.target_positions, - fractions, - state, - pull_distance, - ], - ) - solved = ik_solver.solve(ik_seed) - solved_flat = solved.reshape((-1,)) - wp.launch( - _set_finger_targets, - dim=len(finger_indices), - inputs=[solved_flat, finger_indices_wp, closed_values_wp, finger_groups_wp, fractions], - ) - wp.copy(ik_seed, solved) - wp.launch( - _update_control_targets, - dim=robot_coord_count, - inputs=[ - solved_flat, - previous_targets, - float(FPS), - control.joint_target_q, - control.joint_target_qd, - ], - ) - sim.step() - step += 1 + try: + while sim.is_headless_or_exist_active_visualizer() and (max_steps < 0 or step < max_steps): + wp.launch( + _infer_state_machine, + dim=1, + inputs=[ + sim_dt, + args_cli.pull_speed, + keyframes, + left_objective.position_objective.target_positions, + right_objective.position_objective.target_positions, + fractions, + state, + state_time, + pull_distance, + ], + ) + solved = ik_solver.solve(ik_seed) + solved_flat = solved.reshape((-1,)) + wp.launch( + _set_finger_targets, + dim=len(finger_indices), + inputs=[solved_flat, finger_indices_wp, closed_values_wp, finger_groups_wp, fractions], + ) + wp.copy(ik_seed, solved) + wp.launch( + _update_control_targets, + dim=robot.num_joints, + inputs=[ + solved_flat, + previous_targets, + sim_dt, + target_q, + target_qd, + ], + ) + scene.write_data_to_sim() + sim.step() + scene.update(sim_dt) + if video_recorder is not None: + video_recorder.step() + step += 1 + finally: + if video_recorder is not None: + video_recorder.close() if __name__ == "__main__": diff --git a/source/isaaclab/changelog.d/video-recorder-bitrate.minor.rst b/source/isaaclab/changelog.d/video-recorder-bitrate.minor.rst new file mode 100644 index 000000000000..5df0fe82abfe --- /dev/null +++ b/source/isaaclab/changelog.d/video-recorder-bitrate.minor.rst @@ -0,0 +1,4 @@ +Added +~~~~~ + +* Added ``VideoRecorderCfg.video_bitrate`` to allow recordings to request an explicit encoder bitrate. diff --git a/source/isaaclab/isaaclab/envs/utils/video_recorder.py b/source/isaaclab/isaaclab/envs/utils/video_recorder.py index 3d99fb2b2303..96ea3816d125 100644 --- a/source/isaaclab/isaaclab/envs/utils/video_recorder.py +++ b/source/isaaclab/isaaclab/envs/utils/video_recorder.py @@ -350,7 +350,13 @@ def _close_clip(self) -> None: mean_pixel, ) clip = ImageSequenceClip(self._frames, fps=fps) - clip.write_videofile(path, codec="libx264", audio=False, logger=None) + clip.write_videofile( + path, + codec="libx264", + bitrate=self.cfg.video_bitrate, + audio=False, + logger=None, + ) logger.info("[VideoRecorder] Wrote %d frames to %s", len(self._frames), path) self._clip_index += 1 self._maybe_delete_old_clips() diff --git a/source/isaaclab/isaaclab/envs/utils/video_recorder_cfg.py b/source/isaaclab/isaaclab/envs/utils/video_recorder_cfg.py index 3b3c4abd48e4..8328eba6b51e 100644 --- a/source/isaaclab/isaaclab/envs/utils/video_recorder_cfg.py +++ b/source/isaaclab/isaaclab/envs/utils/video_recorder_cfg.py @@ -59,6 +59,12 @@ class VideoRecorderCfg: ``round(1.0 / env.step_dt)``. Set an explicit integer to override. """ + video_bitrate: str | None = None + """Target video bitrate passed to the encoder, such as ``"20M"`` or ``"5000k"``. + + ``None`` (default) uses the encoder's default quality setting. + """ + video_length: int = 200 """Number of env steps captured per clip.""" diff --git a/source/isaaclab/test/app/standalone_script_cases.py b/source/isaaclab/test/app/standalone_script_cases.py index a92d822f8df6..18977473d02c 100644 --- a/source/isaaclab/test/app/standalone_script_cases.py +++ b/source/isaaclab/test/app/standalone_script_cases.py @@ -216,6 +216,7 @@ class SmokeResult: args=("--max_steps", "2"), fixed_physics_backend="newton_vbd", visualizers=("newton_gl",), + required_modules=("isaacsim.asset.importer.mjcf",), ), "scripts/demos/sensors/cameras.py": ScriptOverride(args=("--num_envs", "1"), startup_timeout=900.0), "scripts/demos/sensors/multi_mesh_raycaster.py": ScriptOverride( diff --git a/source/isaaclab/test/envs/test_video_recorder.py b/source/isaaclab/test/envs/test_video_recorder.py index 3b0192f4b70d..3dc63dbafd8a 100644 --- a/source/isaaclab/test/envs/test_video_recorder.py +++ b/source/isaaclab/test/envs/test_video_recorder.py @@ -311,9 +311,9 @@ def test_sensor_source_missing_logs_and_returns_none(caplog): # --------------------------------------------------------------------------- -def test_close_clip_writes_mp4_via_moviepy(): +def test_close_clip_writes_mp4_via_moviepy(tmp_path): frames = [_FRAME.copy(), _FRAME.copy()] - recorder = VideoRecorder(_cfg(output_dir="/tmp/test_clips", fps=10), _make_env()) + recorder = VideoRecorder(_cfg(output_dir=str(tmp_path), fps=10, video_bitrate="20M"), _make_env()) recorder._frames = frames recorder._recording = True @@ -323,7 +323,9 @@ def test_close_clip_writes_mp4_via_moviepy(): recorder._close_clip() mock_cls.assert_called_once_with(frames, fps=10) - mock_clip.write_videofile.assert_called_once() + mock_clip.write_videofile.assert_called_once_with( + str(tmp_path / "clip_0000.mp4"), codec="libx264", bitrate="20M", audio=False, logger=None + ) assert not recorder._recording assert recorder._frames == [] diff --git a/source/isaaclab_newton/changelog.d/max-vbd-tablecloth-demos.minor.rst b/source/isaaclab_newton/changelog.d/max-vbd-tablecloth-demos.minor.rst new file mode 100644 index 000000000000..28149387b4d3 --- /dev/null +++ b/source/isaaclab_newton/changelog.d/max-vbd-tablecloth-demos.minor.rst @@ -0,0 +1,10 @@ +Added +^^^^^ + +* Added five-speed and H1 tablecloth demos built with Isaac Lab scene and asset configurations. +* Exposed compliant-ALM, rigid contact history and buffer sizing, rigid joint material settings, and contact matching through the Newton solver and collision configuration classes. + +Fixed +^^^^^ + +* Included active bending constraints when graph-coloring VBD deformable models. diff --git a/source/isaaclab_newton/isaaclab_newton/physics/newton_collision_cfg.py b/source/isaaclab_newton/isaaclab_newton/physics/newton_collision_cfg.py index 36b5e824012f..eca15375a9d5 100644 --- a/source/isaaclab_newton/isaaclab_newton/physics/newton_collision_cfg.py +++ b/source/isaaclab_newton/isaaclab_newton/physics/newton_collision_cfg.py @@ -161,6 +161,15 @@ class NewtonCollisionPipelineCfg: Defaults to ``False`` (same as Newton's default). """ + contact_matching: Literal["disabled", "latest", "sticky"] = "disabled" + """Body-body contact correspondence mode across collision passes. + + ``"disabled"`` rebuilds contacts without correspondence. ``"latest"`` + matches against the preceding collision pass. ``"sticky"`` also retains a + persistent material anchor for frictional resting contact. Any enabled mode + also enables deterministic contact sorting and has additional runtime cost. + """ + requires_grad: bool | None = None """Whether to enable gradient computation for collision. diff --git a/source/isaaclab_newton/isaaclab_newton/physics/vbd_manager.py b/source/isaaclab_newton/isaaclab_newton/physics/vbd_manager.py index e20100d709e7..88a22f33a44f 100644 --- a/source/isaaclab_newton/isaaclab_newton/physics/vbd_manager.py +++ b/source/isaaclab_newton/isaaclab_newton/physics/vbd_manager.py @@ -38,7 +38,7 @@ def initialize(cls, sim_context: SimulationContext) -> None: def start_simulation(cls) -> None: """Start simulation and bind registered deformables to Fabric.""" if cls._builder is not None: - cls._builder.color() + cls._builder.color(include_bending=True) super().start_simulation() try: from isaaclab_contrib.deformable.deformable_object import setup_registered_deformable_fabric_sync @@ -54,7 +54,7 @@ def instantiate_builder_from_stage(cls) -> None: super().instantiate_builder_from_stage() if cls._builder is None: raise RuntimeError("Newton stage import did not create a builder.") - cls._builder.color() + cls._builder.color(include_bending=True) @classmethod def _get_usd_import_ignore_paths(cls) -> list[str]: diff --git a/source/isaaclab_newton/isaaclab_newton/physics/vbd_manager_cfg.py b/source/isaaclab_newton/isaaclab_newton/physics/vbd_manager_cfg.py index 70306c861f35..499b1b8e529c 100644 --- a/source/isaaclab_newton/isaaclab_newton/physics/vbd_manager_cfg.py +++ b/source/isaaclab_newton/isaaclab_newton/physics/vbd_manager_cfg.py @@ -58,12 +58,44 @@ class VBDSolverCfg(NewtonSolverCfg): particle_rest_shape_contact_exclusion_radius: float = 0.0 """Rest-shape separation threshold for filtering contacts [m].""" + rigid_compliant_alm: bool | None = None + """Whether rigid joints and contacts use Newton's compliant ALM formulation. + + ``True`` selects the recommended compliant ALM path. ``False`` explicitly + selects the deprecated legacy AVBD path. ``None`` preserves Newton's current + legacy default and emits its migration warning when VBD integrates rigid bodies. + """ + + rigid_contact_history: bool = False + """Whether body-body contacts retain their numeric warm start between steps. + + This requires ``contact_matching`` to be ``"latest"`` or ``"sticky"`` on + :class:`NewtonCollisionPipelineCfg`. Leave this disabled unless persistent + history is needed because the history buffers must be allocated before CUDA + graph capture. + """ + rigid_contact_k_start: float = 1.0e2 """Initial stiffness seed for rigid-body contacts [N/m].""" + rigid_body_contact_buffer_size: int = 64 + """Per-body capacity of the body-body contact list.""" + rigid_body_particle_contact_buffer_size: int = 256 """Per-body capacity of the particle, edge, and face soft-contact list. Increase this value when Newton reports a per-body particle contact buffer overflow. Only used when :attr:`integrate_with_external_rigid_solver` is ``False``. """ + + rigid_joint_linear_ke: float = 1.0e5 + """Structural linear-joint stiffness [N/m].""" + + rigid_joint_angular_ke: float = 1.0e5 + """Structural angular-joint stiffness [N*m/rad].""" + + rigid_joint_linear_kd: float = 0.0 + """Structural linear-joint damping [N*s/m].""" + + rigid_joint_angular_kd: float = 0.0 + """Structural angular-joint damping [N*m*s/rad].""" diff --git a/source/isaaclab_newton/test/physics/test_vbd_core.py b/source/isaaclab_newton/test/physics/test_vbd_core.py index 4e0db788a4d4..4b8714df0e4a 100644 --- a/source/isaaclab_newton/test/physics/test_vbd_core.py +++ b/source/isaaclab_newton/test/physics/test_vbd_core.py @@ -100,14 +100,14 @@ def test_vbd_excludes_registered_deformable_meshes(monkeypatch, env_paths): class Builder: def __init__(self): self.imports = [] - self.color_calls = 0 + self.color_calls = [] def add_usd(self, stage, *, root_path=None, ignore_paths=(), schema_resolvers=()): self.imports.append((root_path, list(ignore_paths))) return {"path_shape_map": {}} - def color(self): - self.color_calls += 1 + def color(self, *, include_bending): + self.color_calls.append(include_bending) children = [ SimpleNamespace( @@ -179,7 +179,7 @@ def hook(builder, world_idx, position, rotation): else: assert builders[0].imports == [(None, ["/World/terrain", *deformable_paths])] assert hook_calls == [0] - assert builders[0].color_calls == 1 + assert builders[0].color_calls == [True] def test_vbd_colors_prebuilt_builder_before_start(monkeypatch): @@ -189,8 +189,8 @@ def test_vbd_colors_prebuilt_builder_before_start(monkeypatch): events = [] class Builder: - def color(self): - events.append("color") + def color(self, *, include_bending): + events.append(("color", include_bending)) monkeypatch.setattr(physics.NewtonVBDManager, "_builder", Builder()) monkeypatch.setattr(NewtonManager, "start_simulation", classmethod(lambda cls: events.append("start"))) @@ -198,7 +198,7 @@ def color(self): physics.NewtonVBDManager.start_simulation() - assert events == ["color", "start"] + assert events == [("color", True), "start"] @pytest.mark.parametrize("external_rigid_solver", [False, True]) @@ -219,6 +219,60 @@ def test_vbd_solver_force_input_capability(monkeypatch, external_rigid_solver): assert NewtonManager._supports_rigid_body_force_input is not external_rigid_solver +def test_vbd_rigid_solver_cfg_is_forwarded(monkeypatch): + """Public rigid VBD options are forwarded to Newton's solver constructor.""" + physics = importlib.import_module("isaaclab_newton.physics") + vbd_module = importlib.import_module("isaaclab_newton.physics.vbd_manager") + received = {} + + class Solver: + def __init__( + self, + model, + *, + rigid_compliant_alm, + rigid_contact_history, + rigid_body_contact_buffer_size, + rigid_joint_linear_ke, + rigid_joint_angular_ke, + rigid_joint_linear_kd, + rigid_joint_angular_kd, + ): + received.update(locals()) + + monkeypatch.setattr(vbd_module, "SolverVBD", Solver) + cfg = physics.VBDSolverCfg( + rigid_compliant_alm=True, + rigid_contact_history=True, + rigid_body_contact_buffer_size=128, + rigid_joint_linear_ke=2.0e5, + rigid_joint_angular_ke=3.0e5, + rigid_joint_linear_kd=20.0, + rigid_joint_angular_kd=30.0, + ) + + result = physics.NewtonVBDManager._create_solver("model", cfg) + + assert isinstance(result, Solver) + assert received["model"] == "model" + assert received["rigid_compliant_alm"] is True + assert received["rigid_contact_history"] is True + assert received["rigid_body_contact_buffer_size"] == 128 + assert received["rigid_joint_linear_ke"] == 2.0e5 + assert received["rigid_joint_angular_ke"] == 3.0e5 + assert received["rigid_joint_linear_kd"] == 20.0 + assert received["rigid_joint_angular_kd"] == 30.0 + + +def test_vbd_contact_matching_cfg_is_forwarded(): + """Contact matching is available through the public collision config.""" + physics = importlib.import_module("isaaclab_newton.physics") + + pipeline_args = physics.NewtonCollisionPipelineCfg(contact_matching="sticky").to_pipeline_args() + + assert pipeline_args["contact_matching"] == "sticky" + + def test_vbd_rebuilds_particle_bvh_before_physics_step(monkeypatch): """VBD rebuilds its particle BVH before the base physics step.""" physics = importlib.import_module("isaaclab_newton.physics") From 98fa9adcbc900e4e3de209d190444ae16b3bddae Mon Sep 17 00:00:00 2001 From: Maximilian Krause Date: Mon, 14 Sep 2026 10:35:48 +0200 Subject: [PATCH 03/34] Clean up tablecloth changelog fragments --- source/isaaclab/changelog.d/max-newton-tablecloth-demos.skip | 1 - source/isaaclab/changelog.d/video-recorder-bitrate.minor.rst | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) delete mode 100644 source/isaaclab/changelog.d/max-newton-tablecloth-demos.skip diff --git a/source/isaaclab/changelog.d/max-newton-tablecloth-demos.skip b/source/isaaclab/changelog.d/max-newton-tablecloth-demos.skip deleted file mode 100644 index 687a8fdd0586..000000000000 --- a/source/isaaclab/changelog.d/max-newton-tablecloth-demos.skip +++ /dev/null @@ -1 +0,0 @@ -Test-only: registered the Newton tablecloth demos with standalone-script smoke coverage. diff --git a/source/isaaclab/changelog.d/video-recorder-bitrate.minor.rst b/source/isaaclab/changelog.d/video-recorder-bitrate.minor.rst index 5df0fe82abfe..803e1b1203b4 100644 --- a/source/isaaclab/changelog.d/video-recorder-bitrate.minor.rst +++ b/source/isaaclab/changelog.d/video-recorder-bitrate.minor.rst @@ -1,4 +1,4 @@ Added -~~~~~ +^^^^^ * Added ``VideoRecorderCfg.video_bitrate`` to allow recordings to request an explicit encoder bitrate. From 51775469fad51741994ebd95537ced99f53badee Mon Sep 17 00:00:00 2001 From: Maximilian Krause Date: Mon, 14 Sep 2026 10:41:39 +0200 Subject: [PATCH 04/34] Focus PR on tablecloth demos --- docs/source/concepts/solver-tuning/tune_vbd.rst | 2 -- docs/source/features/record_video.rst | 3 --- scripts/demos/newton_tablecloth.py | 2 -- scripts/demos/newton_tablecloth_h1.py | 4 ---- .../changelog.d/max-newton-tablecloth-demos.skip | 1 + .../changelog.d/video-recorder-bitrate.minor.rst | 4 ---- .../isaaclab/isaaclab/envs/utils/video_recorder.py | 8 +------- .../isaaclab/envs/utils/video_recorder_cfg.py | 6 ------ source/isaaclab/test/envs/test_video_recorder.py | 8 +++----- .../changelog.d/max-vbd-tablecloth-demos.minor.rst | 2 +- .../isaaclab_newton/physics/newton_collision_cfg.py | 9 --------- .../isaaclab_newton/physics/vbd_manager_cfg.py | 9 --------- source/isaaclab_newton/test/physics/test_vbd_core.py | 12 ------------ 13 files changed, 6 insertions(+), 64 deletions(-) create mode 100644 source/isaaclab/changelog.d/max-newton-tablecloth-demos.skip delete mode 100644 source/isaaclab/changelog.d/video-recorder-bitrate.minor.rst diff --git a/docs/source/concepts/solver-tuning/tune_vbd.rst b/docs/source/concepts/solver-tuning/tune_vbd.rst index 11c5bf6adc64..e4bee33bea80 100644 --- a/docs/source/concepts/solver-tuning/tune_vbd.rst +++ b/docs/source/concepts/solver-tuning/tune_vbd.rst @@ -208,8 +208,6 @@ Core Solve - Default: ``10``. Number of VBD iterations per substep. Increasing this value improves deformation and contact convergence, especially for stiff materials or rigid gripper contacts, but increases runtime. * - ``rigid_compliant_alm`` - Default: ``None``. Set to ``True`` for Newton's recommended compliant-ALM formulation for rigid joints and body-body contacts. ``False`` explicitly selects the deprecated legacy AVBD path; ``None`` retains that legacy behavior during Newton's migration window. - * - ``rigid_contact_history`` - - Default: ``False``. Retains the numeric body-body contact warm start between steps. Requires ``contact_matching="latest"`` or ``"sticky"`` and buffers allocated before CUDA graph capture, so leave it disabled when the scene is stable without history. * - ``rigid_body_contact_buffer_size`` - Default: ``64``. Per-body capacity for body-body contacts. Increase it if Newton reports a body-contact buffer overflow. * - ``rigid_body_particle_contact_buffer_size`` diff --git a/docs/source/features/record_video.rst b/docs/source/features/record_video.rst index ab8c8d426c8f..4047b4be3692 100644 --- a/docs/source/features/record_video.rst +++ b/docs/source/features/record_video.rst @@ -252,9 +252,6 @@ Clip control * - ``fps`` - ``None`` - Output frame rate; ``None`` resolves from ``env.metadata["render_fps"]`` or ``1 / step_dt`` - * - ``video_bitrate`` - - ``None`` - - Encoder target bitrate such as ``"20M"``; ``None`` uses the encoder default * - ``output_dir`` - ``"videos"`` - Directory for output files (created on demand) diff --git a/scripts/demos/newton_tablecloth.py b/scripts/demos/newton_tablecloth.py index 29ddab2b09b8..1031d341826b 100644 --- a/scripts/demos/newton_tablecloth.py +++ b/scripts/demos/newton_tablecloth.py @@ -68,7 +68,6 @@ VIDEO_STEPS = 240 VIDEO_OUTPUT_DIR = "videos/newton_tablecloth" VIDEO_RESOLUTION = (1920, 1080) -VIDEO_BITRATE = "20M" SETTLE_TIME = 0.5 PULL_DISTANCE = 1.25 PULL_RAMP_TIME = 0.40 @@ -595,7 +594,6 @@ def _create_video_recorder(sim, video_length: int): output_dir=VIDEO_OUTPUT_DIR, output_filename_prefix="newton_tablecloth", fps=FPS, - video_bitrate=VIDEO_BITRATE, video_length=video_length, ), _StandaloneVideoTarget(sim), diff --git a/scripts/demos/newton_tablecloth_h1.py b/scripts/demos/newton_tablecloth_h1.py index 8c22ebdaf6b0..846120cd0aa7 100644 --- a/scripts/demos/newton_tablecloth_h1.py +++ b/scripts/demos/newton_tablecloth_h1.py @@ -83,7 +83,6 @@ VIDEO_STEPS = 312 VIDEO_OUTPUT_DIR = "videos/newton_tablecloth_h1" VIDEO_RESOLUTION = (1920, 1080) -VIDEO_BITRATE = "20M" TABLE_TOP_Z = 1.09 RIGID_GAP = 0.001 TABLEWARE_CLEARANCE = 0.008 @@ -872,7 +871,6 @@ def _create_video_recorder(sim, video_length: int): output_dir=VIDEO_OUTPUT_DIR, output_filename_prefix="newton_tablecloth_h1", fps=FPS, - video_bitrate=VIDEO_BITRATE, video_length=video_length, ), _StandaloneVideoTarget(sim), @@ -906,8 +904,6 @@ def main() -> None: solver_cfg=VBDSolverCfg( iterations=15, rigid_compliant_alm=True, - # History is unnecessary here and prevents CUDA graph capture. - rigid_contact_history=False, rigid_body_contact_buffer_size=512, rigid_body_particle_contact_buffer_size=8192, rigid_joint_linear_ke=1.0e6, diff --git a/source/isaaclab/changelog.d/max-newton-tablecloth-demos.skip b/source/isaaclab/changelog.d/max-newton-tablecloth-demos.skip new file mode 100644 index 000000000000..687a8fdd0586 --- /dev/null +++ b/source/isaaclab/changelog.d/max-newton-tablecloth-demos.skip @@ -0,0 +1 @@ +Test-only: registered the Newton tablecloth demos with standalone-script smoke coverage. diff --git a/source/isaaclab/changelog.d/video-recorder-bitrate.minor.rst b/source/isaaclab/changelog.d/video-recorder-bitrate.minor.rst deleted file mode 100644 index 803e1b1203b4..000000000000 --- a/source/isaaclab/changelog.d/video-recorder-bitrate.minor.rst +++ /dev/null @@ -1,4 +0,0 @@ -Added -^^^^^ - -* Added ``VideoRecorderCfg.video_bitrate`` to allow recordings to request an explicit encoder bitrate. diff --git a/source/isaaclab/isaaclab/envs/utils/video_recorder.py b/source/isaaclab/isaaclab/envs/utils/video_recorder.py index 96ea3816d125..3d99fb2b2303 100644 --- a/source/isaaclab/isaaclab/envs/utils/video_recorder.py +++ b/source/isaaclab/isaaclab/envs/utils/video_recorder.py @@ -350,13 +350,7 @@ def _close_clip(self) -> None: mean_pixel, ) clip = ImageSequenceClip(self._frames, fps=fps) - clip.write_videofile( - path, - codec="libx264", - bitrate=self.cfg.video_bitrate, - audio=False, - logger=None, - ) + clip.write_videofile(path, codec="libx264", audio=False, logger=None) logger.info("[VideoRecorder] Wrote %d frames to %s", len(self._frames), path) self._clip_index += 1 self._maybe_delete_old_clips() diff --git a/source/isaaclab/isaaclab/envs/utils/video_recorder_cfg.py b/source/isaaclab/isaaclab/envs/utils/video_recorder_cfg.py index 8328eba6b51e..3b3c4abd48e4 100644 --- a/source/isaaclab/isaaclab/envs/utils/video_recorder_cfg.py +++ b/source/isaaclab/isaaclab/envs/utils/video_recorder_cfg.py @@ -59,12 +59,6 @@ class VideoRecorderCfg: ``round(1.0 / env.step_dt)``. Set an explicit integer to override. """ - video_bitrate: str | None = None - """Target video bitrate passed to the encoder, such as ``"20M"`` or ``"5000k"``. - - ``None`` (default) uses the encoder's default quality setting. - """ - video_length: int = 200 """Number of env steps captured per clip.""" diff --git a/source/isaaclab/test/envs/test_video_recorder.py b/source/isaaclab/test/envs/test_video_recorder.py index 3dc63dbafd8a..3b0192f4b70d 100644 --- a/source/isaaclab/test/envs/test_video_recorder.py +++ b/source/isaaclab/test/envs/test_video_recorder.py @@ -311,9 +311,9 @@ def test_sensor_source_missing_logs_and_returns_none(caplog): # --------------------------------------------------------------------------- -def test_close_clip_writes_mp4_via_moviepy(tmp_path): +def test_close_clip_writes_mp4_via_moviepy(): frames = [_FRAME.copy(), _FRAME.copy()] - recorder = VideoRecorder(_cfg(output_dir=str(tmp_path), fps=10, video_bitrate="20M"), _make_env()) + recorder = VideoRecorder(_cfg(output_dir="/tmp/test_clips", fps=10), _make_env()) recorder._frames = frames recorder._recording = True @@ -323,9 +323,7 @@ def test_close_clip_writes_mp4_via_moviepy(tmp_path): recorder._close_clip() mock_cls.assert_called_once_with(frames, fps=10) - mock_clip.write_videofile.assert_called_once_with( - str(tmp_path / "clip_0000.mp4"), codec="libx264", bitrate="20M", audio=False, logger=None - ) + mock_clip.write_videofile.assert_called_once() assert not recorder._recording assert recorder._frames == [] diff --git a/source/isaaclab_newton/changelog.d/max-vbd-tablecloth-demos.minor.rst b/source/isaaclab_newton/changelog.d/max-vbd-tablecloth-demos.minor.rst index 28149387b4d3..44c93eee700c 100644 --- a/source/isaaclab_newton/changelog.d/max-vbd-tablecloth-demos.minor.rst +++ b/source/isaaclab_newton/changelog.d/max-vbd-tablecloth-demos.minor.rst @@ -2,7 +2,7 @@ Added ^^^^^ * Added five-speed and H1 tablecloth demos built with Isaac Lab scene and asset configurations. -* Exposed compliant-ALM, rigid contact history and buffer sizing, rigid joint material settings, and contact matching through the Newton solver and collision configuration classes. +* Exposed compliant-ALM, body-contact buffer sizing, and rigid-joint material settings through the Newton VBD solver configuration. Fixed ^^^^^ diff --git a/source/isaaclab_newton/isaaclab_newton/physics/newton_collision_cfg.py b/source/isaaclab_newton/isaaclab_newton/physics/newton_collision_cfg.py index eca15375a9d5..36b5e824012f 100644 --- a/source/isaaclab_newton/isaaclab_newton/physics/newton_collision_cfg.py +++ b/source/isaaclab_newton/isaaclab_newton/physics/newton_collision_cfg.py @@ -161,15 +161,6 @@ class NewtonCollisionPipelineCfg: Defaults to ``False`` (same as Newton's default). """ - contact_matching: Literal["disabled", "latest", "sticky"] = "disabled" - """Body-body contact correspondence mode across collision passes. - - ``"disabled"`` rebuilds contacts without correspondence. ``"latest"`` - matches against the preceding collision pass. ``"sticky"`` also retains a - persistent material anchor for frictional resting contact. Any enabled mode - also enables deterministic contact sorting and has additional runtime cost. - """ - requires_grad: bool | None = None """Whether to enable gradient computation for collision. diff --git a/source/isaaclab_newton/isaaclab_newton/physics/vbd_manager_cfg.py b/source/isaaclab_newton/isaaclab_newton/physics/vbd_manager_cfg.py index 499b1b8e529c..83f4f5f3d738 100644 --- a/source/isaaclab_newton/isaaclab_newton/physics/vbd_manager_cfg.py +++ b/source/isaaclab_newton/isaaclab_newton/physics/vbd_manager_cfg.py @@ -66,15 +66,6 @@ class VBDSolverCfg(NewtonSolverCfg): legacy default and emits its migration warning when VBD integrates rigid bodies. """ - rigid_contact_history: bool = False - """Whether body-body contacts retain their numeric warm start between steps. - - This requires ``contact_matching`` to be ``"latest"`` or ``"sticky"`` on - :class:`NewtonCollisionPipelineCfg`. Leave this disabled unless persistent - history is needed because the history buffers must be allocated before CUDA - graph capture. - """ - rigid_contact_k_start: float = 1.0e2 """Initial stiffness seed for rigid-body contacts [N/m].""" diff --git a/source/isaaclab_newton/test/physics/test_vbd_core.py b/source/isaaclab_newton/test/physics/test_vbd_core.py index 4b8714df0e4a..412b2392dd6c 100644 --- a/source/isaaclab_newton/test/physics/test_vbd_core.py +++ b/source/isaaclab_newton/test/physics/test_vbd_core.py @@ -231,7 +231,6 @@ def __init__( model, *, rigid_compliant_alm, - rigid_contact_history, rigid_body_contact_buffer_size, rigid_joint_linear_ke, rigid_joint_angular_ke, @@ -243,7 +242,6 @@ def __init__( monkeypatch.setattr(vbd_module, "SolverVBD", Solver) cfg = physics.VBDSolverCfg( rigid_compliant_alm=True, - rigid_contact_history=True, rigid_body_contact_buffer_size=128, rigid_joint_linear_ke=2.0e5, rigid_joint_angular_ke=3.0e5, @@ -256,7 +254,6 @@ def __init__( assert isinstance(result, Solver) assert received["model"] == "model" assert received["rigid_compliant_alm"] is True - assert received["rigid_contact_history"] is True assert received["rigid_body_contact_buffer_size"] == 128 assert received["rigid_joint_linear_ke"] == 2.0e5 assert received["rigid_joint_angular_ke"] == 3.0e5 @@ -264,15 +261,6 @@ def __init__( assert received["rigid_joint_angular_kd"] == 30.0 -def test_vbd_contact_matching_cfg_is_forwarded(): - """Contact matching is available through the public collision config.""" - physics = importlib.import_module("isaaclab_newton.physics") - - pipeline_args = physics.NewtonCollisionPipelineCfg(contact_matching="sticky").to_pipeline_args() - - assert pipeline_args["contact_matching"] == "sticky" - - def test_vbd_rebuilds_particle_bvh_before_physics_step(monkeypatch): """VBD rebuilds its particle BVH before the base physics step.""" physics = importlib.import_module("isaaclab_newton.physics") From cad38fccb04418664ca9a257bfeac4b96d2c8cc8 Mon Sep 17 00:00:00 2001 From: Maximilian Krause Date: Mon, 14 Sep 2026 11:19:53 +0200 Subject: [PATCH 05/34] Refactor Newton tablecloth demos --- scripts/demos/_newton_tablecloth_utils.py | 296 ++++++++ scripts/demos/newton_tablecloth.py | 373 ++-------- scripts/demos/newton_tablecloth_h1.py | 787 ++++++++-------------- 3 files changed, 644 insertions(+), 812 deletions(-) create mode 100644 scripts/demos/_newton_tablecloth_utils.py diff --git a/scripts/demos/_newton_tablecloth_utils.py b/scripts/demos/_newton_tablecloth_utils.py new file mode 100644 index 000000000000..a667c36ddf04 --- /dev/null +++ b/scripts/demos/_newton_tablecloth_utils.py @@ -0,0 +1,296 @@ +# Copyright (c) 2022-2026, The Isaac Lab Project Developers (https://github.com/isaac-sim/IsaacLab/blob/main/CONTRIBUTORS.md). +# All rights reserved. +# +# SPDX-License-Identifier: BSD-3-Clause + +"""Shared asset and recording helpers for the Newton tablecloth demos.""" + +from __future__ import annotations + +from collections.abc import Callable +from dataclasses import MISSING +from typing import TYPE_CHECKING + +from isaaclab_newton.sim.schemas import NewtonCollisionCfg +from isaaclab_newton.sim.spawners.materials import NewtonMaterialCfg + +import isaaclab.sim as sim_utils +from isaaclab.assets import RigidObjectCfg +from isaaclab.sim.schemas import UsdPhysicsCollisionCfg, UsdPhysicsRigidBodyCfg +from isaaclab.sim.spawners.materials import UsdPhysicsRigidBodyMaterialCfg +from isaaclab.utils import configclass +from isaaclab.utils.assets import ISAAC_NUCLEUS_DIR + +if TYPE_CHECKING: + from pxr import Usd + + from isaaclab.envs.utils.video_recorder import VideoRecorder + from isaaclab.sim import SimulationContext + +RIGID_GAP = 0.001 + +KITCHEN_ISLAND_USD = ( + f"{ISAAC_NUCLEUS_DIR}/SimReady/Residential/Kitchen/Counters/Island_A01/sm_fixture_island_a01_01.usd" +) +BOWL_USD = f"{ISAAC_NUCLEUS_DIR}/SimReady/Residential/Kitchen/Dishware/Bowl_G01/sm_kitchenware_bowl_g01_01.usd" +WINE_GLASS_USD = ( + f"{ISAAC_NUCLEUS_DIR}/SimReady/Residential/Furnishing/Kitchen/Kitchenware/Dishware/Glass_Wine_A01/" + "sm_dishware_glass_wine_a01_01.usd" +) +FORK_USD = f"{ISAAC_NUCLEUS_DIR}/SimReady/Residential/Kitchen/Utensils/Fork_K01/sm_kitchenware_fork_k01_01.usd" + +# Dimensions measured from the SimReady assets. +KITCHEN_ISLAND_SIZE = (0.631293, 1.240893, 0.900409) +BOWL_LOCAL_Z_MIN = 0.000001783 +BOWL_LOCAL_RADIUS = 0.052765541 +BOWL_LOCAL_HEIGHT = 0.043569469 +WINE_GLASS_LOCAL_Z_MIN = 0.000358 +FORK_LOCAL_Z_MIN = 0.000127 +BOWL_SCALE = 1.35 +FORK_SCALE = 0.85 +FORK_ROTATION = (0.0, 0.0, -0.70710678, 0.70710678) +FORK_CENTER_OF_MASS = (0.0, 0.0092, 0.0089) +FORK_DIAGONAL_INERTIA = (1.86e-4, 6.2e-6, 1.90e-4) +# A base-only collision proxy would otherwise give the tall glass a flat-disk inertia. +WINE_GLASS_CENTER_OF_MASS = (0.0, 0.0, 0.04) +WINE_GLASS_DIAGONAL_INERTIA = (3.0e-3, 3.0e-3, 5.0e-4) + + +def rigid_material( + *, density: float | None, friction: float, contact_stiffness: float, contact_damping: float +) -> list[UsdPhysicsRigidBodyMaterialCfg | NewtonMaterialCfg]: + """Return solver-common friction and Newton compliant-contact material fragments.""" + return [ + UsdPhysicsRigidBodyMaterialCfg( + static_friction=friction, + dynamic_friction=friction, + restitution=0.0, + density=density, + ), + NewtonMaterialCfg(contact_stiffness=contact_stiffness, contact_damping=contact_damping), + ] + + +def collision_properties() -> list[UsdPhysicsCollisionCfg | NewtonCollisionCfg]: + """Return collision properties shared by cloth-contacting rigid shapes.""" + return [ + UsdPhysicsCollisionCfg(collision_enabled=True), + NewtonCollisionCfg(contact_margin=0.002, contact_gap=RIGID_GAP), + ] + + +def tabletop_collider_cfg( + size: tuple[float, float, float], *, friction: float, contact_stiffness: float, contact_damping: float +) -> sim_utils.CuboidCfg: + """Create a low-cost collision proxy for a visual-only table.""" + return sim_utils.CuboidCfg( + size=size, + visible=False, + collision_props=collision_properties(), + physics_material=rigid_material( + density=None, + friction=friction, + contact_stiffness=contact_stiffness, + contact_damping=contact_damping, + ), + ) + + +def spawn_visual_table_from_usd( + prim_path: str, + cfg: VisualTableUsdFileCfg, + translation: tuple[float, float, float] | None = None, + orientation: tuple[float, float, float, float] | None = None, + **kwargs: object, +) -> Usd.Prim: + """Spawn a visual-only island and remove material inputs unsupported by Newton GL.""" + prim = sim_utils.spawn_from_usd(prim_path, cfg, translation, orientation, **kwargs) + from pxr import UsdShade # noqa: PLC0415 + + for root in sim_utils.find_matching_prims(prim_path): + for child in sim_utils.get_all_matching_child_prims(root.GetPath()): + physics_binding = child.GetRelationship("material:binding:physics") + if physics_binding: + physics_binding.SetTargets([]) + if child.IsA(UsdShade.Shader): + shader = UsdShade.Shader(child) + if shader.GetIdAttr().Get() == "UsdPreviewSurface": + for input_name in ("metallic", "roughness"): + shader.GetInput(input_name).DisconnectSource() + return prim + + +@configclass +class VisualTableUsdFileCfg(sim_utils.UsdFileCfg): + """USD spawner config for a visual-only SimReady kitchen island.""" + + func: Callable | str = spawn_visual_table_from_usd + + +def spawn_tableware_from_usd( + prim_path: str, + cfg: TablewareUsdFileCfg, + translation: tuple[float, float, float] | None = None, + orientation: tuple[float, float, float, float] | None = None, + **kwargs: object, +) -> Usd.Prim: + """Spawn a tableware visual with measured mass and analytic collision proxies.""" + prim = sim_utils.spawn_from_usd(prim_path, cfg, translation, orientation, **kwargs) + from pxr import Gf, UsdPhysics, UsdShade # noqa: PLC0415 + + for root in sim_utils.find_matching_prims(prim_path): + root_path = root.GetPath().pathString + for child in sim_utils.get_all_matching_child_prims(root_path): + physics_binding = child.GetRelationship("material:binding:physics") + if physics_binding: + physics_binding.SetTargets([]) + if child.IsA(UsdShade.Shader): + shader = UsdShade.Shader(child) + shader_id = shader.GetIdAttr().Get() + if shader_id == "UsdPreviewSurface": + for input_name in ("metallic", "roughness"): + shader.GetInput(input_name).DisconnectSource() + if cfg.visual_color is not None: + shader.GetInput("diffuseColor").Set(Gf.Vec3f(*cfg.visual_color)) + if cfg.visual_opacity is not None: + shader.GetInput("opacity").Set(cfg.visual_opacity) + if cfg.visual_roughness is not None: + shader.GetInput("roughness").Set(cfg.visual_roughness) + elif shader_id == "mdl:OmniGlass": + if cfg.visual_color is not None: + shader.GetInput("glass_color").Set(Gf.Vec3f(*cfg.visual_color)) + if cfg.visual_opacity is not None: + shader.GetInput("cutout_opacity").Set(cfg.visual_opacity) + if cfg.visual_roughness is not None: + shader.GetInput("frosting_roughness").Set(cfg.visual_roughness) + + mesh_colliders = sim_utils.get_all_matching_child_prims( + root_path, + predicate=lambda child: child.HasAPI(UsdPhysics.CollisionAPI), + ) + if len(mesh_colliders) != 1: + raise RuntimeError(f"Expected one SimReady tableware mesh collider, found {len(mesh_colliders)}") + UsdPhysics.CollisionAPI(mesh_colliders[0]).CreateCollisionEnabledAttr(False) + + bodies = sim_utils.get_all_matching_child_prims( + root_path, + predicate=lambda child: child.HasAPI(UsdPhysics.RigidBodyAPI), + ) + if len(bodies) != 1: + raise RuntimeError(f"Expected one SimReady tableware rigid body, found {len(bodies)}") + body = bodies[0] + mass_api = UsdPhysics.MassAPI.Apply(body) + mass_api.CreateMassAttr(cfg.mass) + mass_api.CreateDensityAttr(0.0) + if cfg.center_of_mass is not None: + mass_api.CreateCenterOfMassAttr(cfg.center_of_mass) + if cfg.diagonal_inertia is not None: + mass_api.CreateDiagonalInertiaAttr(cfg.diagonal_inertia) + mass_api.CreatePrincipalAxesAttr(Gf.Quatf(1.0, Gf.Vec3f(0.0))) + + proxy_cfgs = (cfg.collision_proxy_cfg, *cfg.additional_collision_proxy_cfgs) + proxy_positions = (cfg.collision_proxy_position, *cfg.additional_collision_proxy_positions) + for index, (proxy_cfg, proxy_position) in enumerate(zip(proxy_cfgs, proxy_positions, strict=True)): + suffix = "" if index == 0 else str(index) + proxy_cfg.func( + f"{body.GetPath()}/CollisionProxy{suffix}", + proxy_cfg, + translation=proxy_position, + orientation=(0.0, 0.0, 0.0, 1.0), + ) + return prim + + +@configclass +class TablewareUsdFileCfg(sim_utils.UsdFileCfg): + """USD spawner config for SimReady visuals with analytic collision proxies.""" + + func: Callable | str = spawn_tableware_from_usd + mass: float = MISSING + collision_proxy_cfg: sim_utils.ShapeCfg = MISSING + collision_proxy_position: tuple[float, float, float] = MISSING + additional_collision_proxy_cfgs: tuple[sim_utils.ShapeCfg, ...] = () + additional_collision_proxy_positions: tuple[tuple[float, float, float], ...] = () + center_of_mass: tuple[float, float, float] | None = None + diagonal_inertia: tuple[float, float, float] | None = None + visual_color: tuple[float, float, float] | None = None + visual_opacity: float | None = None + visual_roughness: float | None = None + + +def rigid_object_cfg( + *, + usd_path: str, + position: tuple[float, float, float], + mass: float, + collision_proxy_cfg: sim_utils.ShapeCfg, + collision_proxy_position: tuple[float, float, float], + orientation: tuple[float, float, float, float] = (0.0, 0.0, 0.0, 1.0), + scale: tuple[float, float, float] | None = None, + center_of_mass: tuple[float, float, float] | None = None, + diagonal_inertia: tuple[float, float, float] | None = None, + additional_collision_proxy_cfgs: tuple[sim_utils.ShapeCfg, ...] = (), + additional_collision_proxy_positions: tuple[tuple[float, float, float], ...] = (), + visual_color: tuple[float, float, float] | None = None, + visual_opacity: float | None = None, + visual_roughness: float | None = None, +) -> RigidObjectCfg: + """Create a dynamic SimReady tableware object with analytic collision.""" + return RigidObjectCfg( + prim_path="", + spawn=TablewareUsdFileCfg( + usd_path=usd_path, + scale=scale, + make_uninstanceable=True, + rigid_props=[UsdPhysicsRigidBodyCfg(rigid_body_enabled=True, kinematic_enabled=False)], + mass=mass, + collision_proxy_cfg=collision_proxy_cfg, + collision_proxy_position=collision_proxy_position, + additional_collision_proxy_cfgs=additional_collision_proxy_cfgs, + additional_collision_proxy_positions=additional_collision_proxy_positions, + center_of_mass=center_of_mass, + diagonal_inertia=diagonal_inertia, + visual_color=visual_color, + visual_opacity=visual_opacity, + visual_roughness=visual_roughness, + ), + init_state=RigidObjectCfg.InitialStateCfg(pos=position, rot=orientation), + ) + + +class _StandaloneVideoTarget: + """Expose the simulation fields expected by Isaac Lab's step-driven recorder.""" + + def __init__(self, sim: SimulationContext, fps: int): + self.sim = sim + self.step_dt = sim.get_physics_dt() + self.metadata = {"render_fps": fps} + + +def create_video_recorder( + sim: SimulationContext, + *, + enabled: bool, + output_dir: str, + filename_prefix: str, + video_length: int, + fps: int, +) -> VideoRecorder | None: + """Create a step-driven viewport recorder when requested.""" + if not enabled: + return None + + from isaaclab.envs.utils.video_recorder import VideoRecorder # noqa: PLC0415 + from isaaclab.envs.utils.video_recorder_cfg import VideoRecorderCfg # noqa: PLC0415 + + print(f"[INFO]: Recording {video_length / fps:.1f} s to {output_dir}/", flush=True) + return VideoRecorder( + VideoRecorderCfg( + source="visualizer", + output_dir=output_dir, + output_filename_prefix=filename_prefix, + fps=fps, + video_length=video_length, + ), + _StandaloneVideoTarget(sim, fps), + ) diff --git a/scripts/demos/newton_tablecloth.py b/scripts/demos/newton_tablecloth.py index 1031d341826b..5f6122a7b9d2 100644 --- a/scripts/demos/newton_tablecloth.py +++ b/scripts/demos/newton_tablecloth.py @@ -24,9 +24,9 @@ --device cuda:0 --visualizer kit --video """ +from __future__ import annotations + import argparse -from collections.abc import Callable -from dataclasses import MISSING from isaaclab.app import add_launcher_args, launch_simulation @@ -38,6 +38,31 @@ args_cli = parser.parse_args() import warp as wp +from _newton_tablecloth_utils import ( + BOWL_LOCAL_HEIGHT, + BOWL_LOCAL_RADIUS, + BOWL_LOCAL_Z_MIN, + BOWL_SCALE, + BOWL_USD, + FORK_CENTER_OF_MASS, + FORK_DIAGONAL_INERTIA, + FORK_LOCAL_Z_MIN, + FORK_ROTATION, + FORK_SCALE, + FORK_USD, + KITCHEN_ISLAND_SIZE, + KITCHEN_ISLAND_USD, + WINE_GLASS_CENTER_OF_MASS, + WINE_GLASS_DIAGONAL_INERTIA, + WINE_GLASS_LOCAL_Z_MIN, + WINE_GLASS_USD, + VisualTableUsdFileCfg, + collision_properties, + create_video_recorder, + rigid_material, + rigid_object_cfg, + tabletop_collider_cfg, +) from isaaclab_newton.physics import ( NewtonCfg, NewtonCollisionPipelineCfg, @@ -45,8 +70,8 @@ NewtonSoftContactCfg, VBDSolverCfg, ) -from isaaclab_newton.sim.schemas import NewtonCollisionCfg, NewtonDeformableBodyPropertiesCfg -from isaaclab_newton.sim.spawners.materials import NewtonMaterialCfg, NewtonSurfaceDeformableBodyMaterialCfg +from isaaclab_newton.sim.schemas import NewtonDeformableBodyPropertiesCfg +from isaaclab_newton.sim.spawners.materials import NewtonSurfaceDeformableBodyMaterialCfg import isaaclab.sim as sim_utils from isaaclab.assets import ( @@ -58,10 +83,7 @@ ) from isaaclab.physics import PhysicsEvent from isaaclab.scene import InteractiveSceneCfg -from isaaclab.sim.schemas import UsdPhysicsCollisionCfg, UsdPhysicsRigidBodyCfg -from isaaclab.sim.spawners.materials import UsdPhysicsRigidBodyMaterialCfg from isaaclab.utils import configclass -from isaaclab.utils.assets import ISAAC_NUCLEUS_DIR FPS = 60 SUBSTEPS = 25 @@ -86,234 +108,8 @@ TABLEWARE_CLEARANCE = 0.008 LANE_SPACING = 0.95 -KITCHEN_ISLAND_USD = ( - f"{ISAAC_NUCLEUS_DIR}/SimReady/Residential/Kitchen/Counters/Island_A01/sm_fixture_island_a01_01.usd" -) -BOWL_USD = f"{ISAAC_NUCLEUS_DIR}/SimReady/Residential/Kitchen/Dishware/Bowl_G01/sm_kitchenware_bowl_g01_01.usd" -WINE_GLASS_USD = ( - f"{ISAAC_NUCLEUS_DIR}/SimReady/Residential/Furnishing/Kitchen/Kitchenware/Dishware/Glass_Wine_A01/" - "sm_dishware_glass_wine_a01_01.usd" -) -FORK_USD = f"{ISAAC_NUCLEUS_DIR}/SimReady/Residential/Kitchen/Utensils/Fork_K01/sm_kitchenware_fork_k01_01.usd" - -KITCHEN_ISLAND_HEIGHT = 0.900409 -KITCHEN_ISLAND_SCALE = (TABLE_TOP_Z / KITCHEN_ISLAND_HEIGHT,) * 3 -KITCHEN_ISLAND_ROTATION = (0.0, 0.0, -0.70710678, 0.70710678) -BOWL_LOCAL_Z_MIN = 0.000001783 -BOWL_LOCAL_RADIUS = 0.052765541 -BOWL_LOCAL_HEIGHT = 0.043569469 -WINE_GLASS_LOCAL_Z_MIN = 0.000358 -FORK_LOCAL_Z_MIN = 0.000127 -BOWL_SCALE = 1.35 -FORK_SCALE = 0.85 -FORK_ROTATION = KITCHEN_ISLAND_ROTATION -FORK_CENTER_OF_MASS = (0.0, 0.0092, 0.0089) -FORK_DIAGONAL_INERTIA = (1.86e-4, 6.2e-6, 1.90e-4) -# A base-only collision proxy would otherwise give the tall glass a flat-disk inertia. -WINE_GLASS_CENTER_OF_MASS = (0.0, 0.0, 0.04) -WINE_GLASS_DIAGONAL_INERTIA = (3.0e-3, 3.0e-3, 5.0e-4) - - -def _rigid_material( - *, density: float | None, friction: float, contact_stiffness: float, contact_damping: float -) -> list[UsdPhysicsRigidBodyMaterialCfg | NewtonMaterialCfg]: - """Return solver-common friction and Newton compliant-contact material fragments.""" - return [ - UsdPhysicsRigidBodyMaterialCfg( - static_friction=friction, - dynamic_friction=friction, - restitution=0.0, - density=density, - ), - NewtonMaterialCfg(contact_stiffness=contact_stiffness, contact_damping=contact_damping), - ] - - -def _collision_properties() -> list[UsdPhysicsCollisionCfg | NewtonCollisionCfg]: - """Return collision properties shared by cloth-contacting rigid shapes.""" - return [ - UsdPhysicsCollisionCfg(collision_enabled=True), - NewtonCollisionCfg(contact_margin=0.002, contact_gap=0.001), - ] - - -def _tabletop_collider_cfg(size: tuple[float, float, float]) -> sim_utils.CuboidCfg: - """Create the low-cost collision proxy underneath the kitchen-island visual.""" - return sim_utils.CuboidCfg( - size=size, - visible=False, - collision_props=_collision_properties(), - physics_material=_rigid_material( - density=None, - friction=1.00, - contact_stiffness=1.0e5, - contact_damping=1.0e2, - ), - ) - - -def _spawn_visual_table_from_usd( - prim_path: str, - cfg: sim_utils.UsdFileCfg, - translation: tuple[float, float, float] | None = None, - orientation: tuple[float, float, float, float] | None = None, - **kwargs, -): - """Spawn a visual-only island and remove material inputs unsupported by Newton GL.""" - prim = sim_utils.spawn_from_usd(prim_path, cfg, translation, orientation, **kwargs) - from pxr import UsdShade # noqa: PLC0415 - - for root in sim_utils.find_matching_prims(prim_path): - for child in sim_utils.get_all_matching_child_prims(root.GetPath()): - physics_binding = child.GetRelationship("material:binding:physics") - if physics_binding: - physics_binding.SetTargets([]) - if child.IsA(UsdShade.Shader): - shader = UsdShade.Shader(child) - if shader.GetIdAttr().Get() == "UsdPreviewSurface": - for input_name in ("metallic", "roughness"): - shader.GetInput(input_name).DisconnectSource() - return prim - - -@configclass -class _VisualTableUsdFileCfg(sim_utils.UsdFileCfg): - """USD spawner config for a visual-only SimReady kitchen island.""" - - func: Callable | str = _spawn_visual_table_from_usd - - -def _spawn_tableware_from_usd( - prim_path: str, - cfg: sim_utils.UsdFileCfg, - translation: tuple[float, float, float] | None = None, - orientation: tuple[float, float, float, float] | None = None, - **kwargs, -): - """Spawn one tableware USD and prepare its authored collider for Newton VBD.""" - prim = sim_utils.spawn_from_usd(prim_path, cfg, translation, orientation, **kwargs) - from pxr import Gf, UsdPhysics, UsdShade # noqa: PLC0415 - - for root in sim_utils.find_matching_prims(prim_path): - root_path = root.GetPath().pathString - for child in sim_utils.get_all_matching_child_prims(root_path): - physics_binding = child.GetRelationship("material:binding:physics") - if physics_binding: - physics_binding.SetTargets([]) - if child.IsA(UsdShade.Shader): - shader = UsdShade.Shader(child) - shader_id = shader.GetIdAttr().Get() - if shader_id == "UsdPreviewSurface": - for input_name in ("metallic", "roughness"): - shader.GetInput(input_name).DisconnectSource() - if cfg.visual_color is not None: - shader.GetInput("diffuseColor").Set(Gf.Vec3f(*cfg.visual_color)) - if cfg.visual_opacity is not None: - shader.GetInput("opacity").Set(cfg.visual_opacity) - if cfg.visual_roughness is not None: - shader.GetInput("roughness").Set(cfg.visual_roughness) - elif shader_id == "mdl:OmniGlass": - if cfg.visual_color is not None: - shader.GetInput("glass_color").Set(Gf.Vec3f(*cfg.visual_color)) - if cfg.visual_opacity is not None: - shader.GetInput("cutout_opacity").Set(cfg.visual_opacity) - if cfg.visual_roughness is not None: - shader.GetInput("frosting_roughness").Set(cfg.visual_roughness) - mesh_colliders = sim_utils.get_all_matching_child_prims( - root_path, - predicate=lambda prim: prim.HasAPI(UsdPhysics.CollisionAPI), - ) - if len(mesh_colliders) != 1: - raise RuntimeError(f"Expected one SimReady tableware mesh collider, found {len(mesh_colliders)}") - UsdPhysics.CollisionAPI(mesh_colliders[0]).CreateCollisionEnabledAttr(False) - - bodies = sim_utils.get_all_matching_child_prims( - root_path, - predicate=lambda prim: prim.HasAPI(UsdPhysics.RigidBodyAPI), - ) - if len(bodies) != 1: - raise RuntimeError(f"Expected one SimReady tableware rigid body, found {len(bodies)}") - body = bodies[0] - mass_api = UsdPhysics.MassAPI.Apply(body) - mass_api.CreateMassAttr(cfg.mass) - mass_api.CreateDensityAttr(0.0) - if cfg.center_of_mass is not None: - mass_api.CreateCenterOfMassAttr(cfg.center_of_mass) - if cfg.diagonal_inertia is not None: - mass_api.CreateDiagonalInertiaAttr(cfg.diagonal_inertia) - mass_api.CreatePrincipalAxesAttr(Gf.Quatf(1.0, Gf.Vec3f(0.0))) - cfg.collision_proxy_cfg.func( - f"{body.GetPath()}/CollisionProxy", - cfg.collision_proxy_cfg, - translation=cfg.collision_proxy_position, - orientation=(0.0, 0.0, 0.0, 1.0), - ) - for index, (proxy_cfg, proxy_position) in enumerate( - zip(cfg.additional_collision_proxy_cfgs, cfg.additional_collision_proxy_positions, strict=True), start=1 - ): - proxy_cfg.func( - f"{body.GetPath()}/CollisionProxy{index}", - proxy_cfg, - translation=proxy_position, - orientation=(0.0, 0.0, 0.0, 1.0), - ) - return prim - - -@configclass -class _TablewareUsdFileCfg(sim_utils.UsdFileCfg): - """USD spawner config for SimReady visuals with an analytic collision proxy.""" - - func: Callable | str = _spawn_tableware_from_usd - mass: float = MISSING - collision_proxy_cfg: sim_utils.ShapeCfg = MISSING - collision_proxy_position: tuple[float, float, float] = MISSING - additional_collision_proxy_cfgs: tuple[sim_utils.ShapeCfg, ...] = () - additional_collision_proxy_positions: tuple[tuple[float, float, float], ...] = () - center_of_mass: tuple[float, float, float] | None = None - diagonal_inertia: tuple[float, float, float] | None = None - visual_color: tuple[float, float, float] | None = None - visual_opacity: float | None = None - visual_roughness: float | None = None - - -def _rigid_object_cfg( - usd_path: str, - position: tuple[float, float, float], - mass: float, - collision_proxy_cfg: sim_utils.ShapeCfg, - collision_proxy_position: tuple[float, float, float], - orientation: tuple[float, float, float, float] = (0.0, 0.0, 0.0, 1.0), - scale: tuple[float, float, float] | None = None, - center_of_mass: tuple[float, float, float] | None = None, - diagonal_inertia: tuple[float, float, float] | None = None, - additional_collision_proxy_cfgs: tuple[sim_utils.ShapeCfg, ...] = (), - additional_collision_proxy_positions: tuple[tuple[float, float, float], ...] = (), - visual_color: tuple[float, float, float] | None = None, - visual_opacity: float | None = None, - visual_roughness: float | None = None, -) -> RigidObjectCfg: - """Create one dynamic SimReady tableware object with demo-tuned physical properties.""" - return RigidObjectCfg( - prim_path="", - spawn=_TablewareUsdFileCfg( - usd_path=usd_path, - scale=scale, - make_uninstanceable=True, - rigid_props=[UsdPhysicsRigidBodyCfg(rigid_body_enabled=True, kinematic_enabled=False)], - mass=mass, - collision_proxy_cfg=collision_proxy_cfg, - collision_proxy_position=collision_proxy_position, - additional_collision_proxy_cfgs=additional_collision_proxy_cfgs, - additional_collision_proxy_positions=additional_collision_proxy_positions, - center_of_mass=center_of_mass, - diagonal_inertia=diagonal_inertia, - visual_color=visual_color, - visual_opacity=visual_opacity, - visual_roughness=visual_roughness, - ), - init_state=RigidObjectCfg.InitialStateCfg(pos=position, rot=orientation), - ) +KITCHEN_ISLAND_SCALE = (TABLE_TOP_Z / KITCHEN_ISLAND_SIZE[2],) * 3 +KITCHEN_ISLAND_ROTATION = FORK_ROTATION @configclass @@ -340,7 +136,7 @@ def __post_init__(self) -> None: f"table_{lane}", AssetBaseCfg( prim_path=f"{lane_path}/Table", - spawn=_VisualTableUsdFileCfg( + spawn=VisualTableUsdFileCfg( usd_path=KITCHEN_ISLAND_USD, scale=KITCHEN_ISLAND_SCALE, variants={"Physics": "none"}, @@ -356,8 +152,11 @@ def __post_init__(self) -> None: f"tabletop_collider_{lane}", AssetBaseCfg( prim_path=f"{lane_path}/TabletopCollider", - spawn=_tabletop_collider_cfg( - (2.0 * TABLE_HALF_WIDTH, 2.0 * TABLE_HALF_DEPTH, 2.0 * TABLETOP_HALF_HEIGHT) + spawn=tabletop_collider_cfg( + (2.0 * TABLE_HALF_WIDTH, 2.0 * TABLE_HALF_DEPTH, 2.0 * TABLETOP_HALF_HEIGHT), + friction=1.00, + contact_stiffness=1.0e5, + contact_damping=1.0e2, ), init_state=AssetBaseCfg.InitialStateCfg(pos=(0.0, lane_y, TABLE_TOP_Z - TABLETOP_HALF_HEIGHT)), ), @@ -387,42 +186,42 @@ def __post_init__(self) -> None: ), ) - tableware[f"bowl_{lane}"] = _rigid_object_cfg( - BOWL_USD, - (-0.22, lane_y - 0.08, cloth_z + TABLEWARE_CLEARANCE - BOWL_SCALE * BOWL_LOCAL_Z_MIN), - 0.45, - sim_utils.CylinderCfg( + tableware[f"bowl_{lane}"] = rigid_object_cfg( + usd_path=BOWL_USD, + position=(-0.22, lane_y - 0.08, cloth_z + TABLEWARE_CLEARANCE - BOWL_SCALE * BOWL_LOCAL_Z_MIN), + mass=0.45, + collision_proxy_cfg=sim_utils.CylinderCfg( radius=BOWL_LOCAL_RADIUS, height=BOWL_LOCAL_HEIGHT, visible=False, - collision_props=_collision_properties(), - physics_material=_rigid_material( + collision_props=collision_properties(), + physics_material=rigid_material( density=None, friction=0.70, contact_stiffness=1.0e3, contact_damping=1.0e1, ), ), - (0.0, 0.0, BOWL_LOCAL_Z_MIN + 0.5 * BOWL_LOCAL_HEIGHT), + collision_proxy_position=(0.0, 0.0, BOWL_LOCAL_Z_MIN + 0.5 * BOWL_LOCAL_HEIGHT), scale=(BOWL_SCALE,) * 3, ).replace(prim_path=f"{lane_path}/Bowl") - tableware[f"glass_{lane}"] = _rigid_object_cfg( - WINE_GLASS_USD, - (0.02, lane_y + 0.12, cloth_z + TABLEWARE_CLEARANCE - WINE_GLASS_LOCAL_Z_MIN), - 0.35, - sim_utils.CylinderCfg( + tableware[f"glass_{lane}"] = rigid_object_cfg( + usd_path=WINE_GLASS_USD, + position=(0.02, lane_y + 0.12, cloth_z + TABLEWARE_CLEARANCE - WINE_GLASS_LOCAL_Z_MIN), + mass=0.35, + collision_proxy_cfg=sim_utils.CylinderCfg( radius=0.035, height=0.006, visible=False, - collision_props=_collision_properties(), - physics_material=_rigid_material( + collision_props=collision_properties(), + physics_material=rigid_material( density=None, friction=0.70, contact_stiffness=1.0e3, contact_damping=1.0e1, ), ), - (0.0, 0.0, 0.003), + collision_proxy_position=(0.0, 0.0, 0.003), center_of_mass=WINE_GLASS_CENTER_OF_MASS, diagonal_inertia=WINE_GLASS_DIAGONAL_INERTIA, # Approximate the 22.7 cm visual with cheap base, stem, and cup shapes. @@ -431,8 +230,8 @@ def __post_init__(self) -> None: radius=0.004, height=0.096, visible=False, - collision_props=_collision_properties(), - physics_material=_rigid_material( + collision_props=collision_properties(), + physics_material=rigid_material( density=None, friction=0.70, contact_stiffness=1.0e3, @@ -443,8 +242,8 @@ def __post_init__(self) -> None: radius=0.041, height=0.045, visible=False, - collision_props=_collision_properties(), - physics_material=_rigid_material( + collision_props=collision_properties(), + physics_material=rigid_material( density=None, friction=0.70, contact_stiffness=1.0e3, @@ -457,23 +256,23 @@ def __post_init__(self) -> None: visual_opacity=0.90, visual_roughness=0.12, ).replace(prim_path=f"{lane_path}/Glass") - tableware[f"fork_{lane}"] = _rigid_object_cfg( - FORK_USD, - (0.10, lane_y - 0.11, cloth_z + TABLEWARE_CLEARANCE - FORK_SCALE * FORK_LOCAL_Z_MIN), - 0.07, - sim_utils.CuboidCfg( + tableware[f"fork_{lane}"] = rigid_object_cfg( + usd_path=FORK_USD, + position=(0.10, lane_y - 0.11, cloth_z + TABLEWARE_CLEARANCE - FORK_SCALE * FORK_LOCAL_Z_MIN), + mass=0.07, + collision_proxy_cfg=sim_utils.CuboidCfg( size=(0.014, 0.160, 0.003), visible=False, - collision_props=_collision_properties(), - physics_material=_rigid_material( + collision_props=collision_properties(), + physics_material=rigid_material( density=None, friction=0.70, contact_stiffness=1.0e3, contact_damping=1.0e1, ), ), - (0.0, 0.0092, 0.0016), - FORK_ROTATION, + collision_proxy_position=(0.0, 0.0092, 0.0016), + orientation=FORK_ROTATION, scale=(FORK_SCALE,) * 3, center_of_mass=FORK_CENTER_OF_MASS, diagonal_inertia=FORK_DIAGONAL_INERTIA, @@ -569,37 +368,6 @@ def _update(self, _state) -> None: cloth.write_data_to_sim() -class _StandaloneVideoTarget: - """Expose the simulation fields expected by Isaac Lab's step-driven recorder.""" - - metadata = {"render_fps": FPS} - - def __init__(self, sim): - self.sim = sim - self.step_dt = sim.get_physics_dt() - - -def _create_video_recorder(sim, video_length: int): - """Create a 60 FPS viewport recorder when ``--video`` is enabled.""" - if not args_cli.video: - return None - - from isaaclab.envs.utils.video_recorder import VideoRecorder # noqa: PLC0415 - from isaaclab.envs.utils.video_recorder_cfg import VideoRecorderCfg # noqa: PLC0415 - - print(f"[INFO]: Recording {video_length / FPS:.1f} s to {VIDEO_OUTPUT_DIR}/", flush=True) - return VideoRecorder( - VideoRecorderCfg( - source="visualizer", - output_dir=VIDEO_OUTPUT_DIR, - output_filename_prefix="newton_tablecloth", - fps=FPS, - video_length=video_length, - ), - _StandaloneVideoTarget(sim), - ) - - def main() -> None: """Launch the five-speed tablecloth demo.""" if args_cli.video and "none" in (args_cli.visualizer or []): @@ -653,7 +421,14 @@ def main() -> None: sim.reset() sim_dt = sim.get_physics_dt() - video_recorder = _create_video_recorder(sim, max_steps) + video_recorder = create_video_recorder( + sim, + enabled=args_cli.video, + output_dir=VIDEO_OUTPUT_DIR, + filename_prefix="newton_tablecloth", + video_length=max_steps, + fps=FPS, + ) print("[INFO]: Setup complete. Five side-by-side Isaac Lab tablecloth trials are ready.", flush=True) step = 0 diff --git a/scripts/demos/newton_tablecloth_h1.py b/scripts/demos/newton_tablecloth_h1.py index 846120cd0aa7..37afc8aae45f 100644 --- a/scripts/demos/newton_tablecloth_h1.py +++ b/scripts/demos/newton_tablecloth_h1.py @@ -34,8 +34,7 @@ import argparse import os import tempfile -from collections.abc import Callable -from dataclasses import MISSING +from dataclasses import MISSING, dataclass from typing import TYPE_CHECKING from isaaclab.app import add_launcher_args, launch_simulation @@ -50,6 +49,32 @@ import numpy as np import warp as wp +from _newton_tablecloth_utils import ( + BOWL_LOCAL_HEIGHT, + BOWL_LOCAL_RADIUS, + BOWL_LOCAL_Z_MIN, + BOWL_SCALE, + BOWL_USD, + FORK_CENTER_OF_MASS, + FORK_DIAGONAL_INERTIA, + FORK_LOCAL_Z_MIN, + FORK_ROTATION, + FORK_SCALE, + FORK_USD, + KITCHEN_ISLAND_SIZE, + KITCHEN_ISLAND_USD, + RIGID_GAP, + WINE_GLASS_CENTER_OF_MASS, + WINE_GLASS_DIAGONAL_INERTIA, + WINE_GLASS_LOCAL_Z_MIN, + WINE_GLASS_USD, + VisualTableUsdFileCfg, + collision_properties, + create_video_recorder, + rigid_material, + rigid_object_cfg, + tabletop_collider_cfg, +) from isaaclab_newton.physics import ( NewtonCfg, NewtonCollisionPipelineCfg, @@ -57,22 +82,15 @@ NewtonSoftContactCfg, VBDSolverCfg, ) -from isaaclab_newton.sim.schemas import ( - NewtonCollisionCfg, - NewtonDeformableBodyPropertiesCfg, - NewtonSDFCollisionCfg, -) -from isaaclab_newton.sim.spawners.materials import NewtonMaterialCfg, NewtonSurfaceDeformableBodyMaterialCfg +from isaaclab_newton.sim.schemas import NewtonDeformableBodyPropertiesCfg, NewtonSDFCollisionCfg +from isaaclab_newton.sim.spawners.materials import NewtonSurfaceDeformableBodyMaterialCfg import isaaclab.sim as sim_utils from isaaclab.actuators import ImplicitActuatorCfg -from isaaclab.assets import Articulation, ArticulationCfg, AssetBaseCfg, DeformableObjectCfg, RigidObjectCfg +from isaaclab.assets import Articulation, ArticulationCfg, AssetBaseCfg, DeformableObjectCfg from isaaclab.scene import InteractiveSceneCfg from isaaclab.sim.converters import MjcfConverter, MjcfConverterCfg -from isaaclab.sim.schemas import UsdPhysicsCollisionCfg, UsdPhysicsRigidBodyCfg -from isaaclab.sim.spawners.materials import UsdPhysicsRigidBodyMaterialCfg from isaaclab.utils import configclass -from isaaclab.utils.assets import ISAAC_NUCLEUS_DIR if TYPE_CHECKING: from isaaclab_newton.ik import NewtonIKSolver @@ -84,74 +102,73 @@ VIDEO_OUTPUT_DIR = "videos/newton_tablecloth_h1" VIDEO_RESOLUTION = (1920, 1080) TABLE_TOP_Z = 1.09 -RIGID_GAP = 0.001 TABLEWARE_CLEARANCE = 0.008 CLOTH_Z = TABLE_TOP_Z + 0.002 PULL_DISTANCE = 0.40 PULL_RAMP_TIME = wp.constant(0.25) -KITCHEN_ISLAND_USD = ( - f"{ISAAC_NUCLEUS_DIR}/SimReady/Residential/Kitchen/Counters/Island_A01/sm_fixture_island_a01_01.usd" -) -BOWL_USD = f"{ISAAC_NUCLEUS_DIR}/SimReady/Residential/Kitchen/Dishware/Bowl_G01/sm_kitchenware_bowl_g01_01.usd" -WINE_GLASS_USD = ( - f"{ISAAC_NUCLEUS_DIR}/SimReady/Residential/Furnishing/Kitchen/Kitchenware/Dishware/Glass_Wine_A01/" - "sm_dishware_glass_wine_a01_01.usd" -) -FORK_USD = f"{ISAAC_NUCLEUS_DIR}/SimReady/Residential/Kitchen/Utensils/Fork_K01/sm_kitchenware_fork_k01_01.usd" - # Dimensions measured from the SimReady assets. Non-uniform scaling turns the kitchen island into a compact, # H1-height serving table without changing the manipulation geometry used by the state machine. -KITCHEN_ISLAND_SIZE = (0.631293, 1.240893, 0.900409) KITCHEN_ISLAND_SCALE = ( 0.40 / KITCHEN_ISLAND_SIZE[0], 0.72 / KITCHEN_ISLAND_SIZE[1], TABLE_TOP_Z / KITCHEN_ISLAND_SIZE[2], ) -BOWL_LOCAL_Z_MIN = 0.000001783 -BOWL_LOCAL_RADIUS = 0.052765541 -BOWL_LOCAL_HEIGHT = 0.043569469 -WINE_GLASS_LOCAL_Z_MIN = 0.000358 -FORK_LOCAL_Z_MIN = 0.000127 -BOWL_SCALE = 1.35 -FORK_SCALE = 0.85 -FORK_ROTATION = (0.0, 0.0, -0.70710678, 0.70710678) -FORK_CENTER_OF_MASS = (0.0, 0.0092, 0.0089) -FORK_DIAGONAL_INERTIA = (1.86e-4, 6.2e-6, 1.90e-4) -# A base-only collision proxy would otherwise give the tall glass a flat-disk inertia. -WINE_GLASS_CENTER_OF_MASS = (0.0, 0.0, 0.04) -WINE_GLASS_DIAGONAL_INERTIA = (3.0e-3, 3.0e-3, 5.0e-4) - -SETTLE_DURATION = wp.constant(0.50) -APPROACH_DURATION = wp.constant(0.80) -DESCEND_DURATION = wp.constant(0.60) -INSERT_DURATION = wp.constant(0.50) -PRELIFT_DURATION = wp.constant(0.60) -CLOSE_DURATION = wp.constant(0.40) -LIFT_DURATION = wp.constant(0.50) -PINCH_DURATION = wp.constant(0.60) - -STATE_SETTLE = wp.constant(0) -STATE_APPROACH = wp.constant(1) -STATE_DESCEND = wp.constant(2) -STATE_INSERT = wp.constant(3) -STATE_PRELIFT = wp.constant(4) -STATE_CLOSE = wp.constant(5) -STATE_LIFT = wp.constant(6) -STATE_PINCH = wp.constant(7) -STATE_PULL = wp.constant(8) -STATE_HOLD = wp.constant(9) - -GROUP_LEFT_THUMB = wp.constant(0) -GROUP_RIGHT_THUMB = wp.constant(1) -GROUP_LEFT_INDEX = wp.constant(2) -GROUP_RIGHT_INDEX = wp.constant(3) -GROUP_OTHER = wp.constant(4) -LEFT_INDEX_PINCH = wp.constant(0.737080) -RIGHT_INDEX_PINCH = wp.constant(0.713855) + +GROUP_LEFT_THUMB = 0 +GROUP_RIGHT_THUMB = 1 +GROUP_LEFT_INDEX = 2 +GROUP_RIGHT_INDEX = 3 +GROUP_OTHER = 4 + +FINGERS_OPEN = (0.0, 0.0, 0.0, 0.0, 0.0) +FINGERS_CURLED = (0.0, 0.0, 0.0, 0.0, 0.80) +FINGERS_INSERTED = (0.0, 0.0, 0.75, 0.75, 0.80) +FINGERS_PREPINCHED = (0.0, 0.0, 0.737080, 0.713855, 0.80) +FINGERS_PINCHED = (1.0, 1.0, 0.737080, 0.713855, 0.80) + + +@dataclass(frozen=True) +class _MotionPhase: + """One timed interpolation in the grasp sequence.""" + + name: str + duration: float + start_keyframe: int + end_keyframe: int + start_fingers: tuple[float, float, float, float, float] + end_fingers: tuple[float, float, float, float, float] + + +MOTION_PHASES = ( + _MotionPhase("settle", 0.50, 0, 0, FINGERS_OPEN, FINGERS_OPEN), + _MotionPhase("approach", 0.80, 0, 2, FINGERS_OPEN, FINGERS_CURLED), + _MotionPhase("descend", 0.60, 2, 4, FINGERS_CURLED, FINGERS_INSERTED), + _MotionPhase("insert", 0.50, 4, 6, FINGERS_INSERTED, FINGERS_INSERTED), + _MotionPhase("prelift", 0.60, 6, 8, FINGERS_INSERTED, FINGERS_PREPINCHED), + _MotionPhase("close", 0.40, 8, 8, FINGERS_PREPINCHED, FINGERS_PINCHED), + _MotionPhase("lift", 0.50, 8, 10, FINGERS_PINCHED, FINGERS_PINCHED), + _MotionPhase("pinch", 0.60, 10, 10, FINGERS_PINCHED, FINGERS_PINCHED), +) +STATE_PULL = wp.constant(len(MOTION_PHASES)) +STATE_HOLD = wp.constant(len(MOTION_PHASES) + 1) HAND_OFFSETS = ((0.146273, -0.068447, 0.028077), (0.148808, 0.068652, 0.026675)) HAND_ROTATIONS = ((-0.09, 0.46, 0.03, 0.88), (0.09023, 0.46115, -0.03008, 0.88221)) +HAND_KEYFRAMES = ( + (-0.48, 0.24, 1.24), + (-0.48, -0.24, 1.24), + (-0.30, 0.24, 1.16), + (-0.30, -0.24, 1.16), + (-0.30, 0.24, 1.050), + (-0.30, -0.24, 1.052), + (-0.225, 0.24, 1.050), + (-0.225, -0.24, 1.052), + (-0.195, 0.24, 1.110), + (-0.195, -0.24, 1.110), + (-0.195, 0.24, 1.115), + (-0.195, -0.24, 1.115), +) THUMB_CLOSED_VALUES = ( (1.273907, 0.160957, 0.369535, 0.892908), (1.192278, 0.195421, 0.400690, 0.679765), @@ -169,6 +186,11 @@ def _infer_state_machine( dt: float, pull_speed: float, keyframes: wp.array(dtype=wp.vec3), + phase_durations: wp.array(dtype=float), + phase_start_keyframes: wp.array(dtype=wp.int32), + phase_end_keyframes: wp.array(dtype=wp.int32), + phase_start_fingers: wp.array(dtype=float), + phase_end_fingers: wp.array(dtype=float), left_target: wp.array(dtype=wp.vec3), right_target: wp.array(dtype=wp.vec3), finger_fractions: wp.array(dtype=float), @@ -180,93 +202,22 @@ def _infer_state_machine( current_state = state[0] elapsed = state_time[0] + dt - if current_state == STATE_SETTLE and elapsed >= SETTLE_DURATION: - current_state = STATE_APPROACH - elapsed = 0.0 - elif current_state == STATE_APPROACH and elapsed >= APPROACH_DURATION: - current_state = STATE_DESCEND - elapsed = 0.0 - elif current_state == STATE_DESCEND and elapsed >= DESCEND_DURATION: - current_state = STATE_INSERT - elapsed = 0.0 - elif current_state == STATE_INSERT and elapsed >= INSERT_DURATION: - current_state = STATE_PRELIFT - elapsed = 0.0 - elif current_state == STATE_PRELIFT and elapsed >= PRELIFT_DURATION: - current_state = STATE_CLOSE - elapsed = 0.0 - elif current_state == STATE_CLOSE and elapsed >= CLOSE_DURATION: - current_state = STATE_LIFT - elapsed = 0.0 - elif current_state == STATE_LIFT and elapsed >= LIFT_DURATION: - current_state = STATE_PINCH - elapsed = 0.0 - elif current_state == STATE_PINCH and elapsed >= PINCH_DURATION: - current_state = STATE_PULL + if current_state < STATE_PULL and elapsed >= phase_durations[current_state]: + current_state += 1 elapsed = 0.0 left = keyframes[0] right = keyframes[1] - left_thumb = 0.0 - right_thumb = 0.0 - left_index = 0.0 - right_index = 0.0 - other = 0.0 - - if current_state == STATE_SETTLE: - pass - elif current_state == STATE_APPROACH: - u = _smoothstep(elapsed / APPROACH_DURATION) - left = wp.lerp(keyframes[0], keyframes[2], u) - right = wp.lerp(keyframes[1], keyframes[3], u) - other = 0.80 * u - elif current_state == STATE_DESCEND: - u = _smoothstep(elapsed / DESCEND_DURATION) - left = wp.lerp(keyframes[2], keyframes[4], u) - right = wp.lerp(keyframes[3], keyframes[5], u) - left_index = 0.75 * u - right_index = 0.75 * u - other = 0.80 - elif current_state == STATE_INSERT: - u = _smoothstep(elapsed / INSERT_DURATION) - left = wp.lerp(keyframes[4], keyframes[6], u) - right = wp.lerp(keyframes[5], keyframes[7], u) - left_index = 0.75 - right_index = 0.75 - other = 0.80 - elif current_state == STATE_PRELIFT: - u = _smoothstep(elapsed / PRELIFT_DURATION) - left = wp.lerp(keyframes[6], keyframes[8], u) - right = wp.lerp(keyframes[7], keyframes[9], u) - left_index = wp.lerp(0.75, LEFT_INDEX_PINCH, u) - right_index = wp.lerp(0.75, RIGHT_INDEX_PINCH, u) - other = 0.80 - elif current_state == STATE_CLOSE: - left = keyframes[8] - right = keyframes[9] - u = _smoothstep(elapsed / CLOSE_DURATION) - left_thumb = u - right_thumb = u - left_index = LEFT_INDEX_PINCH - right_index = RIGHT_INDEX_PINCH - other = 0.80 - elif current_state == STATE_LIFT: - u = _smoothstep(elapsed / LIFT_DURATION) - left = wp.lerp(keyframes[8], keyframes[10], u) - right = wp.lerp(keyframes[9], keyframes[11], u) - left_thumb = 1.0 - right_thumb = 1.0 - left_index = LEFT_INDEX_PINCH - right_index = RIGHT_INDEX_PINCH - other = 0.80 - elif current_state == STATE_PINCH: - left = keyframes[10] - right = keyframes[11] - left_thumb = 1.0 - right_thumb = 1.0 - left_index = LEFT_INDEX_PINCH - right_index = RIGHT_INDEX_PINCH - other = 0.80 + if current_state < STATE_PULL: + duration = phase_durations[current_state] + u = _smoothstep(elapsed / duration) + start_keyframe = phase_start_keyframes[current_state] + end_keyframe = phase_end_keyframes[current_state] + left = wp.lerp(keyframes[start_keyframe], keyframes[end_keyframe], u) + right = wp.lerp(keyframes[start_keyframe + 1], keyframes[end_keyframe + 1], u) + for group in range(5): + finger_offset = current_state * 5 + group + finger_fractions[group] = wp.lerp(phase_start_fingers[finger_offset], phase_end_fingers[finger_offset], u) elif current_state == STATE_PULL: speed_ramp = _smoothstep(elapsed / PULL_RAMP_TIME) distance = wp.min(pull_distance[0] + speed_ramp * pull_speed * dt, PULL_DISTANCE) @@ -274,35 +225,24 @@ def _infer_state_machine( drop = 0.0 if distance > 0.08: drop = 0.175 * _smoothstep((distance - 0.08) / (PULL_DISTANCE - 0.08)) - offset = wp.vec3(-distance, 0.0, -drop) - left = keyframes[10] + offset - right = keyframes[11] + offset - left_thumb = 1.0 - right_thumb = 1.0 - left_index = LEFT_INDEX_PINCH - right_index = RIGHT_INDEX_PINCH - other = 0.80 + pull_offset = wp.vec3(-distance, 0.0, -drop) + left = keyframes[10] + pull_offset + right = keyframes[11] + pull_offset + for group in range(5): + finger_fractions[group] = phase_end_fingers[(STATE_PULL - 1) * 5 + group] if distance >= PULL_DISTANCE: current_state = STATE_HOLD else: distance = pull_distance[0] drop = 0.175 * _smoothstep((distance - 0.08) / (PULL_DISTANCE - 0.08)) - offset = wp.vec3(-distance, 0.0, -drop) - left = keyframes[10] + offset - right = keyframes[11] + offset - left_thumb = 1.0 - right_thumb = 1.0 - left_index = LEFT_INDEX_PINCH - right_index = RIGHT_INDEX_PINCH - other = 0.80 + pull_offset = wp.vec3(-distance, 0.0, -drop) + left = keyframes[10] + pull_offset + right = keyframes[11] + pull_offset + for group in range(5): + finger_fractions[group] = phase_end_fingers[(STATE_PULL - 1) * 5 + group] left_target[0] = left right_target[0] = right - finger_fractions[0] = left_thumb - finger_fractions[1] = right_thumb - finger_fractions[2] = left_index - finger_fractions[3] = right_index - finger_fractions[4] = other state[0] = current_state state_time[0] = elapsed @@ -347,193 +287,6 @@ def _unit_quat(values: tuple[float, float, float, float]) -> tuple[float, float, return tuple(float(value) for value in values_np) -def _rigid_material( - *, density: float | None, friction: float, contact_stiffness: float, contact_damping: float -) -> list[UsdPhysicsRigidBodyMaterialCfg | NewtonMaterialCfg]: - """Return solver-common friction and Newton compliant-contact material fragments.""" - return [ - UsdPhysicsRigidBodyMaterialCfg( - static_friction=friction, - dynamic_friction=friction, - restitution=0.0, - density=density, - ), - NewtonMaterialCfg(contact_stiffness=contact_stiffness, contact_damping=contact_damping), - ] - - -def _collision_properties() -> list[UsdPhysicsCollisionCfg | NewtonCollisionCfg]: - """Return collision properties shared by cloth-contacting rigid shapes.""" - return [ - UsdPhysicsCollisionCfg(collision_enabled=True), - NewtonCollisionCfg(contact_margin=0.002, contact_gap=RIGID_GAP), - ] - - -def _tabletop_collider_cfg(size: tuple[float, float, float]) -> sim_utils.CuboidCfg: - """Create the low-cost collision proxy underneath the kitchen-island visual.""" - return sim_utils.CuboidCfg( - size=size, - visible=False, - collision_props=_collision_properties(), - physics_material=_rigid_material( - density=None, - friction=0.35, - contact_stiffness=1.0e4, - contact_damping=1.0e1, - ), - ) - - -def _spawn_visual_table_from_usd( - prim_path: str, - cfg: sim_utils.UsdFileCfg, - translation: tuple[float, float, float] | None = None, - orientation: tuple[float, float, float, float] | None = None, - **kwargs, -): - """Spawn a visual-only island and remove material inputs unsupported by Newton GL.""" - prim = sim_utils.spawn_from_usd(prim_path, cfg, translation, orientation, **kwargs) - from pxr import UsdShade # noqa: PLC0415 - - for root in sim_utils.find_matching_prims(prim_path): - for child in sim_utils.get_all_matching_child_prims(root.GetPath()): - physics_binding = child.GetRelationship("material:binding:physics") - if physics_binding: - physics_binding.SetTargets([]) - if child.IsA(UsdShade.Shader): - shader = UsdShade.Shader(child) - if shader.GetIdAttr().Get() == "UsdPreviewSurface": - for input_name in ("metallic", "roughness"): - shader.GetInput(input_name).DisconnectSource() - return prim - - -@configclass -class _VisualTableUsdFileCfg(sim_utils.UsdFileCfg): - """USD spawner config for a visual-only SimReady kitchen island.""" - - func: Callable | str = _spawn_visual_table_from_usd - - -def _spawn_tableware_from_usd( - prim_path: str, - cfg: sim_utils.UsdFileCfg, - translation: tuple[float, float, float] | None = None, - orientation: tuple[float, float, float, float] | None = None, - **kwargs, -): - """Spawn one tableware USD and prepare its authored collider for Newton VBD.""" - prim = sim_utils.spawn_from_usd(prim_path, cfg, translation, orientation, **kwargs) - from pxr import Gf, UsdPhysics, UsdShade # noqa: PLC0415 - - for root in sim_utils.find_matching_prims(prim_path): - root_path = root.GetPath().pathString - for child in sim_utils.get_all_matching_child_prims(root_path): - physics_binding = child.GetRelationship("material:binding:physics") - if physics_binding: - physics_binding.SetTargets([]) - if child.IsA(UsdShade.Shader): - shader = UsdShade.Shader(child) - shader_id = shader.GetIdAttr().Get() - if shader_id == "UsdPreviewSurface": - for input_name in ("metallic", "roughness"): - shader.GetInput(input_name).DisconnectSource() - if cfg.visual_color is not None: - shader.GetInput("diffuseColor").Set(Gf.Vec3f(*cfg.visual_color)) - if cfg.visual_opacity is not None: - shader.GetInput("opacity").Set(cfg.visual_opacity) - if cfg.visual_roughness is not None: - shader.GetInput("roughness").Set(cfg.visual_roughness) - elif shader_id == "mdl:OmniGlass": - if cfg.visual_color is not None: - shader.GetInput("glass_color").Set(Gf.Vec3f(*cfg.visual_color)) - if cfg.visual_opacity is not None: - shader.GetInput("cutout_opacity").Set(cfg.visual_opacity) - if cfg.visual_roughness is not None: - shader.GetInput("frosting_roughness").Set(cfg.visual_roughness) - mesh_colliders = sim_utils.get_all_matching_child_prims( - root_path, - predicate=lambda prim: prim.HasAPI(UsdPhysics.CollisionAPI), - ) - if len(mesh_colliders) != 1: - raise RuntimeError(f"Expected one SimReady tableware mesh collider, found {len(mesh_colliders)}") - UsdPhysics.CollisionAPI(mesh_colliders[0]).CreateCollisionEnabledAttr(False) - - bodies = sim_utils.get_all_matching_child_prims( - root_path, - predicate=lambda prim: prim.HasAPI(UsdPhysics.RigidBodyAPI), - ) - if len(bodies) != 1: - raise RuntimeError(f"Expected one SimReady tableware rigid body, found {len(bodies)}") - body = bodies[0] - mass_api = UsdPhysics.MassAPI.Apply(body) - mass_api.CreateMassAttr(cfg.mass) - mass_api.CreateDensityAttr(0.0) - if cfg.center_of_mass is not None: - mass_api.CreateCenterOfMassAttr(cfg.center_of_mass) - if cfg.diagonal_inertia is not None: - mass_api.CreateDiagonalInertiaAttr(cfg.diagonal_inertia) - mass_api.CreatePrincipalAxesAttr(Gf.Quatf(1.0, Gf.Vec3f(0.0))) - cfg.collision_proxy_cfg.func( - f"{body.GetPath()}/CollisionProxy", - cfg.collision_proxy_cfg, - translation=cfg.collision_proxy_position, - orientation=(0.0, 0.0, 0.0, 1.0), - ) - return prim - - -@configclass -class _TablewareUsdFileCfg(sim_utils.UsdFileCfg): - """USD spawner config for SimReady visuals with one analytic support collider.""" - - func: Callable | str = _spawn_tableware_from_usd - mass: float = MISSING - collision_proxy_cfg: sim_utils.ShapeCfg = MISSING - collision_proxy_position: tuple[float, float, float] = MISSING - center_of_mass: tuple[float, float, float] | None = None - diagonal_inertia: tuple[float, float, float] | None = None - visual_color: tuple[float, float, float] | None = None - visual_opacity: float | None = None - visual_roughness: float | None = None - - -def _rigid_object_cfg( - usd_path: str, - position: tuple[float, float, float], - mass: float, - collision_proxy_cfg: sim_utils.ShapeCfg, - collision_proxy_position: tuple[float, float, float], - orientation: tuple[float, float, float, float] = (0.0, 0.0, 0.0, 1.0), - scale: tuple[float, float, float] | None = None, - center_of_mass: tuple[float, float, float] | None = None, - diagonal_inertia: tuple[float, float, float] | None = None, - visual_color: tuple[float, float, float] | None = None, - visual_opacity: float | None = None, - visual_roughness: float | None = None, -) -> RigidObjectCfg: - """Create one dynamic SimReady tableware object with demo-tuned physical properties.""" - return RigidObjectCfg( - prim_path="", - spawn=_TablewareUsdFileCfg( - usd_path=usd_path, - scale=scale, - make_uninstanceable=True, - rigid_props=[UsdPhysicsRigidBodyCfg(rigid_body_enabled=True, kinematic_enabled=False)], - mass=mass, - collision_proxy_cfg=collision_proxy_cfg, - collision_proxy_position=collision_proxy_position, - center_of_mass=center_of_mass, - diagonal_inertia=diagonal_inertia, - visual_color=visual_color, - visual_opacity=visual_opacity, - visual_roughness=visual_roughness, - ), - init_state=RigidObjectCfg.InitialStateCfg(pos=position, rot=orientation), - ) - - def _convert_h1_asset() -> str: """Convert and cache the downloaded H1-with-hands MJCF through Isaac Lab.""" import newton.utils # noqa: PLC0415 @@ -593,7 +346,7 @@ def _post_spawn(self, stage) -> None: grasp_material_path = f"{root_path}/GraspMaterial" spawn_rigid_body_material_from_fragments( grasp_material_path, - _rigid_material( + rigid_material( density=None, friction=200.0, contact_stiffness=8.0e3, @@ -621,8 +374,8 @@ def _h1_articulation_cfg(usd_path: str) -> ArticulationCfg: usd_path=usd_path, make_uninstanceable=True, fix_root_link=True, - collision_props=_collision_properties(), - physics_material=_rigid_material( + collision_props=collision_properties(), + physics_material=rigid_material( density=None, friction=0.50, contact_stiffness=1.0e3, @@ -664,7 +417,7 @@ class H1TableclothSceneCfg(InteractiveSceneCfg): table = AssetBaseCfg( prim_path="{ENV_REGEX_NS}/Table", - spawn=_VisualTableUsdFileCfg( + spawn=VisualTableUsdFileCfg( usd_path=KITCHEN_ISLAND_USD, scale=KITCHEN_ISLAND_SCALE, variants={"Physics": "none"}, @@ -675,7 +428,12 @@ class H1TableclothSceneCfg(InteractiveSceneCfg): ) tabletop_collider = AssetBaseCfg( prim_path="{ENV_REGEX_NS}/Tabletop", - spawn=_tabletop_collider_cfg((0.40, 0.72, 0.08)), + spawn=tabletop_collider_cfg( + (0.40, 0.72, 0.08), + friction=0.35, + contact_stiffness=1.0e4, + contact_damping=1.0e1, + ), init_state=AssetBaseCfg.InitialStateCfg(pos=(0.0, 0.0, TABLE_TOP_Z - 0.04)), ) @@ -699,65 +457,65 @@ class H1TableclothSceneCfg(InteractiveSceneCfg): init_state=DeformableObjectCfg.InitialStateCfg(pos=(-0.01, 0.0, CLOTH_Z)), ) - bowl = _rigid_object_cfg( - BOWL_USD, - (0.08, -0.07, CLOTH_Z + TABLEWARE_CLEARANCE - BOWL_SCALE * BOWL_LOCAL_Z_MIN), - 0.45, - sim_utils.CylinderCfg( + bowl = rigid_object_cfg( + usd_path=BOWL_USD, + position=(0.08, -0.07, CLOTH_Z + TABLEWARE_CLEARANCE - BOWL_SCALE * BOWL_LOCAL_Z_MIN), + mass=0.45, + collision_proxy_cfg=sim_utils.CylinderCfg( radius=BOWL_LOCAL_RADIUS, height=BOWL_LOCAL_HEIGHT, visible=False, - collision_props=_collision_properties(), - physics_material=_rigid_material( + collision_props=collision_properties(), + physics_material=rigid_material( density=None, friction=0.08, contact_stiffness=1.0e4, contact_damping=1.0e1, ), ), - (0.0, 0.0, BOWL_LOCAL_Z_MIN + 0.5 * BOWL_LOCAL_HEIGHT), + collision_proxy_position=(0.0, 0.0, BOWL_LOCAL_Z_MIN + 0.5 * BOWL_LOCAL_HEIGHT), scale=(BOWL_SCALE,) * 3, ).replace(prim_path="{ENV_REGEX_NS}/Bowl") - glass = _rigid_object_cfg( - WINE_GLASS_USD, - (0.10, 0.13, CLOTH_Z + TABLEWARE_CLEARANCE - WINE_GLASS_LOCAL_Z_MIN), - 0.35, - sim_utils.CylinderCfg( + glass = rigid_object_cfg( + usd_path=WINE_GLASS_USD, + position=(0.10, 0.13, CLOTH_Z + TABLEWARE_CLEARANCE - WINE_GLASS_LOCAL_Z_MIN), + mass=0.35, + collision_proxy_cfg=sim_utils.CylinderCfg( radius=0.040, height=0.006, visible=False, - collision_props=_collision_properties(), - physics_material=_rigid_material( + collision_props=collision_properties(), + physics_material=rigid_material( density=None, friction=0.01, contact_stiffness=1.0e4, contact_damping=1.0e1, ), ), - (0.0, 0.0, 0.003), + collision_proxy_position=(0.0, 0.0, 0.003), center_of_mass=WINE_GLASS_CENTER_OF_MASS, diagonal_inertia=WINE_GLASS_DIAGONAL_INERTIA, visual_color=(0.55, 0.75, 0.90), visual_opacity=0.90, visual_roughness=0.12, ).replace(prim_path="{ENV_REGEX_NS}/Glass") - fork = _rigid_object_cfg( - FORK_USD, - (0.04, -0.22, CLOTH_Z + TABLEWARE_CLEARANCE - FORK_SCALE * FORK_LOCAL_Z_MIN), - 0.07, - sim_utils.CuboidCfg( + fork = rigid_object_cfg( + usd_path=FORK_USD, + position=(0.04, -0.22, CLOTH_Z + TABLEWARE_CLEARANCE - FORK_SCALE * FORK_LOCAL_Z_MIN), + mass=0.07, + collision_proxy_cfg=sim_utils.CuboidCfg( size=(0.014, 0.160, 0.003), visible=False, - collision_props=_collision_properties(), - physics_material=_rigid_material( + collision_props=collision_properties(), + physics_material=rigid_material( density=None, friction=0.50, contact_stiffness=1.0e4, contact_damping=1.0e1, ), ), - (0.0, 0.0092, 0.0016), - FORK_ROTATION, + collision_proxy_position=(0.0, 0.0092, 0.0016), + orientation=FORK_ROTATION, scale=(FORK_SCALE,) * 3, center_of_mass=FORK_CENTER_OF_MASS, diagonal_inertia=FORK_DIAGONAL_INERTIA, @@ -846,35 +604,133 @@ def _make_ik(model: Model, bodies: dict[str, int]) -> NewtonIKSolver: ) -class _StandaloneVideoTarget: - """Expose the simulation fields expected by Isaac Lab's step-driven recorder.""" +class _H1TableclothController: + """Generate GPU-resident H1 joint targets for the tablecloth sequence.""" - metadata = {"render_fps": FPS} + def __init__(self, robot: Articulation, model: Model, sim: sim_utils.SimulationContext, pull_speed: float): + if model.joint_coord_count < robot.num_joints: + raise RuntimeError( + "Newton IK cannot address every H1 joint; " + f"the model has {model.joint_coord_count} coordinates and H1 exposes {robot.num_joints} joints" + ) - def __init__(self, sim): - self.sim = sim - self.step_dt = sim.get_physics_dt() + self._robot = robot + self._sim_dt = sim.get_physics_dt() + self._pull_speed = pull_speed + device = model.device + bodies = { + "torso": _find_suffix(model.body_label, "torso_link"), + "left_hand": _find_suffix(model.body_label, "left_hand_link"), + "right_hand": _find_suffix(model.body_label, "right_hand_link"), + } + self._ik_solver = _make_ik(model, bodies) + self._left_objective = self._ik_solver.objectives_by_name["left_hand"] + self._right_objective = self._ik_solver.objectives_by_name["right_hand"] + torso_objective = self._ik_solver.objectives_by_name["torso"] -def _create_video_recorder(sim, video_length: int): - """Create a 60 FPS viewport recorder when ``--video`` is enabled.""" - if not args_cli.video: - return None + torso_ids, _ = robot.find_bodies("torso_link") + initial_torso_pose = robot.data.body_link_pose_w.torch[0, torso_ids[0]].cpu().numpy() + torso_objective.position_objective.set_target_position(0, wp.vec3(*initial_torso_pose[:3])) + torso_objective.rotation_objective.set_target_rotation(0, wp.quat(*initial_torso_pose[3:])) + self._left_objective.rotation_objective.set_target_rotation(0, wp.quat(*_unit_quat(HAND_ROTATIONS[0]))) + self._right_objective.rotation_objective.set_target_rotation(0, wp.quat(*_unit_quat(HAND_ROTATIONS[1]))) - from isaaclab.envs.utils.video_recorder import VideoRecorder # noqa: PLC0415 - from isaaclab.envs.utils.video_recorder_cfg import VideoRecorderCfg # noqa: PLC0415 + self._keyframes = wp.array(HAND_KEYFRAMES, dtype=wp.vec3, device=device) + self._phase_durations = wp.array([phase.duration for phase in MOTION_PHASES], dtype=float, device=device) + self._phase_start_keyframes = wp.array( + [phase.start_keyframe for phase in MOTION_PHASES], dtype=wp.int32, device=device + ) + self._phase_end_keyframes = wp.array( + [phase.end_keyframe for phase in MOTION_PHASES], dtype=wp.int32, device=device + ) + self._phase_start_fingers = wp.array( + [fraction for phase in MOTION_PHASES for fraction in phase.start_fingers], dtype=float, device=device + ) + self._phase_end_fingers = wp.array( + [fraction for phase in MOTION_PHASES for fraction in phase.end_fingers], dtype=float, device=device + ) + self._state = wp.zeros(1, dtype=wp.int32, device=device) + self._state_time = wp.zeros(1, dtype=float, device=device) + self._pull_distance = wp.zeros(1, dtype=float, device=device) + self._fractions = wp.zeros(5, dtype=float, device=device) - print(f"[INFO]: Recording {video_length / FPS:.1f} s to {VIDEO_OUTPUT_DIR}/", flush=True) - return VideoRecorder( - VideoRecorderCfg( - source="visualizer", - output_dir=VIDEO_OUTPUT_DIR, - output_filename_prefix="newton_tablecloth_h1", - fps=FPS, - video_length=video_length, - ), - _StandaloneVideoTarget(sim), - ) + finger_indices, closed_values, finger_groups = _finger_data(robot) + self._finger_count = len(finger_indices) + self._finger_indices = wp.array(finger_indices, dtype=wp.int32, device=device) + self._closed_values = wp.array(closed_values, dtype=float, device=device) + self._finger_groups = wp.array(finger_groups, dtype=wp.int32, device=device) + + self._ik_seed = wp.clone(model.joint_q).reshape((1, model.joint_coord_count)) + self._target_q = robot.actuators.target_command.position.warp.reshape((-1,)) + self._target_qd = robot.actuators.target_command.velocity.warp.reshape((-1,)) + self._initialize_rest_pose(sim) + + def step(self) -> None: + """Advance the state machine and write its targets to Isaac Lab's command buffers.""" + wp.launch( + _infer_state_machine, + dim=1, + inputs=[ + self._sim_dt, + self._pull_speed, + self._keyframes, + self._phase_durations, + self._phase_start_keyframes, + self._phase_end_keyframes, + self._phase_start_fingers, + self._phase_end_fingers, + self._left_objective.position_objective.target_positions, + self._right_objective.position_objective.target_positions, + self._fractions, + self._state, + self._state_time, + self._pull_distance, + ], + ) + solved = self._ik_solver.solve(self._ik_seed) + solved_flat = solved.reshape((-1,)) + wp.launch( + _set_finger_targets, + dim=self._finger_count, + inputs=[ + solved_flat, + self._finger_indices, + self._closed_values, + self._finger_groups, + self._fractions, + ], + ) + wp.copy(self._ik_seed, solved) + wp.launch( + _update_control_targets, + dim=self._robot.num_joints, + inputs=[ + solved_flat, + self._previous_targets, + self._sim_dt, + self._target_q, + self._target_qd, + ], + ) + + def _initialize_rest_pose(self, sim: sim_utils.SimulationContext) -> None: + """Solve and apply the first task-space keyframe before simulation begins.""" + self._left_objective.position_objective.set_target_position(0, wp.vec3(*HAND_KEYFRAMES[0])) + self._right_objective.position_objective.set_target_position(0, wp.vec3(*HAND_KEYFRAMES[1])) + self._ik_solver.cfg.iterations = 48 + solved = self._ik_solver.solve(self._ik_seed) + solved_flat = solved.reshape((-1,)) + robot_position = solved_flat[: self._robot.num_joints].reshape((1, self._robot.num_joints)) + self._robot.write_joint_position_to_sim_index(position=robot_position) + self._robot.write_joint_velocity_to_sim_index(velocity=wp.zeros_like(robot_position)) + sim.forward() + + self._previous_targets = wp.clone(solved_flat[: self._robot.num_joints]) + wp.copy(self._target_q, self._previous_targets) + self._target_qd.zero_() + self._ik_solver.cfg.iterations = 24 + wp.copy(self._ik_seed, solved) def main() -> None: @@ -946,115 +802,20 @@ def main() -> None: sim_dt = sim.get_physics_dt() robot: Articulation = scene["robot"] - model = NewtonManager.get_model() - if model.joint_coord_count < robot.num_joints: - raise RuntimeError( - "Newton IK cannot address every H1 joint; " - f"the model has {model.joint_coord_count} coordinates and H1 exposes {robot.num_joints} joints" - ) - bodies = { - "torso": _find_suffix(model.body_label, "torso_link"), - "left_hand": _find_suffix(model.body_label, "left_hand_link"), - "right_hand": _find_suffix(model.body_label, "right_hand_link"), - } - device = model.device - ik_solver = _make_ik(model, bodies) - left_objective = ik_solver.objectives_by_name["left_hand"] - right_objective = ik_solver.objectives_by_name["right_hand"] - torso_objective = ik_solver.objectives_by_name["torso"] - torso_ids, _ = robot.find_bodies("torso_link") - initial_torso_pose = robot.data.body_link_pose_w.torch[0, torso_ids[0]].cpu().numpy() - torso_objective.position_objective.set_target_position(0, wp.vec3(*initial_torso_pose[:3])) - torso_objective.rotation_objective.set_target_rotation(0, wp.quat(*initial_torso_pose[3:])) - left_objective.rotation_objective.set_target_rotation(0, wp.quat(*_unit_quat(HAND_ROTATIONS[0]))) - right_objective.rotation_objective.set_target_rotation(0, wp.quat(*_unit_quat(HAND_ROTATIONS[1]))) - - grasp_y = 0.24 - keyframes = wp.array( - [ - (-0.48, grasp_y, 1.24), - (-0.48, -grasp_y, 1.24), - (-0.30, grasp_y, 1.16), - (-0.30, -grasp_y, 1.16), - (-0.30, grasp_y, 1.050), - (-0.30, -grasp_y, 1.052), - (-0.225, grasp_y, 1.050), - (-0.225, -grasp_y, 1.052), - (-0.195, grasp_y, 1.110), - (-0.195, -grasp_y, 1.110), - (-0.195, grasp_y, 1.115), - (-0.195, -grasp_y, 1.115), - ], - dtype=wp.vec3, - device=device, + controller = _H1TableclothController(robot, NewtonManager.get_model(), sim, args_cli.pull_speed) + video_recorder = create_video_recorder( + sim, + enabled=args_cli.video, + output_dir=VIDEO_OUTPUT_DIR, + filename_prefix="newton_tablecloth_h1", + video_length=max_steps, + fps=FPS, ) - state = wp.zeros(1, dtype=wp.int32, device=device) - state_time = wp.zeros(1, dtype=float, device=device) - pull_distance = wp.zeros(1, dtype=float, device=device) - fractions = wp.zeros(5, dtype=float, device=device) - finger_indices, closed_values, finger_groups = _finger_data(robot) - finger_indices_wp = wp.array(finger_indices, dtype=wp.int32, device=device) - closed_values_wp = wp.array(closed_values, dtype=float, device=device) - finger_groups_wp = wp.array(finger_groups, dtype=wp.int32, device=device) - ik_seed = wp.clone(model.joint_q).reshape((1, model.joint_coord_count)) - target_q = robot.actuators.target_command.position.warp.reshape((-1,)) - target_qd = robot.actuators.target_command.velocity.warp.reshape((-1,)) - - # Start from the solved rest pose instead of spending the settle phase moving out of the MJCF default. - left_objective.position_objective.set_target_position(0, wp.vec3(-0.48, grasp_y, 1.24)) - right_objective.position_objective.set_target_position(0, wp.vec3(-0.48, -grasp_y, 1.24)) - ik_solver.cfg.iterations = 48 - solved = ik_solver.solve(ik_seed) - solved_flat = solved.reshape((-1,)) - robot_position = solved_flat[: robot.num_joints].reshape((1, robot.num_joints)) - robot.write_joint_position_to_sim_index(position=robot_position) - robot.write_joint_velocity_to_sim_index(velocity=wp.zeros_like(robot_position)) - sim.forward() - previous_targets = wp.clone(solved_flat[: robot.num_joints]) - wp.copy(target_q, previous_targets) - target_qd.zero_() - ik_solver.cfg.iterations = 24 - wp.copy(ik_seed, solved) - - video_recorder = _create_video_recorder(sim, max_steps) print("[INFO]: Setup complete. H1 Isaac Lab tablecloth state machine is ready.", flush=True) step = 0 try: while sim.is_headless_or_exist_active_visualizer() and (max_steps < 0 or step < max_steps): - wp.launch( - _infer_state_machine, - dim=1, - inputs=[ - sim_dt, - args_cli.pull_speed, - keyframes, - left_objective.position_objective.target_positions, - right_objective.position_objective.target_positions, - fractions, - state, - state_time, - pull_distance, - ], - ) - solved = ik_solver.solve(ik_seed) - solved_flat = solved.reshape((-1,)) - wp.launch( - _set_finger_targets, - dim=len(finger_indices), - inputs=[solved_flat, finger_indices_wp, closed_values_wp, finger_groups_wp, fractions], - ) - wp.copy(ik_seed, solved) - wp.launch( - _update_control_targets, - dim=robot.num_joints, - inputs=[ - solved_flat, - previous_targets, - sim_dt, - target_q, - target_qd, - ], - ) + controller.step() scene.write_data_to_sim() sim.step() scene.update(sim_dt) From a4ad7d7c24dcd31522992bb85d1f0721cdc4112b Mon Sep 17 00:00:00 2001 From: Maximilian Krause Date: Mon, 14 Sep 2026 11:59:43 +0200 Subject: [PATCH 06/34] Focus VBD example on tablecloth comparison --- .../concepts/solver-tuning/tune_vbd.rst | 26 +- scripts/demos/newton_tablecloth_h1.py | 831 ------------------ .../max-newton-tablecloth-demos.skip | 2 +- .../test/app/standalone_script_cases.py | 6 - .../max-vbd-tablecloth-demos.minor.rst | 2 +- 5 files changed, 11 insertions(+), 856 deletions(-) delete mode 100644 scripts/demos/newton_tablecloth_h1.py diff --git a/docs/source/concepts/solver-tuning/tune_vbd.rst b/docs/source/concepts/solver-tuning/tune_vbd.rst index e4bee33bea80..0e88fa8a2c21 100644 --- a/docs/source/concepts/solver-tuning/tune_vbd.rst +++ b/docs/source/concepts/solver-tuning/tune_vbd.rst @@ -22,30 +22,22 @@ rigid-body scenes, the named-entry coupling options are: * :class:`~isaaclab_contrib.coupling.CouplerAdmmCfg` for linearized ADMM coupling between named solver entries. -Run the Standalone Tablecloth Demos ------------------------------------ - -Two focused scripts demonstrate standalone VBD before the task and coupling -examples below: +Run the Standalone Tablecloth Demo +---------------------------------- -* ``scripts/demos/newton_tablecloth.py`` compares five pull speeds side by side - and shows how to configure full-surface contact while controlling deformable - kinematic targets through Isaac Lab. -* ``scripts/demos/newton_tablecloth_h1.py`` adds an articulated H1 with dexterous - hands, Newton IK, and a GPU-resident manipulation state machine. Isaac Lab's - MJCF importer converts and caches the H1-with-hands asset on the first run. +The focused ``scripts/demos/newton_tablecloth.py`` script demonstrates +standalone VBD before the task and coupling examples below. It compares five +pull speeds side by side and shows how to configure full-surface contact while +controlling deformable kinematic targets through Isaac Lab. -Run them with the lightweight Newton GL visualizer: +Run it with the lightweight Newton GL visualizer: .. code-block:: bash uv run python scripts/demos/newton_tablecloth.py --device cuda:0 --visualizer newton_gl - uv run --extra importers python scripts/demos/newton_tablecloth_h1.py --device cuda:0 --visualizer newton_gl -Both scripts declare their ground, tables, cloth, and tableware with -``InteractiveSceneCfg`` and use the standard scene write/step/update lifecycle. -The H1 script additionally uses Isaac Lab's ``Articulation`` command buffers; -its Newton-native code is limited to the VBD physics configuration and IK solve. +The script declares its ground, tables, cloth, and tableware with +``InteractiveSceneCfg`` and uses the standard scene write/step/update lifecycle. Start from a Supported Deformable Task -------------------------------------- diff --git a/scripts/demos/newton_tablecloth_h1.py b/scripts/demos/newton_tablecloth_h1.py deleted file mode 100644 index 37afc8aae45f..000000000000 --- a/scripts/demos/newton_tablecloth_h1.py +++ /dev/null @@ -1,831 +0,0 @@ -# Copyright (c) 2022-2026, The Isaac Lab Project Developers (https://github.com/isaac-sim/IsaacLab/blob/main/CONTRIBUTORS.md). -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause - -"""Have a Unitree H1 perform the tablecloth trick with Newton VBD and Newton IK. - -An ``InteractiveSceneCfg`` declares the stock Isaac Lab ground plane, H1 -articulation, table, cloth, and tableware. The runtime controls H1 through Isaac -Lab's articulation command buffers and standard scene write/step/update loop. A -GPU-resident Warp state machine generates hand targets, and ``NewtonIKSolver`` -converts them to joint targets without CPU copies in the simulation loop. - -The first run downloads the H1-with-hands MJCF from ``newton-assets`` and uses -Isaac Lab's MJCF converter. In a minimal uv installation, enable the existing -``importers`` extra for that conversion. - -.. code-block:: bash - - # Newton GL is the default visualizer. - uv run --extra importers python scripts/demos/newton_tablecloth_h1.py --device cuda:0 - - # Run the complete state machine without rendering. - uv run --extra importers python scripts/demos/newton_tablecloth_h1.py \ - --device cuda:0 --visualizer none --max_steps 312 - - # Record the complete state machine as a 60 FPS MP4 through Isaac Sim Kit. - uv run --extra isaacsim --extra importers --extra video python scripts/demos/newton_tablecloth_h1.py \ - --device cuda:0 --visualizer kit --video -""" - -from __future__ import annotations - -import argparse -import os -import tempfile -from dataclasses import MISSING, dataclass -from typing import TYPE_CHECKING - -from isaaclab.app import add_launcher_args, launch_simulation - -parser = argparse.ArgumentParser(description="Newton VBD H1 tablecloth trick.") -parser.add_argument("--max_steps", type=int, default=-1, help="Stop after this many frames; negative runs forever.") -parser.add_argument("--pull_speed", type=float, default=0.80, help="Task-space pull speed [m/s].") -parser.add_argument("--video", action="store_true", help="Record the complete demo to videos/newton_tablecloth_h1/.") -add_launcher_args(parser) -parser.set_defaults(visualizer=["newton_gl"]) -args_cli = parser.parse_args() - -import numpy as np -import warp as wp -from _newton_tablecloth_utils import ( - BOWL_LOCAL_HEIGHT, - BOWL_LOCAL_RADIUS, - BOWL_LOCAL_Z_MIN, - BOWL_SCALE, - BOWL_USD, - FORK_CENTER_OF_MASS, - FORK_DIAGONAL_INERTIA, - FORK_LOCAL_Z_MIN, - FORK_ROTATION, - FORK_SCALE, - FORK_USD, - KITCHEN_ISLAND_SIZE, - KITCHEN_ISLAND_USD, - RIGID_GAP, - WINE_GLASS_CENTER_OF_MASS, - WINE_GLASS_DIAGONAL_INERTIA, - WINE_GLASS_LOCAL_Z_MIN, - WINE_GLASS_USD, - VisualTableUsdFileCfg, - collision_properties, - create_video_recorder, - rigid_material, - rigid_object_cfg, - tabletop_collider_cfg, -) -from isaaclab_newton.physics import ( - NewtonCfg, - NewtonCollisionPipelineCfg, - NewtonShapeCfg, - NewtonSoftContactCfg, - VBDSolverCfg, -) -from isaaclab_newton.sim.schemas import NewtonDeformableBodyPropertiesCfg, NewtonSDFCollisionCfg -from isaaclab_newton.sim.spawners.materials import NewtonSurfaceDeformableBodyMaterialCfg - -import isaaclab.sim as sim_utils -from isaaclab.actuators import ImplicitActuatorCfg -from isaaclab.assets import Articulation, ArticulationCfg, AssetBaseCfg, DeformableObjectCfg -from isaaclab.scene import InteractiveSceneCfg -from isaaclab.sim.converters import MjcfConverter, MjcfConverterCfg -from isaaclab.utils import configclass - -if TYPE_CHECKING: - from isaaclab_newton.ik import NewtonIKSolver - from newton import Model - -FPS = 60 -SUBSTEPS = 16 -VIDEO_STEPS = 312 -VIDEO_OUTPUT_DIR = "videos/newton_tablecloth_h1" -VIDEO_RESOLUTION = (1920, 1080) -TABLE_TOP_Z = 1.09 -TABLEWARE_CLEARANCE = 0.008 -CLOTH_Z = TABLE_TOP_Z + 0.002 -PULL_DISTANCE = 0.40 -PULL_RAMP_TIME = wp.constant(0.25) - -# Dimensions measured from the SimReady assets. Non-uniform scaling turns the kitchen island into a compact, -# H1-height serving table without changing the manipulation geometry used by the state machine. -KITCHEN_ISLAND_SCALE = ( - 0.40 / KITCHEN_ISLAND_SIZE[0], - 0.72 / KITCHEN_ISLAND_SIZE[1], - TABLE_TOP_Z / KITCHEN_ISLAND_SIZE[2], -) - -GROUP_LEFT_THUMB = 0 -GROUP_RIGHT_THUMB = 1 -GROUP_LEFT_INDEX = 2 -GROUP_RIGHT_INDEX = 3 -GROUP_OTHER = 4 - -FINGERS_OPEN = (0.0, 0.0, 0.0, 0.0, 0.0) -FINGERS_CURLED = (0.0, 0.0, 0.0, 0.0, 0.80) -FINGERS_INSERTED = (0.0, 0.0, 0.75, 0.75, 0.80) -FINGERS_PREPINCHED = (0.0, 0.0, 0.737080, 0.713855, 0.80) -FINGERS_PINCHED = (1.0, 1.0, 0.737080, 0.713855, 0.80) - - -@dataclass(frozen=True) -class _MotionPhase: - """One timed interpolation in the grasp sequence.""" - - name: str - duration: float - start_keyframe: int - end_keyframe: int - start_fingers: tuple[float, float, float, float, float] - end_fingers: tuple[float, float, float, float, float] - - -MOTION_PHASES = ( - _MotionPhase("settle", 0.50, 0, 0, FINGERS_OPEN, FINGERS_OPEN), - _MotionPhase("approach", 0.80, 0, 2, FINGERS_OPEN, FINGERS_CURLED), - _MotionPhase("descend", 0.60, 2, 4, FINGERS_CURLED, FINGERS_INSERTED), - _MotionPhase("insert", 0.50, 4, 6, FINGERS_INSERTED, FINGERS_INSERTED), - _MotionPhase("prelift", 0.60, 6, 8, FINGERS_INSERTED, FINGERS_PREPINCHED), - _MotionPhase("close", 0.40, 8, 8, FINGERS_PREPINCHED, FINGERS_PINCHED), - _MotionPhase("lift", 0.50, 8, 10, FINGERS_PINCHED, FINGERS_PINCHED), - _MotionPhase("pinch", 0.60, 10, 10, FINGERS_PINCHED, FINGERS_PINCHED), -) -STATE_PULL = wp.constant(len(MOTION_PHASES)) -STATE_HOLD = wp.constant(len(MOTION_PHASES) + 1) - -HAND_OFFSETS = ((0.146273, -0.068447, 0.028077), (0.148808, 0.068652, 0.026675)) -HAND_ROTATIONS = ((-0.09, 0.46, 0.03, 0.88), (0.09023, 0.46115, -0.03008, 0.88221)) -HAND_KEYFRAMES = ( - (-0.48, 0.24, 1.24), - (-0.48, -0.24, 1.24), - (-0.30, 0.24, 1.16), - (-0.30, -0.24, 1.16), - (-0.30, 0.24, 1.050), - (-0.30, -0.24, 1.052), - (-0.225, 0.24, 1.050), - (-0.225, -0.24, 1.052), - (-0.195, 0.24, 1.110), - (-0.195, -0.24, 1.110), - (-0.195, 0.24, 1.115), - (-0.195, -0.24, 1.115), -) -THUMB_CLOSED_VALUES = ( - (1.273907, 0.160957, 0.369535, 0.892908), - (1.192278, 0.195421, 0.400690, 0.679765), -) - - -@wp.func -def _smoothstep(value: float) -> float: - u = wp.clamp(value, 0.0, 1.0) - return u * u * (3.0 - 2.0 * u) - - -@wp.kernel -def _infer_state_machine( - dt: float, - pull_speed: float, - keyframes: wp.array(dtype=wp.vec3), - phase_durations: wp.array(dtype=float), - phase_start_keyframes: wp.array(dtype=wp.int32), - phase_end_keyframes: wp.array(dtype=wp.int32), - phase_start_fingers: wp.array(dtype=float), - phase_end_fingers: wp.array(dtype=float), - left_target: wp.array(dtype=wp.vec3), - right_target: wp.array(dtype=wp.vec3), - finger_fractions: wp.array(dtype=float), - state: wp.array(dtype=wp.int32), - state_time: wp.array(dtype=float), - pull_distance: wp.array(dtype=float), -): - """Advance the single H1 task-space state machine entirely in Warp.""" - current_state = state[0] - elapsed = state_time[0] + dt - - if current_state < STATE_PULL and elapsed >= phase_durations[current_state]: - current_state += 1 - elapsed = 0.0 - - left = keyframes[0] - right = keyframes[1] - if current_state < STATE_PULL: - duration = phase_durations[current_state] - u = _smoothstep(elapsed / duration) - start_keyframe = phase_start_keyframes[current_state] - end_keyframe = phase_end_keyframes[current_state] - left = wp.lerp(keyframes[start_keyframe], keyframes[end_keyframe], u) - right = wp.lerp(keyframes[start_keyframe + 1], keyframes[end_keyframe + 1], u) - for group in range(5): - finger_offset = current_state * 5 + group - finger_fractions[group] = wp.lerp(phase_start_fingers[finger_offset], phase_end_fingers[finger_offset], u) - elif current_state == STATE_PULL: - speed_ramp = _smoothstep(elapsed / PULL_RAMP_TIME) - distance = wp.min(pull_distance[0] + speed_ramp * pull_speed * dt, PULL_DISTANCE) - pull_distance[0] = distance - drop = 0.0 - if distance > 0.08: - drop = 0.175 * _smoothstep((distance - 0.08) / (PULL_DISTANCE - 0.08)) - pull_offset = wp.vec3(-distance, 0.0, -drop) - left = keyframes[10] + pull_offset - right = keyframes[11] + pull_offset - for group in range(5): - finger_fractions[group] = phase_end_fingers[(STATE_PULL - 1) * 5 + group] - if distance >= PULL_DISTANCE: - current_state = STATE_HOLD - else: - distance = pull_distance[0] - drop = 0.175 * _smoothstep((distance - 0.08) / (PULL_DISTANCE - 0.08)) - pull_offset = wp.vec3(-distance, 0.0, -drop) - left = keyframes[10] + pull_offset - right = keyframes[11] + pull_offset - for group in range(5): - finger_fractions[group] = phase_end_fingers[(STATE_PULL - 1) * 5 + group] - - left_target[0] = left - right_target[0] = right - state[0] = current_state - state_time[0] = elapsed - - -@wp.kernel -def _set_finger_targets( - joint_q: wp.array(dtype=float), - finger_indices: wp.array(dtype=wp.int32), - closed_values: wp.array(dtype=float), - finger_groups: wp.array(dtype=wp.int32), - fractions: wp.array(dtype=float), -): - i = wp.tid() - joint_q[finger_indices[i]] = fractions[finger_groups[i]] * closed_values[i] - - -@wp.kernel -def _update_control_targets( - desired_q: wp.array(dtype=float), - previous_q: wp.array(dtype=float), - dt: float, - target_q: wp.array(dtype=float), - target_qd: wp.array(dtype=float), -): - i = wp.tid() - delta = wp.clamp(desired_q[i] - previous_q[i], -40.0 * dt, 40.0 * dt) - target_q[i] = previous_q[i] + delta - target_qd[i] = delta / dt - previous_q[i] = target_q[i] - - -def _find_suffix(labels: list[str], suffix: str) -> int: - matches = [index for index, label in enumerate(labels) if label.endswith(f"/{suffix}")] - if len(matches) != 1: - raise ValueError(f"Expected one label ending in '/{suffix}', found {len(matches)}") - return matches[0] - - -def _unit_quat(values: tuple[float, float, float, float]) -> tuple[float, float, float, float]: - values_np = np.asarray(values, dtype=np.float32) - values_np /= np.linalg.norm(values_np) - return tuple(float(value) for value in values_np) - - -def _convert_h1_asset() -> str: - """Convert and cache the downloaded H1-with-hands MJCF through Isaac Lab.""" - import newton.utils # noqa: PLC0415 - - converter_cfg = MjcfConverterCfg( - asset_path=str(newton.utils.download_asset("unitree_h1") / "mjcf/h1_with_hand.xml"), - usd_dir=os.path.join(tempfile.gettempdir(), "IsaacLab", "newton_tablecloth_h1_vbd"), - usd_file_name="h1_with_hand.usda", - fix_base=True, - self_collision=False, - robot_type="Humanoid", - # The demo drives VBD through Isaac Lab actuators, so it does not need - # the importer's extra MuJoCo/PhysX payload conversion or layered asset transform. - run_asset_transformer=False, - run_multi_physics_conversion=False, - ) - return MjcfConverter(converter_cfg).usd_path - - -@configclass -class _H1ArticulationCfg(ArticulationCfg): - """H1 configuration that provisions the imported hand meshes for cloth contact.""" - - def _post_spawn(self, stage) -> None: - """Select SDF collision for meshes and bind the fingertip contact material.""" - super()._post_spawn(stage) - from pxr import UsdGeom, UsdPhysics # noqa: PLC0415 - - from isaaclab.sim.schemas import apply_namespaced # noqa: PLC0415 - from isaaclab.sim.spawners.materials.physics_materials import ( # noqa: PLC0415 - spawn_rigid_body_material_from_fragments, - ) - - root_path = self.spawn.spawn_path if self.spawn is not None and self.spawn.spawn_path else self.prim_path - meshes = sim_utils.get_all_matching_child_prims( - root_path, - predicate=lambda prim: prim.IsA(UsdGeom.Mesh), - stage=stage, - ) - for mesh in meshes: - mesh_path = mesh.GetPath().pathString - if "/left_hand_link/" in mesh_path or "/right_hand_link/" in mesh_path: - usd_mesh = UsdGeom.Mesh(mesh) - usd_mesh.CreateDisplayColorAttr([(0.0100228, 0.0100228, 0.0100228)]) - usd_mesh.CreateDisplayOpacityAttr([1.0]) - - mesh_colliders = [mesh for mesh in meshes if mesh.HasAPI(UsdPhysics.CollisionAPI)] - for collider in mesh_colliders: - collider.RemoveAppliedSchema("NewtonMeshCollisionAPI") - UsdPhysics.MeshCollisionAPI(collider).GetApproximationAttr().Set("none") - apply_namespaced( - NewtonSDFCollisionCfg(sdf_max_resolution=64, sdf_padding=0.012), - collider.GetPath().pathString, - stage, - ) - - grasp_material_path = f"{root_path}/GraspMaterial" - spawn_rigid_body_material_from_fragments( - grasp_material_path, - rigid_material( - density=None, - friction=200.0, - contact_stiffness=8.0e3, - contact_damping=2.0e1, - ), - stage=stage, - ) - grasp_roots = {"L_thumb_proximal_base", "L_index_proximal", "R_thumb_proximal_base", "R_index_proximal"} - finger_prims = sim_utils.get_all_matching_child_prims( - root_path, - predicate=lambda prim: prim.GetName() in grasp_roots, - stage=stage, - ) - if len(finger_prims) != len(grasp_roots): - raise RuntimeError(f"Expected {len(grasp_roots)} H1 grasp roots, found {len(finger_prims)}") - for prim in finger_prims: - sim_utils.bind_physics_material(prim.GetPath(), grasp_material_path, stage=stage) - - -def _h1_articulation_cfg(usd_path: str) -> ArticulationCfg: - """Create the Isaac Lab articulation configuration for H1.""" - return _H1ArticulationCfg( - prim_path="{ENV_REGEX_NS}/Robot", - spawn=sim_utils.UsdFileCfg( - usd_path=usd_path, - make_uninstanceable=True, - fix_root_link=True, - collision_props=collision_properties(), - physics_material=rigid_material( - density=None, - friction=0.50, - contact_stiffness=1.0e3, - contact_damping=1.0e-2, - ), - ), - init_state=ArticulationCfg.InitialStateCfg(pos=(-0.75, 0.0, 0.0)), - actuators={ - "body": ImplicitActuatorCfg( - joint_names_expr=[r"(?!torso_joint$)(?![LR]_(?:thumb|index|middle|ring|pinky)_).+"], - stiffness=5.0e4, - damping=5.0e2, - ), - "torso": ImplicitActuatorCfg( - joint_names_expr=["torso_joint"], - stiffness=2.0e5, - damping=2.0e3, - ), - "fingers": ImplicitActuatorCfg( - joint_names_expr=[r"[LR]_(?:thumb|index|middle|ring|pinky)_.+"], - stiffness=4.0e4, - damping=1.0e2, - ), - }, - ) - - -@configclass -class H1TableclothSceneCfg(InteractiveSceneCfg): - """Isaac Lab scene for the H1 tablecloth manipulation sequence.""" - - ground = AssetBaseCfg( - prim_path="/World/defaultGroundPlane", - spawn=sim_utils.GroundPlaneCfg(), - collision_group=-1, - ) - - robot: ArticulationCfg = MISSING - - table = AssetBaseCfg( - prim_path="{ENV_REGEX_NS}/Table", - spawn=VisualTableUsdFileCfg( - usd_path=KITCHEN_ISLAND_USD, - scale=KITCHEN_ISLAND_SCALE, - variants={"Physics": "none"}, - make_uninstanceable=True, - rigid_props=sim_utils.NewtonRigidBodyPropertiesCfg(rigid_body_enabled=False), - collision_props=sim_utils.NewtonCollisionPropertiesCfg(collision_enabled=False), - ), - ) - tabletop_collider = AssetBaseCfg( - prim_path="{ENV_REGEX_NS}/Tabletop", - spawn=tabletop_collider_cfg( - (0.40, 0.72, 0.08), - friction=0.35, - contact_stiffness=1.0e4, - contact_damping=1.0e1, - ), - init_state=AssetBaseCfg.InitialStateCfg(pos=(0.0, 0.0, TABLE_TOP_Z - 0.04)), - ) - - cloth = DeformableObjectCfg( - prim_path="{ENV_REGEX_NS}/Cloth", - spawn=sim_utils.MeshRectangleCfg( - size=(0.46, 0.70), - edge_refinement=24, - deformable_props=NewtonDeformableBodyPropertiesCfg(), - visual_material=sim_utils.PreviewSurfaceCfg(diffuse_color=(0.76, 0.05, 0.05)), - physics_material=NewtonSurfaceDeformableBodyMaterialCfg( - density=0.24, - particle_radius=0.001, - tri_ke=5.0e4, - tri_ka=5.0e4, - tri_kd=5.0e1, - edge_ke=0.10, - edge_kd=1.0e-3, - ), - ), - init_state=DeformableObjectCfg.InitialStateCfg(pos=(-0.01, 0.0, CLOTH_Z)), - ) - - bowl = rigid_object_cfg( - usd_path=BOWL_USD, - position=(0.08, -0.07, CLOTH_Z + TABLEWARE_CLEARANCE - BOWL_SCALE * BOWL_LOCAL_Z_MIN), - mass=0.45, - collision_proxy_cfg=sim_utils.CylinderCfg( - radius=BOWL_LOCAL_RADIUS, - height=BOWL_LOCAL_HEIGHT, - visible=False, - collision_props=collision_properties(), - physics_material=rigid_material( - density=None, - friction=0.08, - contact_stiffness=1.0e4, - contact_damping=1.0e1, - ), - ), - collision_proxy_position=(0.0, 0.0, BOWL_LOCAL_Z_MIN + 0.5 * BOWL_LOCAL_HEIGHT), - scale=(BOWL_SCALE,) * 3, - ).replace(prim_path="{ENV_REGEX_NS}/Bowl") - glass = rigid_object_cfg( - usd_path=WINE_GLASS_USD, - position=(0.10, 0.13, CLOTH_Z + TABLEWARE_CLEARANCE - WINE_GLASS_LOCAL_Z_MIN), - mass=0.35, - collision_proxy_cfg=sim_utils.CylinderCfg( - radius=0.040, - height=0.006, - visible=False, - collision_props=collision_properties(), - physics_material=rigid_material( - density=None, - friction=0.01, - contact_stiffness=1.0e4, - contact_damping=1.0e1, - ), - ), - collision_proxy_position=(0.0, 0.0, 0.003), - center_of_mass=WINE_GLASS_CENTER_OF_MASS, - diagonal_inertia=WINE_GLASS_DIAGONAL_INERTIA, - visual_color=(0.55, 0.75, 0.90), - visual_opacity=0.90, - visual_roughness=0.12, - ).replace(prim_path="{ENV_REGEX_NS}/Glass") - fork = rigid_object_cfg( - usd_path=FORK_USD, - position=(0.04, -0.22, CLOTH_Z + TABLEWARE_CLEARANCE - FORK_SCALE * FORK_LOCAL_Z_MIN), - mass=0.07, - collision_proxy_cfg=sim_utils.CuboidCfg( - size=(0.014, 0.160, 0.003), - visible=False, - collision_props=collision_properties(), - physics_material=rigid_material( - density=None, - friction=0.50, - contact_stiffness=1.0e4, - contact_damping=1.0e1, - ), - ), - collision_proxy_position=(0.0, 0.0092, 0.0016), - orientation=FORK_ROTATION, - scale=(FORK_SCALE,) * 3, - center_of_mass=FORK_CENTER_OF_MASS, - diagonal_inertia=FORK_DIAGONAL_INERTIA, - ).replace(prim_path="{ENV_REGEX_NS}/Fork") - - light = AssetBaseCfg( - prim_path="/World/Light", - spawn=sim_utils.DomeLightCfg(intensity=2500.0, color=(0.75, 0.75, 0.75)), - ) - - -def _finger_data(robot: Articulation) -> tuple[list[int], list[float], list[int]]: - indices = [] - values = [] - groups = [] - for side_index, side in enumerate(("L", "R")): - thumb = THUMB_CLOSED_VALUES[side_index] - entries = ( - ("thumb_proximal_yaw_joint", thumb[0]), - ("thumb_proximal_pitch_joint", thumb[1]), - ("thumb_intermediate_joint", thumb[2]), - ("thumb_distal_joint", thumb[3]), - ("index_proximal_joint", 1.2), - ("index_intermediate_joint", 1.2), - ("middle_proximal_joint", 1.0), - ("middle_intermediate_joint", 1.0), - ("ring_proximal_joint", 1.0), - ("ring_intermediate_joint", 1.0), - ("pinky_proximal_joint", 1.0), - ("pinky_intermediate_joint", 1.0), - ) - for suffix, value in entries: - joint_name = f"{side}_{suffix}" - joint_ids, _ = robot.find_joints(joint_name) - if len(joint_ids) != 1: - raise ValueError(f"Expected one H1 joint named '{joint_name}', found {len(joint_ids)}") - indices.append(joint_ids[0]) - values.append(value) - if suffix.startswith("thumb_"): - groups.append(GROUP_LEFT_THUMB if side == "L" else GROUP_RIGHT_THUMB) - elif suffix.startswith("index_"): - groups.append(GROUP_LEFT_INDEX if side == "L" else GROUP_RIGHT_INDEX) - else: - groups.append(GROUP_OTHER) - return indices, values, groups - - -def _make_ik(model: Model, bodies: dict[str, int]) -> NewtonIKSolver: - from isaaclab_newton.ik import ( # noqa: PLC0415 - NewtonIKJointLimitObjectiveCfg, - NewtonIKPoseObjectiveCfg, - NewtonIKSolver, - NewtonIKSolverCfg, - ) - - objectives = [ - NewtonIKPoseObjectiveCfg( - body_name="left_hand", - body_offset_pos=HAND_OFFSETS[0], - use_relative_mode=False, - position_weight=5.0, - rotation_weight=0.2, - ), - NewtonIKPoseObjectiveCfg( - body_name="right_hand", - body_offset_pos=HAND_OFFSETS[1], - use_relative_mode=False, - position_weight=5.0, - rotation_weight=0.2, - ), - NewtonIKPoseObjectiveCfg( - body_name="torso", - use_relative_mode=False, - position_weight=50.0, - rotation_weight=50.0, - ), - NewtonIKJointLimitObjectiveCfg(weight=1.0), - ] - return NewtonIKSolver( - NewtonIKSolverCfg(iterations=24, lambda_initial=0.1), - model=model, - num_envs=1, - device=str(model.device), - objectives=objectives, - link_resolver=bodies.__getitem__, - ) - - -class _H1TableclothController: - """Generate GPU-resident H1 joint targets for the tablecloth sequence.""" - - def __init__(self, robot: Articulation, model: Model, sim: sim_utils.SimulationContext, pull_speed: float): - if model.joint_coord_count < robot.num_joints: - raise RuntimeError( - "Newton IK cannot address every H1 joint; " - f"the model has {model.joint_coord_count} coordinates and H1 exposes {robot.num_joints} joints" - ) - - self._robot = robot - self._sim_dt = sim.get_physics_dt() - self._pull_speed = pull_speed - device = model.device - - bodies = { - "torso": _find_suffix(model.body_label, "torso_link"), - "left_hand": _find_suffix(model.body_label, "left_hand_link"), - "right_hand": _find_suffix(model.body_label, "right_hand_link"), - } - self._ik_solver = _make_ik(model, bodies) - self._left_objective = self._ik_solver.objectives_by_name["left_hand"] - self._right_objective = self._ik_solver.objectives_by_name["right_hand"] - torso_objective = self._ik_solver.objectives_by_name["torso"] - - torso_ids, _ = robot.find_bodies("torso_link") - initial_torso_pose = robot.data.body_link_pose_w.torch[0, torso_ids[0]].cpu().numpy() - torso_objective.position_objective.set_target_position(0, wp.vec3(*initial_torso_pose[:3])) - torso_objective.rotation_objective.set_target_rotation(0, wp.quat(*initial_torso_pose[3:])) - self._left_objective.rotation_objective.set_target_rotation(0, wp.quat(*_unit_quat(HAND_ROTATIONS[0]))) - self._right_objective.rotation_objective.set_target_rotation(0, wp.quat(*_unit_quat(HAND_ROTATIONS[1]))) - - self._keyframes = wp.array(HAND_KEYFRAMES, dtype=wp.vec3, device=device) - self._phase_durations = wp.array([phase.duration for phase in MOTION_PHASES], dtype=float, device=device) - self._phase_start_keyframes = wp.array( - [phase.start_keyframe for phase in MOTION_PHASES], dtype=wp.int32, device=device - ) - self._phase_end_keyframes = wp.array( - [phase.end_keyframe for phase in MOTION_PHASES], dtype=wp.int32, device=device - ) - self._phase_start_fingers = wp.array( - [fraction for phase in MOTION_PHASES for fraction in phase.start_fingers], dtype=float, device=device - ) - self._phase_end_fingers = wp.array( - [fraction for phase in MOTION_PHASES for fraction in phase.end_fingers], dtype=float, device=device - ) - self._state = wp.zeros(1, dtype=wp.int32, device=device) - self._state_time = wp.zeros(1, dtype=float, device=device) - self._pull_distance = wp.zeros(1, dtype=float, device=device) - self._fractions = wp.zeros(5, dtype=float, device=device) - - finger_indices, closed_values, finger_groups = _finger_data(robot) - self._finger_count = len(finger_indices) - self._finger_indices = wp.array(finger_indices, dtype=wp.int32, device=device) - self._closed_values = wp.array(closed_values, dtype=float, device=device) - self._finger_groups = wp.array(finger_groups, dtype=wp.int32, device=device) - - self._ik_seed = wp.clone(model.joint_q).reshape((1, model.joint_coord_count)) - self._target_q = robot.actuators.target_command.position.warp.reshape((-1,)) - self._target_qd = robot.actuators.target_command.velocity.warp.reshape((-1,)) - self._initialize_rest_pose(sim) - - def step(self) -> None: - """Advance the state machine and write its targets to Isaac Lab's command buffers.""" - wp.launch( - _infer_state_machine, - dim=1, - inputs=[ - self._sim_dt, - self._pull_speed, - self._keyframes, - self._phase_durations, - self._phase_start_keyframes, - self._phase_end_keyframes, - self._phase_start_fingers, - self._phase_end_fingers, - self._left_objective.position_objective.target_positions, - self._right_objective.position_objective.target_positions, - self._fractions, - self._state, - self._state_time, - self._pull_distance, - ], - ) - solved = self._ik_solver.solve(self._ik_seed) - solved_flat = solved.reshape((-1,)) - wp.launch( - _set_finger_targets, - dim=self._finger_count, - inputs=[ - solved_flat, - self._finger_indices, - self._closed_values, - self._finger_groups, - self._fractions, - ], - ) - wp.copy(self._ik_seed, solved) - wp.launch( - _update_control_targets, - dim=self._robot.num_joints, - inputs=[ - solved_flat, - self._previous_targets, - self._sim_dt, - self._target_q, - self._target_qd, - ], - ) - - def _initialize_rest_pose(self, sim: sim_utils.SimulationContext) -> None: - """Solve and apply the first task-space keyframe before simulation begins.""" - self._left_objective.position_objective.set_target_position(0, wp.vec3(*HAND_KEYFRAMES[0])) - self._right_objective.position_objective.set_target_position(0, wp.vec3(*HAND_KEYFRAMES[1])) - self._ik_solver.cfg.iterations = 48 - solved = self._ik_solver.solve(self._ik_seed) - solved_flat = solved.reshape((-1,)) - robot_position = solved_flat[: self._robot.num_joints].reshape((1, self._robot.num_joints)) - self._robot.write_joint_position_to_sim_index(position=robot_position) - self._robot.write_joint_velocity_to_sim_index(velocity=wp.zeros_like(robot_position)) - sim.forward() - - self._previous_targets = wp.clone(solved_flat[: self._robot.num_joints]) - wp.copy(self._target_q, self._previous_targets) - self._target_qd.zero_() - self._ik_solver.cfg.iterations = 24 - wp.copy(self._ik_seed, solved) - - -def main() -> None: - """Launch the H1 tablecloth demo.""" - if not np.isfinite(args_cli.pull_speed) or args_cli.pull_speed <= 0.0: - raise ValueError("--pull_speed must be finite and positive") - if args_cli.video and "none" in (args_cli.visualizer or []): - raise ValueError("--video requires a capture-capable visualizer; omit --visualizer none") - if args_cli.video and "kit" in (args_cli.visualizer or []): - args_cli.enable_cameras = True - max_steps = VIDEO_STEPS if args_cli.video and args_cli.max_steps < 0 else args_cli.max_steps - - physics_cfg = NewtonCfg( - num_substeps=SUBSTEPS, - # Robot, tableware, and cloth all move quickly during the pull, so collide every substep. - collision_decimation=1, - default_shape_cfg=NewtonShapeCfg(gap=RIGID_GAP, ke=1.0e4, kd=1.0e1, mu=0.35), - # Material mixing keeps the cloth planted on the high-friction table while - # allowing it to slide under the lower-friction tableware. The same table - # material gives the objects more grip after the cloth clears them. - soft_contact_cfg=NewtonSoftContactCfg(soft_contact_ke=1.0e3, soft_contact_kd=1.0e-2, soft_contact_mu=0.35), - collision_cfg=NewtonCollisionPipelineCfg( - broad_phase="sap", - soft_contact_margin=0.008, - enable_rigid_soft_full_surface_contact=True, - ), - solver_cfg=VBDSolverCfg( - iterations=15, - rigid_compliant_alm=True, - rigid_body_contact_buffer_size=512, - rigid_body_particle_contact_buffer_size=8192, - rigid_joint_linear_ke=1.0e6, - rigid_joint_angular_ke=1.0e6, - rigid_joint_linear_kd=1.0e2, - rigid_joint_angular_kd=1.0e2, - ), - ) - with launch_simulation(cfg=physics_cfg, launcher_args=args_cli) as resolved_physics_cfg: - from isaaclab_newton.physics import NewtonManager # noqa: PLC0415 - - from isaaclab.scene import InteractiveScene # noqa: PLC0415 - - default_visualizer_cfg = None - if args_cli.video and "kit" in (args_cli.visualizer or []): - from isaaclab_visualizers.kit import KitVisualizerCfg # noqa: PLC0415 - - default_visualizer_cfg = KitVisualizerCfg( - window_width=VIDEO_RESOLUTION[0], window_height=VIDEO_RESOLUTION[1] - ) - - h1_usd_path = _convert_h1_asset() - sim = sim_utils.SimulationContext( - sim_utils.SimulationCfg( - dt=1.0 / FPS, - device=args_cli.device, - physics=resolved_physics_cfg, - default_visualizer_cfg=default_visualizer_cfg, - ) - ) - sim.set_camera_view(eye=(-2.435, -2.70, 1.725), target=(-0.08, 0.0, 0.93)) - scene = InteractiveScene( - H1TableclothSceneCfg( - num_envs=1, - env_spacing=1.0, - robot=_h1_articulation_cfg(h1_usd_path), - ) - ) - sim.reset() - sim_dt = sim.get_physics_dt() - - robot: Articulation = scene["robot"] - controller = _H1TableclothController(robot, NewtonManager.get_model(), sim, args_cli.pull_speed) - video_recorder = create_video_recorder( - sim, - enabled=args_cli.video, - output_dir=VIDEO_OUTPUT_DIR, - filename_prefix="newton_tablecloth_h1", - video_length=max_steps, - fps=FPS, - ) - print("[INFO]: Setup complete. H1 Isaac Lab tablecloth state machine is ready.", flush=True) - step = 0 - try: - while sim.is_headless_or_exist_active_visualizer() and (max_steps < 0 or step < max_steps): - controller.step() - scene.write_data_to_sim() - sim.step() - scene.update(sim_dt) - if video_recorder is not None: - video_recorder.step() - step += 1 - finally: - if video_recorder is not None: - video_recorder.close() - - -if __name__ == "__main__": - main() diff --git a/source/isaaclab/changelog.d/max-newton-tablecloth-demos.skip b/source/isaaclab/changelog.d/max-newton-tablecloth-demos.skip index 687a8fdd0586..1204554b3d40 100644 --- a/source/isaaclab/changelog.d/max-newton-tablecloth-demos.skip +++ b/source/isaaclab/changelog.d/max-newton-tablecloth-demos.skip @@ -1 +1 @@ -Test-only: registered the Newton tablecloth demos with standalone-script smoke coverage. +Test-only: registered the Newton tablecloth demo with standalone-script smoke coverage. diff --git a/source/isaaclab/test/app/standalone_script_cases.py b/source/isaaclab/test/app/standalone_script_cases.py index 18977473d02c..354e9e98a8c9 100644 --- a/source/isaaclab/test/app/standalone_script_cases.py +++ b/source/isaaclab/test/app/standalone_script_cases.py @@ -212,12 +212,6 @@ class SmokeResult: fixed_physics_backend="newton_vbd", visualizers=("newton_gl",), ), - "scripts/demos/newton_tablecloth_h1.py": ScriptOverride( - args=("--max_steps", "2"), - fixed_physics_backend="newton_vbd", - visualizers=("newton_gl",), - required_modules=("isaacsim.asset.importer.mjcf",), - ), "scripts/demos/sensors/cameras.py": ScriptOverride(args=("--num_envs", "1"), startup_timeout=900.0), "scripts/demos/sensors/multi_mesh_raycaster.py": ScriptOverride( args=("--flat_ground",), diff --git a/source/isaaclab_newton/changelog.d/max-vbd-tablecloth-demos.minor.rst b/source/isaaclab_newton/changelog.d/max-vbd-tablecloth-demos.minor.rst index 44c93eee700c..6c90d1c43971 100644 --- a/source/isaaclab_newton/changelog.d/max-vbd-tablecloth-demos.minor.rst +++ b/source/isaaclab_newton/changelog.d/max-vbd-tablecloth-demos.minor.rst @@ -1,7 +1,7 @@ Added ^^^^^ -* Added five-speed and H1 tablecloth demos built with Isaac Lab scene and asset configurations. +* Added a five-speed tablecloth demo built with Isaac Lab scene and asset configurations. * Exposed compliant-ALM, body-contact buffer sizing, and rigid-joint material settings through the Newton VBD solver configuration. Fixed From e305ef82ed382e3858d669540bf851ca50a017c8 Mon Sep 17 00:00:00 2001 From: Maximilian Krause Date: Mon, 14 Sep 2026 12:58:26 +0200 Subject: [PATCH 07/34] Render configured Newton cloth appearance --- .../max-newton-deformable-appearance.fix.rst | 1 + .../deformable/deformable_object.py | 10 ++++++++++ .../test_deformable_builder_hooks.py | 19 +++++++++++++++++++ 3 files changed, 30 insertions(+) create mode 100644 source/isaaclab_contrib/changelog.d/max-newton-deformable-appearance.fix.rst diff --git a/source/isaaclab_contrib/changelog.d/max-newton-deformable-appearance.fix.rst b/source/isaaclab_contrib/changelog.d/max-newton-deformable-appearance.fix.rst new file mode 100644 index 000000000000..2e942942a6ac --- /dev/null +++ b/source/isaaclab_contrib/changelog.d/max-newton-deformable-appearance.fix.rst @@ -0,0 +1 @@ +Fixed Newton surface deformables ignoring their configured visual color and opacity. diff --git a/source/isaaclab_contrib/isaaclab_contrib/deformable/deformable_object.py b/source/isaaclab_contrib/isaaclab_contrib/deformable/deformable_object.py index 05f6725e344b..db927fe36a96 100644 --- a/source/isaaclab_contrib/isaaclab_contrib/deformable/deformable_object.py +++ b/source/isaaclab_contrib/isaaclab_contrib/deformable/deformable_object.py @@ -61,6 +61,8 @@ class DeformableRegistryEntry: edge_ke: float = 5.0 edge_kd: float = 1e-2 particle_radius: float = 0.008 + color: tuple[float, float, float] | None = None + opacity: float | None = None # Tet params k_mu: float = 1e5 k_lambda: float = 1e5 @@ -151,6 +153,8 @@ def add_deformable_entry_to_builder( edge_ke=entry.edge_ke, edge_kd=entry.edge_kd, particle_radius=entry.particle_radius, + color=entry.color, + opacity=entry.opacity, ) else: raise ValueError( @@ -835,6 +839,10 @@ def _get_material_attr(name: str, default): edge_ke = _get_material_attr("newton:edgeKe", DeformableRegistryEntry.edge_ke) edge_kd = _get_material_attr("newton:edgeKd", DeformableRegistryEntry.edge_kd) + visual_material = getattr(self.cfg.spawn, "visual_material", None) + color = getattr(visual_material, "diffuse_color", None) + opacity = getattr(visual_material, "opacity", None) + entry = DeformableRegistryEntry( prim_path=self.cfg.prim_path, sim_mesh_prim_path=sim_mesh_prim_path, @@ -851,6 +859,8 @@ def _get_material_attr(name: str, default): edge_ke=edge_ke, edge_kd=edge_kd, particle_radius=particle_radius, + color=color, + opacity=opacity, k_mu=k_mu, k_lambda=k_lambda, k_damp=k_damp, diff --git a/source/isaaclab_contrib/test/deformable/test_deformable_builder_hooks.py b/source/isaaclab_contrib/test/deformable/test_deformable_builder_hooks.py index a0d4800c95af..ae5329fee3d5 100644 --- a/source/isaaclab_contrib/test/deformable/test_deformable_builder_hooks.py +++ b/source/isaaclab_contrib/test/deformable/test_deformable_builder_hooks.py @@ -113,6 +113,25 @@ def test_builder_hook_applies_env_quaternion_to_deformable_entry(): assert entry.particles_per_body == 3 +def test_builder_hook_applies_surface_appearance(): + """Test that surface appearance reaches Newton's triangle renderer.""" + entry = _make_surface_entry() + entry.color = (0.8, 0.2, 0.1) + entry.opacity = 0.9 + builder = _FakeBuilder() + + add_deformable_entry_to_builder( + builder, + entry, + env_idx=0, + env_position=[0.0, 0.0, 0.0], + env_rotation=[0.0, 0.0, 0.0, 1.0], + ) + + assert builder.cloth_meshes[0]["color"] == entry.color + assert builder.cloth_meshes[0]["opacity"] == entry.opacity + + def test_builder_hook_resets_entry_offsets_on_first_environment(): """Test that repeated model rebuilds do not accumulate stale particle offsets.""" entry = _make_surface_entry() From 560c87c463a135880e2c26014c997589a6108982 Mon Sep 17 00:00:00 2001 From: Maximilian Krause Date: Mon, 14 Sep 2026 13:26:53 +0200 Subject: [PATCH 08/34] Fix deformable appearance changelog fragment --- .../changelog.d/max-newton-deformable-appearance.fix.rst | 1 - .../changelog.d/max-newton-deformable-appearance.rst | 4 ++++ 2 files changed, 4 insertions(+), 1 deletion(-) delete mode 100644 source/isaaclab_contrib/changelog.d/max-newton-deformable-appearance.fix.rst create mode 100644 source/isaaclab_contrib/changelog.d/max-newton-deformable-appearance.rst diff --git a/source/isaaclab_contrib/changelog.d/max-newton-deformable-appearance.fix.rst b/source/isaaclab_contrib/changelog.d/max-newton-deformable-appearance.fix.rst deleted file mode 100644 index 2e942942a6ac..000000000000 --- a/source/isaaclab_contrib/changelog.d/max-newton-deformable-appearance.fix.rst +++ /dev/null @@ -1 +0,0 @@ -Fixed Newton surface deformables ignoring their configured visual color and opacity. diff --git a/source/isaaclab_contrib/changelog.d/max-newton-deformable-appearance.rst b/source/isaaclab_contrib/changelog.d/max-newton-deformable-appearance.rst new file mode 100644 index 000000000000..2281827bdb4f --- /dev/null +++ b/source/isaaclab_contrib/changelog.d/max-newton-deformable-appearance.rst @@ -0,0 +1,4 @@ +Fixed +^^^^^ + +* Fixed Newton surface deformables ignoring their configured visual color and opacity. From 7ffd44163848add237bb07fe42a8a89b5e0ee80c Mon Sep 17 00:00:00 2001 From: Maximilian Krause Date: Mon, 28 Sep 2026 11:00:10 +0200 Subject: [PATCH 09/34] Keep upstream lockfile metadata --- uv.lock | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/uv.lock b/uv.lock index 1c36ca4a1243..2ab99273c008 100644 --- a/uv.lock +++ b/uv.lock @@ -1698,7 +1698,7 @@ wheels = [ [[package]] name = "isaaclab" -version = "31.0.0" +version = "29.0.0" source = { editable = "source/isaaclab" } [[package]] @@ -1722,7 +1722,7 @@ requires-dist = [ [[package]] name = "isaaclab-contrib" -version = "3.0.0" +version = "2.0.1" source = { editable = "source/isaaclab_contrib" } dependencies = [ { name = "isaaclab" }, @@ -2066,7 +2066,7 @@ provides-extras = ["tetrahedralization", "video", "importers", "test", "dev", "s [[package]] name = "isaaclab-experimental" -version = "0.2.3" +version = "0.2.2" source = { editable = "source/isaaclab_experimental" } dependencies = [ { name = "isaaclab" }, @@ -2077,7 +2077,7 @@ requires-dist = [{ name = "isaaclab", editable = "source/isaaclab" }] [[package]] name = "isaaclab-mimic" -version = "2.0.11" +version = "2.0.9" source = { editable = "source/isaaclab_mimic" } dependencies = [ { name = "isaaclab" }, @@ -2094,7 +2094,7 @@ requires-dist = [ [[package]] name = "isaaclab-newton" -version = "9.0.0" +version = "8.0.0" source = { editable = "source/isaaclab_newton" } dependencies = [ { name = "isaaclab" }, @@ -2105,7 +2105,7 @@ requires-dist = [{ name = "isaaclab", editable = "source/isaaclab" }] [[package]] name = "isaaclab-ov" -version = "3.5.0" +version = "3.4.0" source = { editable = "source/isaaclab_ov" } dependencies = [ { name = "isaaclab" }, @@ -2120,7 +2120,7 @@ requires-dist = [ [[package]] name = "isaaclab-physx" -version = "7.3.0" +version = "7.2.3" source = { editable = "source/isaaclab_physx" } dependencies = [ { name = "isaaclab" }, @@ -2142,7 +2142,7 @@ requires-dist = [{ name = "isaaclab", editable = "source/isaaclab" }] [[package]] name = "isaaclab-rl" -version = "1.3.0" +version = "1.2.0" source = { editable = "source/isaaclab_rl" } dependencies = [ { name = "isaaclab" }, @@ -2159,7 +2159,7 @@ requires-dist = [ [[package]] name = "isaaclab-tasks" -version = "21.3.0" +version = "21.1.0" source = { editable = "source/isaaclab_tasks" } dependencies = [ { name = "isaaclab" }, @@ -2200,7 +2200,7 @@ requires-dist = [{ name = "isaaclab", editable = "source/isaaclab" }] [[package]] name = "isaaclab-visualizers" -version = "2.0.0" +version = "1.13.0" source = { editable = "source/isaaclab_visualizers" } dependencies = [ { name = "isaaclab" }, From 186f7f2579e3175d2b1cfc97abd68b004b9d14af Mon Sep 17 00:00:00 2001 From: Maximilian Krause Date: Wed, 30 Sep 2026 15:09:33 +0200 Subject: [PATCH 10/34] Combine tablecloth comparison and H1 task examples --- .../source/_static/css/environment-browser.js | 1 + .../tasks/manipulation/h1_tablecloth.jpg | Bin 0 -> 83603 bytes .../concepts/solver-tuning/tune_vbd.rst | 13 + docs/source/how-to/run_state_machines.rst | 20 +- examples/_newton_tablecloth_utils.py | 246 +-------- examples/newton_tablecloth.py | 47 +- .../state_machine/tablecloth_h1.py | 368 +++++++++++++ .../max-newton-tablecloth-demos.minor.rst | 1 + .../test/app/standalone_script_cases.py | 7 + .../max-vbd-tablecloth-demos.minor.rst | 9 - .../changelog.d/max-vbd-tablecloth-demos.rst | 6 + .../envs/mdp/actions/newton_ik_actions.py | 3 +- .../isaaclab_newton/physics/vbd_manager.py | 10 +- .../test/assets/test_rigid_object.py | 26 +- .../test/physics/test_vbd_core.py | 59 +- .../max-tablecloth-h1-task.minor.rst | 4 + .../contrib/tablecloth/__init__.py | 15 + .../contrib/tablecloth/assets.py | 269 ++++++++++ .../contrib/tablecloth/h1_env.py | 44 ++ .../contrib/tablecloth/h1_env_cfg.py | 507 ++++++++++++++++++ .../contrib/tablecloth/mdp/__init__.py | 10 + .../contrib/tablecloth/mdp/__init__.pyi | 17 + .../contrib/tablecloth/mdp/_metrics.py | 31 ++ .../contrib/tablecloth/mdp/rewards.py | 47 ++ .../contrib/tablecloth/mdp/terminations.py | 64 +++ 25 files changed, 1532 insertions(+), 292 deletions(-) create mode 100644 docs/source/_static/tasks/manipulation/h1_tablecloth.jpg create mode 100644 scripts/environments/state_machine/tablecloth_h1.py delete mode 100644 source/isaaclab_newton/changelog.d/max-vbd-tablecloth-demos.minor.rst create mode 100644 source/isaaclab_newton/changelog.d/max-vbd-tablecloth-demos.rst create mode 100644 source/isaaclab_tasks/changelog.d/max-tablecloth-h1-task.minor.rst create mode 100644 source/isaaclab_tasks/isaaclab_tasks/contrib/tablecloth/__init__.py create mode 100644 source/isaaclab_tasks/isaaclab_tasks/contrib/tablecloth/assets.py create mode 100644 source/isaaclab_tasks/isaaclab_tasks/contrib/tablecloth/h1_env.py create mode 100644 source/isaaclab_tasks/isaaclab_tasks/contrib/tablecloth/h1_env_cfg.py create mode 100644 source/isaaclab_tasks/isaaclab_tasks/contrib/tablecloth/mdp/__init__.py create mode 100644 source/isaaclab_tasks/isaaclab_tasks/contrib/tablecloth/mdp/__init__.pyi create mode 100644 source/isaaclab_tasks/isaaclab_tasks/contrib/tablecloth/mdp/_metrics.py create mode 100644 source/isaaclab_tasks/isaaclab_tasks/contrib/tablecloth/mdp/rewards.py create mode 100644 source/isaaclab_tasks/isaaclab_tasks/contrib/tablecloth/mdp/terminations.py diff --git a/docs/source/_static/css/environment-browser.js b/docs/source/_static/css/environment-browser.js index 1bd8f03505b5..0050ed1d9f17 100644 --- a/docs/source/_static/css/environment-browser.js +++ b/docs/source/_static/css/environment-browser.js @@ -133,6 +133,7 @@ ["IsaacContrib-Stack-Cube-SO101-v0", "", "isaacsim_physx", "", ""], ["IsaacContrib-Stack-Cube-UR10-Long-Suction-IK-Rel", "", "isaacsim_physx", "", "", "tasks/manipulation/ur10_stack_surface_gripper.jpg"], ["IsaacContrib-Stack-Cube-UR10-Short-Suction-IK-Rel", "", "isaacsim_physx", "", "", "tasks/manipulation/ur10_stack_surface_gripper.jpg"], + ["IsaacContrib-Tablecloth-H1", "", "", "", "", "./tasks/manipulation/h1_tablecloth.jpg"], ["IsaacContrib-TrackPositionNoObstacles-ARL-Robot-1", "rl_games,rsl_rl,skrl", "", "", "", "tasks/drone_arl/arl_robot_1_track_position_state_based.jpg"], ["IsaacContrib-Tracking-LocoManip-Digit", "rsl_rl", "isaacsim_physx,newton_mjwarp", "", "", "tasks/locomotion/agility_digit_loco_manip.jpg"], ["IsaacContrib-UR10-Particle-Push", "rsl_rl", "", "", "", "tasks/manipulation/ur10_particle_push.jpg"], diff --git a/docs/source/_static/tasks/manipulation/h1_tablecloth.jpg b/docs/source/_static/tasks/manipulation/h1_tablecloth.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9e40e05bd3f8990294a05ce832185fdec6e8026e GIT binary patch literal 83603 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�)QJ5qzx9)^;Yd#GbRsPi!6u6#W1X=EKHbHS*1 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 list[UsdPhysicsRigidBodyMaterialCfg | NewtonMaterialCfg]: - """Return solver-common friction and Newton compliant-contact material fragments.""" - return [ - UsdPhysicsRigidBodyMaterialCfg( - static_friction=friction, - dynamic_friction=friction, - restitution=0.0, - density=density, - ), - NewtonMaterialCfg(contact_stiffness=contact_stiffness, contact_damping=contact_damping), - ] - - -def collision_properties() -> list[UsdPhysicsCollisionCfg | NewtonCollisionCfg]: - """Return collision properties shared by cloth-contacting rigid shapes.""" - return [ - UsdPhysicsCollisionCfg(collision_enabled=True), - NewtonCollisionCfg(contact_margin=0.002, contact_gap=RIGID_GAP), - ] - - -def tabletop_collider_cfg( - size: tuple[float, float, float], *, friction: float, contact_stiffness: float, contact_damping: float -) -> sim_utils.CuboidCfg: - """Create a low-cost collision proxy for a visual-only table.""" - return sim_utils.CuboidCfg( - size=size, - visible=False, - collision_props=collision_properties(), - physics_material=rigid_material( - density=None, - friction=friction, - contact_stiffness=contact_stiffness, - contact_damping=contact_damping, - ), - ) - - -def spawn_visual_table_from_usd( - prim_path: str, - cfg: VisualTableUsdFileCfg, - translation: tuple[float, float, float] | None = None, - orientation: tuple[float, float, float, float] | None = None, - **kwargs: object, -) -> Usd.Prim: - """Spawn a visual-only island and remove material inputs unsupported by Newton GL.""" - prim = sim_utils.spawn_from_usd(prim_path, cfg, translation, orientation, **kwargs) - from pxr import UsdShade # noqa: PLC0415 - - for root in sim_utils.find_matching_prims(prim_path): - for child in sim_utils.get_all_matching_child_prims(root.GetPath()): - physics_binding = child.GetRelationship("material:binding:physics") - if physics_binding: - physics_binding.SetTargets([]) - if child.IsA(UsdShade.Shader): - shader = UsdShade.Shader(child) - if shader.GetIdAttr().Get() == "UsdPreviewSurface": - for input_name in ("metallic", "roughness"): - shader.GetInput(input_name).DisconnectSource() - return prim - - -@configclass -class VisualTableUsdFileCfg(sim_utils.UsdFileCfg): - """USD spawner config for a visual-only SimReady kitchen island.""" - - func: Callable | str = spawn_visual_table_from_usd - - -def spawn_tableware_from_usd( - prim_path: str, - cfg: TablewareUsdFileCfg, - translation: tuple[float, float, float] | None = None, - orientation: tuple[float, float, float, float] | None = None, - **kwargs: object, -) -> Usd.Prim: - """Spawn a tableware visual with measured mass and analytic collision proxies.""" - prim = sim_utils.spawn_from_usd(prim_path, cfg, translation, orientation, **kwargs) - from pxr import Gf, UsdPhysics, UsdShade # noqa: PLC0415 - - for root in sim_utils.find_matching_prims(prim_path): - root_path = root.GetPath().pathString - for child in sim_utils.get_all_matching_child_prims(root_path): - physics_binding = child.GetRelationship("material:binding:physics") - if physics_binding: - physics_binding.SetTargets([]) - if child.IsA(UsdShade.Shader): - shader = UsdShade.Shader(child) - shader_id = shader.GetIdAttr().Get() - if shader_id == "UsdPreviewSurface": - for input_name in ("metallic", "roughness"): - shader.GetInput(input_name).DisconnectSource() - if cfg.visual_color is not None: - shader.GetInput("diffuseColor").Set(Gf.Vec3f(*cfg.visual_color)) - if cfg.visual_opacity is not None: - shader.GetInput("opacity").Set(cfg.visual_opacity) - if cfg.visual_roughness is not None: - shader.GetInput("roughness").Set(cfg.visual_roughness) - elif shader_id == "mdl:OmniGlass": - if cfg.visual_color is not None: - shader.GetInput("glass_color").Set(Gf.Vec3f(*cfg.visual_color)) - if cfg.visual_opacity is not None: - shader.GetInput("cutout_opacity").Set(cfg.visual_opacity) - if cfg.visual_roughness is not None: - shader.GetInput("frosting_roughness").Set(cfg.visual_roughness) - - mesh_colliders = sim_utils.get_all_matching_child_prims( - root_path, - predicate=lambda child: child.HasAPI(UsdPhysics.CollisionAPI), - ) - if len(mesh_colliders) != 1: - raise RuntimeError(f"Expected one SimReady tableware mesh collider, found {len(mesh_colliders)}") - UsdPhysics.CollisionAPI(mesh_colliders[0]).CreateCollisionEnabledAttr(False) - - bodies = sim_utils.get_all_matching_child_prims( - root_path, - predicate=lambda child: child.HasAPI(UsdPhysics.RigidBodyAPI), - ) - if len(bodies) != 1: - raise RuntimeError(f"Expected one SimReady tableware rigid body, found {len(bodies)}") - body = bodies[0] - mass_api = UsdPhysics.MassAPI.Apply(body) - mass_api.CreateMassAttr(cfg.mass) - mass_api.CreateDensityAttr(0.0) - if cfg.center_of_mass is not None: - mass_api.CreateCenterOfMassAttr(cfg.center_of_mass) - if cfg.diagonal_inertia is not None: - mass_api.CreateDiagonalInertiaAttr(cfg.diagonal_inertia) - mass_api.CreatePrincipalAxesAttr(Gf.Quatf(1.0, Gf.Vec3f(0.0))) - - proxy_cfgs = (cfg.collision_proxy_cfg, *cfg.additional_collision_proxy_cfgs) - proxy_positions = (cfg.collision_proxy_position, *cfg.additional_collision_proxy_positions) - for index, (proxy_cfg, proxy_position) in enumerate(zip(proxy_cfgs, proxy_positions, strict=True)): - suffix = "" if index == 0 else str(index) - proxy_cfg.func( - f"{body.GetPath()}/CollisionProxy{suffix}", - proxy_cfg, - translation=proxy_position, - orientation=(0.0, 0.0, 0.0, 1.0), - ) - return prim - - -@configclass -class TablewareUsdFileCfg(sim_utils.UsdFileCfg): - """USD spawner config for SimReady visuals with analytic collision proxies.""" - - func: Callable | str = spawn_tableware_from_usd - mass: float = MISSING - collision_proxy_cfg: sim_utils.ShapeCfg = MISSING - collision_proxy_position: tuple[float, float, float] = MISSING - additional_collision_proxy_cfgs: tuple[sim_utils.ShapeCfg, ...] = () - additional_collision_proxy_positions: tuple[tuple[float, float, float], ...] = () - center_of_mass: tuple[float, float, float] | None = None - diagonal_inertia: tuple[float, float, float] | None = None - visual_color: tuple[float, float, float] | None = None - visual_opacity: float | None = None - visual_roughness: float | None = None - - -def rigid_object_cfg( - *, - usd_path: str, - position: tuple[float, float, float], - mass: float, - collision_proxy_cfg: sim_utils.ShapeCfg, - collision_proxy_position: tuple[float, float, float], - orientation: tuple[float, float, float, float] = (0.0, 0.0, 0.0, 1.0), - scale: tuple[float, float, float] | None = None, - center_of_mass: tuple[float, float, float] | None = None, - diagonal_inertia: tuple[float, float, float] | None = None, - additional_collision_proxy_cfgs: tuple[sim_utils.ShapeCfg, ...] = (), - additional_collision_proxy_positions: tuple[tuple[float, float, float], ...] = (), - visual_color: tuple[float, float, float] | None = None, - visual_opacity: float | None = None, - visual_roughness: float | None = None, -) -> RigidObjectCfg: - """Create a dynamic SimReady tableware object with analytic collision.""" - return RigidObjectCfg( - prim_path="", - spawn=TablewareUsdFileCfg( - usd_path=usd_path, - scale=scale, - make_uninstanceable=True, - rigid_props=UsdPhysicsRigidBodyCfg(rigid_body_enabled=True, kinematic_enabled=False), - mass=mass, - collision_proxy_cfg=collision_proxy_cfg, - collision_proxy_position=collision_proxy_position, - additional_collision_proxy_cfgs=additional_collision_proxy_cfgs, - additional_collision_proxy_positions=additional_collision_proxy_positions, - center_of_mass=center_of_mass, - diagonal_inertia=diagonal_inertia, - visual_color=visual_color, - visual_opacity=visual_opacity, - visual_roughness=visual_roughness, - ), - init_state=RigidObjectCfg.InitialStateCfg(pos=position, rot=orientation), - ) - class _StandaloneVideoTarget: """Expose the simulation fields expected by Isaac Lab's step-driven recorder.""" diff --git a/examples/newton_tablecloth.py b/examples/newton_tablecloth.py index 09bd25fadcbd..0c33d14aa27b 100644 --- a/examples/newton_tablecloth.py +++ b/examples/newton_tablecloth.py @@ -43,7 +43,30 @@ sys.path.insert(0, str(Path(__file__).resolve().parent)) import warp as wp -from _newton_tablecloth_utils import ( +from _newton_tablecloth_utils import create_video_recorder +from isaaclab_newton.physics import ( + NewtonCfg, + NewtonCollisionPipelineCfg, + NewtonShapeCfg, + NewtonSoftContactCfg, + VBDSolverCfg, +) +from isaaclab_newton.sim.schemas import NewtonDeformableBodyPropertiesCfg +from isaaclab_newton.sim.spawners.materials import NewtonSurfaceDeformableBodyMaterialCfg + +import isaaclab.sim as sim_utils +from isaaclab.assets import ( + AssetBaseCfg, + DeformableObject, + DeformableObjectCfg, + RigidObjectCfg, + RigidObjectCollectionCfg, +) +from isaaclab.physics import PhysicsEvent +from isaaclab.scene import InteractiveSceneCfg +from isaaclab.utils import configclass + +from isaaclab_tasks.contrib.tablecloth.assets import ( BOWL_LOCAL_HEIGHT, BOWL_LOCAL_RADIUS, BOWL_LOCAL_Z_MIN, @@ -63,32 +86,10 @@ WINE_GLASS_USD, VisualTableUsdFileCfg, collision_properties, - create_video_recorder, rigid_material, rigid_object_cfg, tabletop_collider_cfg, ) -from isaaclab_newton.physics import ( - NewtonCfg, - NewtonCollisionPipelineCfg, - NewtonShapeCfg, - NewtonSoftContactCfg, - VBDSolverCfg, -) -from isaaclab_newton.sim.schemas import NewtonDeformableBodyPropertiesCfg -from isaaclab_newton.sim.spawners.materials import NewtonSurfaceDeformableBodyMaterialCfg - -import isaaclab.sim as sim_utils -from isaaclab.assets import ( - AssetBaseCfg, - DeformableObject, - DeformableObjectCfg, - RigidObjectCfg, - RigidObjectCollectionCfg, -) -from isaaclab.physics import PhysicsEvent -from isaaclab.scene import InteractiveSceneCfg -from isaaclab.utils import configclass FPS = 60 SUBSTEPS = 25 diff --git a/scripts/environments/state_machine/tablecloth_h1.py b/scripts/environments/state_machine/tablecloth_h1.py new file mode 100644 index 000000000000..5cec8f315310 --- /dev/null +++ b/scripts/environments/state_machine/tablecloth_h1.py @@ -0,0 +1,368 @@ +# Copyright (c) 2022-2026, The Isaac Lab Project Developers (https://github.com/isaac-sim/IsaacLab/blob/main/CONTRIBUTORS.md). +# All rights reserved. +# +# SPDX-License-Identifier: BSD-3-Clause + +"""Run a scripted H1 expert on the manager-based tablecloth task. + +The task owns scene construction, physics, actions, observations, resets, +rewards, and terminations. This script only generates the expert's bimanual +task-space commands with a GPU-resident Warp state machine. + +.. code-block:: bash + + uv run --extra importers python scripts/environments/state_machine/tablecloth_h1.py + uv run --extra importers python scripts/environments/state_machine/tablecloth_h1.py \ + --visualizer none --max_steps 312 + + uv run --extra importers --extra isaacsim --extra video python scripts/environments/state_machine/tablecloth_h1.py \ + --visualizer kit --video + +""" + +from __future__ import annotations + +import argparse +import math + +from isaaclab.app import add_launcher_args, launch_simulation + +parser = argparse.ArgumentParser(description="Run the scripted H1 tablecloth expert.") +parser.add_argument("--task", type=str, default="IsaacContrib-Tablecloth-H1", help="Task to run.") +parser.add_argument("--num_envs", type=int, default=1, help="Number of parallel environments.") +parser.add_argument("--max_steps", type=int, default=-1, help="Stop after this many steps; negative runs forever.") +parser.add_argument("--pull_speed", type=float, default=2.0, help="Task-space pull speed [m/s].") +parser.add_argument("--video", action="store_true", help="Record the rollout to videos/tablecloth_h1/.") +add_launcher_args(parser) +parser.set_defaults(visualizer=["newton_gl"]) +args_cli = parser.parse_args() + +import gymnasium as gym +import torch +import warp as wp + +from isaaclab.envs.utils.video_recorder_cfg import VideoRecorderCfg +from isaaclab.utils.math import subtract_frame_transforms + +import isaaclab_tasks # noqa: F401 +from isaaclab_tasks.contrib.tablecloth.mdp._metrics import cloth_pull_distance +from isaaclab_tasks.utils import parse_env_cfg + +FPS = 60 +VIDEO_STEPS = 312 +PULL_DISTANCE = 0.40 +PULL_RAMP_TIME = wp.constant(0.40) +ARM_ACTION_DIM = 21 + +FINGERS_OPEN = (0.0, 0.0, 0.0, 0.0, 0.0) +FINGERS_CURLED = (0.0, 0.0, 0.0, 0.0, 0.80) +FINGERS_INSERTED = (0.0, 0.0, 0.75, 0.75, 0.80) +FINGERS_PREPINCHED = (0.0, 0.0, 0.737080, 0.713855, 0.80) +FINGERS_PINCHED = (1.0, 1.0, 0.737080, 0.713855, 0.80) + +PHASE_DURATIONS = (0.50, 0.80, 0.60, 0.50, 0.60, 0.40, 0.10, 0.10) +PHASE_KEYFRAMES = ((0, 0), (0, 2), (2, 4), (4, 6), (6, 8), (8, 8), (8, 10), (10, 10)) +PHASE_FINGERS = ( + (FINGERS_OPEN, FINGERS_OPEN), + (FINGERS_OPEN, FINGERS_CURLED), + (FINGERS_CURLED, FINGERS_INSERTED), + (FINGERS_INSERTED, FINGERS_INSERTED), + (FINGERS_INSERTED, FINGERS_PREPINCHED), + (FINGERS_PREPINCHED, FINGERS_PINCHED), + (FINGERS_PINCHED, FINGERS_PINCHED), + (FINGERS_PINCHED, FINGERS_PINCHED), +) +STATE_PULL = wp.constant(len(PHASE_DURATIONS)) +STATE_HOLD = wp.constant(len(PHASE_DURATIONS) + 1) + +# Positions are expressed in the robot root frame, matching the absolute Newton IK action contract. +HAND_KEYFRAMES = ( + (0.27, 0.24, 0.140), + (0.27, -0.24, 0.140), + (0.45, 0.24, 0.060), + (0.45, -0.24, 0.060), + (0.45, 0.24, -0.050), + (0.45, -0.24, -0.048), + (0.525, 0.24, -0.050), + (0.525, -0.24, -0.048), + (0.555, 0.24, 0.010), + (0.555, -0.24, 0.010), + (0.555, 0.24, 0.015), + (0.555, -0.24, 0.015), +) +HAND_ROTATIONS = ( + (-0.09022585, 0.46115433, 0.03007528, 0.88220828), + (0.09023000, 0.46114998, -0.03008000, 0.88220997), +) +FINGER_CLOSED_VALUES = ( + 1.273907, + 0.160957, + 0.369535, + 0.892908, + 1.2, + 1.2, + 1.0, + 1.0, + 1.0, + 1.0, + 1.0, + 1.0, + 1.192278, + 0.195421, + 0.400690, + 0.679765, + 1.2, + 1.2, + 1.0, + 1.0, + 1.0, + 1.0, + 1.0, + 1.0, +) +FINGER_GROUPS = (0, 0, 0, 0, 2, 2, 4, 4, 4, 4, 4, 4, 1, 1, 1, 1, 3, 3, 4, 4, 4, 4, 4, 4) + + +@wp.func +def _smoothstep(value: float) -> float: + value = wp.clamp(value, 0.0, 1.0) + return value * value * (3.0 - 2.0 * value) + + +@wp.kernel +def _infer_state_machine( + dt: float, + pull_speed: float, + keyframes: wp.array(dtype=wp.vec3), + hand_rotations: wp.array(dtype=wp.vec4), + torso_pose: wp.array2d(dtype=float), + phase_durations: wp.array(dtype=float), + phase_start_keyframes: wp.array(dtype=wp.int32), + phase_end_keyframes: wp.array(dtype=wp.int32), + phase_start_fingers: wp.array(dtype=float), + phase_end_fingers: wp.array(dtype=float), + finger_closed_values: wp.array(dtype=float), + finger_groups: wp.array(dtype=wp.int32), + finger_fractions: wp.array2d(dtype=float), + state: wp.array(dtype=wp.int32), + state_time: wp.array(dtype=float), + pull_distance: wp.array(dtype=float), + actions: wp.array2d(dtype=float), +): + env_id = wp.tid() + current_state = state[env_id] + elapsed = state_time[env_id] + dt + + if current_state < STATE_PULL and elapsed >= phase_durations[current_state]: + current_state += 1 + elapsed = 0.0 + + left = keyframes[0] + right = keyframes[1] + if current_state < STATE_PULL: + alpha = _smoothstep(elapsed / phase_durations[current_state]) + start_keyframe = phase_start_keyframes[current_state] + end_keyframe = phase_end_keyframes[current_state] + left = wp.lerp(keyframes[start_keyframe], keyframes[end_keyframe], alpha) + right = wp.lerp(keyframes[start_keyframe + 1], keyframes[end_keyframe + 1], alpha) + for group in range(5): + index = current_state * 5 + group + finger_fractions[env_id, group] = wp.lerp(phase_start_fingers[index], phase_end_fingers[index], alpha) + elif current_state == STATE_PULL: + speed_ramp = _smoothstep(elapsed / PULL_RAMP_TIME) + distance = wp.min(pull_distance[env_id] + speed_ramp * pull_speed * dt, PULL_DISTANCE) + pull_distance[env_id] = distance + drop = 0.0 + if distance > 0.08: + drop = 0.175 * _smoothstep((distance - 0.08) / (PULL_DISTANCE - 0.08)) + offset = wp.vec3(-distance, 0.0, -drop) + left = keyframes[10] + offset + right = keyframes[11] + offset + for group in range(5): + finger_fractions[env_id, group] = phase_end_fingers[(STATE_PULL - 1) * 5 + group] + if distance >= PULL_DISTANCE: + current_state = STATE_HOLD + else: + distance = pull_distance[env_id] + drop = 0.175 * _smoothstep((distance - 0.08) / (PULL_DISTANCE - 0.08)) + offset = wp.vec3(-distance, 0.0, -drop) + left = keyframes[10] + offset + right = keyframes[11] + offset + for group in range(5): + finger_fractions[env_id, group] = phase_end_fingers[(STATE_PULL - 1) * 5 + group] + + for axis in range(3): + actions[env_id, axis] = left[axis] + actions[env_id, 7 + axis] = right[axis] + for axis in range(4): + actions[env_id, 3 + axis] = hand_rotations[0][axis] + actions[env_id, 10 + axis] = hand_rotations[1][axis] + for axis in range(7): + actions[env_id, 14 + axis] = torso_pose[env_id, axis] + + for finger in range(finger_closed_values.shape[0]): + fraction = finger_fractions[env_id, finger_groups[finger]] + actions[env_id, ARM_ACTION_DIM + finger] = fraction * finger_closed_values[finger] + + state[env_id] = current_state + state_time[env_id] = elapsed + + +class H1TableclothStateMachine: + """Generate batched absolute hand poses and finger targets on the simulation device.""" + + def __init__(self, dt: float, torso_pose: torch.Tensor, action_dim: int, pull_speed: float): + self.num_envs = torso_pose.shape[0] + self.device = torso_pose.device + self._warp_device = wp.device_from_torch(self.device) + self.dt = dt + self.pull_speed = pull_speed + expected_action_dim = ARM_ACTION_DIM + len(FINGER_CLOSED_VALUES) + if action_dim != expected_action_dim: + raise ValueError(f"Expected a {expected_action_dim}-D H1 action, received {action_dim}") + + phases = list(zip(PHASE_DURATIONS, PHASE_KEYFRAMES, PHASE_FINGERS, strict=True)) + self._keyframes = wp.array(HAND_KEYFRAMES, dtype=wp.vec3, device=self._warp_device) + self._hand_rotations = wp.array(HAND_ROTATIONS, dtype=wp.vec4, device=self._warp_device) + self._torso_pose = wp.from_torch(torso_pose.contiguous(), dtype=wp.float32) + self._phase_durations = wp.array([phase[0] for phase in phases], dtype=float, device=self._warp_device) + self._phase_start_keyframes = wp.array( + [phase[1][0] for phase in phases], dtype=wp.int32, device=self._warp_device + ) + self._phase_end_keyframes = wp.array( + [phase[1][1] for phase in phases], dtype=wp.int32, device=self._warp_device + ) + self._phase_start_fingers = wp.array( + [value for phase in phases for value in phase[2][0]], dtype=float, device=self._warp_device + ) + self._phase_end_fingers = wp.array( + [value for phase in phases for value in phase[2][1]], dtype=float, device=self._warp_device + ) + self._finger_closed_values = wp.array(FINGER_CLOSED_VALUES, dtype=float, device=self._warp_device) + self._finger_groups = wp.array(FINGER_GROUPS, dtype=wp.int32, device=self._warp_device) + self._finger_fractions = wp.zeros((self.num_envs, 5), dtype=float, device=self._warp_device) + self._state = wp.zeros(self.num_envs, dtype=wp.int32, device=self._warp_device) + self._state_time = wp.zeros(self.num_envs, dtype=float, device=self._warp_device) + self._pull_distance = wp.zeros(self.num_envs, dtype=float, device=self._warp_device) + self.actions = torch.zeros((self.num_envs, action_dim), device=self.device) + self._actions = wp.from_torch(self.actions, dtype=wp.float32) + + def reset_idx(self, env_ids: torch.Tensor) -> None: + """Reset the expert for environments that have started a new episode.""" + wp.to_torch(self._state)[env_ids] = 0 + wp.to_torch(self._state_time)[env_ids] = 0.0 + wp.to_torch(self._pull_distance)[env_ids] = 0.0 + wp.to_torch(self._finger_fractions)[env_ids] = 0.0 + + def compute(self) -> torch.Tensor: + """Advance the expert and return its batched action tensor.""" + wp.launch( + _infer_state_machine, + dim=self.num_envs, + inputs=[ + self.dt, + self.pull_speed, + self._keyframes, + self._hand_rotations, + self._torso_pose, + self._phase_durations, + self._phase_start_keyframes, + self._phase_end_keyframes, + self._phase_start_fingers, + self._phase_end_fingers, + self._finger_closed_values, + self._finger_groups, + self._finger_fractions, + self._state, + self._state_time, + self._pull_distance, + self._actions, + ], + device=self._warp_device, + ) + return self.actions + + +def _torso_pose_in_robot_frame(env) -> torch.Tensor: + robot = env.scene["robot"] + torso_ids, _ = robot.find_bodies("torso_link") + torso_pos, torso_quat = subtract_frame_transforms( + robot.data.root_pos_w.torch, + robot.data.root_quat_w.torch, + robot.data.body_pos_w.torch[:, torso_ids[0]], + robot.data.body_quat_w.torch[:, torso_ids[0]], + ) + return torch.cat((torso_pos, torso_quat), dim=-1) + + +def main() -> None: + """Launch the task and run its scripted expert.""" + if not math.isfinite(args_cli.pull_speed) or args_cli.pull_speed <= 0.0: + raise ValueError("--pull_speed must be finite and positive") + if args_cli.video and "none" in (args_cli.visualizer or []): + raise ValueError("--video requires a capture-capable visualizer; omit --visualizer none") + if args_cli.video and "kit" in (args_cli.visualizer or []): + args_cli.enable_cameras = True + + max_steps = VIDEO_STEPS if args_cli.video and args_cli.max_steps < 0 else args_cli.max_steps + env_cfg = parse_env_cfg(args_cli.task, device=args_cli.device, num_envs=args_cli.num_envs) + success_term = env_cfg.terminations.success + # The expert rollout should remain visible after task completion rather than auto-resetting. + env_cfg.terminations.success = None + env_cfg.terminations.tableware_fallen = None + env_cfg.rewards.success = None + if args_cli.video: + env_cfg.video_recorders = [ + VideoRecorderCfg( + source="visualizer", + output_dir="videos/tablecloth_h1", + output_filename_prefix="tablecloth_h1", + fps=FPS, + video_length=max_steps, + ) + ] + + with launch_simulation(cfg=env_cfg, launcher_args=args_cli): + env = gym.make(args_cli.task, cfg=env_cfg) + try: + env.reset() + state_machine = H1TableclothStateMachine( + env.unwrapped.step_dt, + _torso_pose_in_robot_frame(env.unwrapped), + env.unwrapped.action_manager.total_action_dim, + args_cli.pull_speed, + ) + print("[INFO]: Setup complete. H1 tablecloth expert is ready.", flush=True) + step = 0 + while env.unwrapped.sim.is_running() and (max_steps < 0 or step < max_steps): + with torch.inference_mode(): + _, _, terminated, truncated, _ = env.step(state_machine.compute()) + dones = terminated | truncated + if dones.any(): + state_machine.reset_idx(dones.nonzero(as_tuple=False).squeeze(-1)) + step += 1 + success = success_term.func(env.unwrapped, **success_term.params) + displacements = { + name: torch.linalg.vector_norm( + env.unwrapped.scene[name].data.root_pos_w.torch[:, :3] + - env.unwrapped.scene[name].data.default_root_pose.torch[:, :3] + - env.unwrapped.scene.env_origins, + dim=1, + ) + for name in success_term.params["asset_names"] + } + maximum_displacement = torch.stack(list(displacements.values())).amax(dim=0) + displacement_report = {name: value.tolist() for name, value in displacements.items()} + print( + f"[INFO]: Tablecloth trick success: {success.tolist()}, cloth travel [m]: " + f"{cloth_pull_distance(env.unwrapped).tolist()}, " + f"maximum tableware displacement [m]: {maximum_displacement.tolist()}, " + f"by object: {displacement_report}", + flush=True, + ) + finally: + env.close() + + +if __name__ == "__main__": + main() diff --git a/source/isaaclab/changelog.d/max-newton-tablecloth-demos.minor.rst b/source/isaaclab/changelog.d/max-newton-tablecloth-demos.minor.rst index b652da3c9155..79fedea894a8 100644 --- a/source/isaaclab/changelog.d/max-newton-tablecloth-demos.minor.rst +++ b/source/isaaclab/changelog.d/max-newton-tablecloth-demos.minor.rst @@ -2,3 +2,4 @@ Added ^^^^^ * Added the ``newton-tablecloth`` example to the Isaac Lab command-line catalog and standalone smoke coverage. +* Added standalone smoke coverage for the H1 tablecloth state-machine example. diff --git a/source/isaaclab/test/app/standalone_script_cases.py b/source/isaaclab/test/app/standalone_script_cases.py index a23da90e69f5..6fb93ce4ab33 100644 --- a/source/isaaclab/test/app/standalone_script_cases.py +++ b/source/isaaclab/test/app/standalone_script_cases.py @@ -31,6 +31,7 @@ # ``scripts/tools`` is not a root because most of its scripts are not simulator launches. The asset # converters are: they build a SimulationContext to preview the converted asset. EXTRA_SCRIPTS = ( + ROOT / "scripts" / "environments" / "state_machine" / "tablecloth_h1.py", ROOT / "scripts" / "tools" / "convert_urdf.py", ROOT / "scripts" / "tools" / "convert_mjcf.py", ) @@ -227,6 +228,12 @@ class SmokeResult: fixed_physics_backend="newton_vbd", visualizers=("newton_gl",), ), + "scripts/environments/state_machine/tablecloth_h1.py": ScriptOverride( + args=("--max_steps", "2"), + fixed_physics_backend="newton_vbd", + visualizers=("newton_gl",), + required_modules=("isaacsim.asset.importer.mjcf",), + ), "examples/sensors/cameras.py": ScriptOverride(args=("--num_envs", "1"), startup_timeout=900.0), "examples/sensors/multi_mesh_raycaster.py": ScriptOverride( args=("--flat_ground",), diff --git a/source/isaaclab_newton/changelog.d/max-vbd-tablecloth-demos.minor.rst b/source/isaaclab_newton/changelog.d/max-vbd-tablecloth-demos.minor.rst deleted file mode 100644 index 54bf9bbc17df..000000000000 --- a/source/isaaclab_newton/changelog.d/max-vbd-tablecloth-demos.minor.rst +++ /dev/null @@ -1,9 +0,0 @@ -Added -^^^^^ - -* Added a five-speed tablecloth demo built with Isaac Lab scene and asset configurations. - -Fixed -^^^^^ - -* Included active bending constraints when graph-coloring VBD deformable models. diff --git a/source/isaaclab_newton/changelog.d/max-vbd-tablecloth-demos.rst b/source/isaaclab_newton/changelog.d/max-vbd-tablecloth-demos.rst new file mode 100644 index 000000000000..7ab72223ee0e --- /dev/null +++ b/source/isaaclab_newton/changelog.d/max-vbd-tablecloth-demos.rst @@ -0,0 +1,6 @@ +Fixed +^^^^^ + +* Included active bending constraints when graph-coloring VBD deformable models. +* Fixed Newton IK action setup for fixed-base articulations whose root joint is nested beneath the asset prim. +* Synchronized VBD joint coordinates and velocities with integrated body state so articulation and rigid-object data remained current. diff --git a/source/isaaclab_newton/isaaclab_newton/envs/mdp/actions/newton_ik_actions.py b/source/isaaclab_newton/isaaclab_newton/envs/mdp/actions/newton_ik_actions.py index 5e123de01223..d4fc2f3dd934 100644 --- a/source/isaaclab_newton/isaaclab_newton/envs/mdp/actions/newton_ik_actions.py +++ b/source/isaaclab_newton/isaaclab_newton/envs/mdp/actions/newton_ik_actions.py @@ -181,8 +181,9 @@ def __init__(self, cfg: NewtonInverseKinematicsActionCfg, env: ManagerBasedEnv): sources = cloner.path.get_asset_prototype_paths(plan) self._source_path = next(sources[index] for index in asset_ids if sources[index] is not None) prototype_model = NewtonManager._cl_protos[self._source_path].finalize(device=NewtonManager.get_model().device) + articulation_path = self._source_path + (self._asset.cfg.articulation_root_prim_path or "") prototype_view = ArticulationView( - prototype_model, self._source_path, verbose=False, exclude_joint_types=[JointType.FREE, JointType.FIXED] + prototype_model, articulation_path, verbose=False, exclude_joint_types=[JointType.FREE, JointType.FIXED] ) coord_ids = self._resolve_prototype_joint_coord_ids(prototype_view, self._asset.joint_names) controlled_ids = self._resolve_prototype_joint_coord_ids(prototype_view, self._joint_names) diff --git a/source/isaaclab_newton/isaaclab_newton/physics/vbd_manager.py b/source/isaaclab_newton/isaaclab_newton/physics/vbd_manager.py index a4a55f57bdc3..6570e50126f8 100644 --- a/source/isaaclab_newton/isaaclab_newton/physics/vbd_manager.py +++ b/source/isaaclab_newton/isaaclab_newton/physics/vbd_manager.py @@ -7,7 +7,7 @@ from __future__ import annotations -from newton import Model, ModelBuilder +from newton import Model, ModelBuilder, eval_ik from newton.solvers import SolverVBD from .newton_manager import NewtonManager @@ -35,6 +35,14 @@ def _build_solver(cls, model: Model, solver_cfg: VBDSolverCfg) -> None: NewtonManager._needs_collision_pipeline = True NewtonManager._supports_rigid_body_force_input = not solver_cfg.integrate_with_external_rigid_solver + @classmethod + def _run_solver_substeps(cls, contacts) -> None: + """Synchronize generalized joint state from VBD's maximal-coordinate body state.""" + super()._run_solver_substeps(contacts) + if cls.backend.model.articulation_count > 0 and cls.backend.model.joint_coord_count > 0: + state = cls.backend.state_0 + eval_ik(cls.backend.model, state, state.joint_q, state.joint_qd) + @classmethod def _simulate_physics_only(cls) -> None: """Rebuild the VBD particle BVH before stepping physics.""" diff --git a/source/isaaclab_newton/test/assets/test_rigid_object.py b/source/isaaclab_newton/test/assets/test_rigid_object.py index 39a756a60b12..d317928766d8 100644 --- a/source/isaaclab_newton/test/assets/test_rigid_object.py +++ b/source/isaaclab_newton/test/assets/test_rigid_object.py @@ -20,7 +20,7 @@ import warp as wp from flaky import flaky from isaaclab_newton.assets import RigidObject -from isaaclab_newton.physics import MJWarpSolverCfg, NewtonCfg +from isaaclab_newton.physics import MJWarpSolverCfg, NewtonCfg, VBDSolverCfg from isaaclab_newton.physics import NewtonManager as SimulationManager from isaaclab_physx.sim.schemas import PhysxRigidBodyCfg from newton import ModelFlags @@ -123,6 +123,30 @@ def generate_cubes_scene( return cube_object, torch.as_tensor(origins, device=device) +@pytest.mark.parametrize("device", test_devices(DeviceScope.CUDA)) +def test_vbd_root_state_tracks_integrated_body(device): + """The public rigid-object root pose and velocity must follow a VBD-integrated free body.""" + sim_cfg = SimulationCfg( + device=device, physics=NewtonCfg(solver_cfg=VBDSolverCfg(iterations=5, rigid_compliant_alm=True)) + ) + with build_simulation_context(sim_cfg=sim_cfg, auto_add_lighting=True) as sim: + sim._app_control_on_stop_handle = None + cube_object, _ = generate_cubes_scene(device=device) + replicate(sim.get_clone_plan()) + sim.reset() + + initial_height = cube_object.data.root_link_pose_w.torch[0, 2].item() + sim.step() + cube_object.update(sim.cfg.dt) + + body_pose = cube_object.data.body_link_pose_w.torch[:, 0] + body_velocity = cube_object.data.body_com_vel_w.torch[:, 0] + assert body_pose[0, 2] < initial_height + assert body_velocity[0, 2] < 0.0 + torch.testing.assert_close(cube_object.data.root_link_pose_w.torch, body_pose) + torch.testing.assert_close(cube_object.data.root_com_vel_w.torch, body_velocity) + + @pytest.mark.isaacsim_ci @pytest.mark.parametrize("api", ["none", "articulation_root"]) def test_initialization_rejects_non_rigid_body_prims(api): diff --git a/source/isaaclab_newton/test/physics/test_vbd_core.py b/source/isaaclab_newton/test/physics/test_vbd_core.py index fef0206a832e..ebec4167f6dd 100644 --- a/source/isaaclab_newton/test/physics/test_vbd_core.py +++ b/source/isaaclab_newton/test/physics/test_vbd_core.py @@ -11,6 +11,7 @@ from types import SimpleNamespace import pytest +import warp as wp from isaaclab_newton.physics import NewtonBackendCfg, NewtonBuilderCfg, NewtonCfg, NewtonManager, NewtonSoftContactCfg from newton import ModelBuilder from newton.solvers import SolverVBD @@ -79,16 +80,23 @@ def control(self): def test_vbd_colors_builder_before_finalization(): - """VBD colors the completed builder in the existing pre-finalization hook.""" + """Particles coupled by active cloth bending must receive distinct solver colors.""" physics = importlib.import_module("isaaclab_newton.physics") - events = [] - - class Builder: - def color(self, *, include_bending, balance_colors): - events.append(("color", include_bending, balance_colors)) - - physics.NewtonVBDManager._prepare_builder_for_finalize(Builder()) - assert events == [("color", True, False)] + builder = ModelBuilder() + builder.add_cloth_grid( + pos=wp.vec3(0.0), + rot=wp.quat_identity(), + vel=wp.vec3(0.0), + dim_x=1, + dim_y=1, + cell_x=0.1, + cell_y=0.1, + mass=0.01, + edge_ke=1.0, + ) + physics.NewtonVBDManager._prepare_builder_for_finalize(builder) + colors = {int(particle): color for color, group in enumerate(builder.particle_color_groups) for particle in group} + assert len(set(colors.values())) == builder.particle_count def test_vbd_solver_force_input_capability(monkeypatch): @@ -158,6 +166,39 @@ def test_vbd_compliant_alm_cable_stiffness(): assert state_0.body_q.numpy()[body, 2] == pytest.approx(-expected_extension, rel=0.01) +def test_vbd_publishes_joint_state_after_body_motion(monkeypatch): + """The public joint state follows maximal-coordinate VBD motion.""" + physics = importlib.import_module("isaaclab_newton.physics") + builder = ModelBuilder(gravity=(0.0, 0.0, -9.81)) + body = builder.add_link() + builder.add_shape_sphere(body=body, radius=0.05) + joint = builder.add_joint_prismatic( + parent=-1, child=body, axis=wp.vec3(0.0, 0.0, 1.0), limit_lower=-1.0, limit_upper=1.0 + ) + builder.add_articulation([joint]) + builder.color() + model = builder.finalize(device="cpu") + backend = SimpleNamespace(model=model, state_0=model.state(), state_1=model.state(), control=model.control()) + manager = physics.NewtonVBDManager + monkeypatch.setattr(manager, "backend", backend) + monkeypatch.setattr(manager, "_solver", SolverVBD(model, iterations=10, rigid_compliant_alm=True)) + monkeypatch.setattr(manager, "_use_single_state", False) + monkeypatch.setattr(manager, "_needs_collision_pipeline", False) + monkeypatch.setattr(manager, "_collision_decimation", 0) + monkeypatch.setattr(manager, "_num_substeps", 2) + monkeypatch.setattr(manager, "_solver_dt", 1.0 / 60.0) + monkeypatch.setattr(manager, "_state_force_callbacks", []) + + manager._run_solver_substeps(None) + + joint_coord = model.joint_q_start.numpy()[joint] + joint_dof = model.joint_qd_start.numpy()[joint] + body_height = backend.state_0.body_q.numpy()[body, 2] + assert body_height < -1.0e-4 + assert backend.state_0.joint_q.numpy()[joint_coord] == pytest.approx(body_height, abs=1.0e-4) + assert backend.state_0.joint_qd.numpy()[joint_dof] < 0.0 + + def test_vbd_rebuilds_particle_bvh_before_physics_step(monkeypatch): """VBD rebuilds its particle BVH before the base physics step.""" physics = importlib.import_module("isaaclab_newton.physics") diff --git a/source/isaaclab_tasks/changelog.d/max-tablecloth-h1-task.minor.rst b/source/isaaclab_tasks/changelog.d/max-tablecloth-h1-task.minor.rst new file mode 100644 index 000000000000..6f30ba59bfce --- /dev/null +++ b/source/isaaclab_tasks/changelog.d/max-tablecloth-h1-task.minor.rst @@ -0,0 +1,4 @@ +Added +^^^^^ + +* Added the ``IsaacContrib-Tablecloth-H1`` manager-based task and a GPU-resident scripted expert. diff --git a/source/isaaclab_tasks/isaaclab_tasks/contrib/tablecloth/__init__.py b/source/isaaclab_tasks/isaaclab_tasks/contrib/tablecloth/__init__.py new file mode 100644 index 000000000000..fc08e34480ba --- /dev/null +++ b/source/isaaclab_tasks/isaaclab_tasks/contrib/tablecloth/__init__.py @@ -0,0 +1,15 @@ +# Copyright (c) 2022-2026, The Isaac Lab Project Developers (https://github.com/isaac-sim/IsaacLab/blob/main/CONTRIBUTORS.md). +# All rights reserved. +# +# SPDX-License-Identifier: BSD-3-Clause + +"""H1 tablecloth task registration.""" + +import gymnasium as gym + +gym.register( + id="IsaacContrib-Tablecloth-H1", + entry_point=f"{__name__}.h1_env:H1TableclothEnv", + disable_env_checker=True, + kwargs={"env_cfg_entry_point": f"{__name__}.h1_env_cfg:H1TableclothEnvCfg"}, +) diff --git a/source/isaaclab_tasks/isaaclab_tasks/contrib/tablecloth/assets.py b/source/isaaclab_tasks/isaaclab_tasks/contrib/tablecloth/assets.py new file mode 100644 index 000000000000..9235669e6216 --- /dev/null +++ b/source/isaaclab_tasks/isaaclab_tasks/contrib/tablecloth/assets.py @@ -0,0 +1,269 @@ +# Copyright (c) 2022-2026, The Isaac Lab Project Developers (https://github.com/isaac-sim/IsaacLab/blob/main/CONTRIBUTORS.md). +# All rights reserved. +# +# SPDX-License-Identifier: BSD-3-Clause + +"""Shared SimReady asset helpers for the tablecloth examples.""" + +from __future__ import annotations + +from collections.abc import Callable +from dataclasses import MISSING +from typing import TYPE_CHECKING + +from isaaclab_newton.sim.schemas import NewtonCollisionCfg +from isaaclab_newton.sim.spawners.materials import NewtonMaterialCfg + +import isaaclab.sim as sim_utils +from isaaclab.assets import RigidObjectCfg +from isaaclab.sim.schemas import UsdPhysicsCollisionCfg, UsdPhysicsRigidBodyCfg +from isaaclab.sim.spawners.materials import UsdPhysicsRigidBodyMaterialCfg +from isaaclab.utils import configclass +from isaaclab.utils.assets import ISAAC_NUCLEUS_DIR + +if TYPE_CHECKING: + from pxr import Usd + +RIGID_GAP = 0.001 +H1_PELVIS_HEIGHT = 1.1 + +KITCHEN_ISLAND_USD = ( + f"{ISAAC_NUCLEUS_DIR}/SimReady/Residential/Kitchen/Counters/Island_A01/sm_fixture_island_a01_01.usd" +) +BOWL_USD = f"{ISAAC_NUCLEUS_DIR}/SimReady/Residential/Kitchen/Dishware/Bowl_G01/sm_kitchenware_bowl_g01_01.usd" +WINE_GLASS_USD = ( + f"{ISAAC_NUCLEUS_DIR}/SimReady/Residential/Furnishing/Kitchen/Kitchenware/Dishware/Glass_Wine_A01/" + "sm_dishware_glass_wine_a01_01.usd" +) +FORK_USD = f"{ISAAC_NUCLEUS_DIR}/SimReady/Residential/Kitchen/Utensils/Fork_K01/sm_kitchenware_fork_k01_01.usd" + +# Dimensions measured from the SimReady assets. +KITCHEN_ISLAND_SIZE = (0.631293, 1.240893, 0.900409) +BOWL_LOCAL_Z_MIN = 0.000001783 +BOWL_LOCAL_RADIUS = 0.052765541 +BOWL_LOCAL_HEIGHT = 0.043569469 +WINE_GLASS_LOCAL_Z_MIN = 0.000358 +FORK_LOCAL_Z_MIN = 0.000127 +BOWL_SCALE = 1.35 +FORK_SCALE = 0.85 +FORK_ROTATION = (0.0, 0.0, -0.70710678, 0.70710678) +FORK_CENTER_OF_MASS = (0.0, 0.0092, 0.0089) +FORK_DIAGONAL_INERTIA = (1.86e-4, 6.2e-6, 1.90e-4) +# A base-only collision proxy would otherwise give the tall glass a flat-disk inertia. +WINE_GLASS_CENTER_OF_MASS = (0.0, 0.0, 0.04) +WINE_GLASS_DIAGONAL_INERTIA = (3.0e-3, 3.0e-3, 5.0e-4) + + +def rigid_material( + *, density: float | None, friction: float, contact_stiffness: float, contact_damping: float +) -> list[UsdPhysicsRigidBodyMaterialCfg | NewtonMaterialCfg]: + """Return solver-common friction and Newton compliant-contact material fragments.""" + return [ + UsdPhysicsRigidBodyMaterialCfg( + static_friction=friction, + dynamic_friction=friction, + restitution=0.0, + density=density, + ), + NewtonMaterialCfg(contact_stiffness=contact_stiffness, contact_damping=contact_damping), + ] + + +def collision_properties() -> list[UsdPhysicsCollisionCfg | NewtonCollisionCfg]: + """Return collision properties shared by cloth-contacting rigid shapes.""" + return [ + UsdPhysicsCollisionCfg(collision_enabled=True), + NewtonCollisionCfg(contact_margin=0.002, contact_gap=RIGID_GAP), + ] + + +def spawn_h1_from_usd( + prim_path: str, + cfg: sim_utils.UsdFileCfg, + translation: tuple[float, float, float] | None = None, + orientation: tuple[float, float, float, float] | None = None, + **kwargs: object, +) -> Usd.Prim: + """Spawn H1 while accounting for the MJCF's pelvis-height transform.""" + if translation is not None: + translation = (translation[0], translation[1], translation[2] - H1_PELVIS_HEIGHT) + return sim_utils.spawn_from_usd(prim_path, cfg, translation, orientation, **kwargs) + + +def tabletop_collider_cfg( + size: tuple[float, float, float], *, friction: float, contact_stiffness: float, contact_damping: float +) -> sim_utils.CuboidCfg: + """Create a low-cost collision proxy for a visual-only table.""" + return sim_utils.CuboidCfg( + size=size, + visible=False, + collision_props=collision_properties(), + physics_material=rigid_material( + density=None, + friction=friction, + contact_stiffness=contact_stiffness, + contact_damping=contact_damping, + ), + ) + + +def spawn_visual_table_from_usd( + prim_path: str, + cfg: VisualTableUsdFileCfg, + translation: tuple[float, float, float] | None = None, + orientation: tuple[float, float, float, float] | None = None, + **kwargs: object, +) -> Usd.Prim: + """Spawn a visual-only island and remove material inputs unsupported by Newton GL.""" + prim = sim_utils.spawn_from_usd(prim_path, cfg, translation, orientation, **kwargs) + from pxr import UsdShade # noqa: PLC0415 + + for root in sim_utils.find_matching_prims(prim_path): + for child in sim_utils.get_all_matching_child_prims(root.GetPath()): + physics_binding = child.GetRelationship("material:binding:physics") + if physics_binding: + physics_binding.SetTargets([]) + if child.IsA(UsdShade.Shader): + shader = UsdShade.Shader(child) + if shader.GetIdAttr().Get() == "UsdPreviewSurface": + for input_name in ("metallic", "roughness"): + shader.GetInput(input_name).DisconnectSource() + return prim + + +@configclass +class VisualTableUsdFileCfg(sim_utils.UsdFileCfg): + """USD spawner config for a visual-only SimReady kitchen island.""" + + func: Callable | str = spawn_visual_table_from_usd + + +def spawn_tableware_from_usd( + prim_path: str, + cfg: TablewareUsdFileCfg, + translation: tuple[float, float, float] | None = None, + orientation: tuple[float, float, float, float] | None = None, + **kwargs: object, +) -> Usd.Prim: + """Spawn a tableware visual with measured mass and analytic collision proxies.""" + prim = sim_utils.spawn_from_usd(prim_path, cfg, translation, orientation, **kwargs) + from pxr import Gf, UsdPhysics, UsdShade # noqa: PLC0415 + + for root in sim_utils.find_matching_prims(prim_path): + root_path = root.GetPath().pathString + for child in sim_utils.get_all_matching_child_prims(root_path): + physics_binding = child.GetRelationship("material:binding:physics") + if physics_binding: + physics_binding.SetTargets([]) + if child.IsA(UsdShade.Shader): + shader = UsdShade.Shader(child) + shader_id = shader.GetIdAttr().Get() + if shader_id == "UsdPreviewSurface": + for input_name in ("metallic", "roughness"): + shader.GetInput(input_name).DisconnectSource() + if cfg.visual_color is not None: + shader.GetInput("diffuseColor").Set(Gf.Vec3f(*cfg.visual_color)) + if cfg.visual_opacity is not None: + shader.GetInput("opacity").Set(cfg.visual_opacity) + if cfg.visual_roughness is not None: + shader.GetInput("roughness").Set(cfg.visual_roughness) + elif shader_id == "mdl:OmniGlass": + if cfg.visual_color is not None: + shader.GetInput("glass_color").Set(Gf.Vec3f(*cfg.visual_color)) + if cfg.visual_opacity is not None: + shader.GetInput("cutout_opacity").Set(cfg.visual_opacity) + if cfg.visual_roughness is not None: + shader.GetInput("frosting_roughness").Set(cfg.visual_roughness) + + mesh_colliders = sim_utils.get_all_matching_child_prims( + root_path, + predicate=lambda child: child.HasAPI(UsdPhysics.CollisionAPI), + ) + if len(mesh_colliders) != 1: + raise RuntimeError(f"Expected one SimReady tableware mesh collider, found {len(mesh_colliders)}") + UsdPhysics.CollisionAPI(mesh_colliders[0]).CreateCollisionEnabledAttr(False) + + bodies = sim_utils.get_all_matching_child_prims( + root_path, + predicate=lambda child: child.HasAPI(UsdPhysics.RigidBodyAPI), + ) + if len(bodies) != 1: + raise RuntimeError(f"Expected one SimReady tableware rigid body, found {len(bodies)}") + body = bodies[0] + mass_api = UsdPhysics.MassAPI.Apply(body) + mass_api.CreateMassAttr(cfg.mass) + mass_api.CreateDensityAttr(0.0) + if cfg.center_of_mass is not None: + mass_api.CreateCenterOfMassAttr(cfg.center_of_mass) + if cfg.diagonal_inertia is not None: + mass_api.CreateDiagonalInertiaAttr(cfg.diagonal_inertia) + mass_api.CreatePrincipalAxesAttr(Gf.Quatf(1.0, Gf.Vec3f(0.0))) + + proxy_cfgs = (cfg.collision_proxy_cfg, *cfg.additional_collision_proxy_cfgs) + proxy_positions = (cfg.collision_proxy_position, *cfg.additional_collision_proxy_positions) + for index, (proxy_cfg, proxy_position) in enumerate(zip(proxy_cfgs, proxy_positions, strict=True)): + suffix = "" if index == 0 else str(index) + proxy_cfg.func( + f"{body.GetPath()}/CollisionProxy{suffix}", + proxy_cfg, + translation=proxy_position, + orientation=(0.0, 0.0, 0.0, 1.0), + ) + return prim + + +@configclass +class TablewareUsdFileCfg(sim_utils.UsdFileCfg): + """USD spawner config for SimReady visuals with analytic collision proxies.""" + + func: Callable | str = spawn_tableware_from_usd + mass: float = MISSING + collision_proxy_cfg: sim_utils.ShapeCfg = MISSING + collision_proxy_position: tuple[float, float, float] = MISSING + additional_collision_proxy_cfgs: tuple[sim_utils.ShapeCfg, ...] = () + additional_collision_proxy_positions: tuple[tuple[float, float, float], ...] = () + center_of_mass: tuple[float, float, float] | None = None + diagonal_inertia: tuple[float, float, float] | None = None + visual_color: tuple[float, float, float] | None = None + visual_opacity: float | None = None + visual_roughness: float | None = None + + +def rigid_object_cfg( + *, + usd_path: str, + position: tuple[float, float, float], + mass: float, + collision_proxy_cfg: sim_utils.ShapeCfg, + collision_proxy_position: tuple[float, float, float], + orientation: tuple[float, float, float, float] = (0.0, 0.0, 0.0, 1.0), + scale: tuple[float, float, float] | None = None, + center_of_mass: tuple[float, float, float] | None = None, + diagonal_inertia: tuple[float, float, float] | None = None, + additional_collision_proxy_cfgs: tuple[sim_utils.ShapeCfg, ...] = (), + additional_collision_proxy_positions: tuple[tuple[float, float, float], ...] = (), + visual_color: tuple[float, float, float] | None = None, + visual_opacity: float | None = None, + visual_roughness: float | None = None, +) -> RigidObjectCfg: + """Create a dynamic SimReady tableware object with analytic collision.""" + return RigidObjectCfg( + prim_path="", + spawn=TablewareUsdFileCfg( + usd_path=usd_path, + scale=scale, + make_uninstanceable=True, + rigid_props={"(/.*)?": [UsdPhysicsRigidBodyCfg(rigid_body_enabled=True, kinematic_enabled=False)]}, + mass=mass, + collision_proxy_cfg=collision_proxy_cfg, + collision_proxy_position=collision_proxy_position, + additional_collision_proxy_cfgs=additional_collision_proxy_cfgs, + additional_collision_proxy_positions=additional_collision_proxy_positions, + center_of_mass=center_of_mass, + diagonal_inertia=diagonal_inertia, + visual_color=visual_color, + visual_opacity=visual_opacity, + visual_roughness=visual_roughness, + ), + init_state=RigidObjectCfg.InitialStateCfg(pos=position, rot=orientation), + ) diff --git a/source/isaaclab_tasks/isaaclab_tasks/contrib/tablecloth/h1_env.py b/source/isaaclab_tasks/isaaclab_tasks/contrib/tablecloth/h1_env.py new file mode 100644 index 000000000000..874c077b4496 --- /dev/null +++ b/source/isaaclab_tasks/isaaclab_tasks/contrib/tablecloth/h1_env.py @@ -0,0 +1,44 @@ +# Copyright (c) 2022-2026, The Isaac Lab Project Developers (https://github.com/isaac-sim/IsaacLab/blob/main/CONTRIBUTORS.md). +# All rights reserved. +# +# SPDX-License-Identifier: BSD-3-Clause + +"""Environment wrapper that prepares the downloadable H1 asset before startup.""" + +from __future__ import annotations + +import os +import tempfile +from typing import TYPE_CHECKING + +from isaaclab.envs import ManagerBasedRLEnv + +if TYPE_CHECKING: + from .h1_env_cfg import H1TableclothEnvCfg + + +def _convert_h1_asset() -> str: + """Download and cache the H1-with-hands MJCF as a fixed-base USD.""" + import newton.utils + + from isaaclab.sim.converters import MjcfConverter, MjcfConverterCfg + + converter_cfg = MjcfConverterCfg( + asset_path=str(newton.utils.download_asset("unitree_h1") / "mjcf/h1_with_hand.xml"), + usd_dir=os.path.join(tempfile.gettempdir(), "IsaacLab", "tablecloth_h1_vbd"), + usd_file_name="h1_with_hand.usda", + fix_base=True, + self_collision=False, + robot_type="Humanoid", + run_asset_transformer=False, + run_multi_physics_conversion=False, + ) + return MjcfConverter(converter_cfg).usd_path + + +class H1TableclothEnv(ManagerBasedRLEnv): + """Manager-based tablecloth task with lazy H1 asset conversion.""" + + def __init__(self, cfg: H1TableclothEnvCfg, **kwargs): + cfg.scene.robot.spawn.usd_path = _convert_h1_asset() + super().__init__(cfg, **kwargs) diff --git a/source/isaaclab_tasks/isaaclab_tasks/contrib/tablecloth/h1_env_cfg.py b/source/isaaclab_tasks/isaaclab_tasks/contrib/tablecloth/h1_env_cfg.py new file mode 100644 index 000000000000..eefcf38a0827 --- /dev/null +++ b/source/isaaclab_tasks/isaaclab_tasks/contrib/tablecloth/h1_env_cfg.py @@ -0,0 +1,507 @@ +# Copyright (c) 2022-2026, The Isaac Lab Project Developers (https://github.com/isaac-sim/IsaacLab/blob/main/CONTRIBUTORS.md). +# All rights reserved. +# +# SPDX-License-Identifier: BSD-3-Clause + +"""Manager-based configuration for the H1 tablecloth task.""" + +from __future__ import annotations + +from isaaclab_newton.controllers.ik import NewtonIKJointLimitObjectiveCfg, NewtonIKPoseObjectiveCfg, NewtonIKSolverCfg +from isaaclab_newton.envs.mdp.actions.newton_ik_actions_cfg import NewtonInverseKinematicsActionCfg +from isaaclab_newton.physics import ( + NewtonCfg, + NewtonCollisionPipelineCfg, + NewtonShapeCfg, + NewtonSoftContactCfg, + VBDSolverCfg, +) +from isaaclab_newton.sim.schemas import NewtonDeformableBodyPropertiesCfg, NewtonSDFCollisionCfg +from isaaclab_newton.sim.spawners.materials import NewtonSurfaceDeformableBodyMaterialCfg + +import isaaclab.sim as sim_utils +from isaaclab.actuators import ImplicitActuatorCfg +from isaaclab.assets import ArticulationCfg, AssetBaseCfg, DeformableObjectCfg +from isaaclab.envs import ManagerBasedRLEnvCfg +from isaaclab.managers import EventTermCfg as EventTerm +from isaaclab.managers import ObservationGroupCfg as ObsGroup +from isaaclab.managers import ObservationTermCfg as ObsTerm +from isaaclab.managers import RewardTermCfg as RewTerm +from isaaclab.managers import SceneEntityCfg +from isaaclab.managers import TerminationTermCfg as DoneTerm +from isaaclab.scene import InteractiveSceneCfg +from isaaclab.sim import SimulationCfg +from isaaclab.utils import configclass +from isaaclab.visualizers import VisualizerCfg + +from isaaclab_tasks.core.lift import mdp as lift_mdp + +from . import mdp +from .assets import ( + BOWL_LOCAL_HEIGHT, + BOWL_LOCAL_RADIUS, + BOWL_LOCAL_Z_MIN, + BOWL_SCALE, + BOWL_USD, + FORK_CENTER_OF_MASS, + FORK_DIAGONAL_INERTIA, + FORK_LOCAL_Z_MIN, + FORK_ROTATION, + FORK_SCALE, + FORK_USD, + H1_PELVIS_HEIGHT, + KITCHEN_ISLAND_SIZE, + KITCHEN_ISLAND_USD, + RIGID_GAP, + WINE_GLASS_CENTER_OF_MASS, + WINE_GLASS_DIAGONAL_INERTIA, + WINE_GLASS_LOCAL_Z_MIN, + WINE_GLASS_USD, + VisualTableUsdFileCfg, + collision_properties, + rigid_material, + rigid_object_cfg, + spawn_h1_from_usd, + tabletop_collider_cfg, +) + +FPS = 60 +SUBSTEPS = 16 +TABLE_TOP_Z = 1.09 +TABLEWARE_CLEARANCE = 0.008 +CLOTH_Z = TABLE_TOP_Z + 0.002 +TABLEWARE_NAMES = ("bowl", "glass", "fork") + +KITCHEN_ISLAND_SCALE = ( + 0.40 / KITCHEN_ISLAND_SIZE[0], + 0.72 / KITCHEN_ISLAND_SIZE[1], + TABLE_TOP_Z / KITCHEN_ISLAND_SIZE[2], +) + +HAND_OFFSETS = ((0.146273, -0.068447, 0.028077), (0.148808, 0.068652, 0.026675)) +FINGER_JOINT_NAMES = [ + f"{side}_{joint}" + for side in ("L", "R") + for joint in ( + "thumb_proximal_yaw_joint", + "thumb_proximal_pitch_joint", + "thumb_intermediate_joint", + "thumb_distal_joint", + "index_proximal_joint", + "index_intermediate_joint", + "middle_proximal_joint", + "middle_intermediate_joint", + "ring_proximal_joint", + "ring_intermediate_joint", + "pinky_proximal_joint", + "pinky_intermediate_joint", + ) +] + + +@configclass +class H1ArticulationCfg(ArticulationCfg): + """H1 articulation with SDF hand collisions and a high-friction grasp material.""" + + def _post_spawn(self, stage) -> None: + super()._post_spawn(stage) + from pxr import UsdGeom, UsdPhysics # noqa: PLC0415 + + from isaaclab.sim.schemas import apply_namespaced # noqa: PLC0415 + from isaaclab.sim.spawners.materials.physics_materials import ( # noqa: PLC0415 + spawn_rigid_body_material_from_fragments, + ) + + root_path = self.spawn.spawn_path if self.spawn is not None and self.spawn.spawn_path else self.prim_path + meshes = sim_utils.get_all_matching_child_prims( + root_path, + predicate=lambda prim: prim.IsA(UsdGeom.Mesh), + stage=stage, + ) + for mesh in meshes: + mesh_path = mesh.GetPath().pathString + if "/left_hand_link/" in mesh_path or "/right_hand_link/" in mesh_path: + usd_mesh = UsdGeom.Mesh(mesh) + usd_mesh.CreateDisplayColorAttr([(0.0100228, 0.0100228, 0.0100228)]) + usd_mesh.CreateDisplayOpacityAttr([1.0]) + + # Full-surface rigid-soft contact requires an SDF for every participating mesh. + for collider in (mesh for mesh in meshes if mesh.HasAPI(UsdPhysics.CollisionAPI)): + collider.RemoveAppliedSchema("NewtonMeshCollisionAPI") + UsdPhysics.MeshCollisionAPI(collider).GetApproximationAttr().Set("none") + apply_namespaced( + NewtonSDFCollisionCfg(sdf_max_resolution=64, sdf_padding=0.012), + collider.GetPath().pathString, + stage, + ) + + # The global cloth friction is low so tableware can stay put; pinching needs a strong local contact. + grasp_material_path = f"{root_path}/GraspMaterial" + spawn_rigid_body_material_from_fragments( + grasp_material_path, + rigid_material( + density=None, + friction=2000.0, + contact_stiffness=8.0e3, + contact_damping=2.0e1, + ), + stage=stage, + ) + grasp_roots = {"L_thumb_proximal_base", "L_index_proximal", "R_thumb_proximal_base", "R_index_proximal"} + finger_prims = sim_utils.get_all_matching_child_prims( + root_path, + predicate=lambda prim: prim.GetName() in grasp_roots, + stage=stage, + ) + if len(finger_prims) != len(grasp_roots): + raise RuntimeError(f"Expected {len(grasp_roots)} H1 grasp roots, found {len(finger_prims)}") + for prim in finger_prims: + sim_utils.bind_physics_material(prim.GetPath(), grasp_material_path, stage=stage) + + +H1_CFG = H1ArticulationCfg( + prim_path="{ENV_REGEX_NS}/Robot", + articulation_root_prim_path="/fix_base_joint", + spawn=sim_utils.UsdFileCfg( + func=spawn_h1_from_usd, + usd_path="", + make_uninstanceable=True, + fix_root_link=True, + collision_props=collision_properties(), + physics_material=rigid_material( + density=None, + friction=0.50, + contact_stiffness=1.0e3, + contact_damping=1.0e-2, + ), + ), + init_state=ArticulationCfg.InitialStateCfg( + pos=(-0.75, 0.0, H1_PELVIS_HEIGHT), + joint_pos={ + "left_shoulder_pitch_joint": -0.333745, + "left_shoulder_roll_joint": 1.362674, + "left_shoulder_yaw_joint": -1.246960, + "left_elbow_joint": -0.403194, + "left_hand_joint": -1.755706, + "right_shoulder_pitch_joint": -0.347129, + "right_shoulder_roll_joint": -1.375690, + "right_shoulder_yaw_joint": 1.260851, + "right_elbow_joint": -0.409848, + "right_hand_joint": 1.769167, + }, + ), + actuators={ + "body": ImplicitActuatorCfg( + joint_names_expr=[r"(?!torso_joint$)(?![LR]_(?:thumb|index|middle|ring|pinky)_).+"], + stiffness=5.0e4, + damping=5.0e2, + ), + "torso": ImplicitActuatorCfg( + joint_names_expr=["torso_joint"], + stiffness=2.0e5, + damping=2.0e3, + ), + "fingers": ImplicitActuatorCfg( + joint_names_expr=[r"[LR]_(?:thumb|index|middle|ring|pinky)_.+"], + stiffness=4.0e4, + damping=1.0e2, + ), + }, +) + + +@configclass +class H1TableclothSceneCfg(InteractiveSceneCfg): + """Scene containing H1, a VBD cloth, and dynamic tableware.""" + + ground = AssetBaseCfg( + prim_path="/World/defaultGroundPlane", + spawn=sim_utils.GroundPlaneCfg(), + collision_group=-1, + ) + robot: ArticulationCfg = H1_CFG + table = AssetBaseCfg( + prim_path="{ENV_REGEX_NS}/Table", + spawn=VisualTableUsdFileCfg( + usd_path=KITCHEN_ISLAND_USD, + scale=KITCHEN_ISLAND_SCALE, + variants={"Physics": "none"}, + make_uninstanceable=True, + rigid_props={"(/.*)?": [sim_utils.UsdPhysicsRigidBodyCfg(rigid_body_enabled=False)]}, + collision_props={"(/.*)?": [sim_utils.UsdPhysicsCollisionCfg(collision_enabled=False)]}, + ), + ) + tabletop_collider = AssetBaseCfg( + prim_path="{ENV_REGEX_NS}/Tabletop", + spawn=tabletop_collider_cfg( + (0.40, 0.72, 0.08), + # VBD mixes this with soft_contact_mu=0.01, yielding about 0.2 cloth-table friction. + friction=4.0, + contact_stiffness=1.0e4, + contact_damping=1.0e1, + ), + init_state=AssetBaseCfg.InitialStateCfg(pos=(0.0, 0.0, TABLE_TOP_Z - 0.04)), + ) + cloth = DeformableObjectCfg( + prim_path="{ENV_REGEX_NS}/Cloth", + spawn=sim_utils.MeshRectangleCfg( + size=(0.42, 0.70), + edge_refinement=24, + deformable_props=NewtonDeformableBodyPropertiesCfg(), + visual_material=sim_utils.PreviewSurfaceCfg(diffuse_color=(0.76, 0.05, 0.05)), + physics_material=NewtonSurfaceDeformableBodyMaterialCfg( + density=0.24, + particle_radius=0.001, + tri_ke=5.0e4, + tri_ka=5.0e4, + tri_kd=5.0e1, + edge_ke=0.10, + edge_kd=1.0e-3, + ), + ), + init_state=DeformableObjectCfg.InitialStateCfg(pos=(0.0, 0.0, CLOTH_Z)), + ) + bowl = rigid_object_cfg( + usd_path=BOWL_USD, + position=(0.08, -0.07, CLOTH_Z + TABLEWARE_CLEARANCE - BOWL_SCALE * BOWL_LOCAL_Z_MIN), + mass=0.45, + collision_proxy_cfg=sim_utils.CylinderCfg( + radius=BOWL_LOCAL_RADIUS, + height=BOWL_LOCAL_HEIGHT, + visible=False, + collision_props=collision_properties(), + physics_material=rigid_material( + density=None, + friction=0.05, + contact_stiffness=1.0e4, + contact_damping=1.0e1, + ), + ), + collision_proxy_position=(0.0, 0.0, BOWL_LOCAL_Z_MIN + 0.5 * BOWL_LOCAL_HEIGHT), + scale=(BOWL_SCALE,) * 3, + ).replace(prim_path="{ENV_REGEX_NS}/Bowl") + glass = rigid_object_cfg( + usd_path=WINE_GLASS_USD, + position=(0.10, 0.13, CLOTH_Z + TABLEWARE_CLEARANCE - WINE_GLASS_LOCAL_Z_MIN), + mass=0.35, + collision_proxy_cfg=sim_utils.CylinderCfg( + radius=0.040, + height=0.006, + visible=False, + collision_props=collision_properties(), + physics_material=rigid_material( + density=None, + friction=0.01, + contact_stiffness=1.0e4, + contact_damping=1.0e1, + ), + ), + collision_proxy_position=(0.0, 0.0, 0.003), + center_of_mass=WINE_GLASS_CENTER_OF_MASS, + diagonal_inertia=WINE_GLASS_DIAGONAL_INERTIA, + visual_color=(0.55, 0.75, 0.90), + visual_opacity=0.90, + visual_roughness=0.12, + ).replace(prim_path="{ENV_REGEX_NS}/Glass") + fork = rigid_object_cfg( + usd_path=FORK_USD, + position=(0.12, -0.22, CLOTH_Z + TABLEWARE_CLEARANCE - FORK_SCALE * FORK_LOCAL_Z_MIN), + mass=0.07, + collision_proxy_cfg=sim_utils.CuboidCfg( + size=(0.014, 0.160, 0.003), + visible=False, + collision_props=collision_properties(), + physics_material=rigid_material( + density=None, + friction=0.02, + contact_stiffness=1.0e4, + contact_damping=1.0e1, + ), + ), + collision_proxy_position=(0.0, 0.0092, 0.0016), + orientation=FORK_ROTATION, + scale=(FORK_SCALE,) * 3, + center_of_mass=FORK_CENTER_OF_MASS, + diagonal_inertia=FORK_DIAGONAL_INERTIA, + ).replace(prim_path="{ENV_REGEX_NS}/Fork") + light = AssetBaseCfg( + prim_path="/World/Light", + spawn=sim_utils.DomeLightCfg(intensity=2500.0, color=(0.75, 0.75, 0.75)), + ) + + +@configclass +class ActionsCfg: + """Absolute bimanual task-space control and direct finger joint targets.""" + + arm_action = NewtonInverseKinematicsActionCfg( + asset_name="robot", + joint_names=[r"(?![LR]_(?:thumb|index|middle|ring|pinky)_).*"], + controller=NewtonIKSolverCfg(iterations=24, lambda_initial=0.1), + objectives=[ + NewtonIKPoseObjectiveCfg( + body_name="left_hand_link", + name="left_hand", + body_offset_pos=HAND_OFFSETS[0], + use_relative_mode=False, + position_weight=5.0, + rotation_weight=0.2, + ), + NewtonIKPoseObjectiveCfg( + body_name="right_hand_link", + name="right_hand", + body_offset_pos=HAND_OFFSETS[1], + use_relative_mode=False, + position_weight=5.0, + rotation_weight=0.2, + ), + NewtonIKPoseObjectiveCfg( + body_name="torso_link", + name="torso", + use_relative_mode=False, + position_weight=50.0, + rotation_weight=50.0, + ), + NewtonIKJointLimitObjectiveCfg(weight=1.0), + ], + ) + finger_action = mdp.JointPositionActionCfg( + asset_name="robot", + joint_names=FINGER_JOINT_NAMES, + preserve_order=True, + scale=1.0, + use_default_offset=False, + ) + + +@configclass +class ObservationsCfg: + """Proprioception and task-object state exposed to an agent.""" + + @configclass + class PolicyCfg(ObsGroup): + joint_pos = ObsTerm(func=mdp.joint_pos_rel) + joint_vel = ObsTerm(func=mdp.joint_vel_rel) + hand_poses = ObsTerm( + func=mdp.body_pose_w, + params={"asset_cfg": SceneEntityCfg("robot", body_names=["left_hand_link", "right_hand_link"])}, + ) + cloth_points = ObsTerm( + func=lift_mdp.DeformableSampledPointsInRobotRootFrame, + params={"asset_cfg": SceneEntityCfg("cloth"), "num_points": 20}, + ) + bowl_pose = ObsTerm(func=mdp.root_pos_w, params={"asset_cfg": SceneEntityCfg("bowl")}) + bowl_orientation = ObsTerm(func=mdp.root_quat_w, params={"asset_cfg": SceneEntityCfg("bowl")}) + glass_pose = ObsTerm(func=mdp.root_pos_w, params={"asset_cfg": SceneEntityCfg("glass")}) + glass_orientation = ObsTerm(func=mdp.root_quat_w, params={"asset_cfg": SceneEntityCfg("glass")}) + fork_pose = ObsTerm(func=mdp.root_pos_w, params={"asset_cfg": SceneEntityCfg("fork")}) + fork_orientation = ObsTerm(func=mdp.root_quat_w, params={"asset_cfg": SceneEntityCfg("fork")}) + actions = ObsTerm(func=mdp.last_action) + + def __post_init__(self) -> None: + self.enable_corruption = False + self.concatenate_terms = True + + policy: PolicyCfg = PolicyCfg() + + +@configclass +class EventCfg: + """Reset the complete scene to the validated tablecloth start state.""" + + reset_scene = EventTerm( + func=mdp.reset_scene_to_default, + mode="reset", + params={"reset_joint_targets": True}, + ) + + +@configclass +class RewardsCfg: + """Task rewards that favor a clean pull with stationary tableware.""" + + cloth_progress = RewTerm(func=mdp.cloth_pull_progress, weight=2.0, params={"target_distance": 0.30}) + tableware_position = RewTerm( + func=mdp.tableware_displacement, + weight=2.0, + params={"asset_names": TABLEWARE_NAMES, "distance_scale": 0.05}, + ) + tableware_orientation = RewTerm( + func=mdp.tableware_upright, + weight=1.0, + params={"asset_names": TABLEWARE_NAMES}, + ) + action_rate = RewTerm(func=mdp.action_rate_l2, weight=-1.0e-4) + success = RewTerm( + func=mdp.is_terminated_term, + weight=10.0, + params={"term_keys": ["success"]}, + ) + + +@configclass +class TerminationsCfg: + """Success, failure, and time-limit conditions for the tablecloth task.""" + + success = DoneTerm( + func=mdp.tablecloth_success, + params={ + "asset_names": TABLEWARE_NAMES, + "table_height": TABLE_TOP_Z, + "pull_distance": 0.30, + "maximum_tilt": 0.35, + "maximum_displacement": 0.05, + }, + ) + tableware_fallen = DoneTerm( + func=mdp.tableware_fallen, + params={"asset_names": TABLEWARE_NAMES, "minimum_height": TABLE_TOP_Z - 0.15}, + ) + time_out = DoneTerm(func=mdp.time_out, time_out=True) + + +@configclass +class H1TableclothEnvCfg(ManagerBasedRLEnvCfg): + """H1 tablecloth task using Newton VBD and Newton IK.""" + + scene: H1TableclothSceneCfg = H1TableclothSceneCfg(num_envs=1, env_spacing=2.0, replicate_physics=True) + actions: ActionsCfg = ActionsCfg() + observations: ObservationsCfg = ObservationsCfg() + events: EventCfg = EventCfg() + rewards: RewardsCfg = RewardsCfg() + terminations: TerminationsCfg = TerminationsCfg() + commands = None + curriculum = None + + def __post_init__(self) -> None: + self.seed = 0 + self.decimation = 1 + self.episode_length_s = 6.0 + self.sim = SimulationCfg( + dt=1.0 / FPS, + render_interval=1, + physics=NewtonCfg( + num_substeps=SUBSTEPS, + collision_decimation=1, + default_shape_cfg=NewtonShapeCfg(gap=RIGID_GAP, ke=1.0e4, kd=1.0e1, mu=0.35), + soft_contact_cfg=NewtonSoftContactCfg( + soft_contact_ke=1.0e3, + soft_contact_kd=1.0e-2, + soft_contact_mu=0.01, + ), + collision_cfg=NewtonCollisionPipelineCfg( + broad_phase="sap", + soft_contact_margin=0.008, + enable_rigid_soft_full_surface_contact=True, + ), + solver_cfg=VBDSolverCfg( + iterations=15, + rigid_compliant_alm=True, + rigid_body_particle_contact_buffer_size=8192, + ), + ), + default_visualizer_cfg=VisualizerCfg( + eye=(-2.435, -2.70, 1.725), + lookat=(-0.08, 0.0, 0.93), + ), + ) diff --git a/source/isaaclab_tasks/isaaclab_tasks/contrib/tablecloth/mdp/__init__.py b/source/isaaclab_tasks/isaaclab_tasks/contrib/tablecloth/mdp/__init__.py new file mode 100644 index 000000000000..a699a9c9b542 --- /dev/null +++ b/source/isaaclab_tasks/isaaclab_tasks/contrib/tablecloth/mdp/__init__.py @@ -0,0 +1,10 @@ +# Copyright (c) 2022-2026, The Isaac Lab Project Developers (https://github.com/isaac-sim/IsaacLab/blob/main/CONTRIBUTORS.md). +# All rights reserved. +# +# SPDX-License-Identifier: BSD-3-Clause + +"""MDP terms for the H1 tablecloth task.""" + +from isaaclab.utils.module import lazy_export + +lazy_export() diff --git a/source/isaaclab_tasks/isaaclab_tasks/contrib/tablecloth/mdp/__init__.pyi b/source/isaaclab_tasks/isaaclab_tasks/contrib/tablecloth/mdp/__init__.pyi new file mode 100644 index 000000000000..8a188f027084 --- /dev/null +++ b/source/isaaclab_tasks/isaaclab_tasks/contrib/tablecloth/mdp/__init__.pyi @@ -0,0 +1,17 @@ +# Copyright (c) 2022-2026, The Isaac Lab Project Developers (https://github.com/isaac-sim/IsaacLab/blob/main/CONTRIBUTORS.md). +# All rights reserved. +# +# SPDX-License-Identifier: BSD-3-Clause + +__all__ = [ + "cloth_pull_progress", + "tablecloth_success", + "tableware_displacement", + "tableware_fallen", + "tableware_upright", +] + +from isaaclab.envs.mdp import * + +from .rewards import cloth_pull_progress, tableware_displacement, tableware_upright +from .terminations import tablecloth_success, tableware_fallen diff --git a/source/isaaclab_tasks/isaaclab_tasks/contrib/tablecloth/mdp/_metrics.py b/source/isaaclab_tasks/isaaclab_tasks/contrib/tablecloth/mdp/_metrics.py new file mode 100644 index 000000000000..7087bf23098e --- /dev/null +++ b/source/isaaclab_tasks/isaaclab_tasks/contrib/tablecloth/mdp/_metrics.py @@ -0,0 +1,31 @@ +# Copyright (c) 2022-2026, The Isaac Lab Project Developers (https://github.com/isaac-sim/IsaacLab/blob/main/CONTRIBUTORS.md). +# All rights reserved. +# +# SPDX-License-Identifier: BSD-3-Clause + +from __future__ import annotations + +from typing import TYPE_CHECKING + +import torch + +from isaaclab.managers import SceneEntityCfg + +if TYPE_CHECKING: + from isaaclab.assets import DeformableObject, RigidObject + from isaaclab.envs import ManagerBasedRLEnv + + +def cloth_pull_distance( + env: ManagerBasedRLEnv, + asset_cfg: SceneEntityCfg = SceneEntityCfg("cloth"), +) -> torch.Tensor: + """Return cloth center-of-mass travel along the negative x-axis [m].""" + cloth: DeformableObject = env.scene[asset_cfg.name] + initial_x = cloth.data.default_nodal_state_w.torch[..., 0].mean(dim=1) + return initial_x - cloth.data.root_pos_w.torch[:, 0] + + +def tableware_assets(env: ManagerBasedRLEnv, asset_names: tuple[str, ...]) -> list[RigidObject]: + """Resolve the configured tableware rigid objects.""" + return [env.scene[name] for name in asset_names] diff --git a/source/isaaclab_tasks/isaaclab_tasks/contrib/tablecloth/mdp/rewards.py b/source/isaaclab_tasks/isaaclab_tasks/contrib/tablecloth/mdp/rewards.py new file mode 100644 index 000000000000..e1c92e9d1c08 --- /dev/null +++ b/source/isaaclab_tasks/isaaclab_tasks/contrib/tablecloth/mdp/rewards.py @@ -0,0 +1,47 @@ +# Copyright (c) 2022-2026, The Isaac Lab Project Developers (https://github.com/isaac-sim/IsaacLab/blob/main/CONTRIBUTORS.md). +# All rights reserved. +# +# SPDX-License-Identifier: BSD-3-Clause + +from __future__ import annotations + +from typing import TYPE_CHECKING + +import torch + +from isaaclab.managers import SceneEntityCfg + +from ._metrics import cloth_pull_distance, tableware_assets + +if TYPE_CHECKING: + from isaaclab.envs import ManagerBasedRLEnv + + +def cloth_pull_progress( + env: ManagerBasedRLEnv, + target_distance: float, + asset_cfg: SceneEntityCfg = SceneEntityCfg("cloth"), +) -> torch.Tensor: + """Reward cloth travel toward the pull goal.""" + return torch.clamp(cloth_pull_distance(env, asset_cfg) / target_distance, min=0.0, max=1.0) + + +def tableware_displacement( + env: ManagerBasedRLEnv, + asset_names: tuple[str, ...], + distance_scale: float, +) -> torch.Tensor: + """Reward keeping tableware near its initial horizontal position.""" + squared_distance = torch.zeros(env.num_envs, device=env.device) + for asset in tableware_assets(env, asset_names): + initial_position = asset.data.default_root_pose.torch[:, :3] + env.scene.env_origins + squared_distance += torch.sum(torch.square(asset.data.root_pos_w.torch[:, :2] - initial_position[:, :2]), dim=1) + return torch.exp(-squared_distance / distance_scale**2) + + +def tableware_upright(env: ManagerBasedRLEnv, asset_names: tuple[str, ...]) -> torch.Tensor: + """Reward keeping the tableware's local z-axes upright.""" + upright = torch.zeros(env.num_envs, device=env.device) + for asset in tableware_assets(env, asset_names): + upright += torch.clamp(-asset.data.projected_gravity_b.torch[:, 2], min=0.0, max=1.0) + return upright / len(asset_names) diff --git a/source/isaaclab_tasks/isaaclab_tasks/contrib/tablecloth/mdp/terminations.py b/source/isaaclab_tasks/isaaclab_tasks/contrib/tablecloth/mdp/terminations.py new file mode 100644 index 000000000000..797a343b6899 --- /dev/null +++ b/source/isaaclab_tasks/isaaclab_tasks/contrib/tablecloth/mdp/terminations.py @@ -0,0 +1,64 @@ +# Copyright (c) 2022-2026, The Isaac Lab Project Developers (https://github.com/isaac-sim/IsaacLab/blob/main/CONTRIBUTORS.md). +# All rights reserved. +# +# SPDX-License-Identifier: BSD-3-Clause + +from __future__ import annotations + +import math +from typing import TYPE_CHECKING + +import torch + +from isaaclab.managers import SceneEntityCfg + +from ._metrics import cloth_pull_distance, tableware_assets + +if TYPE_CHECKING: + from isaaclab.envs import ManagerBasedRLEnv + + +def tablecloth_success( + env: ManagerBasedRLEnv, + asset_names: tuple[str, ...], + table_height: float, + pull_distance: float, + maximum_tilt: float, + maximum_displacement: float, + cloth_cfg: SceneEntityCfg = SceneEntityCfg("cloth"), +) -> torch.Tensor: + """Detect a pull that leaves every object upright and near its start position. + + Args: + env: Manager-based tablecloth environment. + asset_names: Names of the tableware assets. + table_height: Tabletop height [m]. + pull_distance: Required cloth travel [m]. + maximum_tilt: Allowed tableware tilt [rad]. + maximum_displacement: Allowed horizontal tableware travel [m]. + cloth_cfg: Cloth asset selector. + + Returns: + Success flags for all environments. + """ + success = cloth_pull_distance(env, cloth_cfg) >= pull_distance + minimum_up_axis = math.cos(maximum_tilt) + for asset in tableware_assets(env, asset_names): + on_table = asset.data.root_pos_w.torch[:, 2] >= table_height - 0.05 + upright = -asset.data.projected_gravity_b.torch[:, 2] >= minimum_up_axis + initial_position = asset.data.default_root_pose.torch[:, :2] + env.scene.env_origins[:, :2] + stationary = torch.linalg.vector_norm(asset.data.root_pos_w.torch[:, :2] - initial_position, dim=1) + success &= on_table & upright & (stationary <= maximum_displacement) + return success + + +def tableware_fallen( + env: ManagerBasedRLEnv, + asset_names: tuple[str, ...], + minimum_height: float, +) -> torch.Tensor: + """Terminate when any tableware object falls below the support surface.""" + fallen = torch.zeros(env.num_envs, dtype=torch.bool, device=env.device) + for asset in tableware_assets(env, asset_names): + fallen |= asset.data.root_pos_w.torch[:, 2] < minimum_height + return fallen From e886590e4070b0d8a5760b1434ee77c8ae80e59d Mon Sep 17 00:00:00 2001 From: Maximilian Krause Date: Thu, 1 Oct 2026 00:19:08 +0200 Subject: [PATCH 11/34] Expose VBD structural joint stiffness Preserve Newton defaults while allowing tasks to tune rigid-link attachment stiffness independently of actuator gains. Validate linear force and angular torque balance under gravity and document the tuning controls. --- .../concepts/solver-tuning/tune_vbd.rst | 10 ++++++ ...rst => max-vbd-tablecloth-demos.minor.rst} | 5 +++ .../physics/vbd_manager_cfg.py | 6 ++++ .../test/physics/test_vbd_core.py | 35 +++++++++++++++++++ 4 files changed, 56 insertions(+) rename source/isaaclab_newton/changelog.d/{max-vbd-tablecloth-demos.rst => max-vbd-tablecloth-demos.minor.rst} (70%) diff --git a/docs/source/concepts/solver-tuning/tune_vbd.rst b/docs/source/concepts/solver-tuning/tune_vbd.rst index 45dea5f1f66b..729b76a19794 100644 --- a/docs/source/concepts/solver-tuning/tune_vbd.rst +++ b/docs/source/concepts/solver-tuning/tune_vbd.rst @@ -213,6 +213,10 @@ Core Solve - Default: ``10``. Number of VBD iterations per substep. Increasing this value improves deformation and contact convergence, especially for stiff materials or rigid gripper contacts, but increases runtime. * - ``rigid_compliant_alm`` - Default: ``None``. Preserves Newton's rigid solver mode. In Newton 1.6, ``None`` selects deprecated legacy AVBD. Set to ``True`` to use compliant ALM for rigid joints and body-body contacts, or ``False`` to explicitly retain legacy AVBD. + * - ``rigid_joint_linear_ke`` + - Default: ``1.0e5`` [N/m]. Structural linear stiffness for non-rod rigid joints, separate from actuator gains. Increase it when articulated links separate under load with compliant ALM. + * - ``rigid_joint_angular_ke`` + - Default: ``1.0e5`` [N m/rad]. Structural angular stiffness for non-rod rigid joints, separate from actuator gains. Increase it when articulated links rotate about constrained axes with compliant ALM. * - ``rigid_body_contact_buffer_size`` - Default: ``64``. Per-body capacity for body-body contacts when VBD integrates rigid bodies. Increase it if Newton reports a per-body body-body contact buffer overflow. * - ``rigid_body_particle_contact_buffer_size`` @@ -220,6 +224,12 @@ Core Solve * - ``integrate_with_external_rigid_solver`` - Default: ``False``. Set to ``True`` only when a manual manager integrates rigid bodies in the shared model. Proxy-coupled entries use partitioned model views and leave this ``False``. +Structural joint stiffness keeps rigid links attached; actuator stiffness drives +the allowed joint coordinates toward their targets. Tune these separately under +the intended contact loads. Higher structural stiffness can require more solver +iterations for drive and contact convergence. Set it before creating the +simulation because Newton captures these material values during solver construction. + Contact Scheduling ^^^^^^^^^^^^^^^^^^ diff --git a/source/isaaclab_newton/changelog.d/max-vbd-tablecloth-demos.rst b/source/isaaclab_newton/changelog.d/max-vbd-tablecloth-demos.minor.rst similarity index 70% rename from source/isaaclab_newton/changelog.d/max-vbd-tablecloth-demos.rst rename to source/isaaclab_newton/changelog.d/max-vbd-tablecloth-demos.minor.rst index 7ab72223ee0e..6fdbd695db6d 100644 --- a/source/isaaclab_newton/changelog.d/max-vbd-tablecloth-demos.rst +++ b/source/isaaclab_newton/changelog.d/max-vbd-tablecloth-demos.minor.rst @@ -1,3 +1,8 @@ +Added +^^^^^ + +* Exposed non-rod VBD joint attachment stiffness separately from actuator gains in :class:`~isaaclab_newton.physics.VBDSolverCfg`. + Fixed ^^^^^ diff --git a/source/isaaclab_newton/isaaclab_newton/physics/vbd_manager_cfg.py b/source/isaaclab_newton/isaaclab_newton/physics/vbd_manager_cfg.py index d1a9effc177e..e4d4f8a862be 100644 --- a/source/isaaclab_newton/isaaclab_newton/physics/vbd_manager_cfg.py +++ b/source/isaaclab_newton/isaaclab_newton/physics/vbd_manager_cfg.py @@ -57,6 +57,12 @@ class VBDSolverCfg(NewtonSolverCfg): rigid_compliant_alm: bool | None = None """Whether to use compliant ALM for rigid joints and contacts; ``None`` preserves Newton's default.""" + rigid_joint_linear_ke: float = 1.0e5 + """Structural linear stiffness of non-rod rigid joints [N/m], separate from joint-drive gains.""" + + rigid_joint_angular_ke: float = 1.0e5 + """Structural angular stiffness of non-rod rigid joints [N m/rad], separate from joint-drive gains.""" + rigid_contact_k_start: float = 1.0e2 """Initial stiffness seed for rigid-body contacts [N/m].""" diff --git a/source/isaaclab_newton/test/physics/test_vbd_core.py b/source/isaaclab_newton/test/physics/test_vbd_core.py index ebec4167f6dd..2dce16b93cce 100644 --- a/source/isaaclab_newton/test/physics/test_vbd_core.py +++ b/source/isaaclab_newton/test/physics/test_vbd_core.py @@ -8,6 +8,7 @@ from __future__ import annotations import importlib +import math from types import SimpleNamespace import pytest @@ -166,6 +167,40 @@ def test_vbd_compliant_alm_cable_stiffness(): assert state_0.body_q.numpy()[body, 2] == pytest.approx(-expected_extension, rel=0.01) +@pytest.mark.parametrize("stiffness", [None, (1.0e3, 1.0e2)], ids=["defaults", "finite-attachment"]) +def test_vbd_structural_joint_stiffness_under_load(stiffness): + """A fixed joint balances gravity with independently configured linear and angular springs.""" + physics = importlib.import_module("isaaclab_newton.physics") + gravity, lever = 9.81, 0.1 + builder = ModelBuilder(gravity=(0.0, 0.0, -gravity)) + body = builder.add_link(xform=wp.transform(wp.vec3(lever, 0.0, 0.0), wp.quat_identity())) + builder.add_shape_sphere(body=body, radius=0.05) + mass = builder.body_mass[body] + joint = builder.add_joint_fixed( + parent=-1, child=body, child_xform=wp.transform(wp.vec3(-lever, 0.0, 0.0), wp.quat_identity()) + ) + builder.add_articulation([joint]) + builder.color() + model = builder.finalize(device="cpu") + solver_cfg = physics.VBDSolverCfg(rigid_compliant_alm=True, iterations=15) + linear_ke, angular_ke = (1.0e5, 1.0e5) if stiffness is None else stiffness + if stiffness is not None: + solver_cfg = solver_cfg.replace(rigid_joint_linear_ke=linear_ke, rigid_joint_angular_ke=angular_ke) + solver = physics.NewtonVBDManager._create_solver(model, solver_cfg) + state_0, state_1, control = model.state(), model.state(), model.control() + for _ in range(480): + state_0.clear_forces() + solver.step(state_0, state_1, control, None, 1.0 / 240.0) + state_0, state_1 = state_1, state_0 + + pose = state_0.body_q.numpy()[body] + angle = 2.0 * math.atan2(float(pose[4]), float(pose[6])) + anchor_height = float(pose[2]) + lever * math.sin(angle) + # The joint's linear force balances weight; its angular torque balances the offset load. + assert -anchor_height * linear_ke == pytest.approx(mass * gravity, rel=0.01) + assert angle * angular_ke == pytest.approx(mass * gravity * lever * math.cos(angle), rel=0.01) + + def test_vbd_publishes_joint_state_after_body_motion(monkeypatch): """The public joint state follows maximal-coordinate VBD motion.""" physics = importlib.import_module("isaaclab_newton.physics") From 3515a60d0645cfb29515a50e5baff7533e5fe53f Mon Sep 17 00:00:00 2001 From: Maximilian Krause Date: Thu, 1 Oct 2026 00:21:08 +0200 Subject: [PATCH 12/34] Stabilize H1 tablecloth stance and grasp Hold the grounded leg pose outside arm IK control. Acquire overhanging cloth corners and use reachable constant-attitude hand commands with continuous-velocity withdrawal. Validate stance, material-point retention, wrist tracking, and trick success in one rollout. --- docs/source/how-to/run_state_machines.rst | 10 ++ .../state_machine/tablecloth_h1.py | 71 +++++--- .../max-tablecloth-h1-task.minor.rst | 6 + .../contrib/tablecloth/h1_env_cfg.py | 27 ++-- .../test/contrib/test_tablecloth_h1_stance.py | 152 ++++++++++++++++++ tools/test_settings.py | 1 + 6 files changed, 234 insertions(+), 33 deletions(-) create mode 100644 source/isaaclab_tasks/test/contrib/test_tablecloth_h1_stance.py diff --git a/docs/source/how-to/run_state_machines.rst b/docs/source/how-to/run_state_machines.rst index 9782ba8b952a..7fa22382f08d 100644 --- a/docs/source/how-to/run_state_machines.rst +++ b/docs/source/how-to/run_state_machines.rst @@ -56,6 +56,16 @@ tableware, Newton IK for the hands, and a downloaded H1 asset. The Newton GL visualizer opens by default; the SimReady table and tableware require asset access. +The pelvis is fixed and the leg actuators hold a grounded standing pose; this +example demonstrates manipulation, not humanoid balance. Absolute hand and +torso pose targets are expressed in the robot root frame, while the fingers +receive joint-position targets. + +The expert lifts the cloth's overhanging corners before pinching, then follows a +constant-attitude arc reachable by H1's five-DOF arms, accelerating and braking +to rest. The grasp is calibrated for the task's cloth resolution; changing +the mesh or hand asset requires revalidating acquisition and retention. + .. code-block:: bash uv run --extra importers python scripts/environments/state_machine/tablecloth_h1.py \ diff --git a/scripts/environments/state_machine/tablecloth_h1.py b/scripts/environments/state_machine/tablecloth_h1.py index 5cec8f315310..9ced4d00e69f 100644 --- a/scripts/environments/state_machine/tablecloth_h1.py +++ b/scripts/environments/state_machine/tablecloth_h1.py @@ -31,7 +31,7 @@ parser.add_argument("--task", type=str, default="IsaacContrib-Tablecloth-H1", help="Task to run.") parser.add_argument("--num_envs", type=int, default=1, help="Number of parallel environments.") parser.add_argument("--max_steps", type=int, default=-1, help="Stop after this many steps; negative runs forever.") -parser.add_argument("--pull_speed", type=float, default=2.0, help="Task-space pull speed [m/s].") +parser.add_argument("--pull_speed", type=float, default=2.0, help="Peak X withdrawal speed [m/s].") parser.add_argument("--video", action="store_true", help="Record the rollout to videos/tablecloth_h1/.") add_launcher_args(parser) parser.set_defaults(visualizer=["newton_gl"]) @@ -51,7 +51,6 @@ FPS = 60 VIDEO_STEPS = 312 PULL_DISTANCE = 0.40 -PULL_RAMP_TIME = wp.constant(0.40) ARM_ACTION_DIM = 21 FINGERS_OPEN = (0.0, 0.0, 0.0, 0.0, 0.0) @@ -60,7 +59,7 @@ FINGERS_PREPINCHED = (0.0, 0.0, 0.737080, 0.713855, 0.80) FINGERS_PINCHED = (1.0, 1.0, 0.737080, 0.713855, 0.80) -PHASE_DURATIONS = (0.50, 0.80, 0.60, 0.50, 0.60, 0.40, 0.10, 0.10) +PHASE_DURATIONS = (0.50, 0.80, 0.60, 0.50, 0.60, 0.60, 0.10, 0.10) PHASE_KEYFRAMES = ((0, 0), (0, 2), (2, 4), (4, 6), (6, 8), (8, 8), (8, 10), (10, 10)) PHASE_FINGERS = ( (FINGERS_OPEN, FINGERS_OPEN), @@ -79,21 +78,26 @@ HAND_KEYFRAMES = ( (0.27, 0.24, 0.140), (0.27, -0.24, 0.140), - (0.45, 0.24, 0.060), - (0.45, -0.24, 0.060), - (0.45, 0.24, -0.050), - (0.45, -0.24, -0.048), - (0.525, 0.24, -0.050), - (0.525, -0.24, -0.048), - (0.555, 0.24, 0.010), - (0.555, -0.24, 0.010), - (0.555, 0.24, 0.015), - (0.555, -0.24, 0.015), + (0.43, 0.38, 0.060), + (0.43, -0.38, 0.060), + (0.43, 0.38, -0.050), + (0.43, -0.38, -0.048), + (0.545, 0.38, -0.050), + (0.545, -0.38, -0.048), + (0.545, 0.38, -0.020), + (0.545, -0.38, -0.020), + (0.545, 0.38, -0.015), + (0.545, -0.38, -0.015), ) HAND_ROTATIONS = ( (-0.09022585, 0.46115433, 0.03007528, 0.88220828), (0.09023000, 0.46114998, -0.03008000, 0.88220997), ) +# Feasible corner-grasp attitudes for H1's five-DOF arms, calibrated with forward kinematics. +GRASP_HAND_ROTATIONS = ( + (-0.07698878, 0.37041666, 0.08826291, 0.92145205), + (0.07860907, 0.37042228, -0.08392787, 0.92171799), +) FINGER_CLOSED_VALUES = ( 1.273907, 0.160957, @@ -129,6 +133,17 @@ def _smoothstep(value: float) -> float: return value * value * (3.0 - 2.0 * value) +@wp.func +def _pull_offset(distance: float) -> wp.vec3: + # This arc preserves the grasp attitude within the arms' reachable pose manifold. + radius = 0.3072 + center = 0.2248 + height = wp.sqrt(radius * radius - center * center) - wp.sqrt( + radius * radius - (distance - center) * (distance - center) + ) + return wp.vec3(-distance, 0.0, height) + + @wp.kernel def _infer_state_machine( dt: float, @@ -169,13 +184,11 @@ def _infer_state_machine( index = current_state * 5 + group finger_fractions[env_id, group] = wp.lerp(phase_start_fingers[index], phase_end_fingers[index], alpha) elif current_state == STATE_PULL: - speed_ramp = _smoothstep(elapsed / PULL_RAMP_TIME) - distance = wp.min(pull_distance[env_id] + speed_ramp * pull_speed * dt, PULL_DISTANCE) + # Accelerate and brake to rest without a velocity discontinuity at the final hold. + duration = 1.5 * PULL_DISTANCE / pull_speed + distance = PULL_DISTANCE * _smoothstep(elapsed / duration) pull_distance[env_id] = distance - drop = 0.0 - if distance > 0.08: - drop = 0.175 * _smoothstep((distance - 0.08) / (PULL_DISTANCE - 0.08)) - offset = wp.vec3(-distance, 0.0, -drop) + offset = _pull_offset(distance) left = keyframes[10] + offset right = keyframes[11] + offset for group in range(5): @@ -184,19 +197,27 @@ def _infer_state_machine( current_state = STATE_HOLD else: distance = pull_distance[env_id] - drop = 0.175 * _smoothstep((distance - 0.08) / (PULL_DISTANCE - 0.08)) - offset = wp.vec3(-distance, 0.0, -drop) + offset = _pull_offset(distance) left = keyframes[10] + offset right = keyframes[11] + offset for group in range(5): finger_fractions[env_id, group] = phase_end_fingers[(STATE_PULL - 1) * 5 + group] + # Finish changing attitude before closing the thumb, not while transporting the cloth. + rotation_alpha = 0.0 + if current_state >= 5: + rotation_alpha = 1.0 + elif current_state == 4: + rotation_alpha = _smoothstep(elapsed / phase_durations[4]) + left_rotation = wp.normalize(wp.lerp(hand_rotations[0], hand_rotations[2], rotation_alpha)) + right_rotation = wp.normalize(wp.lerp(hand_rotations[1], hand_rotations[3], rotation_alpha)) + for axis in range(3): actions[env_id, axis] = left[axis] actions[env_id, 7 + axis] = right[axis] for axis in range(4): - actions[env_id, 3 + axis] = hand_rotations[0][axis] - actions[env_id, 10 + axis] = hand_rotations[1][axis] + actions[env_id, 3 + axis] = left_rotation[axis] + actions[env_id, 10 + axis] = right_rotation[axis] for axis in range(7): actions[env_id, 14 + axis] = torso_pose[env_id, axis] @@ -223,7 +244,9 @@ def __init__(self, dt: float, torso_pose: torch.Tensor, action_dim: int, pull_sp phases = list(zip(PHASE_DURATIONS, PHASE_KEYFRAMES, PHASE_FINGERS, strict=True)) self._keyframes = wp.array(HAND_KEYFRAMES, dtype=wp.vec3, device=self._warp_device) - self._hand_rotations = wp.array(HAND_ROTATIONS, dtype=wp.vec4, device=self._warp_device) + self._hand_rotations = wp.array( + (*HAND_ROTATIONS, *GRASP_HAND_ROTATIONS), dtype=wp.vec4, device=self._warp_device + ) self._torso_pose = wp.from_torch(torso_pose.contiguous(), dtype=wp.float32) self._phase_durations = wp.array([phase[0] for phase in phases], dtype=float, device=self._warp_device) self._phase_start_keyframes = wp.array( diff --git a/source/isaaclab_tasks/changelog.d/max-tablecloth-h1-task.minor.rst b/source/isaaclab_tasks/changelog.d/max-tablecloth-h1-task.minor.rst index 6f30ba59bfce..3fe7336045f9 100644 --- a/source/isaaclab_tasks/changelog.d/max-tablecloth-h1-task.minor.rst +++ b/source/isaaclab_tasks/changelog.d/max-tablecloth-h1-task.minor.rst @@ -2,3 +2,9 @@ Added ^^^^^ * Added the ``IsaacContrib-Tablecloth-H1`` manager-based task and a GPU-resident scripted expert. + +Fixed +^^^^^ + +* Grounded H1's standing pose, held its pelvis fixed under VBD manipulation loads, and excluded leg joints from arm IK control. +* Stiffened H1's structural VBD joints and recalibrated its physical corner grasp with a reachable constant-attitude pull and smooth braking. diff --git a/source/isaaclab_tasks/isaaclab_tasks/contrib/tablecloth/h1_env_cfg.py b/source/isaaclab_tasks/isaaclab_tasks/contrib/tablecloth/h1_env_cfg.py index eefcf38a0827..372147daf0d2 100644 --- a/source/isaaclab_tasks/isaaclab_tasks/contrib/tablecloth/h1_env_cfg.py +++ b/source/isaaclab_tasks/isaaclab_tasks/contrib/tablecloth/h1_env_cfg.py @@ -49,7 +49,6 @@ FORK_ROTATION, FORK_SCALE, FORK_USD, - H1_PELVIS_HEIGHT, KITCHEN_ISLAND_SIZE, KITCHEN_ISLAND_USD, RIGID_GAP, @@ -67,7 +66,9 @@ FPS = 60 SUBSTEPS = 16 -TABLE_TOP_Z = 1.09 +# The straight-leg H1 sole is 1.0442 m below its pelvis; keep the tabletop 1 cm below the pelvis. +H1_STANDING_HEIGHT = 1.0442 + RIGID_GAP +TABLE_TOP_Z = H1_STANDING_HEIGHT - 0.01 TABLEWARE_CLEARANCE = 0.008 CLOTH_Z = TABLE_TOP_Z + 0.002 TABLEWARE_NAMES = ("bowl", "glass", "fork") @@ -167,6 +168,8 @@ def _post_spawn(self, stage) -> None: usd_path="", make_uninstanceable=True, fix_root_link=True, + # A compliant VBD world joint alone lets the base bounce under manipulation loads. + rigid_props={"/Geometry/pelvis": [sim_utils.UsdPhysicsRigidBodyCfg(kinematic_enabled=True)]}, collision_props=collision_properties(), physics_material=rigid_material( density=None, @@ -176,8 +179,10 @@ def _post_spawn(self, stage) -> None: ), ), init_state=ArticulationCfg.InitialStateCfg( - pos=(-0.75, 0.0, H1_PELVIS_HEIGHT), + pos=(-0.75, 0.0, H1_STANDING_HEIGHT), joint_pos={ + ".*(hip|knee|ankle).*": 0.0, + "torso_joint": 0.0, "left_shoulder_pitch_joint": -0.333745, "left_shoulder_roll_joint": 1.362674, "left_shoulder_yaw_joint": -1.246960, @@ -203,8 +208,8 @@ def _post_spawn(self, stage) -> None: ), "fingers": ImplicitActuatorCfg( joint_names_expr=[r"[LR]_(?:thumb|index|middle|ring|pinky)_.+"], - stiffness=4.0e4, - damping=1.0e2, + stiffness=1.0e3, + damping=2.0, ), }, ) @@ -245,7 +250,8 @@ class H1TableclothSceneCfg(InteractiveSceneCfg): cloth = DeformableObjectCfg( prim_path="{ENV_REGEX_NS}/Cloth", spawn=sim_utils.MeshRectangleCfg( - size=(0.42, 0.70), + # Corner overhang lets the index fingers lift the cloth without pressing against the tabletop. + size=(0.48, 0.80), edge_refinement=24, deformable_props=NewtonDeformableBodyPropertiesCfg(), visual_material=sim_utils.PreviewSurfaceCfg(diffuse_color=(0.76, 0.05, 0.05)), @@ -332,11 +338,11 @@ class H1TableclothSceneCfg(InteractiveSceneCfg): @configclass class ActionsCfg: - """Absolute bimanual task-space control and direct finger joint targets.""" + """Absolute arm/torso poses and finger targets; leg actuators hold the standing pose.""" arm_action = NewtonInverseKinematicsActionCfg( asset_name="robot", - joint_names=[r"(?![LR]_(?:thumb|index|middle|ring|pinky)_).*"], + joint_names=["torso_joint", "(left|right)_(shoulder_.*|elbow|hand)_joint"], controller=NewtonIKSolverCfg(iterations=24, lambda_initial=0.1), objectives=[ NewtonIKPoseObjectiveCfg( @@ -495,8 +501,11 @@ def __post_init__(self) -> None: enable_rigid_soft_full_surface_contact=True, ), solver_cfg=VBDSolverCfg( - iterations=15, + iterations=30, rigid_compliant_alm=True, + # Structural attachment stiffness is independent of the actuator's position gains. + rigid_joint_linear_ke=1.0e7, + rigid_joint_angular_ke=1.0e7, rigid_body_particle_contact_buffer_size=8192, ), ), diff --git a/source/isaaclab_tasks/test/contrib/test_tablecloth_h1_stance.py b/source/isaaclab_tasks/test/contrib/test_tablecloth_h1_stance.py new file mode 100644 index 000000000000..7dc58fac4932 --- /dev/null +++ b/source/isaaclab_tasks/test/contrib/test_tablecloth_h1_stance.py @@ -0,0 +1,152 @@ +# Copyright (c) 2022-2026, The Isaac Lab Project Developers (https://github.com/isaac-sim/IsaacLab/blob/main/CONTRIBUTORS.md). +# All rights reserved. +# +# SPDX-License-Identifier: BSD-3-Clause + +"""Physical regression for the H1 tablecloth expert's stance and grasp.""" + +import sys + +import gymnasium as gym +import pytest +import torch +import trimesh + +from pxr import Gf, UsdGeom, UsdPhysics + +import isaaclab.sim as sim_utils +from isaaclab.app import launch_simulation +from isaaclab.test.utils import DeviceScope, test_devices +from isaaclab.utils.math import quat_apply, quat_error_magnitude, quat_mul, subtract_frame_transforms + +import isaaclab_tasks # noqa: F401 +from isaaclab_tasks.contrib.tablecloth.h1_env_cfg import HAND_OFFSETS +from isaaclab_tasks.utils import parse_env_cfg + + +@pytest.mark.parametrize("device", test_devices(DeviceScope.CUDA)) +def test_h1_stays_grounded_and_retains_cloth(device, monkeypatch): + """The scripted trick retains both physical grips without destabilizing the robot.""" + monkeypatch.setattr(sys, "argv", ["tablecloth_h1.py"]) + from scripts.environments.state_machine import tablecloth_h1 as expert + + cfg = parse_env_cfg("IsaacContrib-Tablecloth-H1", device=device, num_envs=1) + cfg.sim.visualizer_cfgs = [] + success_term = cfg.terminations.success + cfg.terminations.success = None + cfg.terminations.tableware_fallen = None + cfg.rewards.success = None + with launch_simulation(cfg=cfg): + env = gym.make("IsaacContrib-Tablecloth-H1", cfg=cfg).unwrapped + try: + env.reset() + robot = env.scene["robot"] + pelvis_ids, _ = robot.find_bodies("pelvis") + foot_ids, foot_names = robot.find_bodies(".*ankle_link") + leg_ids, _ = robot.find_joints(".*(hip|knee|ankle).*", preserve_order=True) + initial_pelvis = robot.data.body_pos_w.torch[:, pelvis_ids].clone() + initial_legs = robot.data.joint_pos.torch[:, leg_ids].clone() + + bbox_cache = UsdGeom.BBoxCache(0, ["default", "render", "proxy"]) + for foot_id, foot_name in zip(foot_ids, foot_names, strict=True): + foot_prims = sim_utils.get_all_matching_child_prims( + "/World/envs/env_0/Robot", + predicate=lambda prim: prim.GetName() == foot_name and prim.HasAPI(UsdPhysics.RigidBodyAPI), + stage=env.sim.stage, + ) + assert len(foot_prims) == 1 + bounds = bbox_cache.ComputeUntransformedBound(foot_prims[0]).ComputeAlignedRange() + corners = torch.tensor([tuple(bounds.GetCorner(i)) for i in range(8)], device=device) + corners_w = quat_apply(robot.data.body_quat_w.torch[0, foot_id].expand(8, -1), corners) + corners_w += robot.data.body_pos_w.torch[0, foot_id] + assert 0.0 <= corners_w[:, 2].min().item() <= 0.002, "H1's feet must start at ground level" + + body_ids, _ = robot.find_bodies(["left_hand_link", "right_hand_link", "torso_link"], preserve_order=True) + positions = robot.data.body_pos_w.torch[:, body_ids].clone() + rotations = robot.data.body_quat_w.torch[:, body_ids] + initial_torso_position = positions[:, 2].clone() + up_axis = torch.tensor([[0.0, 0.0, 1.0]], device=device) + initial_torso_up = quat_apply(rotations[:, 2], up_axis) + offsets = torch.tensor([*HAND_OFFSETS, (0.0, 0.0, 0.0)], device=device) + positions += quat_apply(rotations, offsets.unsqueeze(0)) + positions, rotations = subtract_frame_transforms( + robot.data.root_pos_w.torch[:, None].expand_as(positions), + robot.data.root_quat_w.torch[:, None].expand_as(rotations), + positions, + rotations, + ) + torso_pose = torch.cat((positions[:, 2], rotations[:, 2]), dim=-1) + machine = expert.H1TableclothStateMachine(env.step_dt, torso_pose, env.action_manager.total_action_dim, 2.0) + closed_thumbs = torch.tensor( + [expert.FINGER_CLOSED_VALUES[0], expert.FINGER_CLOSED_VALUES[12]], device=device + ) + grasp_pose = torch.tensor(expert.HAND_KEYFRAMES[-2:], device=device) + cloth_mesh = UsdGeom.Mesh(env.sim.stage.GetPrimAtPath("/World/envs/env_0/Cloth/sim_mesh")) + assert all(count == 3 for count in cloth_mesh.GetFaceVertexCountsAttr().Get()) + cloth_faces = torch.tensor(cloth_mesh.GetFaceVertexIndicesAttr().Get(), device=device).reshape(-1, 3) + mesh_transform = UsdGeom.XformCache().GetLocalToWorldTransform(cloth_mesh.GetPrim()) + rest_points = torch.tensor( + [tuple(mesh_transform.Transform(Gf.Vec3d(*point))) for point in cloth_mesh.GetPointsAttr().Get()], + device=device, + ) + torch.testing.assert_close( + rest_points, env.scene["cloth"].data.default_nodal_state_w.torch[0, :, :3], atol=1.0e-6, rtol=0.0 + ) + grasped_vertices = None + for _ in range(312): + with torch.inference_mode(): + actions = machine.compute() + env.step(actions) + torch.testing.assert_close( + robot.data.body_pos_w.torch[:, pelvis_ids], initial_pelvis, atol=1.0e-6, rtol=0.0 + ) + torch.testing.assert_close(robot.data.joint_pos.torch[:, leg_ids], initial_legs, atol=0.005, rtol=0.0) + torch.testing.assert_close( + robot.data.body_pos_w.torch[:, body_ids[2]], initial_torso_position, atol=0.001, rtol=0.0 + ) + torch.testing.assert_close( + quat_apply(robot.data.body_quat_w.torch[:, body_ids[2]], up_axis), + initial_torso_up, + atol=0.002, + rtol=0.0, + ) + + hand_positions = robot.data.body_pos_w.torch[0, body_ids[:2]] + quat_apply( + robot.data.body_quat_w.torch[0, body_ids[:2]], offsets[:2] + ) + cloth_positions = env.scene["cloth"].data.nodal_pos_w.torch[0] + thumb_targets = actions[0, [expert.ARM_ACTION_DIM, expert.ARM_ACTION_DIM + 12]] + hand_actions = actions[0, :14].reshape(2, 7) + hand_targets = hand_actions[:, :3] + if ( + grasped_vertices is None + and torch.allclose(thumb_targets, closed_thumbs) + and torch.allclose(hand_targets, grasp_pose) + ): + surface = trimesh.Trimesh( + vertices=cloth_positions.cpu().numpy(), faces=cloth_faces.cpu().numpy(), process=False + ) + points, _, face_ids = trimesh.proximity.closest_point_naive(surface, hand_positions.cpu().numpy()) + weights = trimesh.triangles.points_to_barycentric(surface.triangles[face_ids], points) + # Keep fixed material coordinates, not nearby vertices that depend on mesh resolution. + grasped_vertices = cloth_faces[torch.as_tensor(face_ids, device=device)] + grasp_weights = torch.as_tensor(weights, dtype=cloth_positions.dtype, device=device) + assert torch.isfinite(grasp_weights).all() + assert torch.all( + torch.linalg.vector_norm(torch.as_tensor(points, device=device) - hand_positions, dim=-1) + < 0.005 + ) + if grasped_vertices is not None: + grasp_points = (cloth_positions[grasped_vertices] * grasp_weights[..., None]).sum(dim=1) + separation = (grasp_points - hand_positions).norm(dim=-1) + assert torch.all(separation < 0.015), f"H1 lost its cloth grasp: {separation.tolist()} m" + desired_rotations = quat_mul(robot.data.root_quat_w.torch.expand(2, -1), hand_actions[:, 3:]) + attitude_error = torch.rad2deg( + quat_error_magnitude(robot.data.body_quat_w.torch[0, body_ids[:2]], desired_rotations) + ) + assert torch.all(attitude_error < 5.0), f"H1's wrists drifted: {attitude_error.tolist()} deg" + + assert grasped_vertices is not None, "The expert never closed its grasp" + assert success_term.func(env, **success_term.params).all(), "The tablecloth trick failed" + finally: + env.close() diff --git a/tools/test_settings.py b/tools/test_settings.py index a5996d57ee6a..a232ad690c25 100644 --- a/tools/test_settings.py +++ b/tools/test_settings.py @@ -79,6 +79,7 @@ "test_environments_newton.py": GIT_ASSET_STARTUP_TIMEOUT, "test_environments_ovphysx.py": GIT_ASSET_STARTUP_TIMEOUT, "test_multi_agent_environments.py": GIT_ASSET_STARTUP_TIMEOUT, + "test_tablecloth_h1_stance.py": GIT_ASSET_STARTUP_TIMEOUT, } """Per-test startup timeouts for cold external asset downloads.""" From 79bbedb27010d92977dab283c882b539406c192c Mon Sep 17 00:00:00 2001 From: Maximilian Krause Date: Thu, 1 Oct 2026 11:38:34 +0200 Subject: [PATCH 13/34] Fix tablecloth CI startup and package both examples --- .../_static/examples/newton_tablecloth.jpg | Bin 0 -> 57543 bytes .../tasks/manipulation/h1_tablecloth.jpg | Bin 83603 -> 45200 bytes .../concepts/solver-tuning/tune_vbd.rst | 13 ++++++++++--- docs/source/how-to/run_state_machines.rst | 16 +++++++++++++++- docs/source/setup/demos.rst | 4 +++- .../tablecloth_h1.py | 8 +++++--- .../max-newton-tablecloth-demos.added.rst | 1 + .../max-newton-tablecloth-demos.minor | 0 .../max-newton-tablecloth-demos.minor.rst | 5 ----- source/isaaclab/isaaclab/programs.py | 7 +++++++ .../test/app/standalone_script_cases.py | 5 ++--- .../max-vbd-tablecloth-demos.added.rst | 1 + ...rst => max-vbd-tablecloth-demos.fixed.rst} | 8 -------- .../max-vbd-tablecloth-demos.minor | 0 .../max-tablecloth-h1-task.added.rst | 1 + ...r.rst => max-tablecloth-h1-task.fixed.rst} | 9 +-------- .../changelog.d/max-tablecloth-h1-task.minor | 0 .../contrib/tablecloth/h1_env_cfg.py | 4 ++-- .../test/contrib/contrib_env_test_utils.py | 12 ++++++++---- .../test/contrib/test_tablecloth_h1_stance.py | 13 ++++++++++--- 20 files changed, 66 insertions(+), 41 deletions(-) create mode 100644 docs/source/_static/examples/newton_tablecloth.jpg rename {scripts/environments/state_machine => examples}/tablecloth_h1.py (98%) create mode 100644 source/isaaclab/changelog.d/max-newton-tablecloth-demos.added.rst create mode 100644 source/isaaclab/changelog.d/max-newton-tablecloth-demos.minor delete mode 100644 source/isaaclab/changelog.d/max-newton-tablecloth-demos.minor.rst create mode 100644 source/isaaclab_newton/changelog.d/max-vbd-tablecloth-demos.added.rst rename source/isaaclab_newton/changelog.d/{max-vbd-tablecloth-demos.minor.rst => max-vbd-tablecloth-demos.fixed.rst} (67%) create mode 100644 source/isaaclab_newton/changelog.d/max-vbd-tablecloth-demos.minor create mode 100644 source/isaaclab_tasks/changelog.d/max-tablecloth-h1-task.added.rst rename source/isaaclab_tasks/changelog.d/{max-tablecloth-h1-task.minor.rst => max-tablecloth-h1-task.fixed.rst} (68%) create mode 100644 source/isaaclab_tasks/changelog.d/max-tablecloth-h1-task.minor diff --git a/docs/source/_static/examples/newton_tablecloth.jpg b/docs/source/_static/examples/newton_tablecloth.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1d6640314663a1199d4e0551e874cfcc0e94ef3c GIT binary patch literal 57543 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

P+A94Wz_xBpnim}D(nWqT> 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 UMyM5dNQ3kq6Ug=D7yX?6Kf?#Cxc~qF literal 0 HcmV?d00001 diff --git a/docs/source/_static/tasks/manipulation/h1_tablecloth.jpg b/docs/source/_static/tasks/manipulation/h1_tablecloth.jpg index 9e40e05bd3f8990294a05ce832185fdec6e8026e..46be61e58177e492f03754bc51c5515ce3fa837e 100644 GIT binary patch literal 45200 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�)QJ5qzx9)^;Yd#GbRsPi!6u6#W1X=EKHbHS*1 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 as ``IsaacContrib-Tablecloth-H1``. +For the five-speed standalone comparison, see :ref:`newton-using-vbd`. + Start with ``lift_cube_sm.py`` for a self-contained state-machine example. The H1 example shows how to keep scene, observations, rewards, and terminations in a reusable task while the scripted expert supplies only actions. diff --git a/docs/source/setup/demos.rst b/docs/source/setup/demos.rst index f9c27a8578ac..c634a175407e 100644 --- a/docs/source/setup/demos.rst +++ b/docs/source/setup/demos.rst @@ -27,7 +27,9 @@ For example, run ``uvx isaaclab demo zoo --viz newton_gl`` to explore the catalo Programs whose required modules are unavailable, hardware-dependent teleoperation, and Kit-only demos are not shown. -For particle-material comparisons and solver guidance, see :ref:`newton-tuning-mpm`. +For cloth and rigid-soft contact examples, see :ref:`newton-using-vbd` and the +:ref:`H1 tablecloth expert `. For particle-material comparisons +and solver guidance, see :ref:`newton-tuning-mpm`. Command Builder --------------- diff --git a/scripts/environments/state_machine/tablecloth_h1.py b/examples/tablecloth_h1.py similarity index 98% rename from scripts/environments/state_machine/tablecloth_h1.py rename to examples/tablecloth_h1.py index 9ced4d00e69f..5803ea3b2a73 100644 --- a/scripts/environments/state_machine/tablecloth_h1.py +++ b/examples/tablecloth_h1.py @@ -11,11 +11,11 @@ .. code-block:: bash - uv run --extra importers python scripts/environments/state_machine/tablecloth_h1.py - uv run --extra importers python scripts/environments/state_machine/tablecloth_h1.py \ + uv run --extra importers isaaclab example tablecloth-h1 + uv run --extra importers python examples/tablecloth_h1.py \ --visualizer none --max_steps 312 - uv run --extra importers --extra isaacsim --extra video python scripts/environments/state_machine/tablecloth_h1.py \ + uv run --extra importers --extra isaacsim --extra video python examples/tablecloth_h1.py \ --visualizer kit --video """ @@ -43,6 +43,7 @@ from isaaclab.envs.utils.video_recorder_cfg import VideoRecorderCfg from isaaclab.utils.math import subtract_frame_transforms +from isaaclab.utils.version import standalone_importers_available import isaaclab_tasks # noqa: F401 from isaaclab_tasks.contrib.tablecloth.mdp._metrics import cloth_pull_distance @@ -320,6 +321,7 @@ def _torso_pose_in_robot_frame(env) -> torch.Tensor: def main() -> None: """Launch the task and run its scripted expert.""" + args_cli.require_kit = not standalone_importers_available() if not math.isfinite(args_cli.pull_speed) or args_cli.pull_speed <= 0.0: raise ValueError("--pull_speed must be finite and positive") if args_cli.video and "none" in (args_cli.visualizer or []): diff --git a/source/isaaclab/changelog.d/max-newton-tablecloth-demos.added.rst b/source/isaaclab/changelog.d/max-newton-tablecloth-demos.added.rst new file mode 100644 index 000000000000..b1f1591d9f62 --- /dev/null +++ b/source/isaaclab/changelog.d/max-newton-tablecloth-demos.added.rst @@ -0,0 +1 @@ +* Added the ``newton-tablecloth`` and ``tablecloth-h1`` examples to the Isaac Lab command-line catalog and standalone smoke coverage. diff --git a/source/isaaclab/changelog.d/max-newton-tablecloth-demos.minor b/source/isaaclab/changelog.d/max-newton-tablecloth-demos.minor new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/source/isaaclab/changelog.d/max-newton-tablecloth-demos.minor.rst b/source/isaaclab/changelog.d/max-newton-tablecloth-demos.minor.rst deleted file mode 100644 index 79fedea894a8..000000000000 --- a/source/isaaclab/changelog.d/max-newton-tablecloth-demos.minor.rst +++ /dev/null @@ -1,5 +0,0 @@ -Added -^^^^^ - -* Added the ``newton-tablecloth`` example to the Isaac Lab command-line catalog and standalone smoke coverage. -* Added standalone smoke coverage for the H1 tablecloth state-machine example. diff --git a/source/isaaclab/isaaclab/programs.py b/source/isaaclab/isaaclab/programs.py index 50683630b5e7..15f340c159a7 100644 --- a/source/isaaclab/isaaclab/programs.py +++ b/source/isaaclab/isaaclab/programs.py @@ -133,6 +133,13 @@ def _run_script(path: Path) -> None: "examples/newton_tablecloth.py", "Compare the tablecloth trick across five pull speeds with Newton VBD.", ), + ProgramSpec( + "tablecloth-h1", + "examples/tablecloth_h1.py", + "Run a bimanual H1 tablecloth expert on a contributed manager-based task.", + extras=("importers",), + required_modules=("isaacsim",), + ), ProgramSpec( "procedural-terrain", "examples/procedural_terrain.py", diff --git a/source/isaaclab/test/app/standalone_script_cases.py b/source/isaaclab/test/app/standalone_script_cases.py index 6fb93ce4ab33..3cf2a8ec219e 100644 --- a/source/isaaclab/test/app/standalone_script_cases.py +++ b/source/isaaclab/test/app/standalone_script_cases.py @@ -31,7 +31,6 @@ # ``scripts/tools`` is not a root because most of its scripts are not simulator launches. The asset # converters are: they build a SimulationContext to preview the converted asset. EXTRA_SCRIPTS = ( - ROOT / "scripts" / "environments" / "state_machine" / "tablecloth_h1.py", ROOT / "scripts" / "tools" / "convert_urdf.py", ROOT / "scripts" / "tools" / "convert_mjcf.py", ) @@ -228,11 +227,11 @@ class SmokeResult: fixed_physics_backend="newton_vbd", visualizers=("newton_gl",), ), - "scripts/environments/state_machine/tablecloth_h1.py": ScriptOverride( + "examples/tablecloth_h1.py": ScriptOverride( args=("--max_steps", "2"), fixed_physics_backend="newton_vbd", visualizers=("newton_gl",), - required_modules=("isaacsim.asset.importer.mjcf",), + required_modules=("isaacsim",), ), "examples/sensors/cameras.py": ScriptOverride(args=("--num_envs", "1"), startup_timeout=900.0), "examples/sensors/multi_mesh_raycaster.py": ScriptOverride( diff --git a/source/isaaclab_newton/changelog.d/max-vbd-tablecloth-demos.added.rst b/source/isaaclab_newton/changelog.d/max-vbd-tablecloth-demos.added.rst new file mode 100644 index 000000000000..e8f70c6b2962 --- /dev/null +++ b/source/isaaclab_newton/changelog.d/max-vbd-tablecloth-demos.added.rst @@ -0,0 +1 @@ +* Exposed non-rod VBD joint attachment stiffness separately from actuator gains in :class:`~isaaclab_newton.physics.VBDSolverCfg`. diff --git a/source/isaaclab_newton/changelog.d/max-vbd-tablecloth-demos.minor.rst b/source/isaaclab_newton/changelog.d/max-vbd-tablecloth-demos.fixed.rst similarity index 67% rename from source/isaaclab_newton/changelog.d/max-vbd-tablecloth-demos.minor.rst rename to source/isaaclab_newton/changelog.d/max-vbd-tablecloth-demos.fixed.rst index 6fdbd695db6d..6d2d84ecbb53 100644 --- a/source/isaaclab_newton/changelog.d/max-vbd-tablecloth-demos.minor.rst +++ b/source/isaaclab_newton/changelog.d/max-vbd-tablecloth-demos.fixed.rst @@ -1,11 +1,3 @@ -Added -^^^^^ - -* Exposed non-rod VBD joint attachment stiffness separately from actuator gains in :class:`~isaaclab_newton.physics.VBDSolverCfg`. - -Fixed -^^^^^ - * Included active bending constraints when graph-coloring VBD deformable models. * Fixed Newton IK action setup for fixed-base articulations whose root joint is nested beneath the asset prim. * Synchronized VBD joint coordinates and velocities with integrated body state so articulation and rigid-object data remained current. diff --git a/source/isaaclab_newton/changelog.d/max-vbd-tablecloth-demos.minor b/source/isaaclab_newton/changelog.d/max-vbd-tablecloth-demos.minor new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/source/isaaclab_tasks/changelog.d/max-tablecloth-h1-task.added.rst b/source/isaaclab_tasks/changelog.d/max-tablecloth-h1-task.added.rst new file mode 100644 index 000000000000..dffee26cde8a --- /dev/null +++ b/source/isaaclab_tasks/changelog.d/max-tablecloth-h1-task.added.rst @@ -0,0 +1 @@ +* Added the ``IsaacContrib-Tablecloth-H1`` manager-based task and a GPU-resident scripted expert. diff --git a/source/isaaclab_tasks/changelog.d/max-tablecloth-h1-task.minor.rst b/source/isaaclab_tasks/changelog.d/max-tablecloth-h1-task.fixed.rst similarity index 68% rename from source/isaaclab_tasks/changelog.d/max-tablecloth-h1-task.minor.rst rename to source/isaaclab_tasks/changelog.d/max-tablecloth-h1-task.fixed.rst index 3fe7336045f9..b7f944d49891 100644 --- a/source/isaaclab_tasks/changelog.d/max-tablecloth-h1-task.minor.rst +++ b/source/isaaclab_tasks/changelog.d/max-tablecloth-h1-task.fixed.rst @@ -1,10 +1,3 @@ -Added -^^^^^ - -* Added the ``IsaacContrib-Tablecloth-H1`` manager-based task and a GPU-resident scripted expert. - -Fixed -^^^^^ - * Grounded H1's standing pose, held its pelvis fixed under VBD manipulation loads, and excluded leg joints from arm IK control. * Stiffened H1's structural VBD joints and recalibrated its physical corner grasp with a reachable constant-attitude pull and smooth braking. +* Enabled H1 example and regression startup with Kit's MJCF importer when standalone importers were unavailable. diff --git a/source/isaaclab_tasks/changelog.d/max-tablecloth-h1-task.minor b/source/isaaclab_tasks/changelog.d/max-tablecloth-h1-task.minor new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/source/isaaclab_tasks/isaaclab_tasks/contrib/tablecloth/h1_env_cfg.py b/source/isaaclab_tasks/isaaclab_tasks/contrib/tablecloth/h1_env_cfg.py index 372147daf0d2..557fc6aa41df 100644 --- a/source/isaaclab_tasks/isaaclab_tasks/contrib/tablecloth/h1_env_cfg.py +++ b/source/isaaclab_tasks/isaaclab_tasks/contrib/tablecloth/h1_env_cfg.py @@ -110,7 +110,7 @@ def _post_spawn(self, stage) -> None: from isaaclab.sim.schemas import apply_namespaced # noqa: PLC0415 from isaaclab.sim.spawners.materials.physics_materials import ( # noqa: PLC0415 - spawn_rigid_body_material_from_fragments, + spawn_physics_material_from_fragments, ) root_path = self.spawn.spawn_path if self.spawn is not None and self.spawn.spawn_path else self.prim_path @@ -138,7 +138,7 @@ def _post_spawn(self, stage) -> None: # The global cloth friction is low so tableware can stay put; pinching needs a strong local contact. grasp_material_path = f"{root_path}/GraspMaterial" - spawn_rigid_body_material_from_fragments( + spawn_physics_material_from_fragments( grasp_material_path, rigid_material( density=None, diff --git a/source/isaaclab_tasks/test/contrib/contrib_env_test_utils.py b/source/isaaclab_tasks/test/contrib/contrib_env_test_utils.py index 97602390279a..4c1a0093840c 100644 --- a/source/isaaclab_tasks/test/contrib/contrib_env_test_utils.py +++ b/source/isaaclab_tasks/test/contrib/contrib_env_test_utils.py @@ -7,10 +7,10 @@ The smoke tests are split by the runtime each environment needs, so a test process only starts what its environments use: ``kitless`` environments run without Isaac Sim, ``kit`` environments need Isaac Sim for -PhysX but no renderer, and ``kit_cameras`` environments also need the RTX renderer, the expensive part of -starting Isaac Sim. The runtime comes from :func:`isaaclab.app.sim_launcher.scan`, the same check -``launch_simulation`` uses to decide whether to start Isaac Sim, so a new environment lands in the right file -without being listed anywhere. +physics or asset import but no renderer, and ``kit_cameras`` environments also need the RTX renderer, +the expensive part of starting Isaac Sim. The runtime comes from :func:`isaaclab.app.sim_launcher.scan`, +the same check ``launch_simulation`` uses to decide whether to start Isaac Sim, with cold asset-import +requirements accounted for separately. Contributed environments are intentionally sampled once per task package, robot directory, and runtime. Additional variants in the same family do not add smoke tests. @@ -23,6 +23,7 @@ import pytest from isaaclab.app.sim_launcher import scan +from isaaclab.utils.version import standalone_importers_available from isaaclab_tasks.utils.parse_cfg import parse_env_cfg @@ -54,6 +55,9 @@ def _skip_reason(task_name: str) -> str | None: def task_runtime(task_name: str) -> Runtime: """Return the runtime an environment's default configuration launches with.""" + # H1 converts a downloaded MJCF before scene construction, even though its physics is kitless. + if task_name == "IsaacContrib-Tablecloth-H1" and not standalone_importers_available(): + return "kit" config_scan = scan(parse_env_cfg(task_name)) if not config_scan.needs_kit: return "kitless" diff --git a/source/isaaclab_tasks/test/contrib/test_tablecloth_h1_stance.py b/source/isaaclab_tasks/test/contrib/test_tablecloth_h1_stance.py index 7dc58fac4932..3ff57810c164 100644 --- a/source/isaaclab_tasks/test/contrib/test_tablecloth_h1_stance.py +++ b/source/isaaclab_tasks/test/contrib/test_tablecloth_h1_stance.py @@ -5,6 +5,13 @@ """Physical regression for the H1 tablecloth expert's stance and grasp.""" +from isaaclab.test.utils import launch_test_simulation +from isaaclab.utils.version import standalone_importers_available + +# Keep Kit alive for the test process when its MJCF importer is needed. +if not standalone_importers_available(): + launch_test_simulation() + import sys import gymnasium as gym @@ -12,8 +19,6 @@ import torch import trimesh -from pxr import Gf, UsdGeom, UsdPhysics - import isaaclab.sim as sim_utils from isaaclab.app import launch_simulation from isaaclab.test.utils import DeviceScope, test_devices @@ -28,7 +33,7 @@ def test_h1_stays_grounded_and_retains_cloth(device, monkeypatch): """The scripted trick retains both physical grips without destabilizing the robot.""" monkeypatch.setattr(sys, "argv", ["tablecloth_h1.py"]) - from scripts.environments.state_machine import tablecloth_h1 as expert + from examples import tablecloth_h1 as expert cfg = parse_env_cfg("IsaacContrib-Tablecloth-H1", device=device, num_envs=1) cfg.sim.visualizer_cfgs = [] @@ -37,6 +42,8 @@ def test_h1_stays_grounded_and_retains_cloth(device, monkeypatch): cfg.terminations.tableware_fallen = None cfg.rewards.success = None with launch_simulation(cfg=cfg): + from pxr import Gf, UsdGeom, UsdPhysics # noqa: PLC0415 + env = gym.make("IsaacContrib-Tablecloth-H1", cfg=cfg).unwrapped try: env.reset() From cdf44955203204cc2c7f9ec11133405b40d4cbf4 Mon Sep 17 00:00:00 2001 From: Maximilian Krause Date: Thu, 1 Oct 2026 14:20:53 +0200 Subject: [PATCH 14/34] Remove tablecloth example video recording plumbing --- examples/_newton_tablecloth_utils.py | 52 ---------------------------- examples/newton_tablecloth.py | 51 +++------------------------ examples/tablecloth_h1.py | 25 +------------ 3 files changed, 5 insertions(+), 123 deletions(-) delete mode 100644 examples/_newton_tablecloth_utils.py diff --git a/examples/_newton_tablecloth_utils.py b/examples/_newton_tablecloth_utils.py deleted file mode 100644 index 74ce3bbcb46e..000000000000 --- a/examples/_newton_tablecloth_utils.py +++ /dev/null @@ -1,52 +0,0 @@ -# Copyright (c) 2022-2026, The Isaac Lab Project Developers (https://github.com/isaac-sim/IsaacLab/blob/main/CONTRIBUTORS.md). -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause - -"""Video recording helper for the standalone tablecloth comparison.""" - -from __future__ import annotations - -from typing import TYPE_CHECKING - -if TYPE_CHECKING: - from isaaclab.envs.utils.video_recorder import VideoRecorder - from isaaclab.sim import SimulationContext - - -class _StandaloneVideoTarget: - """Expose the simulation fields expected by Isaac Lab's step-driven recorder.""" - - def __init__(self, sim: SimulationContext, fps: int): - self.sim = sim - self.step_dt = sim.get_physics_dt() - self.metadata = {"render_fps": fps} - - -def create_video_recorder( - sim: SimulationContext, - *, - enabled: bool, - output_dir: str, - filename_prefix: str, - video_length: int, - fps: int, -) -> VideoRecorder | None: - """Create a step-driven viewport recorder when requested.""" - if not enabled: - return None - - from isaaclab.envs.utils.video_recorder import VideoRecorder # noqa: PLC0415 - from isaaclab.envs.utils.video_recorder_cfg import VideoRecorderCfg # noqa: PLC0415 - - print(f"[INFO]: Recording {video_length / fps:.1f} s to {output_dir}/", flush=True) - return VideoRecorder( - VideoRecorderCfg( - source="visualizer", - output_dir=output_dir, - output_filename_prefix=filename_prefix, - fps=fps, - video_length=video_length, - ), - _StandaloneVideoTarget(sim, fps), - ) diff --git a/examples/newton_tablecloth.py b/examples/newton_tablecloth.py index 0c33d14aa27b..bc7e6fc9d9dd 100644 --- a/examples/newton_tablecloth.py +++ b/examples/newton_tablecloth.py @@ -19,31 +19,21 @@ # Run the complete comparison without rendering. uv run python examples/newton_tablecloth.py --device cuda:0 --visualizer none --max_steps 240 - # Record the complete comparison as a 60 FPS MP4 through Isaac Sim Kit. - uv run --extra isaacsim --extra video python examples/newton_tablecloth.py \ - --device cuda:0 --visualizer kit --video """ from __future__ import annotations import argparse -import sys -from pathlib import Path from isaaclab.app import add_launcher_args, launch_simulation parser = argparse.ArgumentParser(description="Compare five Newton VBD tablecloth pull speeds.") parser.add_argument("--max_steps", type=int, default=-1, help="Stop after this many frames; negative runs forever.") -parser.add_argument("--video", action="store_true", help="Record the complete demo to videos/newton_tablecloth/.") add_launcher_args(parser) parser.set_defaults(visualizer=["newton_gl"]) args_cli = parser.parse_args() -# Packaged examples execute in-process, so expose this script's private sibling helper. -sys.path.insert(0, str(Path(__file__).resolve().parent)) - import warp as wp -from _newton_tablecloth_utils import create_video_recorder from isaaclab_newton.physics import ( NewtonCfg, NewtonCollisionPipelineCfg, @@ -93,9 +83,6 @@ FPS = 60 SUBSTEPS = 25 -VIDEO_STEPS = 240 -VIDEO_OUTPUT_DIR = "videos/newton_tablecloth" -VIDEO_RESOLUTION = (1920, 1080) SETTLE_TIME = 0.5 PULL_DISTANCE = 1.25 PULL_RAMP_TIME = 0.40 @@ -376,12 +363,6 @@ def _update(self, _state) -> None: def main() -> None: """Launch the five-speed tablecloth demo.""" - if args_cli.video and "none" in (args_cli.visualizer or []): - raise ValueError("--video requires a capture-capable visualizer; omit --visualizer none") - if args_cli.video and "kit" in (args_cli.visualizer or []): - args_cli.enable_cameras = True - max_steps = VIDEO_STEPS if args_cli.video and args_cli.max_steps < 0 else args_cli.max_steps - physics_cfg = NewtonCfg( num_substeps=SUBSTEPS, # Fast cloth can cross the contact band within one frame, so collide on every substep. @@ -403,20 +384,11 @@ def main() -> None: with launch_simulation(cfg=physics_cfg, launcher_args=args_cli) as resolved_physics_cfg: from isaaclab.scene import InteractiveScene # noqa: PLC0415 - default_visualizer_cfg = None - if args_cli.video and "kit" in (args_cli.visualizer or []): - from isaaclab_visualizers.kit import KitVisualizerCfg # noqa: PLC0415 - - default_visualizer_cfg = KitVisualizerCfg( - window_width=VIDEO_RESOLUTION[0], window_height=VIDEO_RESOLUTION[1] - ) - sim = sim_utils.SimulationContext( sim_utils.SimulationCfg( dt=1.0 / FPS, device=args_cli.device, physics=resolved_physics_cfg, - default_visualizer_cfg=default_visualizer_cfg, ) ) sim.set_camera_view(eye=(3.61, -5.225, 2.8825), target=(0.0, 0.0, 0.40)) @@ -426,27 +398,12 @@ def main() -> None: sim.reset() sim_dt = sim.get_physics_dt() - video_recorder = create_video_recorder( - sim, - enabled=args_cli.video, - output_dir=VIDEO_OUTPUT_DIR, - filename_prefix="newton_tablecloth", - video_length=max_steps, - fps=FPS, - ) - print("[INFO]: Setup complete. Five side-by-side Isaac Lab tablecloth trials are ready.", flush=True) step = 0 - try: - while sim.is_running() and (max_steps < 0 or step < max_steps): - sim.step() - scene.update(sim_dt) - if video_recorder is not None: - video_recorder.step() - step += 1 - finally: - if video_recorder is not None: - video_recorder.close() + while sim.is_running() and (args_cli.max_steps < 0 or step < args_cli.max_steps): + sim.step() + scene.update(sim_dt) + step += 1 if __name__ == "__main__": diff --git a/examples/tablecloth_h1.py b/examples/tablecloth_h1.py index 5803ea3b2a73..2c45aa1e0fa5 100644 --- a/examples/tablecloth_h1.py +++ b/examples/tablecloth_h1.py @@ -15,9 +15,6 @@ uv run --extra importers python examples/tablecloth_h1.py \ --visualizer none --max_steps 312 - uv run --extra importers --extra isaacsim --extra video python examples/tablecloth_h1.py \ - --visualizer kit --video - """ from __future__ import annotations @@ -32,7 +29,6 @@ parser.add_argument("--num_envs", type=int, default=1, help="Number of parallel environments.") parser.add_argument("--max_steps", type=int, default=-1, help="Stop after this many steps; negative runs forever.") parser.add_argument("--pull_speed", type=float, default=2.0, help="Peak X withdrawal speed [m/s].") -parser.add_argument("--video", action="store_true", help="Record the rollout to videos/tablecloth_h1/.") add_launcher_args(parser) parser.set_defaults(visualizer=["newton_gl"]) args_cli = parser.parse_args() @@ -41,7 +37,6 @@ import torch import warp as wp -from isaaclab.envs.utils.video_recorder_cfg import VideoRecorderCfg from isaaclab.utils.math import subtract_frame_transforms from isaaclab.utils.version import standalone_importers_available @@ -49,8 +44,6 @@ from isaaclab_tasks.contrib.tablecloth.mdp._metrics import cloth_pull_distance from isaaclab_tasks.utils import parse_env_cfg -FPS = 60 -VIDEO_STEPS = 312 PULL_DISTANCE = 0.40 ARM_ACTION_DIM = 21 @@ -324,28 +317,12 @@ def main() -> None: args_cli.require_kit = not standalone_importers_available() if not math.isfinite(args_cli.pull_speed) or args_cli.pull_speed <= 0.0: raise ValueError("--pull_speed must be finite and positive") - if args_cli.video and "none" in (args_cli.visualizer or []): - raise ValueError("--video requires a capture-capable visualizer; omit --visualizer none") - if args_cli.video and "kit" in (args_cli.visualizer or []): - args_cli.enable_cameras = True - - max_steps = VIDEO_STEPS if args_cli.video and args_cli.max_steps < 0 else args_cli.max_steps env_cfg = parse_env_cfg(args_cli.task, device=args_cli.device, num_envs=args_cli.num_envs) success_term = env_cfg.terminations.success # The expert rollout should remain visible after task completion rather than auto-resetting. env_cfg.terminations.success = None env_cfg.terminations.tableware_fallen = None env_cfg.rewards.success = None - if args_cli.video: - env_cfg.video_recorders = [ - VideoRecorderCfg( - source="visualizer", - output_dir="videos/tablecloth_h1", - output_filename_prefix="tablecloth_h1", - fps=FPS, - video_length=max_steps, - ) - ] with launch_simulation(cfg=env_cfg, launcher_args=args_cli): env = gym.make(args_cli.task, cfg=env_cfg) @@ -359,7 +336,7 @@ def main() -> None: ) print("[INFO]: Setup complete. H1 tablecloth expert is ready.", flush=True) step = 0 - while env.unwrapped.sim.is_running() and (max_steps < 0 or step < max_steps): + while env.unwrapped.sim.is_running() and (args_cli.max_steps < 0 or step < args_cli.max_steps): with torch.inference_mode(): _, _, terminated, truncated, _ = env.step(state_machine.compute()) dones = terminated | truncated From 036d94ffa0163eb0c500fffde58791d0e5c59459 Mon Sep 17 00:00:00 2001 From: Maximilian Krause Date: Thu, 1 Oct 2026 15:10:39 +0200 Subject: [PATCH 15/34] Keep the H1 scripted expert with its contributed task --- docs/source/how-to/run_state_machines.rst | 10 +- examples/tablecloth_h1.py | 263 +--------------- .../max-tablecloth-h1-task.added.rst | 3 +- .../contrib/tablecloth/expert.py | 292 ++++++++++++++++++ .../test/contrib/test_tablecloth_h1_stance.py | 8 +- 5 files changed, 306 insertions(+), 270 deletions(-) create mode 100644 source/isaaclab_tasks/isaaclab_tasks/contrib/tablecloth/expert.py diff --git a/docs/source/how-to/run_state_machines.rst b/docs/source/how-to/run_state_machines.rst index 6d021c55fe38..e40d6192a22a 100644 --- a/docs/source/how-to/run_state_machines.rst +++ b/docs/source/how-to/run_state_machines.rst @@ -79,10 +79,12 @@ the mesh or hand asset requires revalidating acquisition and retention. uv run --extra importers isaaclab example tablecloth-h1 \ --max_steps 312 -The expert lives in ``examples/tablecloth_h1.py`` so it also ships in the -Isaac Lab wheel. The reusable task lives in -``source/isaaclab_tasks/isaaclab_tasks/contrib/tablecloth/`` and appears in the -:ref:`environment browser ` as ``IsaacContrib-Tablecloth-H1``. +The reusable task lives in +``source/isaaclab_tasks/isaaclab_tasks/contrib/tablecloth/``. Its ``expert.py`` +contains the Warp controller and grasp calibration; ``examples/tablecloth_h1.py`` +is only a launcher for that task and expert. Both ship in the Isaac Lab wheel. +The task appears in the :ref:`environment browser ` as +``IsaacContrib-Tablecloth-H1``. For the five-speed standalone comparison, see :ref:`newton-using-vbd`. Start with ``lift_cube_sm.py`` for a self-contained state-machine example. diff --git a/examples/tablecloth_h1.py b/examples/tablecloth_h1.py index 2c45aa1e0fa5..15589847a3b1 100644 --- a/examples/tablecloth_h1.py +++ b/examples/tablecloth_h1.py @@ -3,11 +3,11 @@ # # SPDX-License-Identifier: BSD-3-Clause -"""Run a scripted H1 expert on the manager-based tablecloth task. +"""Launch the contributed H1 tablecloth task with its scripted expert. The task owns scene construction, physics, actions, observations, resets, -rewards, and terminations. This script only generates the expert's bimanual -task-space commands with a GPU-resident Warp state machine. +rewards, and terminations. Its ``expert`` module owns the calibrated bimanual +Warp controller; this script only launches the task and runs that controller. .. code-block:: bash @@ -35,270 +35,15 @@ import gymnasium as gym import torch -import warp as wp from isaaclab.utils.math import subtract_frame_transforms from isaaclab.utils.version import standalone_importers_available import isaaclab_tasks # noqa: F401 +from isaaclab_tasks.contrib.tablecloth.expert import H1TableclothStateMachine from isaaclab_tasks.contrib.tablecloth.mdp._metrics import cloth_pull_distance from isaaclab_tasks.utils import parse_env_cfg -PULL_DISTANCE = 0.40 -ARM_ACTION_DIM = 21 - -FINGERS_OPEN = (0.0, 0.0, 0.0, 0.0, 0.0) -FINGERS_CURLED = (0.0, 0.0, 0.0, 0.0, 0.80) -FINGERS_INSERTED = (0.0, 0.0, 0.75, 0.75, 0.80) -FINGERS_PREPINCHED = (0.0, 0.0, 0.737080, 0.713855, 0.80) -FINGERS_PINCHED = (1.0, 1.0, 0.737080, 0.713855, 0.80) - -PHASE_DURATIONS = (0.50, 0.80, 0.60, 0.50, 0.60, 0.60, 0.10, 0.10) -PHASE_KEYFRAMES = ((0, 0), (0, 2), (2, 4), (4, 6), (6, 8), (8, 8), (8, 10), (10, 10)) -PHASE_FINGERS = ( - (FINGERS_OPEN, FINGERS_OPEN), - (FINGERS_OPEN, FINGERS_CURLED), - (FINGERS_CURLED, FINGERS_INSERTED), - (FINGERS_INSERTED, FINGERS_INSERTED), - (FINGERS_INSERTED, FINGERS_PREPINCHED), - (FINGERS_PREPINCHED, FINGERS_PINCHED), - (FINGERS_PINCHED, FINGERS_PINCHED), - (FINGERS_PINCHED, FINGERS_PINCHED), -) -STATE_PULL = wp.constant(len(PHASE_DURATIONS)) -STATE_HOLD = wp.constant(len(PHASE_DURATIONS) + 1) - -# Positions are expressed in the robot root frame, matching the absolute Newton IK action contract. -HAND_KEYFRAMES = ( - (0.27, 0.24, 0.140), - (0.27, -0.24, 0.140), - (0.43, 0.38, 0.060), - (0.43, -0.38, 0.060), - (0.43, 0.38, -0.050), - (0.43, -0.38, -0.048), - (0.545, 0.38, -0.050), - (0.545, -0.38, -0.048), - (0.545, 0.38, -0.020), - (0.545, -0.38, -0.020), - (0.545, 0.38, -0.015), - (0.545, -0.38, -0.015), -) -HAND_ROTATIONS = ( - (-0.09022585, 0.46115433, 0.03007528, 0.88220828), - (0.09023000, 0.46114998, -0.03008000, 0.88220997), -) -# Feasible corner-grasp attitudes for H1's five-DOF arms, calibrated with forward kinematics. -GRASP_HAND_ROTATIONS = ( - (-0.07698878, 0.37041666, 0.08826291, 0.92145205), - (0.07860907, 0.37042228, -0.08392787, 0.92171799), -) -FINGER_CLOSED_VALUES = ( - 1.273907, - 0.160957, - 0.369535, - 0.892908, - 1.2, - 1.2, - 1.0, - 1.0, - 1.0, - 1.0, - 1.0, - 1.0, - 1.192278, - 0.195421, - 0.400690, - 0.679765, - 1.2, - 1.2, - 1.0, - 1.0, - 1.0, - 1.0, - 1.0, - 1.0, -) -FINGER_GROUPS = (0, 0, 0, 0, 2, 2, 4, 4, 4, 4, 4, 4, 1, 1, 1, 1, 3, 3, 4, 4, 4, 4, 4, 4) - - -@wp.func -def _smoothstep(value: float) -> float: - value = wp.clamp(value, 0.0, 1.0) - return value * value * (3.0 - 2.0 * value) - - -@wp.func -def _pull_offset(distance: float) -> wp.vec3: - # This arc preserves the grasp attitude within the arms' reachable pose manifold. - radius = 0.3072 - center = 0.2248 - height = wp.sqrt(radius * radius - center * center) - wp.sqrt( - radius * radius - (distance - center) * (distance - center) - ) - return wp.vec3(-distance, 0.0, height) - - -@wp.kernel -def _infer_state_machine( - dt: float, - pull_speed: float, - keyframes: wp.array(dtype=wp.vec3), - hand_rotations: wp.array(dtype=wp.vec4), - torso_pose: wp.array2d(dtype=float), - phase_durations: wp.array(dtype=float), - phase_start_keyframes: wp.array(dtype=wp.int32), - phase_end_keyframes: wp.array(dtype=wp.int32), - phase_start_fingers: wp.array(dtype=float), - phase_end_fingers: wp.array(dtype=float), - finger_closed_values: wp.array(dtype=float), - finger_groups: wp.array(dtype=wp.int32), - finger_fractions: wp.array2d(dtype=float), - state: wp.array(dtype=wp.int32), - state_time: wp.array(dtype=float), - pull_distance: wp.array(dtype=float), - actions: wp.array2d(dtype=float), -): - env_id = wp.tid() - current_state = state[env_id] - elapsed = state_time[env_id] + dt - - if current_state < STATE_PULL and elapsed >= phase_durations[current_state]: - current_state += 1 - elapsed = 0.0 - - left = keyframes[0] - right = keyframes[1] - if current_state < STATE_PULL: - alpha = _smoothstep(elapsed / phase_durations[current_state]) - start_keyframe = phase_start_keyframes[current_state] - end_keyframe = phase_end_keyframes[current_state] - left = wp.lerp(keyframes[start_keyframe], keyframes[end_keyframe], alpha) - right = wp.lerp(keyframes[start_keyframe + 1], keyframes[end_keyframe + 1], alpha) - for group in range(5): - index = current_state * 5 + group - finger_fractions[env_id, group] = wp.lerp(phase_start_fingers[index], phase_end_fingers[index], alpha) - elif current_state == STATE_PULL: - # Accelerate and brake to rest without a velocity discontinuity at the final hold. - duration = 1.5 * PULL_DISTANCE / pull_speed - distance = PULL_DISTANCE * _smoothstep(elapsed / duration) - pull_distance[env_id] = distance - offset = _pull_offset(distance) - left = keyframes[10] + offset - right = keyframes[11] + offset - for group in range(5): - finger_fractions[env_id, group] = phase_end_fingers[(STATE_PULL - 1) * 5 + group] - if distance >= PULL_DISTANCE: - current_state = STATE_HOLD - else: - distance = pull_distance[env_id] - offset = _pull_offset(distance) - left = keyframes[10] + offset - right = keyframes[11] + offset - for group in range(5): - finger_fractions[env_id, group] = phase_end_fingers[(STATE_PULL - 1) * 5 + group] - - # Finish changing attitude before closing the thumb, not while transporting the cloth. - rotation_alpha = 0.0 - if current_state >= 5: - rotation_alpha = 1.0 - elif current_state == 4: - rotation_alpha = _smoothstep(elapsed / phase_durations[4]) - left_rotation = wp.normalize(wp.lerp(hand_rotations[0], hand_rotations[2], rotation_alpha)) - right_rotation = wp.normalize(wp.lerp(hand_rotations[1], hand_rotations[3], rotation_alpha)) - - for axis in range(3): - actions[env_id, axis] = left[axis] - actions[env_id, 7 + axis] = right[axis] - for axis in range(4): - actions[env_id, 3 + axis] = left_rotation[axis] - actions[env_id, 10 + axis] = right_rotation[axis] - for axis in range(7): - actions[env_id, 14 + axis] = torso_pose[env_id, axis] - - for finger in range(finger_closed_values.shape[0]): - fraction = finger_fractions[env_id, finger_groups[finger]] - actions[env_id, ARM_ACTION_DIM + finger] = fraction * finger_closed_values[finger] - - state[env_id] = current_state - state_time[env_id] = elapsed - - -class H1TableclothStateMachine: - """Generate batched absolute hand poses and finger targets on the simulation device.""" - - def __init__(self, dt: float, torso_pose: torch.Tensor, action_dim: int, pull_speed: float): - self.num_envs = torso_pose.shape[0] - self.device = torso_pose.device - self._warp_device = wp.device_from_torch(self.device) - self.dt = dt - self.pull_speed = pull_speed - expected_action_dim = ARM_ACTION_DIM + len(FINGER_CLOSED_VALUES) - if action_dim != expected_action_dim: - raise ValueError(f"Expected a {expected_action_dim}-D H1 action, received {action_dim}") - - phases = list(zip(PHASE_DURATIONS, PHASE_KEYFRAMES, PHASE_FINGERS, strict=True)) - self._keyframes = wp.array(HAND_KEYFRAMES, dtype=wp.vec3, device=self._warp_device) - self._hand_rotations = wp.array( - (*HAND_ROTATIONS, *GRASP_HAND_ROTATIONS), dtype=wp.vec4, device=self._warp_device - ) - self._torso_pose = wp.from_torch(torso_pose.contiguous(), dtype=wp.float32) - self._phase_durations = wp.array([phase[0] for phase in phases], dtype=float, device=self._warp_device) - self._phase_start_keyframes = wp.array( - [phase[1][0] for phase in phases], dtype=wp.int32, device=self._warp_device - ) - self._phase_end_keyframes = wp.array( - [phase[1][1] for phase in phases], dtype=wp.int32, device=self._warp_device - ) - self._phase_start_fingers = wp.array( - [value for phase in phases for value in phase[2][0]], dtype=float, device=self._warp_device - ) - self._phase_end_fingers = wp.array( - [value for phase in phases for value in phase[2][1]], dtype=float, device=self._warp_device - ) - self._finger_closed_values = wp.array(FINGER_CLOSED_VALUES, dtype=float, device=self._warp_device) - self._finger_groups = wp.array(FINGER_GROUPS, dtype=wp.int32, device=self._warp_device) - self._finger_fractions = wp.zeros((self.num_envs, 5), dtype=float, device=self._warp_device) - self._state = wp.zeros(self.num_envs, dtype=wp.int32, device=self._warp_device) - self._state_time = wp.zeros(self.num_envs, dtype=float, device=self._warp_device) - self._pull_distance = wp.zeros(self.num_envs, dtype=float, device=self._warp_device) - self.actions = torch.zeros((self.num_envs, action_dim), device=self.device) - self._actions = wp.from_torch(self.actions, dtype=wp.float32) - - def reset_idx(self, env_ids: torch.Tensor) -> None: - """Reset the expert for environments that have started a new episode.""" - wp.to_torch(self._state)[env_ids] = 0 - wp.to_torch(self._state_time)[env_ids] = 0.0 - wp.to_torch(self._pull_distance)[env_ids] = 0.0 - wp.to_torch(self._finger_fractions)[env_ids] = 0.0 - - def compute(self) -> torch.Tensor: - """Advance the expert and return its batched action tensor.""" - wp.launch( - _infer_state_machine, - dim=self.num_envs, - inputs=[ - self.dt, - self.pull_speed, - self._keyframes, - self._hand_rotations, - self._torso_pose, - self._phase_durations, - self._phase_start_keyframes, - self._phase_end_keyframes, - self._phase_start_fingers, - self._phase_end_fingers, - self._finger_closed_values, - self._finger_groups, - self._finger_fractions, - self._state, - self._state_time, - self._pull_distance, - self._actions, - ], - device=self._warp_device, - ) - return self.actions - def _torso_pose_in_robot_frame(env) -> torch.Tensor: robot = env.scene["robot"] diff --git a/source/isaaclab_tasks/changelog.d/max-tablecloth-h1-task.added.rst b/source/isaaclab_tasks/changelog.d/max-tablecloth-h1-task.added.rst index dffee26cde8a..be668f211586 100644 --- a/source/isaaclab_tasks/changelog.d/max-tablecloth-h1-task.added.rst +++ b/source/isaaclab_tasks/changelog.d/max-tablecloth-h1-task.added.rst @@ -1 +1,2 @@ -* Added the ``IsaacContrib-Tablecloth-H1`` manager-based task and a GPU-resident scripted expert. +* Added the ``IsaacContrib-Tablecloth-H1`` manager-based task with a GPU-resident + scripted expert in its task package and a small packaged example launcher. diff --git a/source/isaaclab_tasks/isaaclab_tasks/contrib/tablecloth/expert.py b/source/isaaclab_tasks/isaaclab_tasks/contrib/tablecloth/expert.py new file mode 100644 index 000000000000..0a9ae0c52d62 --- /dev/null +++ b/source/isaaclab_tasks/isaaclab_tasks/contrib/tablecloth/expert.py @@ -0,0 +1,292 @@ +# Copyright (c) 2022-2026, The Isaac Lab Project Developers (https://github.com/isaac-sim/IsaacLab/blob/main/CONTRIBUTORS.md). +# All rights reserved. +# +# SPDX-License-Identifier: BSD-3-Clause + + +"""GPU-resident scripted expert for the contributed H1 tablecloth task. + +The calibrated grasp and pull trajectory generate actions for the task. Scene +construction, physics, stepping, resets, rewards, and terminations remain owned +by the environment. +""" + +from __future__ import annotations + +import torch +import warp as wp + +PULL_DISTANCE = 0.40 +ARM_ACTION_DIM = 21 + +FINGERS_OPEN = (0.0, 0.0, 0.0, 0.0, 0.0) +FINGERS_CURLED = (0.0, 0.0, 0.0, 0.0, 0.80) +FINGERS_INSERTED = (0.0, 0.0, 0.75, 0.75, 0.80) +FINGERS_PREPINCHED = (0.0, 0.0, 0.737080, 0.713855, 0.80) +FINGERS_PINCHED = (1.0, 1.0, 0.737080, 0.713855, 0.80) + +PHASE_DURATIONS = (0.50, 0.80, 0.60, 0.50, 0.60, 0.60, 0.10, 0.10) +PHASE_KEYFRAMES = ((0, 0), (0, 2), (2, 4), (4, 6), (6, 8), (8, 8), (8, 10), (10, 10)) +PHASE_FINGERS = ( + (FINGERS_OPEN, FINGERS_OPEN), + (FINGERS_OPEN, FINGERS_CURLED), + (FINGERS_CURLED, FINGERS_INSERTED), + (FINGERS_INSERTED, FINGERS_INSERTED), + (FINGERS_INSERTED, FINGERS_PREPINCHED), + (FINGERS_PREPINCHED, FINGERS_PINCHED), + (FINGERS_PINCHED, FINGERS_PINCHED), + (FINGERS_PINCHED, FINGERS_PINCHED), +) +STATE_PULL = wp.constant(len(PHASE_DURATIONS)) +STATE_HOLD = wp.constant(len(PHASE_DURATIONS) + 1) + +# Positions are expressed in the robot root frame, matching the absolute Newton IK action contract. +HAND_KEYFRAMES = ( + (0.27, 0.24, 0.140), + (0.27, -0.24, 0.140), + (0.43, 0.38, 0.060), + (0.43, -0.38, 0.060), + (0.43, 0.38, -0.050), + (0.43, -0.38, -0.048), + (0.545, 0.38, -0.050), + (0.545, -0.38, -0.048), + (0.545, 0.38, -0.020), + (0.545, -0.38, -0.020), + (0.545, 0.38, -0.015), + (0.545, -0.38, -0.015), +) +HAND_ROTATIONS = ( + (-0.09022585, 0.46115433, 0.03007528, 0.88220828), + (0.09023000, 0.46114998, -0.03008000, 0.88220997), +) +# Feasible corner-grasp attitudes for H1's five-DOF arms, calibrated with forward kinematics. +GRASP_HAND_ROTATIONS = ( + (-0.07698878, 0.37041666, 0.08826291, 0.92145205), + (0.07860907, 0.37042228, -0.08392787, 0.92171799), +) +FINGER_CLOSED_VALUES = ( + 1.273907, + 0.160957, + 0.369535, + 0.892908, + 1.2, + 1.2, + 1.0, + 1.0, + 1.0, + 1.0, + 1.0, + 1.0, + 1.192278, + 0.195421, + 0.400690, + 0.679765, + 1.2, + 1.2, + 1.0, + 1.0, + 1.0, + 1.0, + 1.0, + 1.0, +) +FINGER_GROUPS = (0, 0, 0, 0, 2, 2, 4, 4, 4, 4, 4, 4, 1, 1, 1, 1, 3, 3, 4, 4, 4, 4, 4, 4) + + +@wp.func +def _smoothstep(value: float) -> float: + value = wp.clamp(value, 0.0, 1.0) + return value * value * (3.0 - 2.0 * value) + + +@wp.func +def _pull_offset(distance: float) -> wp.vec3: + # This arc preserves the grasp attitude within the arms' reachable pose manifold. + radius = 0.3072 + center = 0.2248 + height = wp.sqrt(radius * radius - center * center) - wp.sqrt( + radius * radius - (distance - center) * (distance - center) + ) + return wp.vec3(-distance, 0.0, height) + + +@wp.kernel +def _infer_state_machine( + dt: float, + pull_speed: float, + keyframes: wp.array(dtype=wp.vec3), + hand_rotations: wp.array(dtype=wp.vec4), + torso_pose: wp.array2d(dtype=float), + phase_durations: wp.array(dtype=float), + phase_start_keyframes: wp.array(dtype=wp.int32), + phase_end_keyframes: wp.array(dtype=wp.int32), + phase_start_fingers: wp.array(dtype=float), + phase_end_fingers: wp.array(dtype=float), + finger_closed_values: wp.array(dtype=float), + finger_groups: wp.array(dtype=wp.int32), + finger_fractions: wp.array2d(dtype=float), + state: wp.array(dtype=wp.int32), + state_time: wp.array(dtype=float), + pull_distance: wp.array(dtype=float), + actions: wp.array2d(dtype=float), +): + env_id = wp.tid() + current_state = state[env_id] + elapsed = state_time[env_id] + dt + + if current_state < STATE_PULL and elapsed >= phase_durations[current_state]: + current_state += 1 + elapsed = 0.0 + + left = keyframes[0] + right = keyframes[1] + if current_state < STATE_PULL: + alpha = _smoothstep(elapsed / phase_durations[current_state]) + start_keyframe = phase_start_keyframes[current_state] + end_keyframe = phase_end_keyframes[current_state] + left = wp.lerp(keyframes[start_keyframe], keyframes[end_keyframe], alpha) + right = wp.lerp(keyframes[start_keyframe + 1], keyframes[end_keyframe + 1], alpha) + for group in range(5): + index = current_state * 5 + group + finger_fractions[env_id, group] = wp.lerp(phase_start_fingers[index], phase_end_fingers[index], alpha) + elif current_state == STATE_PULL: + # Accelerate and brake to rest without a velocity discontinuity at the final hold. + duration = 1.5 * PULL_DISTANCE / pull_speed + distance = PULL_DISTANCE * _smoothstep(elapsed / duration) + pull_distance[env_id] = distance + offset = _pull_offset(distance) + left = keyframes[10] + offset + right = keyframes[11] + offset + for group in range(5): + finger_fractions[env_id, group] = phase_end_fingers[(STATE_PULL - 1) * 5 + group] + if distance >= PULL_DISTANCE: + current_state = STATE_HOLD + else: + distance = pull_distance[env_id] + offset = _pull_offset(distance) + left = keyframes[10] + offset + right = keyframes[11] + offset + for group in range(5): + finger_fractions[env_id, group] = phase_end_fingers[(STATE_PULL - 1) * 5 + group] + + # Finish changing attitude before closing the thumb, not while transporting the cloth. + rotation_alpha = 0.0 + if current_state >= 5: + rotation_alpha = 1.0 + elif current_state == 4: + rotation_alpha = _smoothstep(elapsed / phase_durations[4]) + left_rotation = wp.normalize(wp.lerp(hand_rotations[0], hand_rotations[2], rotation_alpha)) + right_rotation = wp.normalize(wp.lerp(hand_rotations[1], hand_rotations[3], rotation_alpha)) + + for axis in range(3): + actions[env_id, axis] = left[axis] + actions[env_id, 7 + axis] = right[axis] + for axis in range(4): + actions[env_id, 3 + axis] = left_rotation[axis] + actions[env_id, 10 + axis] = right_rotation[axis] + for axis in range(7): + actions[env_id, 14 + axis] = torso_pose[env_id, axis] + + for finger in range(finger_closed_values.shape[0]): + fraction = finger_fractions[env_id, finger_groups[finger]] + actions[env_id, ARM_ACTION_DIM + finger] = fraction * finger_closed_values[finger] + + state[env_id] = current_state + state_time[env_id] = elapsed + + +class H1TableclothStateMachine: + """Generate batched absolute hand poses and finger targets on the simulation device.""" + + def __init__(self, dt: float, torso_pose: torch.Tensor, action_dim: int, pull_speed: float) -> None: + """Initialize the expert on the torso-pose tensor's device. + + Args: + dt: Environment step duration [s]. + torso_pose: Robot-root-frame torso position [m] and quaternion, shape [N, 7]. + action_dim: Number of task action components. + pull_speed: Peak withdrawal speed [m/s]. + + Raises: + ValueError: If the task action dimension does not match the expert. + """ + self.num_envs = torso_pose.shape[0] + self.device = torso_pose.device + self._warp_device = wp.device_from_torch(self.device) + self.dt = dt + self.pull_speed = pull_speed + expected_action_dim = ARM_ACTION_DIM + len(FINGER_CLOSED_VALUES) + if action_dim != expected_action_dim: + raise ValueError(f"Expected a {expected_action_dim}-D H1 action, received {action_dim}") + + phases = list(zip(PHASE_DURATIONS, PHASE_KEYFRAMES, PHASE_FINGERS, strict=True)) + self._keyframes = wp.array(HAND_KEYFRAMES, dtype=wp.vec3, device=self._warp_device) + self._hand_rotations = wp.array( + (*HAND_ROTATIONS, *GRASP_HAND_ROTATIONS), dtype=wp.vec4, device=self._warp_device + ) + self._torso_pose = wp.from_torch(torso_pose.contiguous(), dtype=wp.float32) + self._phase_durations = wp.array([phase[0] for phase in phases], dtype=float, device=self._warp_device) + self._phase_start_keyframes = wp.array( + [phase[1][0] for phase in phases], dtype=wp.int32, device=self._warp_device + ) + self._phase_end_keyframes = wp.array( + [phase[1][1] for phase in phases], dtype=wp.int32, device=self._warp_device + ) + self._phase_start_fingers = wp.array( + [value for phase in phases for value in phase[2][0]], dtype=float, device=self._warp_device + ) + self._phase_end_fingers = wp.array( + [value for phase in phases for value in phase[2][1]], dtype=float, device=self._warp_device + ) + self._finger_closed_values = wp.array(FINGER_CLOSED_VALUES, dtype=float, device=self._warp_device) + self._finger_groups = wp.array(FINGER_GROUPS, dtype=wp.int32, device=self._warp_device) + self._finger_fractions = wp.zeros((self.num_envs, 5), dtype=float, device=self._warp_device) + self._state = wp.zeros(self.num_envs, dtype=wp.int32, device=self._warp_device) + self._state_time = wp.zeros(self.num_envs, dtype=float, device=self._warp_device) + self._pull_distance = wp.zeros(self.num_envs, dtype=float, device=self._warp_device) + self.actions = torch.zeros((self.num_envs, action_dim), device=self.device) + self._actions = wp.from_torch(self.actions, dtype=wp.float32) + + def reset_idx(self, env_ids: torch.Tensor) -> None: + """Reset the expert for environments that have started a new episode. + + Args: + env_ids: Indices of the environments to reset. + """ + wp.to_torch(self._state)[env_ids] = 0 + wp.to_torch(self._state_time)[env_ids] = 0.0 + wp.to_torch(self._pull_distance)[env_ids] = 0.0 + wp.to_torch(self._finger_fractions)[env_ids] = 0.0 + + def compute(self) -> torch.Tensor: + """Advance the expert and return its batched action tensor. + + Returns: + Expert-owned actions, shape [N, 45], containing absolute robot-root-frame + poses and finger joint targets [rad]. The next call overwrites this tensor. + """ + wp.launch( + _infer_state_machine, + dim=self.num_envs, + inputs=[ + self.dt, + self.pull_speed, + self._keyframes, + self._hand_rotations, + self._torso_pose, + self._phase_durations, + self._phase_start_keyframes, + self._phase_end_keyframes, + self._phase_start_fingers, + self._phase_end_fingers, + self._finger_closed_values, + self._finger_groups, + self._finger_fractions, + self._state, + self._state_time, + self._pull_distance, + self._actions, + ], + device=self._warp_device, + ) + return self.actions diff --git a/source/isaaclab_tasks/test/contrib/test_tablecloth_h1_stance.py b/source/isaaclab_tasks/test/contrib/test_tablecloth_h1_stance.py index 3ff57810c164..5ada6d2b70bf 100644 --- a/source/isaaclab_tasks/test/contrib/test_tablecloth_h1_stance.py +++ b/source/isaaclab_tasks/test/contrib/test_tablecloth_h1_stance.py @@ -12,8 +12,6 @@ if not standalone_importers_available(): launch_test_simulation() -import sys - import gymnasium as gym import pytest import torch @@ -25,16 +23,14 @@ from isaaclab.utils.math import quat_apply, quat_error_magnitude, quat_mul, subtract_frame_transforms import isaaclab_tasks # noqa: F401 +from isaaclab_tasks.contrib.tablecloth import expert from isaaclab_tasks.contrib.tablecloth.h1_env_cfg import HAND_OFFSETS from isaaclab_tasks.utils import parse_env_cfg @pytest.mark.parametrize("device", test_devices(DeviceScope.CUDA)) -def test_h1_stays_grounded_and_retains_cloth(device, monkeypatch): +def test_h1_stays_grounded_and_retains_cloth(device): """The scripted trick retains both physical grips without destabilizing the robot.""" - monkeypatch.setattr(sys, "argv", ["tablecloth_h1.py"]) - from examples import tablecloth_h1 as expert - cfg = parse_env_cfg("IsaacContrib-Tablecloth-H1", device=device, num_envs=1) cfg.sim.visualizer_cfgs = [] success_term = cfg.terminations.success From 030d69580801555eafd2c9fa2b892b28d30262b3 Mon Sep 17 00:00:00 2001 From: Maximilian Krause Date: Fri, 2 Oct 2026 09:17:46 +0200 Subject: [PATCH 16/34] Fix tablecloth task metadata and coupling test compatibility --- .../changelog.d/max-tablecloth-coupler-test.skip | 0 source/isaaclab_contrib/test/coupling/test_coupler.py | 2 +- .../isaaclab_tasks/contrib/tablecloth/h1_env_cfg.py | 1 + 3 files changed, 2 insertions(+), 1 deletion(-) create mode 100644 source/isaaclab_contrib/changelog.d/max-tablecloth-coupler-test.skip diff --git a/source/isaaclab_contrib/changelog.d/max-tablecloth-coupler-test.skip b/source/isaaclab_contrib/changelog.d/max-tablecloth-coupler-test.skip new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/source/isaaclab_contrib/test/coupling/test_coupler.py b/source/isaaclab_contrib/test/coupling/test_coupler.py index bf2e72e6ad3b..f5042d29ca3d 100644 --- a/source/isaaclab_contrib/test/coupling/test_coupler.py +++ b/source/isaaclab_contrib/test/coupling/test_coupler.py @@ -545,7 +545,7 @@ def test_mpm_entry_reuses_builder_lifecycle_hooks(monkeypatch, vbd_entries): """Prepare the shared builder once per selected solver, without unconditional VBD coloring.""" events: list[tuple[str, object]] = [] builder = ModelBuilder() - monkeypatch.setattr(builder, "color", lambda *, balance_colors: events.append(("color", balance_colors))) + monkeypatch.setattr(builder, "color", lambda *, balance_colors, **_: events.append(("color", balance_colors))) entries = [CouplerEntryCfg(name="media", solver_cfg=MPMSolverCfg())] entries.extend(CouplerEntryCfg(name=f"cloth_{index}", solver_cfg=VBDSolverCfg()) for index in range(vbd_entries)) solver_cfg = CouplerProxyCfg(entries=entries) diff --git a/source/isaaclab_tasks/isaaclab_tasks/contrib/tablecloth/h1_env_cfg.py b/source/isaaclab_tasks/isaaclab_tasks/contrib/tablecloth/h1_env_cfg.py index 557fc6aa41df..be840f21c3a6 100644 --- a/source/isaaclab_tasks/isaaclab_tasks/contrib/tablecloth/h1_env_cfg.py +++ b/source/isaaclab_tasks/isaaclab_tasks/contrib/tablecloth/h1_env_cfg.py @@ -470,6 +470,7 @@ class TerminationsCfg: class H1TableclothEnvCfg(ManagerBasedRLEnvCfg): """H1 tablecloth task using Newton VBD and Newton IK.""" + class_type: type | str = "{DIR}.h1_env:H1TableclothEnv" scene: H1TableclothSceneCfg = H1TableclothSceneCfg(num_envs=1, env_spacing=2.0, replicate_physics=True) actions: ActionsCfg = ActionsCfg() observations: ObservationsCfg = ObservationsCfg() From 53a3a3387dfe150bb8ab61e81cc1bfdc5b94a07c Mon Sep 17 00:00:00 2001 From: Maximilian Krause Date: Fri, 2 Oct 2026 10:44:28 +0200 Subject: [PATCH 17/34] Make experimental H1 grasp validation opt-in --- docs/source/how-to/run_state_machines.rst | 9 +++++++++ tools/test_settings.py | 2 ++ 2 files changed, 11 insertions(+) diff --git a/docs/source/how-to/run_state_machines.rst b/docs/source/how-to/run_state_machines.rst index e40d6192a22a..314350a2d28c 100644 --- a/docs/source/how-to/run_state_machines.rst +++ b/docs/source/how-to/run_state_machines.rst @@ -87,6 +87,15 @@ The task appears in the :ref:`environment browser ` as ``IsaacContrib-Tablecloth-H1``. For the five-speed standalone comparison, see :ref:`newton-using-vbd`. +This experimental expert is open-loop; cloth withdrawal can succeed even if a +grip slips during the hold. CI covers launch and backend regressions. Full stance +and physical-grasp validation is an opt-in check for changes to the asset or expert: + +.. code-block:: bash + + uv run --extra importers python -m pytest -q \ + source/isaaclab_tasks/test/contrib/test_tablecloth_h1_stance.py + Start with ``lift_cube_sm.py`` for a self-contained state-machine example. The H1 example shows how to keep scene, observations, rewards, and terminations in a reusable task while the scripted expert supplies only actions. diff --git a/tools/test_settings.py b/tools/test_settings.py index a232ad690c25..1b726cf19808 100644 --- a/tools/test_settings.py +++ b/tools/test_settings.py @@ -152,6 +152,8 @@ # lab # lab_tasks "test_record_video.py", # Failing + # Experimental H1 full-trick validation is opt-in; launch smoke coverage stays in CI. + "test_tablecloth_h1_stance.py", # curobo / skillgen - require cuRobo installation; run via test-curobo and test-skillgen CI jobs *CUROBO_TESTS, # quarantined tests - run in dedicated CI job that does not block PR merges From ed9517fe3ad7e8d1a1c8e437595db03d683b0d54 Mon Sep 17 00:00:00 2001 From: Maximilian Krause Date: Sat, 3 Oct 2026 12:18:54 +0200 Subject: [PATCH 18/34] Keep experimental H1 grasp validation out of multi-GPU CI --- source/isaaclab_tasks/test/contrib/test_tablecloth_h1_stance.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source/isaaclab_tasks/test/contrib/test_tablecloth_h1_stance.py b/source/isaaclab_tasks/test/contrib/test_tablecloth_h1_stance.py index 5ada6d2b70bf..a506a8cbbe57 100644 --- a/source/isaaclab_tasks/test/contrib/test_tablecloth_h1_stance.py +++ b/source/isaaclab_tasks/test/contrib/test_tablecloth_h1_stance.py @@ -27,6 +27,8 @@ from isaaclab_tasks.contrib.tablecloth.h1_env_cfg import HAND_OFFSETS from isaaclab_tasks.utils import parse_env_cfg +MULTI_GPU_SKIP_REASON = "Experimental open-loop grasp diagnostic; run manually, not in CI." + @pytest.mark.parametrize("device", test_devices(DeviceScope.CUDA)) def test_h1_stays_grounded_and_retains_cloth(device): From d5a8e36b0414d068b0efba9404cad7e771618a09 Mon Sep 17 00:00:00 2001 From: Maximilian Krause Date: Wed, 7 Oct 2026 11:36:17 +0200 Subject: [PATCH 19/34] Fix VBD articulation state and cloth bending integration --- .../concepts/solver-tuning/tune_vbd.rst | 6 ++ .../max-vbd-articulation-fixes.skip | 0 .../test/coupling/test_coupler.py | 2 +- .../max-vbd-articulation-fixes.added.rst | 1 + .../max-vbd-articulation-fixes.fixed.rst | 2 + .../max-vbd-articulation-fixes.minor | 0 .../envs/mdp/actions/newton_ik_actions.py | 3 +- .../isaaclab_newton/physics/vbd_manager.py | 21 ++++++- .../physics/vbd_manager_cfg.py | 13 ++++ .../test/assets/test_rigid_object.py | 44 +++++++++++++ .../test/physics/test_vbd_core.py | 61 ++++++++++++++++--- 11 files changed, 140 insertions(+), 13 deletions(-) create mode 100644 source/isaaclab_contrib/changelog.d/max-vbd-articulation-fixes.skip create mode 100644 source/isaaclab_newton/changelog.d/max-vbd-articulation-fixes.added.rst create mode 100644 source/isaaclab_newton/changelog.d/max-vbd-articulation-fixes.fixed.rst create mode 100644 source/isaaclab_newton/changelog.d/max-vbd-articulation-fixes.minor diff --git a/docs/source/concepts/solver-tuning/tune_vbd.rst b/docs/source/concepts/solver-tuning/tune_vbd.rst index 193a2c700a45..4aef9e84254a 100644 --- a/docs/source/concepts/solver-tuning/tune_vbd.rst +++ b/docs/source/concepts/solver-tuning/tune_vbd.rst @@ -159,6 +159,12 @@ Core Solve - Default: ``10``. Number of VBD iterations per substep. Increasing this value improves deformation and contact convergence, especially for stiff materials or rigid gripper contacts, but increases runtime. * - ``rigid_compliant_alm`` - Default: ``None``. Preserves Newton's rigid solver mode. In Newton 1.6, ``None`` selects deprecated legacy AVBD. Set to ``True`` to use compliant ALM for rigid joints and body-body contacts, or ``False`` to explicitly retain legacy AVBD. + * - ``rigid_joint_linear_ke`` + - Default: ``1.0e5`` [N/m]. Structural linear stiffness for non-rod rigid joints, separate from actuator gains. + * - ``rigid_joint_angular_ke`` + - Default: ``1.0e5`` [N m/rad]. Structural angular stiffness for non-rod rigid joints, separate from actuator gains. + * - ``update_joint_state`` + - Default: ``True``. Derives joint positions and velocities from VBD-integrated body motion each tick. Disable only for body-state-only consumers. External rigid integration always skips this update, preserving the external solver's joint state. * - ``rigid_body_contact_buffer_size`` - Default: ``64``. Per-body capacity for body-body contacts when VBD integrates rigid bodies. Increase it if Newton reports a per-body body-body contact buffer overflow. * - ``rigid_body_particle_contact_buffer_size`` diff --git a/source/isaaclab_contrib/changelog.d/max-vbd-articulation-fixes.skip b/source/isaaclab_contrib/changelog.d/max-vbd-articulation-fixes.skip new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/source/isaaclab_contrib/test/coupling/test_coupler.py b/source/isaaclab_contrib/test/coupling/test_coupler.py index bf2e72e6ad3b..f5042d29ca3d 100644 --- a/source/isaaclab_contrib/test/coupling/test_coupler.py +++ b/source/isaaclab_contrib/test/coupling/test_coupler.py @@ -545,7 +545,7 @@ def test_mpm_entry_reuses_builder_lifecycle_hooks(monkeypatch, vbd_entries): """Prepare the shared builder once per selected solver, without unconditional VBD coloring.""" events: list[tuple[str, object]] = [] builder = ModelBuilder() - monkeypatch.setattr(builder, "color", lambda *, balance_colors: events.append(("color", balance_colors))) + monkeypatch.setattr(builder, "color", lambda *, balance_colors, **_: events.append(("color", balance_colors))) entries = [CouplerEntryCfg(name="media", solver_cfg=MPMSolverCfg())] entries.extend(CouplerEntryCfg(name=f"cloth_{index}", solver_cfg=VBDSolverCfg()) for index in range(vbd_entries)) solver_cfg = CouplerProxyCfg(entries=entries) diff --git a/source/isaaclab_newton/changelog.d/max-vbd-articulation-fixes.added.rst b/source/isaaclab_newton/changelog.d/max-vbd-articulation-fixes.added.rst new file mode 100644 index 000000000000..117370030e48 --- /dev/null +++ b/source/isaaclab_newton/changelog.d/max-vbd-articulation-fixes.added.rst @@ -0,0 +1 @@ +* Added VBD structural joint stiffness settings and optional generalized joint-state synchronization. diff --git a/source/isaaclab_newton/changelog.d/max-vbd-articulation-fixes.fixed.rst b/source/isaaclab_newton/changelog.d/max-vbd-articulation-fixes.fixed.rst new file mode 100644 index 000000000000..86e74cb58ddb --- /dev/null +++ b/source/isaaclab_newton/changelog.d/max-vbd-articulation-fixes.fixed.rst @@ -0,0 +1,2 @@ +* Fixed VBD graph coloring for active cloth bending constraints and stale joint state after rigid-body integration. +* Fixed Newton IK prototype selection for nested articulation roots. diff --git a/source/isaaclab_newton/changelog.d/max-vbd-articulation-fixes.minor b/source/isaaclab_newton/changelog.d/max-vbd-articulation-fixes.minor new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/source/isaaclab_newton/isaaclab_newton/envs/mdp/actions/newton_ik_actions.py b/source/isaaclab_newton/isaaclab_newton/envs/mdp/actions/newton_ik_actions.py index 5e123de01223..d4fc2f3dd934 100644 --- a/source/isaaclab_newton/isaaclab_newton/envs/mdp/actions/newton_ik_actions.py +++ b/source/isaaclab_newton/isaaclab_newton/envs/mdp/actions/newton_ik_actions.py @@ -181,8 +181,9 @@ def __init__(self, cfg: NewtonInverseKinematicsActionCfg, env: ManagerBasedEnv): sources = cloner.path.get_asset_prototype_paths(plan) self._source_path = next(sources[index] for index in asset_ids if sources[index] is not None) prototype_model = NewtonManager._cl_protos[self._source_path].finalize(device=NewtonManager.get_model().device) + articulation_path = self._source_path + (self._asset.cfg.articulation_root_prim_path or "") prototype_view = ArticulationView( - prototype_model, self._source_path, verbose=False, exclude_joint_types=[JointType.FREE, JointType.FIXED] + prototype_model, articulation_path, verbose=False, exclude_joint_types=[JointType.FREE, JointType.FIXED] ) coord_ids = self._resolve_prototype_joint_coord_ids(prototype_view, self._asset.joint_names) controlled_ids = self._resolve_prototype_joint_coord_ids(prototype_view, self._joint_names) diff --git a/source/isaaclab_newton/isaaclab_newton/physics/vbd_manager.py b/source/isaaclab_newton/isaaclab_newton/physics/vbd_manager.py index b6857de8384c..e5b7ac380b61 100644 --- a/source/isaaclab_newton/isaaclab_newton/physics/vbd_manager.py +++ b/source/isaaclab_newton/isaaclab_newton/physics/vbd_manager.py @@ -7,7 +7,9 @@ from __future__ import annotations -from newton import Model, ModelBuilder +from typing import ClassVar + +from newton import Model, ModelBuilder, eval_ik from newton.solvers import SolverVBD from .newton_manager import NewtonManager @@ -17,10 +19,12 @@ class NewtonVBDManager(NewtonManager): """Newton manager specialization for the VBD solver.""" + _update_joint_state: ClassVar[bool] = True + @classmethod def _prepare_builder_for_finalize(cls, builder: ModelBuilder) -> None: """Color the completed builder before allocating the model.""" - builder.color(balance_colors=False) + builder.color(include_bending=True, balance_colors=False) @classmethod def _create_solver(cls, model: Model, solver_cfg: VBDSolverCfg) -> SolverVBD: @@ -34,6 +38,19 @@ def _build_solver(cls, model: Model, solver_cfg: VBDSolverCfg) -> None: NewtonManager._use_single_state = False NewtonManager._needs_collision_pipeline = True NewtonManager._supports_rigid_body_force_input = not solver_cfg.integrate_with_external_rigid_solver + cls._update_joint_state = solver_cfg.update_joint_state and not solver_cfg.integrate_with_external_rigid_solver + + @classmethod + def _run_solver_substeps(cls, contacts) -> None: + """Synchronize generalized joint state from VBD's maximal-coordinate body state.""" + super()._run_solver_substeps(contacts) + if ( + cls._update_joint_state + and cls.backend.model.articulation_count > 0 + and cls.backend.model.joint_coord_count > 0 + ): + state = cls.backend.state_0 + eval_ik(cls.backend.model, state, state.joint_q, state.joint_qd) @classmethod def _simulate_physics_only(cls) -> None: diff --git a/source/isaaclab_newton/isaaclab_newton/physics/vbd_manager_cfg.py b/source/isaaclab_newton/isaaclab_newton/physics/vbd_manager_cfg.py index d1a9effc177e..bef380d4fee9 100644 --- a/source/isaaclab_newton/isaaclab_newton/physics/vbd_manager_cfg.py +++ b/source/isaaclab_newton/isaaclab_newton/physics/vbd_manager_cfg.py @@ -30,6 +30,13 @@ class VBDSolverCfg(NewtonSolverCfg): integrate_with_external_rigid_solver: bool = False """Whether an external solver integrates rigid bodies.""" + update_joint_state: bool = True + """Derive joint positions and velocities from VBD-integrated body motion after each physics tick. + + Disable only when consumers use body state exclusively. External rigid integration always skips + this synchronization so the external solver retains ownership of its generalized joint state. + """ + particle_enable_self_contact: bool = False """Whether to enable particle self-contact.""" @@ -57,6 +64,12 @@ class VBDSolverCfg(NewtonSolverCfg): rigid_compliant_alm: bool | None = None """Whether to use compliant ALM for rigid joints and contacts; ``None`` preserves Newton's default.""" + rigid_joint_linear_ke: float = 1.0e5 + """Structural linear stiffness of non-rod rigid joints [N/m], separate from joint-drive gains.""" + + rigid_joint_angular_ke: float = 1.0e5 + """Structural angular stiffness of non-rod rigid joints [N m/rad], separate from joint-drive gains.""" + rigid_contact_k_start: float = 1.0e2 """Initial stiffness seed for rigid-body contacts [N/m].""" diff --git a/source/isaaclab_newton/test/assets/test_rigid_object.py b/source/isaaclab_newton/test/assets/test_rigid_object.py index fac10ee7bdfa..0f5cf3fad7c8 100644 --- a/source/isaaclab_newton/test/assets/test_rigid_object.py +++ b/source/isaaclab_newton/test/assets/test_rigid_object.py @@ -33,6 +33,7 @@ import warp as wp from isaaclab_newton.assets import RigidObject, RigidObjectCollection from isaaclab_newton.physics import NewtonManager as SimulationManager +from isaaclab_newton.physics import VBDSolverCfg from newton import ModelFlags from newton_test_utils import env_origins, local_usd, newton_sim_cfg, spawn_assets, world_gravity @@ -111,6 +112,49 @@ def _collection_cfg( ## +@pytest.mark.parametrize("device", test_devices(DeviceScope.CUDA)) +@pytest.mark.parametrize("state_owner", ["vbd", "body-only", "external"]) +def test_vbd_root_state_tracks_integrated_body(device: str, state_owner: str) -> None: + """Publish VBD body motion unless joint-state ownership is explicitly delegated.""" + sim_cfg = SimulationCfg( + device=device, + physics=NewtonCfg( + solver_cfg=VBDSolverCfg( + iterations=5, + rigid_compliant_alm=True, + update_joint_state=state_owner != "body-only", + integrate_with_external_rigid_solver=state_owner == "external", + ) + ), + ) + with build_simulation_context(sim_cfg=sim_cfg) as sim: + cube_object = spawn_assets({"cube": _cube_cfg()}, num_envs=1)["cube"] + sim.reset() + + initial_height = cube_object.data.root_link_pose_w.torch[0, 2].item() + if state_owner == "external": + # An external rigid solver owns these generalized velocities, not VBD's body buffers. + SimulationManager.get_state_0().joint_qd.fill_(0.125) + SimulationManager.get_state_1().joint_qd.fill_(0.125) + sim.step() + cube_object.update(sim.cfg.dt) + + body_pose = cube_object.data.body_link_pose_w.torch[:, 0] + body_velocity = cube_object.data.body_com_vel_w.torch[:, 0] + if state_owner == "external": + assert body_pose[0, 2].item() == initial_height + torch.testing.assert_close(cube_object.data.root_com_vel_w.torch, torch.full_like(body_velocity, 0.125)) + return + assert body_pose[0, 2] < initial_height + assert body_velocity[0, 2] < 0.0 + if state_owner == "vbd": + torch.testing.assert_close(cube_object.data.root_link_pose_w.torch, body_pose) + torch.testing.assert_close(cube_object.data.root_com_vel_w.torch, body_velocity) + else: + assert cube_object.data.root_link_pose_w.torch[0, 2].item() == initial_height + assert torch.count_nonzero(cube_object.data.root_com_vel_w.torch) == 0 + + @pytest.mark.isaacsim_ci @pytest.mark.parametrize("api", ["none", "articulation"]) def test_initialization_rejects_non_rigid_body_prims(api: str) -> None: diff --git a/source/isaaclab_newton/test/physics/test_vbd_core.py b/source/isaaclab_newton/test/physics/test_vbd_core.py index 54641e10b664..39469b54a682 100644 --- a/source/isaaclab_newton/test/physics/test_vbd_core.py +++ b/source/isaaclab_newton/test/physics/test_vbd_core.py @@ -8,9 +8,11 @@ from __future__ import annotations import importlib +import math from types import SimpleNamespace import pytest +import warp as wp from isaaclab_newton.physics import NewtonBackendCfg, NewtonBuilderCfg, NewtonCfg, NewtonManager, NewtonSoftContactCfg from newton import ModelBuilder from newton.solvers import SolverVBD @@ -79,16 +81,23 @@ def control(self): def test_vbd_colors_builder_before_finalization(): - """VBD colors the completed builder in the existing pre-finalization hook.""" + """Particles coupled by active cloth bending must receive distinct solver colors.""" physics = importlib.import_module("isaaclab_newton.physics") - events = [] - - class Builder: - def color(self, *, balance_colors): - events.append(("color", balance_colors)) - - physics.NewtonVBDManager._prepare_builder_for_finalize(Builder()) - assert events == [("color", False)] + builder = ModelBuilder() + builder.add_cloth_grid( + pos=wp.vec3(0.0), + rot=wp.quat_identity(), + vel=wp.vec3(0.0), + dim_x=1, + dim_y=1, + cell_x=0.1, + cell_y=0.1, + mass=0.01, + edge_ke=1.0, + ) + physics.NewtonVBDManager._prepare_builder_for_finalize(builder) + colors = {int(particle): color for color, group in enumerate(builder.particle_color_groups) for particle in group} + assert len(set(colors.values())) == builder.particle_count def test_vbd_solver_force_input_capability(monkeypatch): @@ -158,6 +167,40 @@ def test_vbd_compliant_alm_cable_stiffness(): assert state_0.body_q.numpy()[body, 2] == pytest.approx(-expected_extension, rel=0.01) +@pytest.mark.parametrize("stiffness", [None, (1.0e3, 1.0e2)], ids=["defaults", "finite-attachment"]) +def test_vbd_structural_joint_stiffness_under_load(stiffness): + """A fixed joint balances gravity with independently configured linear and angular springs.""" + physics = importlib.import_module("isaaclab_newton.physics") + gravity, lever = 9.81, 0.1 + builder = ModelBuilder(gravity=(0.0, 0.0, -gravity)) + body = builder.add_link(xform=wp.transform(wp.vec3(lever, 0.0, 0.0), wp.quat_identity())) + builder.add_shape_sphere(body=body, radius=0.05) + mass = builder.body_mass[body] + joint = builder.add_joint_fixed( + parent=-1, child=body, child_xform=wp.transform(wp.vec3(-lever, 0.0, 0.0), wp.quat_identity()) + ) + builder.add_articulation([joint]) + builder.color() + model = builder.finalize(device="cpu") + solver_cfg = physics.VBDSolverCfg(rigid_compliant_alm=True, iterations=15) + linear_ke, angular_ke = (1.0e5, 1.0e5) if stiffness is None else stiffness + if stiffness is not None: + solver_cfg = solver_cfg.replace(rigid_joint_linear_ke=linear_ke, rigid_joint_angular_ke=angular_ke) + solver = physics.NewtonVBDManager._create_solver(model, solver_cfg) + state_0, state_1, control = model.state(), model.state(), model.control() + for _ in range(480): + state_0.clear_forces() + solver.step(state_0, state_1, control, None, 1.0 / 240.0) + state_0, state_1 = state_1, state_0 + + pose = state_0.body_q.numpy()[body] + angle = 2.0 * math.atan2(float(pose[4]), float(pose[6])) + anchor_height = float(pose[2]) + lever * math.sin(angle) + # The joint's linear force balances weight; its angular torque balances the offset load. + assert -anchor_height * linear_ke == pytest.approx(mass * gravity, rel=0.01) + assert angle * angular_ke == pytest.approx(mass * gravity * lever * math.cos(angle), rel=0.01) + + def test_vbd_rebuilds_particle_bvh_before_physics_step(monkeypatch): """VBD rebuilds its particle BVH before the base physics step.""" physics = importlib.import_module("isaaclab_newton.physics") From e395a2af044309c5da943f4126e2f85988b74375 Mon Sep 17 00:00:00 2001 From: Maximilian Krause Date: Wed, 7 Oct 2026 11:55:35 +0200 Subject: [PATCH 20/34] Preserve guarded VBD state publication after merging develop --- .../isaaclab_newton/physics/vbd_manager.py | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/source/isaaclab_newton/isaaclab_newton/physics/vbd_manager.py b/source/isaaclab_newton/isaaclab_newton/physics/vbd_manager.py index 73cdd2b927f8..e5b7ac380b61 100644 --- a/source/isaaclab_newton/isaaclab_newton/physics/vbd_manager.py +++ b/source/isaaclab_newton/isaaclab_newton/physics/vbd_manager.py @@ -8,6 +8,7 @@ from __future__ import annotations from typing import ClassVar + from newton import Model, ModelBuilder, eval_ik from newton.solvers import SolverVBD @@ -51,14 +52,6 @@ def _run_solver_substeps(cls, contacts) -> None: state = cls.backend.state_0 eval_ik(cls.backend.model, state, state.joint_q, state.joint_qd) - @classmethod - def _run_solver_substeps(cls, contacts) -> None: - """Synchronize generalized joint state from VBD's maximal-coordinate body state.""" - super()._run_solver_substeps(contacts) - if cls.backend.model.articulation_count > 0 and cls.backend.model.joint_coord_count > 0: - state = cls.backend.state_0 - eval_ik(cls.backend.model, state, state.joint_q, state.joint_qd) - @classmethod def _simulate_physics_only(cls) -> None: """Rebuild the VBD particle BVH before stepping physics.""" From e57d706b9c314ef07b6a9a988a199e2ef9074273 Mon Sep 17 00:00:00 2001 From: Maximilian Krause Date: Sun, 11 Oct 2026 12:42:36 +0200 Subject: [PATCH 21/34] Consolidate contact-only humanoid tablecloth comparisons --- .../source/_static/css/environment-browser.js | 1 - .../_static/examples/newton_tablecloth.jpg | Bin 57543 -> 0 bytes .../source/_static/examples/tablecloth_h2.jpg | Bin 0 -> 357302 bytes .../tasks/manipulation/h1_tablecloth.jpg | Bin 45200 -> 0 bytes .../concepts/solver-tuning/tune_vbd.rst | 72 +- docs/source/how-to/run_state_machines.rst | 80 +- docs/source/setup/demos.rst | 2 +- examples/newton_tablecloth.py | 410 ------- examples/tablecloth.py | 243 ++++ examples/tablecloth_h1.py | 115 -- .../max-newton-tablecloth-demos.added.rst | 2 +- source/isaaclab/isaaclab/programs.py | 18 +- .../test/app/standalone_script_cases.py | 13 +- .../max-tablecloth-example.added.rst | 3 + ...test.skip => max-tablecloth-example.minor} | 0 .../isaaclab_contrib/assets/tablecloth.py | 885 ++++++++++++++ .../controllers/tablecloth.py | 1047 +++++++++++++++++ .../max-vbd-tablecloth-demos.added.rst | 1 - .../max-vbd-tablecloth-demos.fixed.rst | 3 - .../max-vbd-tablecloth-demos.minor | 0 .../max-tablecloth-h1-task.added.rst | 2 - .../max-tablecloth-h1-task.fixed.rst | 3 - .../changelog.d/max-tablecloth-h1-task.minor | 0 .../contrib/tablecloth/__init__.py | 15 - .../contrib/tablecloth/assets.py | 269 ----- .../contrib/tablecloth/expert.py | 292 ----- .../contrib/tablecloth/h1_env.py | 44 - .../contrib/tablecloth/h1_env_cfg.py | 517 -------- .../contrib/tablecloth/mdp/__init__.py | 10 - .../contrib/tablecloth/mdp/__init__.pyi | 17 - .../contrib/tablecloth/mdp/_metrics.py | 31 - .../contrib/tablecloth/mdp/rewards.py | 47 - .../contrib/tablecloth/mdp/terminations.py | 64 - .../test/contrib/contrib_env_test_utils.py | 12 +- .../test/contrib/test_tablecloth_h1_stance.py | 157 --- tools/test_settings.py | 3 - 36 files changed, 2248 insertions(+), 2130 deletions(-) delete mode 100644 docs/source/_static/examples/newton_tablecloth.jpg create mode 100644 docs/source/_static/examples/tablecloth_h2.jpg delete mode 100644 docs/source/_static/tasks/manipulation/h1_tablecloth.jpg delete mode 100644 examples/newton_tablecloth.py create mode 100644 examples/tablecloth.py delete mode 100644 examples/tablecloth_h1.py create mode 100644 source/isaaclab_contrib/changelog.d/max-tablecloth-example.added.rst rename source/isaaclab_contrib/changelog.d/{max-tablecloth-coupler-test.skip => max-tablecloth-example.minor} (100%) create mode 100644 source/isaaclab_contrib/isaaclab_contrib/assets/tablecloth.py create mode 100644 source/isaaclab_contrib/isaaclab_contrib/controllers/tablecloth.py delete mode 100644 source/isaaclab_newton/changelog.d/max-vbd-tablecloth-demos.added.rst delete mode 100644 source/isaaclab_newton/changelog.d/max-vbd-tablecloth-demos.fixed.rst delete mode 100644 source/isaaclab_newton/changelog.d/max-vbd-tablecloth-demos.minor delete mode 100644 source/isaaclab_tasks/changelog.d/max-tablecloth-h1-task.added.rst delete mode 100644 source/isaaclab_tasks/changelog.d/max-tablecloth-h1-task.fixed.rst delete mode 100644 source/isaaclab_tasks/changelog.d/max-tablecloth-h1-task.minor delete mode 100644 source/isaaclab_tasks/isaaclab_tasks/contrib/tablecloth/__init__.py delete mode 100644 source/isaaclab_tasks/isaaclab_tasks/contrib/tablecloth/assets.py delete mode 100644 source/isaaclab_tasks/isaaclab_tasks/contrib/tablecloth/expert.py delete mode 100644 source/isaaclab_tasks/isaaclab_tasks/contrib/tablecloth/h1_env.py delete mode 100644 source/isaaclab_tasks/isaaclab_tasks/contrib/tablecloth/h1_env_cfg.py delete mode 100644 source/isaaclab_tasks/isaaclab_tasks/contrib/tablecloth/mdp/__init__.py delete mode 100644 source/isaaclab_tasks/isaaclab_tasks/contrib/tablecloth/mdp/__init__.pyi delete mode 100644 source/isaaclab_tasks/isaaclab_tasks/contrib/tablecloth/mdp/_metrics.py delete mode 100644 source/isaaclab_tasks/isaaclab_tasks/contrib/tablecloth/mdp/rewards.py delete mode 100644 source/isaaclab_tasks/isaaclab_tasks/contrib/tablecloth/mdp/terminations.py delete mode 100644 source/isaaclab_tasks/test/contrib/test_tablecloth_h1_stance.py diff --git a/docs/source/_static/css/environment-browser.js b/docs/source/_static/css/environment-browser.js index 7206d4e9e483..567d87999296 100644 --- a/docs/source/_static/css/environment-browser.js +++ b/docs/source/_static/css/environment-browser.js @@ -132,7 +132,6 @@ ["IsaacContrib-Stack-Cube-SO101-v0", "", "isaacsim_physx", "", ""], ["IsaacContrib-Stack-Cube-UR10-Long-Suction-IK-Rel", "", "isaacsim_physx", "", "", "tasks/manipulation/ur10_stack_surface_gripper.jpg"], ["IsaacContrib-Stack-Cube-UR10-Short-Suction-IK-Rel", "", "isaacsim_physx", "", "", "tasks/manipulation/ur10_stack_surface_gripper.jpg"], - ["IsaacContrib-Tablecloth-H1", "", "", "", "", "./tasks/manipulation/h1_tablecloth.jpg"], ["IsaacContrib-TrackPositionNoObstacles-ARL-Robot-1", "rl_games,rsl_rl,skrl", "", "", "", "tasks/drone_arl/arl_robot_1_track_position_state_based.jpg"], ["IsaacContrib-Tracking-LocoManip-Digit", "rsl_rl", "isaacsim_physx,newton_mjwarp", "", "", "tasks/locomotion/agility_digit_loco_manip.jpg"], ["IsaacContrib-UR10-Particle-Push", "rsl_rl", "", "", "", "tasks/manipulation/ur10_particle_push.jpg"], diff --git a/docs/source/_static/examples/newton_tablecloth.jpg b/docs/source/_static/examples/newton_tablecloth.jpg deleted file mode 100644 index 1d6640314663a1199d4e0551e874cfcc0e94ef3c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 57543 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

P+A94Wz_xBpnim}D(nWqT> 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 UMyM5dNQ3kq6Ug=D7yX?6Kf?#Cxc~qF diff --git a/docs/source/_static/examples/tablecloth_h2.jpg b/docs/source/_static/examples/tablecloth_h2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fbd4b56968e1242f09a7dbc4b6a5623744b057b3 GIT binary patch literal 357302 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 z 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�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

rMThrIWG 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 literal 0 HcmV?d00001 diff --git a/docs/source/_static/tasks/manipulation/h1_tablecloth.jpg b/docs/source/_static/tasks/manipulation/h1_tablecloth.jpg deleted file mode 100644 index 46be61e58177e492f03754bc51c5515ce3fa837e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 45200 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. +To use a separate rigid-body solver, the named-entry coupling options are: * :class:`~isaaclab_contrib.coupling.CouplerProxyCfg` for the proxy coupling used by the core Franka tasks. * :class:`~isaaclab_contrib.coupling.CouplerAdmmCfg` for linearized ADMM coupling between named solver entries. -Run the Tablecloth Example --------------------------- - -The focused ``examples/newton_tablecloth.py`` script demonstrates -standalone VBD before the task and coupling examples below. It compares five -pull speeds side by side and shows how to configure full-surface contact while -controlling deformable kinematic targets through Isaac Lab. - -.. figure:: ../../_static/examples/newton_tablecloth.jpg - :alt: Five side-by-side kitchen tables with red cloths and tableware during the pull-speed comparison. - :width: 100% - - Five pull speeds in one Isaac Lab scene, rendered with Kit. - -Run it with the lightweight Newton GL visualizer: - -.. code-block:: bash - - uvx isaaclab example newton-tablecloth --device cuda:0 --visualizer newton_gl - -The script declares its ground, tables, cloth, and tableware with -``InteractiveSceneCfg`` and uses the standard scene write/step/update lifecycle. - -For robot manipulation, ``examples/tablecloth_h1.py`` runs a scripted expert for -the manager-based ``IsaacContrib-Tablecloth-H1`` task: - -.. code-block:: bash - - uvx --from 'isaaclab[importers]' isaaclab example tablecloth-h1 \ - --device cuda:0 --max_steps 312 - -Both examples use the default Isaac Lab ground plane and share SimReady kitchen -assets with analytic collision proxies. The H1 task owns the scene, Newton IK -actions, observations, resets, rewards, and terminations; its expert script -only supplies actions. No trained policy or RL-library configuration is included. -See :ref:`tablecloth-h1-expert` for the action interface and grasp calibration. - Start from a Supported Deformable Task -------------------------------------- @@ -215,17 +179,6 @@ the intended contact loads. Higher structural stiffness can require more solver iterations for drive and contact convergence. Set it before creating the simulation because Newton captures these material values during solver construction. -Contact Scheduling -^^^^^^^^^^^^^^^^^^ - -:attr:`~isaaclab_newton.physics.NewtonCfg.collision_decimation` controls how -often the collision pipeline refreshes contacts within a physics tick. ``0`` -runs collision once per tick. A positive value ``k`` re-runs it every ``k`` -solver substeps. Use ``1`` for fast or thin rigid-soft interactions that can -cross the contact band within one substep; increase it only after verifying that -the cheaper, staler contact set does not cause tunneling or ejection. - - Rigid Cables ^^^^^^^^^^^^ @@ -278,6 +231,19 @@ Self-Contact - Default: ``0.0`` [m]. Filters self-contact candidates whose rest-configuration distance is shorter than this distance. Increase it when rest-neighbor contacts produce unwanted resistance. +Contact Scheduling +------------------ + +Contact scheduling belongs to :class:`~isaaclab_newton.physics.NewtonCfg`, +not :class:`~isaaclab_newton.physics.VBDSolverCfg`. +:attr:`~isaaclab_newton.physics.NewtonCfg.collision_decimation` controls how +often the collision pipeline refreshes contacts within a physics tick. ``0`` +runs collision once per tick. A positive value ``k`` re-runs it every ``k`` +solver substeps. Use ``1`` for fast or thin rigid-soft interactions that can +cross the contact band within one substep; increase it only after verifying that +the cheaper, staler contact set does not cause tunneling or ejection. + + Custom MJWarp + VBD Parameters ------------------------------ diff --git a/docs/source/how-to/run_state_machines.rst b/docs/source/how-to/run_state_machines.rst index aacf7d89fc1f..b08e4433be0e 100644 --- a/docs/source/how-to/run_state_machines.rst +++ b/docs/source/how-to/run_state_machines.rst @@ -47,55 +47,45 @@ and releases it: uv run python scripts/environments/state_machine/open_cabinet_sm.py \ --num_envs 32 --viz kit -.. _tablecloth-h1-expert: +.. _tablecloth-example: -Pull a tablecloth with H1 -------------------------- +Compare five humanoid tablecloth pulls +-------------------------------------- -This example runs a bimanual Warp state machine against the manager-based -``IsaacContrib-Tablecloth-H1`` task. It uses Newton VBD for the cloth and rigid -tableware, Newton IK for the hands, and a downloaded H1 asset. The Newton GL -visualizer opens by default; the SimReady table and tableware require asset -access. +This standalone example uses :class:`~isaaclab.scene.InteractiveScene` to build +five side-by-side H2 Plus / SHARPA trials with the default Isaac Lab ground plane and SimReady +kitchen assets. Newton VBD simulates the articulations, cloth, and tableware in a +single solver. The Warp state machine and Newton IK run on the GPU inside the +physics CUDA graph. +It does not register an RL environment or require a trained policy. -.. figure:: ../_static/tasks/manipulation/h1_tablecloth.jpg - :alt: A grounded H1 robot grasping the corners of a red cloth beside a kitchen table. - :width: 80% +.. figure:: ../_static/examples/tablecloth_h2.jpg + :alt: Five side-by-side H2 Plus robots grasping red tablecloths beside kitchen tables. + :width: 100% - The H1 tablecloth task with its scripted bimanual expert, rendered with Kit. - -The pelvis is fixed and the leg actuators hold a grounded standing pose; this -example demonstrates manipulation, not humanoid balance. Absolute hand and -torso pose targets are expressed in the robot root frame, while the fingers -receive joint-position targets. - -The expert lifts the cloth's overhanging corners before pinching, then follows a -constant-attitude arc reachable by H1's five-DOF arms, accelerating and braking -to rest. The grasp is calibrated for the task's cloth resolution; changing -the mesh or hand asset requires revalidating acquisition and retention. - -.. code-block:: bash - - uv run --extra importers isaaclab example tablecloth-h1 \ - --max_steps 312 - -The reusable task lives in -``source/isaaclab_tasks/isaaclab_tasks/contrib/tablecloth/``. Its ``expert.py`` -contains the Warp controller and grasp calibration; ``examples/tablecloth_h1.py`` -is only a launcher for that task and expert. Both ship in the Isaac Lab wheel. -The task appears in the :ref:`environment browser ` as -``IsaacContrib-Tablecloth-H1``. -For the five-speed standalone comparison, see :ref:`newton-using-vbd`. - -This experimental expert is open-loop; cloth withdrawal can succeed even if a -grip slips during the hold. CI covers launch and backend regressions. Full stance -and physical-grasp validation is an opt-in check for changes to the asset or expert: + Contact-only pulls at peak speeds of 4.0, 2.0, 1.5, 0.75, and 0.5 m/s, + from left to right, rendered with Kit. .. code-block:: bash - uv run --extra importers python -m pytest -q \ - source/isaaclab_tasks/test/contrib/test_tablecloth_h1_stance.py - -Start with ``lift_cube_sm.py`` for a self-contained state-machine example. -The H1 example shows how to keep scene, observations, rewards, and terminations -in a reusable task while the scripted expert supplies only actions. + uv run isaaclab example tablecloth --device cuda:0 + uv run --extra importers isaaclab example tablecloth --robot h1 --device cuda:0 + +The default robot uses the manufacturer's articulated `H2 Plus USD with SHARPA hands +`__, +downloaded and cached by Isaac Lab. ``--robot h1`` explicitly selects the existing H1 fallback; +it requires the ``importers`` extra. Both use physical contact-only grips, without cloth attachments. +The H2 index fingers start beneath the hem; the thumbs close against their native +rubber surfaces before the lift and pull. This is a calibrated pinch-and-pull example, +not a general-purpose grasp planner. The H2 configuration uses 64 physics ticks per +60 Hz control frame to resolve the fastest pull. Its position drives are simulation +settings: direct VBD with compliant-ALM rigid dynamics does not enforce the +asset's hardware torque limits or armature. + +Use ``--speeds 2.0`` for one robot, or ``--viz none`` for a complete headless +run. The default run duration includes the slowest pull and a final hold. +The pelvis is fixed with the feet at ground level: this demonstrates +manipulation, not humanoid balance. Asset and cloth changes require revalidating +the calibrated physical grasp. This experimental example checks material-point retention after +a complete run and reports grasp failures; successful IK tracking alone does not establish a grasp. +Kit uses Catmull-Clark subdivision for cloth rendering without refining the physics mesh. diff --git a/docs/source/setup/demos.rst b/docs/source/setup/demos.rst index b19a0e88e0f1..971a91835a3c 100644 --- a/docs/source/setup/demos.rst +++ b/docs/source/setup/demos.rst @@ -28,7 +28,7 @@ Programs whose required modules are unavailable, hardware-dependent teleoperatio Kit-only demos are not shown. For cloth and rigid-soft contact examples, see :ref:`newton-using-vbd` and the -:ref:`H1 tablecloth expert `. For particle-material comparisons +:ref:`five humanoid tablecloth pulls `. For particle-material comparisons and solver guidance, see :ref:`newton-tuning-mpm`. Command Builder diff --git a/examples/newton_tablecloth.py b/examples/newton_tablecloth.py deleted file mode 100644 index bc7e6fc9d9dd..000000000000 --- a/examples/newton_tablecloth.py +++ /dev/null @@ -1,410 +0,0 @@ -# Copyright (c) 2022-2026, The Isaac Lab Project Developers (https://github.com/isaac-sim/IsaacLab/blob/main/CONTRIBUTORS.md). -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause - -"""Compare the classic tablecloth trick at five pull speeds with Newton VBD. - -The example follows Isaac Lab's direct-workflow pattern: an -``InteractiveSceneCfg`` declares the ground, tables, cloths, and tableware; -``DeformableObject`` exposes the cloth's kinematic targets; and a graph-safe -callback updates the pulled edges at the VBD substep rate. Only the physics -configuration and substep controller are Newton-specific. - -.. code-block:: bash - - # Newton GL is the default visualizer. - uv run python examples/newton_tablecloth.py --device cuda:0 - - # Run the complete comparison without rendering. - uv run python examples/newton_tablecloth.py --device cuda:0 --visualizer none --max_steps 240 - -""" - -from __future__ import annotations - -import argparse - -from isaaclab.app import add_launcher_args, launch_simulation - -parser = argparse.ArgumentParser(description="Compare five Newton VBD tablecloth pull speeds.") -parser.add_argument("--max_steps", type=int, default=-1, help="Stop after this many frames; negative runs forever.") -add_launcher_args(parser) -parser.set_defaults(visualizer=["newton_gl"]) -args_cli = parser.parse_args() - -import warp as wp -from isaaclab_newton.physics import ( - NewtonCfg, - NewtonCollisionPipelineCfg, - NewtonShapeCfg, - NewtonSoftContactCfg, - VBDSolverCfg, -) -from isaaclab_newton.sim.schemas import NewtonDeformableBodyPropertiesCfg -from isaaclab_newton.sim.spawners.materials import NewtonSurfaceDeformableBodyMaterialCfg - -import isaaclab.sim as sim_utils -from isaaclab.assets import ( - AssetBaseCfg, - DeformableObject, - DeformableObjectCfg, - RigidObjectCfg, - RigidObjectCollectionCfg, -) -from isaaclab.physics import PhysicsEvent -from isaaclab.scene import InteractiveSceneCfg -from isaaclab.utils import configclass - -from isaaclab_tasks.contrib.tablecloth.assets import ( - BOWL_LOCAL_HEIGHT, - BOWL_LOCAL_RADIUS, - BOWL_LOCAL_Z_MIN, - BOWL_SCALE, - BOWL_USD, - FORK_CENTER_OF_MASS, - FORK_DIAGONAL_INERTIA, - FORK_LOCAL_Z_MIN, - FORK_ROTATION, - FORK_SCALE, - FORK_USD, - KITCHEN_ISLAND_SIZE, - KITCHEN_ISLAND_USD, - WINE_GLASS_CENTER_OF_MASS, - WINE_GLASS_DIAGONAL_INERTIA, - WINE_GLASS_LOCAL_Z_MIN, - WINE_GLASS_USD, - VisualTableUsdFileCfg, - collision_properties, - rigid_material, - rigid_object_cfg, - tabletop_collider_cfg, -) - -FPS = 60 -SUBSTEPS = 25 -SETTLE_TIME = 0.5 -PULL_DISTANCE = 1.25 -PULL_RAMP_TIME = 0.40 -PULL_DESCENT_START = 0.95 -PULL_SPEEDS = (0.5, 1.0, 1.5, 2.0, 4.0) - -# Match the scaled, rotated countertop rather than its slightly smaller nominal dimensions. -TABLE_HALF_WIDTH = 0.5168 -TABLE_HALF_DEPTH = 0.2629 -TABLE_TOP_Z = 0.75 -TABLETOP_HALF_HEIGHT = 0.025 - -CLOTH_WIDTH = 1.08 -CLOTH_DEPTH = 0.70 -CLOTH_PARTICLE_RADIUS = 0.0005 -TABLEWARE_CLEARANCE = 0.008 -LANE_SPACING = 0.95 - -KITCHEN_ISLAND_SCALE = (TABLE_TOP_Z / KITCHEN_ISLAND_SIZE[2],) * 3 -KITCHEN_ISLAND_ROTATION = FORK_ROTATION - - -@configclass -class TableclothSceneCfg(InteractiveSceneCfg): - """One Isaac Lab scene containing five side-by-side tablecloth trials.""" - - ground = AssetBaseCfg( - prim_path="/World/defaultGroundPlane", - spawn=sim_utils.GroundPlaneCfg(), - collision_group=-1, - ) - - def __post_init__(self) -> None: - """Declare the repeated trials along one row while keeping every asset configurable.""" - super().__post_init__() - lane_centers = [(lane - 0.5 * (len(PULL_SPEEDS) - 1)) * LANE_SPACING for lane in range(len(PULL_SPEEDS))] - tableware: dict[str, RigidObjectCfg] = {} - cloth_z = TABLE_TOP_Z + CLOTH_PARTICLE_RADIUS + 0.002 - - for lane, lane_y in enumerate(lane_centers): - lane_path = f"{{ENV_REGEX_NS}}/Lane{lane}" - setattr( - self, - f"table_{lane}", - AssetBaseCfg( - prim_path=f"{lane_path}/Table", - spawn=VisualTableUsdFileCfg( - usd_path=KITCHEN_ISLAND_USD, - scale=KITCHEN_ISLAND_SCALE, - variants={"Physics": "none"}, - make_uninstanceable=True, - rigid_props={"(/.*)?": [sim_utils.UsdPhysicsRigidBodyCfg(rigid_body_enabled=False)]}, - collision_props={"(/.*)?": [sim_utils.UsdPhysicsCollisionCfg(collision_enabled=False)]}, - ), - init_state=AssetBaseCfg.InitialStateCfg(pos=(0.0, lane_y, 0.0), rot=KITCHEN_ISLAND_ROTATION), - ), - ) - setattr( - self, - f"tabletop_collider_{lane}", - AssetBaseCfg( - prim_path=f"{lane_path}/TabletopCollider", - spawn=tabletop_collider_cfg( - (2.0 * TABLE_HALF_WIDTH, 2.0 * TABLE_HALF_DEPTH, 2.0 * TABLETOP_HALF_HEIGHT), - friction=1.00, - contact_stiffness=1.0e5, - contact_damping=1.0e2, - ), - init_state=AssetBaseCfg.InitialStateCfg(pos=(0.0, lane_y, TABLE_TOP_Z - TABLETOP_HALF_HEIGHT)), - ), - ) - - setattr( - self, - f"cloth_{lane}", - DeformableObjectCfg( - prim_path=f"{lane_path}/Cloth", - spawn=sim_utils.MeshRectangleCfg( - size=(CLOTH_WIDTH, CLOTH_DEPTH), - edge_refinement=24, - deformable_props=NewtonDeformableBodyPropertiesCfg(), - visual_material=sim_utils.PreviewSurfaceCfg(diffuse_color=(0.76, 0.05, 0.05)), - physics_material=NewtonSurfaceDeformableBodyMaterialCfg( - density=0.24, - particle_radius=CLOTH_PARTICLE_RADIUS, - tri_ke=5.0e4, - tri_ka=5.0e4, - tri_kd=5.0e1, - edge_ke=0.10, - edge_kd=1.0e-3, - ), - ), - init_state=DeformableObjectCfg.InitialStateCfg(pos=(0.0, lane_y, cloth_z)), - ), - ) - - tableware[f"bowl_{lane}"] = rigid_object_cfg( - usd_path=BOWL_USD, - position=(-0.22, lane_y - 0.08, cloth_z + TABLEWARE_CLEARANCE - BOWL_SCALE * BOWL_LOCAL_Z_MIN), - mass=0.45, - collision_proxy_cfg=sim_utils.CylinderCfg( - radius=BOWL_LOCAL_RADIUS, - height=BOWL_LOCAL_HEIGHT, - visible=False, - collision_props=collision_properties(), - physics_material=rigid_material( - density=None, - friction=0.70, - contact_stiffness=1.0e3, - contact_damping=1.0e1, - ), - ), - collision_proxy_position=(0.0, 0.0, BOWL_LOCAL_Z_MIN + 0.5 * BOWL_LOCAL_HEIGHT), - scale=(BOWL_SCALE,) * 3, - ).replace(prim_path=f"{lane_path}/Bowl") - tableware[f"glass_{lane}"] = rigid_object_cfg( - usd_path=WINE_GLASS_USD, - position=(0.02, lane_y + 0.12, cloth_z + TABLEWARE_CLEARANCE - WINE_GLASS_LOCAL_Z_MIN), - mass=0.35, - collision_proxy_cfg=sim_utils.CylinderCfg( - radius=0.035, - height=0.006, - visible=False, - collision_props=collision_properties(), - physics_material=rigid_material( - density=None, - friction=0.70, - contact_stiffness=1.0e3, - contact_damping=1.0e1, - ), - ), - collision_proxy_position=(0.0, 0.0, 0.003), - center_of_mass=WINE_GLASS_CENTER_OF_MASS, - diagonal_inertia=WINE_GLASS_DIAGONAL_INERTIA, - # Approximate the 22.7 cm visual with cheap base, stem, and cup shapes. - additional_collision_proxy_cfgs=( - sim_utils.CylinderCfg( - radius=0.004, - height=0.096, - visible=False, - collision_props=collision_properties(), - physics_material=rigid_material( - density=None, - friction=0.70, - contact_stiffness=1.0e3, - contact_damping=1.0e1, - ), - ), - sim_utils.CapsuleCfg( - radius=0.041, - height=0.045, - visible=False, - collision_props=collision_properties(), - physics_material=rigid_material( - density=None, - friction=0.70, - contact_stiffness=1.0e3, - contact_damping=1.0e1, - ), - ), - ), - additional_collision_proxy_positions=((0.0, 0.0, 0.054), (0.0, 0.0, 0.165)), - visual_color=(0.55, 0.75, 0.90), - visual_opacity=0.90, - visual_roughness=0.12, - ).replace(prim_path=f"{lane_path}/Glass") - tableware[f"fork_{lane}"] = rigid_object_cfg( - usd_path=FORK_USD, - position=(0.10, lane_y - 0.11, cloth_z + TABLEWARE_CLEARANCE - FORK_SCALE * FORK_LOCAL_Z_MIN), - mass=0.07, - collision_proxy_cfg=sim_utils.CuboidCfg( - size=(0.014, 0.160, 0.003), - visible=False, - collision_props=collision_properties(), - physics_material=rigid_material( - density=None, - friction=0.70, - contact_stiffness=1.0e3, - contact_damping=1.0e1, - ), - ), - collision_proxy_position=(0.0, 0.0092, 0.0016), - orientation=FORK_ROTATION, - scale=(FORK_SCALE,) * 3, - center_of_mass=FORK_CENTER_OF_MASS, - diagonal_inertia=FORK_DIAGONAL_INERTIA, - ).replace(prim_path=f"{lane_path}/Fork") - - self.tableware = RigidObjectCollectionCfg(rigid_objects=tableware) - self.light = AssetBaseCfg( - prim_path="/World/Light", - spawn=sim_utils.DomeLightCfg(intensity=2500.0, color=(0.75, 0.75, 0.75)), - ) - - -@wp.kernel -def _advance_pull( - speeds: wp.array(dtype=float), - elapsed: wp.array(dtype=float), - distances: wp.array(dtype=float), - dt: float, -): - env_id = wp.tid() - if elapsed[0] >= SETTLE_TIME: - ramp_u = wp.clamp((elapsed[0] - SETTLE_TIME) / PULL_RAMP_TIME, 0.0, 1.0) - ramp = ramp_u * ramp_u * (3.0 - 2.0 * ramp_u) - distances[env_id] = wp.min(distances[env_id] + ramp * speeds[env_id] * dt, PULL_DISTANCE) - - -@wp.kernel -def _advance_time(elapsed: wp.array(dtype=float), dt: float): - elapsed[0] += dt - - -@wp.kernel -def _update_pulled_edge( - rest_positions: wp.array2d(dtype=wp.vec3f), - distances: wp.array(dtype=float), - lane: int, - targets: wp.array2d(dtype=wp.vec4f), -): - env_id, node_id = wp.tid() - rest = rest_positions[env_id, node_id] - if rest[0] >= 0.5 * CLOTH_WIDTH - 1.0e-4: - distance = distances[lane] - descent = 0.0 - if distance > PULL_DESCENT_START: - descent = 0.30 * wp.clamp((distance - PULL_DESCENT_START) / (PULL_DISTANCE - PULL_DESCENT_START), 0.0, 1.0) - targets[env_id, node_id] = wp.vec4f(rest[0] + distance, rest[1], rest[2] - descent, 0.0) - - -class _TableclothPullController: - """Advance the five cloth edges at the VBD solver-substep rate.""" - - def __init__(self, cloths: list[DeformableObject], device: str, solver_dt: float): - from isaaclab_newton.physics import NewtonManager # noqa: PLC0415 - - self._cloths = cloths - self._solver_dt = solver_dt - self._speeds = wp.array(PULL_SPEEDS, dtype=float, device=device) - self._distances = wp.zeros(len(PULL_SPEEDS), dtype=float, device=device) - self._elapsed = wp.zeros(1, dtype=float, device=device) - self._rest_positions = [] - self._targets = [] - self._physics_ready_handle = NewtonManager.register_callback( - self._on_physics_ready, - PhysicsEvent.PHYSICS_READY, - order=100, - name="tablecloth_pull_controller", - ) - - def _on_physics_ready(self, _event) -> None: - """Bind asset buffers before the solver CUDA graph is captured.""" - from isaaclab_newton.physics import NewtonManager # noqa: PLC0415 - - self._elapsed.zero_() - self._distances.zero_() - self._rest_positions = [wp.clone(cloth.data.nodal_pos_w.warp) for cloth in self._cloths] - self._targets = [cloth.data.nodal_kinematic_target.warp for cloth in self._cloths] - NewtonManager.register_state_force_callback(self._update) - - def _update(self, _state) -> None: - """Move and enforce each kinematic edge immediately before a solver substep.""" - wp.launch(_advance_time, dim=1, inputs=[self._elapsed, self._solver_dt]) - wp.launch( - _advance_pull, - dim=len(PULL_SPEEDS), - inputs=[self._speeds, self._elapsed, self._distances, self._solver_dt], - ) - for lane, cloth in enumerate(self._cloths): - wp.launch( - _update_pulled_edge, - dim=(cloth.num_instances, cloth.max_sim_vertices_per_body), - inputs=[self._rest_positions[lane], self._distances, lane, self._targets[lane]], - ) - cloth.write_data_to_sim() - - -def main() -> None: - """Launch the five-speed tablecloth demo.""" - physics_cfg = NewtonCfg( - num_substeps=SUBSTEPS, - # Fast cloth can cross the contact band within one frame, so collide on every substep. - collision_decimation=1, - default_shape_cfg=NewtonShapeCfg(gap=0.001, ke=1.0e5, kd=1.0e2, mu=0.70), - # Use a polished cloth/tableware interface so realistic lightweight props are not kicked by a fast pull. - soft_contact_cfg=NewtonSoftContactCfg(soft_contact_ke=2.0e4, soft_contact_kd=2.0e1, soft_contact_mu=0.03), - collision_cfg=NewtonCollisionPipelineCfg( - broad_phase="nxn", - soft_contact_margin=0.005, - enable_rigid_soft_full_surface_contact=True, - ), - solver_cfg=VBDSolverCfg( - iterations=15, - rigid_compliant_alm=True, - rigid_body_particle_contact_buffer_size=8192, - ), - ) - with launch_simulation(cfg=physics_cfg, launcher_args=args_cli) as resolved_physics_cfg: - from isaaclab.scene import InteractiveScene # noqa: PLC0415 - - sim = sim_utils.SimulationContext( - sim_utils.SimulationCfg( - dt=1.0 / FPS, - device=args_cli.device, - physics=resolved_physics_cfg, - ) - ) - sim.set_camera_view(eye=(3.61, -5.225, 2.8825), target=(0.0, 0.0, 0.40)) - scene = InteractiveScene(TableclothSceneCfg(num_envs=1, env_spacing=1.0)) - cloths = [scene[f"cloth_{lane}"] for lane in range(len(PULL_SPEEDS))] - _pull_controller = _TableclothPullController(cloths, scene.device, sim.get_physics_dt() / SUBSTEPS) - sim.reset() - - sim_dt = sim.get_physics_dt() - print("[INFO]: Setup complete. Five side-by-side Isaac Lab tablecloth trials are ready.", flush=True) - step = 0 - while sim.is_running() and (args_cli.max_steps < 0 or step < args_cli.max_steps): - sim.step() - scene.update(sim_dt) - step += 1 - - -if __name__ == "__main__": - main() diff --git a/examples/tablecloth.py b/examples/tablecloth.py new file mode 100644 index 000000000000..1a5821692be6 --- /dev/null +++ b/examples/tablecloth.py @@ -0,0 +1,243 @@ +# Copyright (c) 2022-2026, The Isaac Lab Project Developers (https://github.com/isaac-sim/IsaacLab/blob/main/CONTRIBUTORS.md). +# All rights reserved. +# +# SPDX-License-Identifier: BSD-3-Clause + +"""Compare contact-driven bimanual tablecloth pulls at five speeds. + +InteractiveScene declares fixed-base H2 Plus robots with SHARPA hands, cloths, and tableware. +Newton VBD simulates the articulations, cloth, and tableware together; Newton IK and a Warp +state machine run inside the physics CUDA graph. This is scripted manipulation, not an RL task. + +.. code-block:: bash + + uv run isaaclab example tablecloth --device cuda:0 + uv run --extra importers isaaclab example tablecloth --robot h1 --device cuda:0 +""" + +from __future__ import annotations + +import argparse +import logging +import math +import tempfile +from contextlib import nullcontext +from functools import partial + +import numpy as np + +from isaaclab.app import add_launcher_args, launch_simulation + +logger = logging.getLogger(__name__) + +parser = argparse.ArgumentParser(description="Five side-by-side GPU humanoid tablecloth pulls.") +parser.add_argument( + "--robot", choices=("h2", "h1"), default="h2", help="H2 Plus / SHARPA (default), or the H1 fallback." +) +parser.add_argument( + "--speeds", + nargs="+", + type=float, + default=[4.0, 2.0, 1.5, 0.75, 0.5], + help="Peak pull speeds, ordered left to right from fastest to slowest [m/s].", +) +parser.add_argument( + "--max_steps", + type=int, + default=0, + help="Frame limit; zero completes all pulls and a final hold, negative runs forever.", +) +add_launcher_args(parser) +parser.set_defaults(visualizer=["newton_gl"]) +args_cli = parser.parse_args() +if not args_cli.device.startswith("cuda"): + parser.error("This graph-captured example requires a CUDA device.") +if any(not math.isfinite(speed) or speed <= 0 for speed in args_cli.speeds): + parser.error("--speeds must contain positive finite values.") + +from isaaclab_newton.physics import ( + NewtonCfg, + NewtonCollisionPipelineCfg, + NewtonShapeCfg, + NewtonSoftContactCfg, + VBDSolverCfg, +) +from isaaclab_newton.sim.spawners.materials import NewtonSurfaceDeformableBodyMaterialCfg + +import isaaclab.sim as sim_utils +from isaaclab import cloner +from isaaclab.scene import InteractiveSceneCfg +from isaaclab.utils import instantiate +from isaaclab.utils.version import standalone_importers_available +from isaaclab.visualizers import VisualizerCfg + +from isaaclab_contrib.assets.tablecloth import ( + CLOTH_FRICTION, + FPS, + GROUND_CFG, + H1_CFG, + H2_CFG, + LIGHT_CFG, + RIGID_GAP, + SUBSTEPS, + TABLECLOTH_ASSETS, + prepare_native_h2_contacts, +) + + +def main() -> None: + """Construct the scene, capture GPU control, and run the complete comparison.""" + speeds = tuple(args_cli.speeds) + step_dt = 1.0 / FPS + is_h2 = args_cli.robot == "h2" + # Resolve the native SHARPA pinch during the fastest pull without changing the H1 fallback. + substeps = 64 if is_h2 else SUBSTEPS + collision_cfg = NewtonCollisionPipelineCfg( + broad_phase="sap", + # Identical, separated lanes need linear capacity, not shapes * particles. + soft_contact_max=65_536 * len(speeds), + soft_contact_margin=0.008, + enable_rigid_soft_full_surface_contact=True, + ) + solver_cfg = VBDSolverCfg( + iterations=60 if is_h2 else 30, + friction_epsilon=1.0e-3 if is_h2 else 1.0e-2, + rigid_compliant_alm=True, + rigid_joint_linear_ke=1.0e7, + rigid_joint_angular_ke=1.0e6 if is_h2 else 1.0e7, + rigid_body_contact_buffer_size=256, + rigid_body_particle_contact_buffer_size=8192, + ) + camera_distance = max(3.0, 1.6 * len(speeds)) + sim_cfg = sim_utils.SimulationCfg( + dt=step_dt / substeps if is_h2 else step_dt, + render_interval=substeps if is_h2 else 1, + physics=NewtonCfg( + num_substeps=1 if is_h2 else substeps, + collision_decimation=0 if is_h2 else 1, + default_shape_cfg=NewtonShapeCfg(gap=RIGID_GAP, ke=1.0e4, kd=1.0e1, mu=0.35), + soft_contact_cfg=NewtonSoftContactCfg( + soft_contact_ke=1.0e3, + soft_contact_kd=1.0e-2, + soft_contact_mu=CLOTH_FRICTION, + ), + collision_cfg=collision_cfg, + solver_cfg=solver_cfg, + ), + default_visualizer_cfg=VisualizerCfg( + eye=(camera_distance, -1.5, 1.0 + 0.35 * camera_distance), lookat=(-0.3, 0.0, 1.0) + ), + ) + args_cli.require_kit = args_cli.robot == "h1" and not standalone_importers_available() + with ( + launch_simulation(cfg=sim_cfg, launcher_args=args_cli), + tempfile.TemporaryDirectory(prefix="isaaclab-tablecloth-") as asset_dir, + ): + from isaaclab_newton.cloner import newton_builder_world_hook # noqa: PLC0415 + from isaaclab_newton.physics import NewtonManager # noqa: PLC0415 + + from isaaclab.scene import InteractiveScene # noqa: PLC0415 + from isaaclab.utils.assets import retrieve_file_path # noqa: PLC0415 + + from isaaclab_contrib.controllers.tablecloth import GraspMonitor, TableclothController # noqa: PLC0415 + + if args_cli.robot == "h1": + import newton.utils # noqa: PLC0415 + + from isaaclab.sim.converters import MjcfConverter, MjcfConverterCfg # noqa: PLC0415 + + usd_path = MjcfConverter( + MjcfConverterCfg( + asset_path=str(newton.utils.download_asset("unitree_h1") / "mjcf/h1_with_hand.xml"), + usd_dir=asset_dir, + usd_file_name="h1_with_hand.usda", + fix_base=True, + self_collision=False, + robot_type="Humanoid", + run_asset_transformer=False, + run_multi_physics_conversion=False, + ) + ).usd_path + else: + usd_path = retrieve_file_path(H2_CFG.spawn.usd_path) + sim = sim_utils.SimulationContext(sim_cfg) + scene = InteractiveScene(InteractiveSceneCfg(num_envs=len(speeds), env_spacing=1.5)) + positions = np.zeros((len(speeds), 3), dtype=np.float32) + positions[:, 1] = (np.arange(len(speeds), dtype=np.float32) - 0.5 * (len(speeds) - 1)) * 1.5 + # Each trial has its own physics world, but their visual origins form one row. + sim_utils.standardize_xform_ops( + scene.stage.GetPrimAtPath(scene.env_prim_paths[0]), translation=tuple(map(float, positions[0])) + ) + cfgs = {name: cfg.copy() for name, cfg in TABLECLOTH_ASSETS.items()} + if args_cli.robot == "h1": + # H1's smaller hands use the original corner-grasp arrangement. + cfgs["cloth"].spawn.size = (0.48, 0.80) + else: + # Put the front hem between the prepositioned native index and thumb surfaces. + cloth_pos = cfgs["cloth"].init_state.pos + cfgs["cloth"].init_state.pos = (-0.06, cloth_pos[1], cloth_pos[2]) + # Thin cloth does not need the H1 configuration's heavy membrane damping. + material = cfgs["cloth"].spawn.physics_material + defaults = NewtonSurfaceDeformableBodyMaterialCfg() + material.tri_ke, material.tri_ka, material.tri_kd = defaults.tri_ke, defaults.tri_ka, defaults.tri_kd + cfgs["robot"] = (H2_CFG if args_cli.robot == "h2" else H1_CFG).copy() + cfgs["robot"].spawn.usd_path = usd_path + cfgs.update(ground=GROUND_CFG.copy(), light=LIGHT_CFG.copy()) + plan = cloner.clone_plan_from_env_0(scene.cfg.clone_cfg, cfgs.values(), len(speeds), 1.5, positions=positions) + scene.articulations["robot"] = instantiate(cfgs["robot"]) + scene.deformable_objects["cloth"] = instantiate(cfgs["cloth"]) + for name in ("bowl", "glass", "fork"): + scene.rigid_objects[name] = instantiate(cfgs[name]) + for name, cfg in cfgs.items(): + if name not in ("robot", "cloth", "bowl", "glass", "fork"): + scene.extras[name] = instantiate(cfg) + contact_hook = partial(prepare_native_h2_contacts, device=sim.device, mesh_sdf_cache={}) + with newton_builder_world_hook(contact_hook) if is_h2 else nullcontext(): + cloner.replicate(plan, replicate_physics=scene.cfg.replicate_physics) + sim.reset() + robot = scene["robot"] + robot.write_joint_state_to_sim_index( + position=robot.data.default_joint_pos.warp, + velocity=robot.data.default_joint_vel.warp, + ) + # Fixed roots already have the cloned row origins; defaults are environment-local. + sim.forward() + controller = TableclothController(robot, usd_path, step_dt, speeds, robot_type=args_cli.robot) + if args_cli.robot == "h2": + controller.observe_scene(NewtonManager.get_model(), NewtonManager.get_state_0(), scene.env_prim_paths) + controller.compute() + if is_h2: + controller.bind_arm_substeps( + NewtonManager.get_model(), + NewtonManager.get_state_0(), + NewtonManager.get_control(), + scene.env_prim_paths, + substeps, + ) + NewtonManager.activate_newton_actuator_path() + NewtonManager.register_post_actuator_callback(controller.interpolate_arm_targets) + NewtonManager.set_decimation(substeps) + NewtonManager.register_post_step_callback(controller.compute) + grasp = GraspMonitor(NewtonManager.get_model(), NewtonManager.get_state_0(), controller, scene.env_prim_paths) + NewtonManager.register_post_step_callback(grasp.compute) + complete_steps = math.ceil(TableclothController.duration(speeds, step_dt, args_cli.robot) / step_dt) + max_steps = args_cli.max_steps or complete_steps + logger.info("GPU %s tablecloth pulls ready: %s m/s.", args_cli.robot.upper(), speeds) + try: + step = 0 + while sim.is_running() and (max_steps < 0 or step < max_steps): + sim.step() + scene.update(step_dt) + step += 1 + if step >= complete_steps: + reports = grasp.report() + logger.info("Physical cloth grips: %s", reports) + if not all(report["retained"] for report in reports): + raise RuntimeError("A robot lost its physical cloth grasp; see the material-point gaps above.") + finally: + NewtonManager.unregister_post_step_callback(grasp.compute) + NewtonManager.unregister_post_step_callback(controller.compute) + + +if __name__ == "__main__": + main() diff --git a/examples/tablecloth_h1.py b/examples/tablecloth_h1.py deleted file mode 100644 index 15589847a3b1..000000000000 --- a/examples/tablecloth_h1.py +++ /dev/null @@ -1,115 +0,0 @@ -# Copyright (c) 2022-2026, The Isaac Lab Project Developers (https://github.com/isaac-sim/IsaacLab/blob/main/CONTRIBUTORS.md). -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause - -"""Launch the contributed H1 tablecloth task with its scripted expert. - -The task owns scene construction, physics, actions, observations, resets, -rewards, and terminations. Its ``expert`` module owns the calibrated bimanual -Warp controller; this script only launches the task and runs that controller. - -.. code-block:: bash - - uv run --extra importers isaaclab example tablecloth-h1 - uv run --extra importers python examples/tablecloth_h1.py \ - --visualizer none --max_steps 312 - -""" - -from __future__ import annotations - -import argparse -import math - -from isaaclab.app import add_launcher_args, launch_simulation - -parser = argparse.ArgumentParser(description="Run the scripted H1 tablecloth expert.") -parser.add_argument("--task", type=str, default="IsaacContrib-Tablecloth-H1", help="Task to run.") -parser.add_argument("--num_envs", type=int, default=1, help="Number of parallel environments.") -parser.add_argument("--max_steps", type=int, default=-1, help="Stop after this many steps; negative runs forever.") -parser.add_argument("--pull_speed", type=float, default=2.0, help="Peak X withdrawal speed [m/s].") -add_launcher_args(parser) -parser.set_defaults(visualizer=["newton_gl"]) -args_cli = parser.parse_args() - -import gymnasium as gym -import torch - -from isaaclab.utils.math import subtract_frame_transforms -from isaaclab.utils.version import standalone_importers_available - -import isaaclab_tasks # noqa: F401 -from isaaclab_tasks.contrib.tablecloth.expert import H1TableclothStateMachine -from isaaclab_tasks.contrib.tablecloth.mdp._metrics import cloth_pull_distance -from isaaclab_tasks.utils import parse_env_cfg - - -def _torso_pose_in_robot_frame(env) -> torch.Tensor: - robot = env.scene["robot"] - torso_ids, _ = robot.find_bodies("torso_link") - torso_pos, torso_quat = subtract_frame_transforms( - robot.data.root_pos_w.torch, - robot.data.root_quat_w.torch, - robot.data.body_pos_w.torch[:, torso_ids[0]], - robot.data.body_quat_w.torch[:, torso_ids[0]], - ) - return torch.cat((torso_pos, torso_quat), dim=-1) - - -def main() -> None: - """Launch the task and run its scripted expert.""" - args_cli.require_kit = not standalone_importers_available() - if not math.isfinite(args_cli.pull_speed) or args_cli.pull_speed <= 0.0: - raise ValueError("--pull_speed must be finite and positive") - env_cfg = parse_env_cfg(args_cli.task, device=args_cli.device, num_envs=args_cli.num_envs) - success_term = env_cfg.terminations.success - # The expert rollout should remain visible after task completion rather than auto-resetting. - env_cfg.terminations.success = None - env_cfg.terminations.tableware_fallen = None - env_cfg.rewards.success = None - - with launch_simulation(cfg=env_cfg, launcher_args=args_cli): - env = gym.make(args_cli.task, cfg=env_cfg) - try: - env.reset() - state_machine = H1TableclothStateMachine( - env.unwrapped.step_dt, - _torso_pose_in_robot_frame(env.unwrapped), - env.unwrapped.action_manager.total_action_dim, - args_cli.pull_speed, - ) - print("[INFO]: Setup complete. H1 tablecloth expert is ready.", flush=True) - step = 0 - while env.unwrapped.sim.is_running() and (args_cli.max_steps < 0 or step < args_cli.max_steps): - with torch.inference_mode(): - _, _, terminated, truncated, _ = env.step(state_machine.compute()) - dones = terminated | truncated - if dones.any(): - state_machine.reset_idx(dones.nonzero(as_tuple=False).squeeze(-1)) - step += 1 - success = success_term.func(env.unwrapped, **success_term.params) - displacements = { - name: torch.linalg.vector_norm( - env.unwrapped.scene[name].data.root_pos_w.torch[:, :3] - - env.unwrapped.scene[name].data.default_root_pose.torch[:, :3] - - env.unwrapped.scene.env_origins, - dim=1, - ) - for name in success_term.params["asset_names"] - } - maximum_displacement = torch.stack(list(displacements.values())).amax(dim=0) - displacement_report = {name: value.tolist() for name, value in displacements.items()} - print( - f"[INFO]: Tablecloth trick success: {success.tolist()}, cloth travel [m]: " - f"{cloth_pull_distance(env.unwrapped).tolist()}, " - f"maximum tableware displacement [m]: {maximum_displacement.tolist()}, " - f"by object: {displacement_report}", - flush=True, - ) - finally: - env.close() - - -if __name__ == "__main__": - main() diff --git a/source/isaaclab/changelog.d/max-newton-tablecloth-demos.added.rst b/source/isaaclab/changelog.d/max-newton-tablecloth-demos.added.rst index b1f1591d9f62..ec4e3ca43e81 100644 --- a/source/isaaclab/changelog.d/max-newton-tablecloth-demos.added.rst +++ b/source/isaaclab/changelog.d/max-newton-tablecloth-demos.added.rst @@ -1 +1 @@ -* Added the ``newton-tablecloth`` and ``tablecloth-h1`` examples to the Isaac Lab command-line catalog and standalone smoke coverage. +* Added the GPU-controlled ``tablecloth`` five-speed comparison with H2 Plus / SHARPA hands and an H1 fallback to the Isaac Lab example catalog and standalone launch smoke coverage. diff --git a/source/isaaclab/isaaclab/programs.py b/source/isaaclab/isaaclab/programs.py index 15f340c159a7..f96b40eefde8 100644 --- a/source/isaaclab/isaaclab/programs.py +++ b/source/isaaclab/isaaclab/programs.py @@ -128,24 +128,18 @@ def _run_script(path: Path) -> None: ProgramSpec("markers", "examples/markers.py", "Render reusable visualization markers.", **_ISAACSIM), ProgramSpec("multi-asset", "examples/multi_asset.py", "Spawn different assets across cloned environments."), ProgramSpec("newton-dominoes", "examples/newton_viewer_dominoes.py", "Interact with Newton XPBD dominoes."), - ProgramSpec( - "newton-tablecloth", - "examples/newton_tablecloth.py", - "Compare the tablecloth trick across five pull speeds with Newton VBD.", - ), - ProgramSpec( - "tablecloth-h1", - "examples/tablecloth_h1.py", - "Run a bimanual H1 tablecloth expert on a contributed manager-based task.", - extras=("importers",), - required_modules=("isaacsim",), - ), ProgramSpec( "procedural-terrain", "examples/procedural_terrain.py", "Generate procedural terrain meshes.", **_ISAACSIM, ), + ProgramSpec( + "tablecloth", + "examples/tablecloth.py", + "Compare five contact-driven humanoid tablecloth pulls using GPU Newton IK and VBD.", + required_modules=("isaaclab_contrib",), + ), ProgramSpec( "visual-color-randomization", "examples/visual_color_randomization.py", diff --git a/source/isaaclab/test/app/standalone_script_cases.py b/source/isaaclab/test/app/standalone_script_cases.py index 43e7511025cb..d343ff47326c 100644 --- a/source/isaaclab/test/app/standalone_script_cases.py +++ b/source/isaaclab/test/app/standalone_script_cases.py @@ -231,16 +231,11 @@ class SmokeResult: fixed_physics_backend="newton_xpbd", visualizers=("newton_gl",), ), - "examples/newton_tablecloth.py": ScriptOverride( - args=("--max_steps", "2"), + "examples/tablecloth.py": ScriptOverride( + args=("--max_steps", "2", "--viz", "none"), fixed_physics_backend="newton_vbd", - visualizers=("newton_gl",), - ), - "examples/tablecloth_h1.py": ScriptOverride( - args=("--max_steps", "2"), - fixed_physics_backend="newton_vbd", - visualizers=("newton_gl",), - required_modules=("isaacsim",), + visualizers=(None,), + required_modules=("isaaclab_contrib",), ), "examples/sensors/cameras.py": ScriptOverride(args=("--num_envs", "1"), startup_timeout=900.0), "examples/sensors/multi_mesh_raycaster.py": ScriptOverride( diff --git a/source/isaaclab_contrib/changelog.d/max-tablecloth-example.added.rst b/source/isaaclab_contrib/changelog.d/max-tablecloth-example.added.rst new file mode 100644 index 000000000000..395a4d7d9b68 --- /dev/null +++ b/source/isaaclab_contrib/changelog.d/max-tablecloth-example.added.rst @@ -0,0 +1,3 @@ +* Added experimental fixed-base H2 Plus / SHARPA and H1 tablecloth asset configurations and a GPU + state-machine controller for the standalone example, using direct VBD articulation dynamics and + contact-only grasps with native fingertip surfaces. diff --git a/source/isaaclab_contrib/changelog.d/max-tablecloth-coupler-test.skip b/source/isaaclab_contrib/changelog.d/max-tablecloth-example.minor similarity index 100% rename from source/isaaclab_contrib/changelog.d/max-tablecloth-coupler-test.skip rename to source/isaaclab_contrib/changelog.d/max-tablecloth-example.minor diff --git a/source/isaaclab_contrib/isaaclab_contrib/assets/tablecloth.py b/source/isaaclab_contrib/isaaclab_contrib/assets/tablecloth.py new file mode 100644 index 000000000000..b4dc43d86e6d --- /dev/null +++ b/source/isaaclab_contrib/isaaclab_contrib/assets/tablecloth.py @@ -0,0 +1,885 @@ +# Copyright (c) 2022-2026, The Isaac Lab Project Developers (https://github.com/isaac-sim/IsaacLab/blob/main/CONTRIBUTORS.md). +# All rights reserved. +# +# SPDX-License-Identifier: BSD-3-Clause + +"""Assets for the experimental bimanual tablecloth example. + +USD visuals use inexpensive primitive collision proxies. Robot settings are +specific to this fixed-base VBD demonstration, not general-purpose robot presets. +""" + +from __future__ import annotations + +from collections.abc import Callable +from dataclasses import MISSING +from typing import TYPE_CHECKING + +from isaaclab_newton.sim.schemas import ( + NewtonArticulationCfg, + NewtonCollisionCfg, + NewtonDeformableBodyPropertiesCfg, + NewtonSDFCollisionCfg, +) +from isaaclab_newton.sim.spawners.materials import NewtonMaterialCfg, NewtonSurfaceDeformableBodyMaterialCfg + +import isaaclab.sim as sim_utils +from isaaclab.actuators import ImplicitActuatorCfg +from isaaclab.assets import ArticulationCfg, AssetBaseCfg, DeformableObjectCfg, RigidObjectCfg +from isaaclab.sim.schemas import UsdPhysicsCollisionCfg, UsdPhysicsRigidBodyCfg +from isaaclab.sim.spawners.materials import UsdPhysicsRigidBodyMaterialCfg +from isaaclab.utils import configclass +from isaaclab.utils.assets import ISAAC_NUCLEUS_DIR + +if TYPE_CHECKING: + import numpy as np + from newton import Mesh, ModelBuilder + + from pxr import Usd + +RIGID_GAP = 0.001 +H1_PELVIS_HEIGHT = 1.1 +CLOTH_FRICTION = 0.20 +GRIP_FRICTION = 1.2 +# Pin the manufacturer's articulated H2 Plus / SHARPA model; do not vendor its meshes. +H2_PLUS_USD = ( + "https://media.githubusercontent.com/media/unitreerobotics/unitree_model/" + "b6a8942b0803b6c137e58cef12beb4b03e4a2fa7/H2_Plus/H2_with_sharpa.usd" +) + +TABLE_USD = ( + "https://omniverse-content-production.s3-us-west-2.amazonaws.com/Assets/" + "ArchVis/Residential/Furniture/DiningSets/EastRural/EastRural_Table.usd" +) +BOWL_USD = f"{ISAAC_NUCLEUS_DIR}/SimReady/Residential/Kitchen/Dishware/Bowl_G01/sm_kitchenware_bowl_g01_01.usd" +WINE_GLASS_USD = ( + f"{ISAAC_NUCLEUS_DIR}/SimReady/Residential/Furnishing/Kitchen/Kitchenware/Dishware/Glass_Wine_A01/" + "sm_dishware_glass_wine_a01_01.usd" +) +FORK_USD = f"{ISAAC_NUCLEUS_DIR}/SimReady/Residential/Kitchen/Utensils/Fork_K01/sm_kitchenware_fork_k01_01.usd" + +# Table coordinates are authored in centimeters; USD references do not convert stage units. +TABLE_ASSET_SIZE = (91.44, 152.7302, 76.20) +TABLE_ASSET_TOP_THICKNESS = 2.54 +# Keep the calibrated front edge at x = -0.20 m when enlarging the dining table. +TABLE_SIZE = (0.48, 0.84) +TABLE_CENTER_X = 0.04 +# Dimensions measured from the SimReady tableware assets [m]. +BOWL_LOCAL_Z_MIN = 0.000001783 +BOWL_LOCAL_RADIUS = 0.052765541 +BOWL_LOCAL_HEIGHT = 0.043569469 +WINE_GLASS_LOCAL_Z_MIN = 0.000358 +FORK_LOCAL_Z_MIN = 0.000127 +BOWL_SCALE = 1.35 +FORK_SCALE = 0.85 +FORK_ROTATION = (0.0, 0.0, -0.70710678, 0.70710678) +FORK_CENTER_OF_MASS = (0.0, 0.0092, 0.0089) +FORK_DIAGONAL_INERTIA = (1.86e-4, 6.2e-6, 1.90e-4) +# A base-only collision proxy would otherwise give the tall glass a flat-disk inertia. +WINE_GLASS_CENTER_OF_MASS = (0.0, 0.0, 0.04) +WINE_GLASS_DIAGONAL_INERTIA = (3.0e-3, 3.0e-3, 5.0e-4) + + +def rigid_material( + *, friction: float, density: float | None = None, contact_stiffness: float = 1.0e4, contact_damping: float = 1.0e1 +) -> list[UsdPhysicsRigidBodyMaterialCfg | NewtonMaterialCfg]: + """Return solver-common friction and Newton compliant-contact material fragments.""" + return [ + UsdPhysicsRigidBodyMaterialCfg( + static_friction=friction, + dynamic_friction=friction, + restitution=0.0, + density=density, + ), + NewtonMaterialCfg(contact_stiffness=contact_stiffness, contact_damping=contact_damping), + ] + + +def collision_properties( + *, contact_margin: float = 0.002, contact_gap: float = RIGID_GAP +) -> list[UsdPhysicsCollisionCfg | NewtonCollisionCfg]: + """Return collision properties shared by cloth-contacting rigid shapes.""" + return [ + UsdPhysicsCollisionCfg(collision_enabled=True), + NewtonCollisionCfg(contact_margin=contact_margin, contact_gap=contact_gap), + ] + + +def spawn_h1_from_usd( + prim_path: str, + cfg: sim_utils.UsdFileCfg, + translation: tuple[float, float, float] | None = None, + orientation: tuple[float, float, float, float] | None = None, + **kwargs: object, +) -> Usd.Prim: + """Spawn H1 while accounting for the MJCF's pelvis-height transform.""" + if translation is not None: + translation = (translation[0], translation[1], translation[2] - H1_PELVIS_HEIGHT) + return sim_utils.spawn_from_usd(prim_path, cfg, translation, orientation, **kwargs) + + +def tabletop_collider_cfg( + size: tuple[float, float, float], *, friction: float, contact_stiffness: float, contact_damping: float +) -> sim_utils.CuboidCfg: + """Create a low-cost collision proxy for a visual-only table.""" + return sim_utils.CuboidCfg( + size=size, + visible=False, + # Inflated rigid offsets must not support dishes above the cloth. + collision_props=collision_properties(contact_margin=0.0002, contact_gap=0.0), + physics_material=rigid_material( + density=None, + friction=friction, + contact_stiffness=contact_stiffness, + contact_damping=contact_damping, + ), + ) + + +def _configure_visuals( + prim_path: str, + color: tuple[float, float, float] | None = None, + opacity: float | None = None, + roughness: float | None = None, +) -> None: + """Remove inherited physics bindings and normalize cross-viewer materials.""" + from pxr import Gf, UsdShade # noqa: PLC0415 + + for child in sim_utils.get_all_matching_child_prims(prim_path): + binding = child.GetRelationship("material:binding:physics") + if binding: + binding.SetTargets([]) + if not child.IsA(UsdShade.Shader): + continue + shader = UsdShade.Shader(child) + shader_id = shader.GetIdAttr().Get() + if shader_id == "UsdPreviewSurface": + for name in ("metallic", "roughness"): + shader.GetInput(name).DisconnectSource() + names = ("diffuseColor", "opacity", "roughness") + elif shader_id == "mdl:OmniGlass": + names = ("glass_color", "cutout_opacity", "frosting_roughness") + else: + continue + for name, value in zip(names, (color, opacity, roughness), strict=True): + if value is not None: + shader.GetInput(name).Set(Gf.Vec3f(*value) if name == names[0] else value) + + +def spawn_visual_table_from_usd( + prim_path: str, + cfg: VisualTableUsdFileCfg, + translation: tuple[float, float, float] | None = None, + orientation: tuple[float, float, float, float] | None = None, + **kwargs: object, +) -> Usd.Prim: + """Spawn a visual-only table and remove material inputs unsupported by Newton GL.""" + prim = sim_utils.spawn_from_usd(prim_path, cfg, translation, orientation, **kwargs) + for root in sim_utils.find_matching_prims(prim_path): + _configure_visuals(root.GetPath().pathString) + return prim + + +@configclass +class VisualTableUsdFileCfg(sim_utils.UsdFileCfg): + """USD spawner config for a visual-only dining table.""" + + func: Callable | str = spawn_visual_table_from_usd + + +def spawn_tableware_from_usd( + prim_path: str, + cfg: TablewareUsdFileCfg, + translation: tuple[float, float, float] | None = None, + orientation: tuple[float, float, float, float] | None = None, + **kwargs: object, +) -> Usd.Prim: + """Spawn a tableware visual with configured mass and analytic collision proxies.""" + prim = sim_utils.spawn_from_usd(prim_path, cfg, translation, orientation, **kwargs) + from pxr import Gf, UsdPhysics # noqa: PLC0415 + + for root in sim_utils.find_matching_prims(prim_path): + root_path = root.GetPath().pathString + _configure_visuals(root_path, cfg.visual_color, cfg.visual_opacity, cfg.visual_roughness) + + mesh_colliders = sim_utils.get_all_matching_child_prims( + root_path, + predicate=lambda child: child.HasAPI(UsdPhysics.CollisionAPI), + ) + if len(mesh_colliders) != 1: + raise RuntimeError(f"Expected one SimReady tableware mesh collider, found {len(mesh_colliders)}") + UsdPhysics.CollisionAPI(mesh_colliders[0]).CreateCollisionEnabledAttr(False) + + bodies = sim_utils.get_all_matching_child_prims( + root_path, + predicate=lambda child: child.HasAPI(UsdPhysics.RigidBodyAPI), + ) + if len(bodies) != 1: + raise RuntimeError(f"Expected one SimReady tableware rigid body, found {len(bodies)}") + body = bodies[0] + mass_api = UsdPhysics.MassAPI.Apply(body) + mass_api.CreateMassAttr(cfg.mass) + mass_api.CreateDensityAttr(0.0) + if cfg.center_of_mass is not None: + mass_api.CreateCenterOfMassAttr(cfg.center_of_mass) + if cfg.diagonal_inertia is not None: + mass_api.CreateDiagonalInertiaAttr(cfg.diagonal_inertia) + mass_api.CreatePrincipalAxesAttr(Gf.Quatf(1.0, Gf.Vec3f(0.0))) + + proxy_cfgs = (cfg.collision_proxy_cfg, *cfg.additional_collision_proxy_cfgs) + proxy_positions = (cfg.collision_proxy_position, *cfg.additional_collision_proxy_positions) + for index, (proxy_cfg, proxy_position) in enumerate(zip(proxy_cfgs, proxy_positions, strict=True)): + suffix = "" if index == 0 else str(index) + proxy_cfg.func( + f"{body.GetPath()}/CollisionProxy{suffix}", + proxy_cfg, + translation=proxy_position, + orientation=(0.0, 0.0, 0.0, 1.0), + ) + return prim + + +@configclass +class TablewareUsdFileCfg(sim_utils.UsdFileCfg): + """USD spawner config for SimReady visuals with analytic collision proxies.""" + + func: Callable | str = spawn_tableware_from_usd + make_uninstanceable: bool = True + rigid_props = {"(/.*)?": [UsdPhysicsRigidBodyCfg(rigid_body_enabled=True, kinematic_enabled=False)]} + mass: float = MISSING + collision_proxy_cfg: sim_utils.ShapeCfg = MISSING + collision_proxy_position: tuple[float, float, float] = MISSING + additional_collision_proxy_cfgs: tuple[sim_utils.ShapeCfg, ...] = () + additional_collision_proxy_positions: tuple[tuple[float, float, float], ...] = () + center_of_mass: tuple[float, float, float] | None = None + diagonal_inertia: tuple[float, float, float] | None = None + visual_color: tuple[float, float, float] | None = None + visual_opacity: float | None = None + visual_roughness: float | None = None + + +FPS = 60 +SUBSTEPS = 16 +# The straight-leg H1 sole is 1.0442 m below its pelvis; keep the tabletop 1 cm below the pelvis. +H1_STANDING_HEIGHT = 1.0442 + RIGID_GAP +TABLE_TOP_Z = H1_STANDING_HEIGHT - 0.01 +TABLEWARE_CLEARANCE = 0.008 +# Start above the thin table contact skin and the cloth's 1 mm particle radius. +CLOTH_Z = TABLE_TOP_Z + 0.004 +TABLEWARE_NAMES = ("bowl", "glass", "fork") + +TABLE_SCALE = ( + TABLE_SIZE[0] / TABLE_ASSET_SIZE[0], + TABLE_SIZE[1] / TABLE_ASSET_SIZE[1], + TABLE_TOP_Z / TABLE_ASSET_SIZE[2], +) +TABLETOP_THICKNESS = TABLE_ASSET_TOP_THICKNESS * TABLE_SCALE[2] + +HAND_OFFSETS = ((0.146273, -0.068447, 0.028077), (0.148808, 0.068652, 0.026675)) +H2_HAND_OFFSETS = ( + (0.0854352130714941, -0.004956624352234765, 0.11747110476887199), + (0.08528776908502764, 0.0060654248588878044, 0.11775531545430512), +) +H2_PINCH_NORMALS = ( + (-0.2177173497347232, 0.20510326213060795, 0.9542179035670372), + (-0.21041715932142208, -0.19846220463052672, 0.957255123985395), +) +# Measured native pulp pinch and unused-finger parking, inside native joint limits. +H2_PINCH_JOINT_POS = { + "left_thumb_CMC_FE": 1.8898998498916626, + "left_thumb_CMC_AA": 0.31909996271133423, + "left_thumb_MCP_FE": -0.49359992146492004, + "left_thumb_MCP_AA": -0.041234519332647324, + "left_thumb_IP": 0.030000001192092896, + "left_index_MCP_FE": 0.9650716781616211, + "left_index_MCP_AA": 0.30174076557159424, + "left_index_PIP": 0.5233824253082275, + "left_index_DIP": 0.029999999329447746, + "right_thumb_CMC_FE": 1.8898998498916626, + "right_thumb_CMC_AA": 0.31909996271133423, + "right_thumb_MCP_FE": -0.49359992146492004, + "right_thumb_MCP_AA": -0.021861376240849495, + "right_thumb_IP": 0.029999999329447746, + "right_index_MCP_FE": 0.9501051306724548, + "right_index_MCP_AA": 0.2907813787460327, + "right_index_PIP": 0.5469146966934204, + "right_index_DIP": 0.029999999329447746, + "left_middle_MCP_FE": 0.5188307166099548, + "left_middle_MCP_AA": 0.30825042724609375, + "left_middle_PIP": 1.3207045793533325, + "left_middle_DIP": 1.3419662714004517, + "left_ring_MCP_FE": 0.10000000149011612, + "left_ring_MCP_AA": 0.30000001192092896, + "left_ring_PIP": 1.5499999523162842, + "left_ring_DIP": 1.2000000476837158, + "left_pinky_MCP_FE": 0.10000000149011612, + "left_pinky_MCP_AA": 0.30000001192092896, + "left_pinky_PIP": 1.6299999952316284, + "left_pinky_DIP": 1.2000000476837158, + "right_middle_MCP_FE": 0.4482609033584595, + "right_middle_MCP_AA": 0.30533933639526367, + "right_middle_PIP": 1.3855232000350952, + "right_middle_DIP": 1.3496774435043335, + "right_ring_MCP_FE": 0.10000000149011612, + "right_ring_MCP_AA": 0.30000001192092896, + "right_ring_PIP": 1.5499999523162842, + "right_ring_DIP": 1.2000000476837158, + "right_pinky_MCP_FE": 0.10000000149011612, + "right_pinky_MCP_AA": 0.30000001192092896, + "right_pinky_PIP": 1.5499999523162842, + "right_pinky_DIP": 1.2000000476837158, + "left_pinky_CMC": 0.10000000149011612, + "right_pinky_CMC": 0.10000000149011612, +} +H2_OPEN_JOINT_POS = { + **H2_PINCH_JOINT_POS, + # The index stays stationary while the pre-unfolded thumb closes from this near-pinch reset. + "left_thumb_CMC_FE": 1.8749698686599732, + "left_thumb_CMC_AA": 0.27846200197935106, + "left_thumb_MCP_AA": -0.0139111201092601, + "right_thumb_CMC_FE": 1.8719424211978912, + "right_thumb_CMC_AA": 0.2733340892195702, + "right_thumb_MCP_AA": 0.0021895832382142384, +} +FINGER_JOINT_NAMES = [ + f"{side}_{joint}" + for side in ("L", "R") + for joint in ( + "thumb_proximal_yaw_joint", + "thumb_proximal_pitch_joint", + "thumb_intermediate_joint", + "thumb_distal_joint", + "index_proximal_joint", + "index_intermediate_joint", + "middle_proximal_joint", + "middle_intermediate_joint", + "ring_proximal_joint", + "ring_intermediate_joint", + "pinky_proximal_joint", + "pinky_intermediate_joint", + ) +] + + +@configclass +class H1ArticulationCfg(ArticulationCfg): + """Fixed-base H1 with SDF hand collisions and a localized grasp material.""" + + def _post_spawn(self, stage: Usd.Stage) -> None: + super()._post_spawn(stage) + from pxr import UsdGeom, UsdPhysics # noqa: PLC0415 + + from isaaclab.sim.schemas import apply_namespaced # noqa: PLC0415 + from isaaclab.sim.spawners.materials.physics_materials import ( # noqa: PLC0415 + spawn_physics_material_from_fragments, + ) + + root_path = self.spawn.spawn_path if self.spawn is not None and self.spawn.spawn_path else self.prim_path + meshes = sim_utils.get_all_matching_child_prims( + root_path, + predicate=lambda prim: prim.IsA(UsdGeom.Mesh), + stage=stage, + ) + for mesh in meshes: + mesh_path = mesh.GetPath().pathString + if "/left_hand_link/" in mesh_path or "/right_hand_link/" in mesh_path: + usd_mesh = UsdGeom.Mesh(mesh) + usd_mesh.CreateDisplayColorAttr([(0.0100228, 0.0100228, 0.0100228)]) + usd_mesh.CreateDisplayOpacityAttr([1.0]) + + _configure_robot_colliders(root_path, stage) + + # VBD geometrically mixes shape and cloth friction. Author the shape + # coefficient for an effective 1.2 grip, not the former artificial 4.47. + grasp_material_path = f"{root_path}/GraspMaterial" + spawn_physics_material_from_fragments( + grasp_material_path, + rigid_material( + density=None, + friction=GRIP_FRICTION**2 / CLOTH_FRICTION, + contact_stiffness=8.0e3, + contact_damping=2.0e1, + ), + stage=stage, + ) + grasp_roots = {"L_thumb_proximal_base", "L_index_proximal", "R_thumb_proximal_base", "R_index_proximal"} + finger_prims = sim_utils.get_all_matching_child_prims( + root_path, + predicate=lambda prim: prim.GetName() in grasp_roots, + stage=stage, + ) + if len(finger_prims) != len(grasp_roots): + raise RuntimeError(f"Expected {len(grasp_roots)} H1 grasp roots, found {len(finger_prims)}") + for prim in finger_prims: + sim_utils.bind_physics_material(prim.GetPath(), grasp_material_path, stage=stage) + # Millimeter-scale contact skins must not push the sheet out of a + # physical pinch whose closed-jaw gap is only 1.5--1.8 mm. + for collider in sim_utils.get_all_matching_child_prims( + prim.GetPath().pathString, + predicate=lambda child: child.HasAPI(UsdPhysics.CollisionAPI), + stage=stage, + ): + apply_namespaced(NewtonCollisionCfg(contact_margin=0.0002), collider.GetPath().pathString, stage) + + +def _configure_robot_colliders(root_path: str, stage: Usd.Stage) -> None: + """Give robot meshes the SDF representation required by full-surface cloth contact.""" + from pxr import UsdGeom, UsdPhysics # noqa: PLC0415 + + from isaaclab.sim.schemas import apply_namespaced # noqa: PLC0415 + + meshes = sim_utils.get_all_matching_child_prims( + root_path, + predicate=lambda prim: prim.IsA(UsdGeom.Mesh) and prim.HasAPI(UsdPhysics.CollisionAPI), + stage=stage, + ) + for mesh in meshes: + mesh.RemoveAppliedSchema("NewtonMeshCollisionAPI") + UsdPhysics.MeshCollisionAPI(mesh).GetApproximationAttr().Set("none") + apply_namespaced( + NewtonSDFCollisionCfg(sdf_max_resolution=64, sdf_padding=0.012), mesh.GetPath().pathString, stage + ) + + +def enable_h2_fingertip_contacts( + builder: ModelBuilder, world_index: int, world_position: np.ndarray, world_quaternion: np.ndarray +) -> None: + """Enable opposing native fingertip contacts, preserving other robot collision exclusions. + + Register this initialization callback with ``newton_builder_world_hook`` during scene replication. + """ + from newton import ShapeFlags # noqa: PLC0415 + + root = f"/World/envs/env_{world_index}/Robot" + pairs = set() + for side in ("left", "right"): + indices = [] + for finger in ("thumb", "index"): + prefix = f"{root}/{side}_{finger}_DP/" + matches = [ + index + for index, label in enumerate(builder.shape_label) + if label.startswith(prefix) + and "/collisions/elastomer_" in label + and builder.shape_flags[index] & ShapeFlags.COLLIDE_SHAPES + ] + if len(matches) != 1: + raise RuntimeError(f"Expected one H2 native fingertip skin under {prefix}, found {len(matches)}.") + indices.append(matches[0]) + pairs.add(tuple(sorted(indices))) + builder.shape_collision_filter_pairs = [pair for pair in builder.shape_collision_filter_pairs if pair not in pairs] + + +def prepare_native_h2_contacts( + builder: ModelBuilder, + world_index: int, + world_position: np.ndarray, + world_quaternion: np.ndarray, + *, + device: str, + mesh_sdf_cache: dict[tuple, Mesh], +) -> None: + """Prepare native H2 mesh SDFs and enable opposing native fingertip contact. + + Register with ``newton_builder_world_hook`` during replication, before model finalization. + Unit shape scales retain the imported grid settings without changing distance units. + Copies protect geometry shared with source templates. + + Args: + builder: Cumulative Newton builder containing the newly appended world. + world_index: Replication world index. + world_position: World translation [m], supplied by the public hook. + world_quaternion: World orientation in xyzw order, supplied by the hook. + device: Resolved CUDA device used for subsequent model finalization. + mesh_sdf_cache: Empty at replication entry; shared by this run's callbacks. + """ + from newton import GeoType, Mesh, ShapeFlags # noqa: PLC0415 + + root = f"/World/envs/env_{world_index}/Robot/" + required_flags = ShapeFlags.COLLIDE_SHAPES | ShapeFlags.COLLIDE_PARTICLES + for shape, label in enumerate(builder.shape_label): + if not label.startswith(root) or not builder.shape_flags[shape] & required_flags: + continue + if builder.shape_type[shape] == GeoType.CONVEX_MESH: + raise RuntimeError(f"Expected unapproximated native H2 collision geometry: {label}") + if builder.shape_type[shape] != GeoType.MESH: + continue + if builder.shape_flags[shape] & required_flags != required_flags: + raise RuntimeError(f"Native H2 Mesh requires both collision flags for attached-SDF consumption: {label}") + if tuple(builder.shape_scale[shape]) != (1.0, 1.0, 1.0): + raise RuntimeError(f"Native H2 contact preparation requires unit mesh scale: {label}") + source = builder.shape_source[shape] + if not isinstance(source, Mesh) or source.sdf is not None: + raise RuntimeError(f"Expected an imported native H2 Mesh without an attached SDF: {label}") + + resolution = builder.shape_sdf_max_resolution[shape] + voxel_size = builder.shape_sdf_target_voxel_size[shape] + if resolution is None and voxel_size is None: + raise RuntimeError(f"Native H2 Mesh has no imported SDF cooking resolution: {label}") + narrow_band = tuple(builder.shape_sdf_narrow_band_range[shape]) + padding = builder.shape_sdf_padding[shape] + if padding is None: + # Match Newton's deferred mesh-cooking fallback, not build_sdf's default 0.05 m padding. + padding = builder.shape_gap[shape] + if builder.shape_flags[shape] & ShapeFlags.HYDROELASTIC: + padding += builder.shape_margin[shape] + texture_format = builder.shape_sdf_texture_format[shape] + paired_samples = builder.sdf_texture_paired_samples + key = (id(source), resolution, voxel_size, narrow_band, padding, texture_format, paired_samples, device) + cooked = mesh_sdf_cache.get(key) + if cooked is None: + cooked = source.copy(recompute_inertia=False) + # Stock Newton 1.6.1 leaves baked SDF gradients unnormalized in soft contact. + # Public unbaked cooking uses its normalized runtime-scale branch instead. + cooked.build_sdf( + device=device, + narrow_band_range=narrow_band, + target_voxel_size=voxel_size, + max_resolution=resolution, + margin=padding, + shape_margin=0.0, + scale=None, + texture_format=texture_format, + paired_samples=paired_samples, + ) + mesh_sdf_cache[key] = cooked + builder.shape_source[shape] = cooked + + enable_h2_fingertip_contacts(builder, world_index, world_position, world_quaternion) + + +@configclass +class H2ArticulationCfg(ArticulationCfg): + """Fixed-base H2 Plus with native, contact-only SHARPA fingertips.""" + + def _post_spawn(self, stage: Usd.Stage) -> None: + super()._post_spawn(stage) + root_path = self.spawn.spawn_path if self.spawn is not None and self.spawn.spawn_path else self.prim_path + _configure_robot_colliders(root_path, stage) + from pxr import UsdGeom, UsdPhysics # noqa: PLC0415 + + from isaaclab.sim.schemas import apply_namespaced # noqa: PLC0415 + from isaaclab.sim.spawners.materials.physics_materials import ( # noqa: PLC0415 + spawn_physics_material_from_fragments, + ) + + grasp_material = rigid_material( + friction=GRIP_FRICTION**2 / CLOTH_FRICTION, + contact_stiffness=1.0e4, + contact_damping=20.0, + ) + grasp_material_path = f"{root_path}/GraspMaterial" + spawn_physics_material_from_fragments(grasp_material_path, grasp_material, stage=stage) + + # Use a precision-contact skin across the entire hand. A 2 mm margin + # on unused fingers can push the hem before the visible surfaces touch. + for mesh in sim_utils.get_all_matching_child_prims( + root_path, + predicate=lambda prim: prim.IsA(UsdGeom.Mesh) and prim.HasAPI(UsdPhysics.CollisionAPI), + stage=stage, + ): + mesh_path = mesh.GetPath().pathString + if any( + f"/{side}_{part}_" in mesh_path + for side in ("left", "right") + for part in ("hand", "thumb", "index", "middle", "ring", "pinky") + ): + apply_namespaced(NewtonCollisionCfg(contact_margin=0.0002), mesh_path, stage) + if any(f"/{side}_{finger}_DP/" in mesh_path for side in ("left", "right") for finger in ("thumb", "index")): + # Bind the grip material to native rubber, leaving plastic unchanged. + if "/collisions/elastomer_" in mesh_path: + # Resolve the millimeter-scale pinch without refining the whole robot. + apply_namespaced(NewtonSDFCollisionCfg(sdf_max_resolution=128, sdf_padding=0.012), mesh_path, stage) + sim_utils.bind_physics_material(mesh.GetPath(), grasp_material_path, stage=stage) + + +H2_CFG = H2ArticulationCfg( + prim_path="{ENV_REGEX_NS}/Robot", + spawn=sim_utils.UsdFileCfg( + usd_path=H2_PLUS_USD, + make_uninstanceable=True, + fix_root_link=True, + articulation_props={"/pelvis": [NewtonArticulationCfg(self_collision_enabled=False)]}, + rigid_props={"/pelvis": [UsdPhysicsRigidBodyCfg(kinematic_enabled=True)]}, + collision_props=collision_properties(), + physics_material=rigid_material(friction=0.50, contact_stiffness=1.0e3, contact_damping=1.0e-2), + ), + # A grounded shallow stance clears the pelvis from the cloth while keeping both soles flat. + init_state=ArticulationCfg.InitialStateCfg( + pos=(-0.9, 0.0, 0.9297120821774005), + joint_pos={ + "(waist|head)_.*": 0.0, + "(left|right)_hip_pitch_joint": -0.5, + "(left|right)_hip_roll_joint": 0.0, + "(left|right)_hip_yaw_joint": 0.0, + "(left|right)_knee_joint": 1.0, + "(left|right)_ankle_pitch_joint": -0.5702976584434509, + "left_ankle_roll_joint": 0.06301647424697876, + "right_ankle_roll_joint": -0.06301647424697876, + "left_shoulder_pitch_joint": -0.6441314816474915, + "left_shoulder_roll_joint": 0.16728058457374573, + "left_shoulder_yaw_joint": -0.017775176092982292, + "left_elbow_joint": 1.1064139604568481, + "left_wrist_roll_joint": -1.6087414026260376, + "left_wrist_pitch_joint": -0.11290059983730316, + "left_wrist_yaw_joint": 0.35488787293434143, + "right_shoulder_pitch_joint": -0.6399306058883667, + "right_shoulder_roll_joint": -0.10742256790399551, + "right_shoulder_yaw_joint": -0.38055047392845154, + "right_elbow_joint": 1.0646650791168213, + "right_wrist_roll_joint": 1.1797376871109009, + "right_wrist_pitch_joint": 0.06415408104658127, + "right_wrist_yaw_joint": -0.3517419993877411, + **H2_OPEN_JOINT_POS, + }, + ), + actuators={ + "body": ImplicitActuatorCfg( + joint_names_expr=[r"(left|right)_(hip|knee|ankle|shoulder|elbow)_.*", r"(waist|head)_.*"], + stiffness=5.0e4, + damping=5.0e2, + ), + "wrists": ImplicitActuatorCfg( + joint_names_expr=[r"(left|right)_wrist_.*"], + stiffness=None, + damping={ + "left_wrist_roll_joint": 32.0, + "left_wrist_pitch_joint": 21.7, + "left_wrist_yaw_joint": 16.2, + "right_wrist_roll_joint": 29.7, + "right_wrist_pitch_joint": 19.4, + "right_wrist_yaw_joint": 14.8, + }, + ), + "fingers": ImplicitActuatorCfg( + joint_names_expr=[r"(left|right)_(thumb|index|middle|ring|pinky)_.*"], + # Simulation drives only: direct VBD does not enforce native hardware torque caps. + stiffness=400.0, + damping=0.3, + ), + }, +) + + +H1_CFG = H1ArticulationCfg( + prim_path="{ENV_REGEX_NS}/Robot", + articulation_root_prim_path="/fix_base_joint", + spawn=sim_utils.UsdFileCfg( + func=spawn_h1_from_usd, + usd_path="", + make_uninstanceable=True, + fix_root_link=True, + # A compliant VBD world joint alone lets the base bounce under manipulation loads. + rigid_props={"/Geometry/pelvis": [sim_utils.UsdPhysicsRigidBodyCfg(kinematic_enabled=True)]}, + collision_props=collision_properties(), + physics_material=rigid_material(friction=0.50, contact_stiffness=1.0e3, contact_damping=1.0e-2), + ), + init_state=ArticulationCfg.InitialStateCfg( + pos=(-0.75, 0.0, H1_STANDING_HEIGHT), + joint_pos={ + ".*(hip|knee|ankle).*": 0.0, + "torso_joint": 0.0, + "left_shoulder_pitch_joint": -0.333745, + "left_shoulder_roll_joint": 1.362674, + "left_shoulder_yaw_joint": -1.246960, + "left_elbow_joint": -0.403194, + "left_hand_joint": -1.755706, + "right_shoulder_pitch_joint": -0.347129, + "right_shoulder_roll_joint": -1.375690, + "right_shoulder_yaw_joint": 1.260851, + "right_elbow_joint": -0.409848, + "right_hand_joint": 1.769167, + }, + ), + actuators={ + "body": ImplicitActuatorCfg( + joint_names_expr=[r"(?!torso_joint$)(?![LR]_(?:thumb|index|middle|ring|pinky)_).+"], + stiffness=5.0e4, + damping=5.0e2, + ), + "torso": ImplicitActuatorCfg( + joint_names_expr=["torso_joint"], + stiffness=2.0e5, + damping=2.0e3, + ), + "fingers": ImplicitActuatorCfg( + joint_names_expr=[r"[LR]_(?:thumb|index|middle|ring|pinky)_.+"], + stiffness=1.0e3, + damping=2.0, + ), + }, +) + + +GROUND_CFG = AssetBaseCfg( + prim_path="/World/defaultGroundPlane", + spawn=sim_utils.GroundPlaneCfg(), + collision_group=-1, +) +TABLE_CFG = AssetBaseCfg( + prim_path="{ENV_REGEX_NS}/Table", + spawn=VisualTableUsdFileCfg( + usd_path=TABLE_USD, + scale=TABLE_SCALE, + make_uninstanceable=True, + ), + init_state=AssetBaseCfg.InitialStateCfg(pos=(TABLE_CENTER_X, 0.0, 0.0)), +) +TABLETOP_COLLIDER_CFG = AssetBaseCfg( + prim_path="{ENV_REGEX_NS}/Tabletop", + spawn=tabletop_collider_cfg( + (*TABLE_SIZE, TABLETOP_THICKNESS), + # Newton's geometric-mean mixing gives 0.3 cloth-table friction. + friction=0.45, + contact_stiffness=1.0e4, + contact_damping=1.0e1, + ), + init_state=AssetBaseCfg.InitialStateCfg(pos=(TABLE_CENTER_X, 0.0, TABLE_TOP_Z - 0.5 * TABLETOP_THICKNESS)), +) +TABLE_SUPPORT_CFGS = { + f"table_leg_{index}": AssetBaseCfg( + prim_path=f"{{ENV_REGEX_NS}}/TableLeg{index}", + spawn=tabletop_collider_cfg( + (0.024, 0.024, TABLE_TOP_Z - TABLETOP_THICKNESS), + friction=0.45, + contact_stiffness=1.0e4, + contact_damping=1.0e1, + ), + init_state=AssetBaseCfg.InitialStateCfg(pos=(TABLE_CENTER_X + x, y, 0.5 * (TABLE_TOP_Z - TABLETOP_THICKNESS))), + ) + # Four slender legs replace the old panel proxies; no invisible wall below the hem. + for index, (x, y) in enumerate(((-0.224, -0.403), (-0.224, 0.403), (0.224, -0.403), (0.224, 0.403))) +} + + +@configclass +class TableclothCfg(DeformableObjectCfg): + """Smooth the rendered cloth without refining the physics mesh.""" + + def _post_spawn(self, stage: Usd.Stage) -> None: + super()._post_spawn(stage) + from pxr import UsdGeom # noqa: PLC0415 + + root_path = self.spawn.spawn_path if self.spawn is not None and self.spawn.spawn_path else self.prim_path + for prim in sim_utils.get_all_matching_child_prims( + root_path, predicate=lambda prim: prim.IsA(UsdGeom.Mesh), stage=stage + ): + UsdGeom.Mesh(prim).GetSubdivisionSchemeAttr().Set(UsdGeom.Tokens.catmullClark) + + +CLOTH_CFG = TableclothCfg( + prim_path="{ENV_REGEX_NS}/Cloth", + spawn=sim_utils.MeshRectangleCfg( + # Balanced front/back overhangs provide a free hem below the countertop. + size=(0.56, TABLE_SIZE[1]), + edge_refinement=64, + deformable_props=NewtonDeformableBodyPropertiesCfg(), + visual_material=sim_utils.PreviewSurfaceCfg(diffuse_color=(0.76, 0.05, 0.05)), + physics_material=NewtonSurfaceDeformableBodyMaterialCfg( + density=0.24, + particle_radius=0.001, + tri_ke=5.0e4, + tri_ka=5.0e4, + tri_kd=5.0e1, + edge_ke=0.01, + edge_kd=5.0e-3, + ), + ), + init_state=DeformableObjectCfg.InitialStateCfg(pos=(0.0, 0.0, CLOTH_Z)), +) +BOWL_CFG = RigidObjectCfg( + prim_path="{ENV_REGEX_NS}/Bowl", + spawn=TablewareUsdFileCfg( + usd_path=BOWL_USD, + mass=0.45, + collision_proxy_cfg=sim_utils.CylinderCfg( + radius=BOWL_LOCAL_RADIUS, + height=BOWL_LOCAL_HEIGHT, + visible=False, + collision_props=collision_properties(contact_margin=0.0002, contact_gap=0.0), + physics_material=rigid_material(friction=0.30), + ), + collision_proxy_position=(0.0, 0.0, BOWL_LOCAL_Z_MIN + 0.5 * BOWL_LOCAL_HEIGHT), + scale=(BOWL_SCALE,) * 3, + ), + init_state=RigidObjectCfg.InitialStateCfg( + pos=(0.08, -0.07, CLOTH_Z + TABLEWARE_CLEARANCE - BOWL_SCALE * BOWL_LOCAL_Z_MIN), rot=(0.0, 0.0, 0.0, 1.0) + ), +) +GLASS_CFG = RigidObjectCfg( + prim_path="{ENV_REGEX_NS}/Glass", + spawn=TablewareUsdFileCfg( + usd_path=WINE_GLASS_USD, + mass=0.35, + collision_proxy_cfg=sim_utils.CylinderCfg( + radius=0.040, + height=0.006, + visible=False, + collision_props=collision_properties(contact_margin=0.0002, contact_gap=0.0), + physics_material=rigid_material(friction=0.15), + ), + collision_proxy_position=(0.0, 0.0, 0.003), + center_of_mass=WINE_GLASS_CENTER_OF_MASS, + diagonal_inertia=WINE_GLASS_DIAGONAL_INERTIA, + # A base-only proxy lets the visual stem/cup penetrate the ground after a fall. + additional_collision_proxy_cfgs=( + sim_utils.CylinderCfg( + radius=0.004, + height=0.096, + visible=False, + collision_props=collision_properties(contact_margin=0.0002, contact_gap=0.0), + physics_material=rigid_material(friction=0.15), + ), + sim_utils.CapsuleCfg( + radius=0.041, + height=0.045, + visible=False, + collision_props=collision_properties(contact_margin=0.0002, contact_gap=0.0), + physics_material=rigid_material(friction=0.15), + ), + ), + additional_collision_proxy_positions=((0.0, 0.0, 0.054), (0.0, 0.0, 0.165)), + visual_color=(0.55, 0.75, 0.90), + visual_opacity=0.90, + visual_roughness=0.12, + ), + init_state=RigidObjectCfg.InitialStateCfg( + pos=(0.10, 0.13, CLOTH_Z + TABLEWARE_CLEARANCE - WINE_GLASS_LOCAL_Z_MIN), rot=(0.0, 0.0, 0.0, 1.0) + ), +) +FORK_CFG = RigidObjectCfg( + prim_path="{ENV_REGEX_NS}/Fork", + spawn=TablewareUsdFileCfg( + usd_path=FORK_USD, + mass=0.07, + collision_proxy_cfg=sim_utils.CuboidCfg( + size=(0.014, 0.160, 0.003), + visible=False, + collision_props=collision_properties(contact_margin=0.0002, contact_gap=0.0), + physics_material=rigid_material(friction=0.25), + ), + collision_proxy_position=(0.0, 0.0092, 0.0016), + scale=(FORK_SCALE,) * 3, + center_of_mass=FORK_CENTER_OF_MASS, + diagonal_inertia=FORK_DIAGONAL_INERTIA, + ), + init_state=RigidObjectCfg.InitialStateCfg( + pos=(0.12, -0.22, CLOTH_Z + TABLEWARE_CLEARANCE - FORK_SCALE * FORK_LOCAL_Z_MIN), rot=FORK_ROTATION + ), +) +LIGHT_CFG = AssetBaseCfg( + prim_path="/World/Light", + spawn=sim_utils.DomeLightCfg(intensity=2500.0, color=(0.75, 0.75, 0.75)), +) + + +TABLECLOTH_ASSETS = { + "robot": H1_CFG, + "table": TABLE_CFG, + "tabletop": TABLETOP_COLLIDER_CFG, + **TABLE_SUPPORT_CFGS, + "cloth": CLOTH_CFG, + "bowl": BOWL_CFG, + "glass": GLASS_CFG, + "fork": FORK_CFG, +} diff --git a/source/isaaclab_contrib/isaaclab_contrib/controllers/tablecloth.py b/source/isaaclab_contrib/isaaclab_contrib/controllers/tablecloth.py new file mode 100644 index 000000000000..4b8095e7fd18 --- /dev/null +++ b/source/isaaclab_contrib/isaaclab_contrib/controllers/tablecloth.py @@ -0,0 +1,1047 @@ +# Copyright (c) 2022-2026, The Isaac Lab Project Developers (https://github.com/isaac-sim/IsaacLab/blob/main/CONTRIBUTORS.md). +# All rights reserved. +# +# SPDX-License-Identifier: BSD-3-Clause + + +"""GPU state machine and Newton IK for the fixed-base tablecloth example.""" + +from __future__ import annotations + +import math +from collections.abc import Sequence +from typing import TYPE_CHECKING + +import newton +import numpy as np +import warp as wp +from isaaclab_newton.controllers.ik import ( + NewtonIKJointLimitObjectiveCfg, + NewtonIKPoseObjectiveCfg, + NewtonIKSolver, + NewtonIKSolverCfg, +) + +if TYPE_CHECKING: + from isaaclab.assets import Articulation + +from isaaclab_contrib.assets.tablecloth import ( + FINGER_JOINT_NAMES, + H2_HAND_OFFSETS, + H2_OPEN_JOINT_POS, + H2_PINCH_JOINT_POS, + HAND_OFFSETS, +) + +PULL_DISTANCE = 0.40 +H2_PULL_DISTANCE = 0.45 +PULL_TIME_FACTOR = 1.875 +POSE_COMPONENTS = 21 + +FINGERS_OPEN = (0.0, 0.0, 0.0, 0.0, 0.0) +# Tuck unused fingers while above the table so they do not obstruct the pinch. +FINGERS_CURLED = (0.0, 0.0, 0.0, 0.0, 1.50) +FINGERS_INSERTED = (0.0, 0.0, 0.75, 0.75, 1.50) +FINGERS_PREPINCHED = (0.0, 0.0, 0.737080, 0.713855, 1.50) +FINGERS_PINCHED = (1.0, 1.0, 0.737080, 0.713855, 1.50) + +PHASE_DURATIONS = (0.50, 0.80, 0.60, 0.50, 0.60, 0.60, 0.30, 0.30) +H2_PHASE_DURATIONS = (0.08, 0.05, 0.05, 0.05, 0.35, 0.15, 0.30, 0.30) +PHASE_KEYFRAMES = ((0, 0), (0, 2), (2, 4), (4, 6), (6, 8), (8, 8), (8, 10), (10, 12)) +H2_PHASE_KEYFRAMES = ((0, 0), (0, 2), (2, 4), (4, 6), (6, 8), (8, 10), (10, 12), (12, 12)) +PHASE_FINGERS = ( + (FINGERS_OPEN, FINGERS_OPEN), + (FINGERS_OPEN, FINGERS_CURLED), + (FINGERS_CURLED, FINGERS_INSERTED), + (FINGERS_INSERTED, FINGERS_INSERTED), + (FINGERS_INSERTED, FINGERS_PREPINCHED), + (FINGERS_PREPINCHED, FINGERS_PINCHED), + (FINGERS_PINCHED, FINGERS_PINCHED), + (FINGERS_PINCHED, FINGERS_PINCHED), +) +STATE_PULL = wp.constant(len(PHASE_DURATIONS)) +STATE_HOLD = wp.constant(len(PHASE_DURATIONS) + 1) + +# Positions are expressed in the fixed pelvis frame. +HAND_KEYFRAMES = ( + (0.27, 0.24, 0.140), + (0.27, -0.24, 0.140), + (0.43, 0.361, 0.060), + (0.43, -0.372, 0.060), + (0.43, 0.361, -0.0352), + (0.43, -0.372, -0.0292), + (0.530, 0.361, -0.0352), + (0.530, -0.372, -0.0292), + (0.530, 0.361, -0.0352), + (0.530, -0.372, -0.0292), + (0.500, 0.361, -0.0352), + (0.500, -0.372, -0.0292), + (0.500, 0.361, -0.0052), + (0.500, -0.372, -0.0052), +) +HAND_ROTATIONS = ( + (-0.09022585, 0.46115433, 0.03007528, 0.88220828), + (0.09023000, 0.46114998, -0.03008000, 0.88220997), +) +# Feasible corner-grasp attitudes for H1's five-DOF arms, calibrated with forward kinematics. +GRASP_HAND_ROTATIONS = ( + (-0.0679863393, 0.3806174397, 0.0725343823, 0.9193731546), + (0.0912486315, 0.3623600602, -0.0816145539, 0.9239633083), +) +FINGER_CLOSED_VALUES = ( + 1.273907, + 0.160957, + 0.369535, + 0.892908, + 1.2, + 1.2, + 1.0, + 1.0, + 1.0, + 1.0, + 1.0, + 1.0, + 1.192278, + 0.195421, + 0.400690, + 0.679765, + 1.2, + 1.2, + 1.0, + 1.0, + 1.0, + 1.0, + 1.0, + 1.0, +) +FINGER_GROUPS = (0, 0, 0, 0, 2, 2, 4, 4, 4, 4, 4, 4, 1, 1, 1, 1, 3, 3, 4, 4, 4, 4, 4, 4) +# Start with the native index fingertips beneath the hem, close the thumbs, then lift 2 cm. +H2_HAND_KEYFRAMES = ( + (0.5628056417, 0.2475379991, 0.1070655547), + (0.5628101729, -0.2475441579, 0.1070715950), + (0.5628056417, 0.2475379991, 0.1070655547), + (0.5628101729, -0.2475441579, 0.1070715950), + (0.5628056417, 0.2475379991, 0.1070655547), + (0.5628101729, -0.2475441579, 0.1070715950), + (0.5628056417, 0.2475379991, 0.1070655547), + (0.5628101729, -0.2475441579, 0.1070715950), + (0.5628056417, 0.2475379991, 0.1070655547), + (0.5628101729, -0.2475441579, 0.1070715950), + (0.5628056417, 0.2475379991, 0.1270655547), + (0.5628101729, -0.2475441579, 0.1270715950), + (0.5628056417, 0.2475379991, 0.1270655547), + (0.5628101729, -0.2475441579, 0.1270715950), +) +# Control the complete wrist pose: a free roll can put the proximal fingers inside the table. +H2_READY_HAND_ROTATIONS = ( + (-0.9239897494, 0.0197845272, -0.3665561809, 0.1071824696), + (0.9231279041, 0.0512161522, 0.3652593359, 0.1086158183), +) +H2_GRASP_HAND_ROTATIONS = H2_READY_HAND_ROTATIONS +H2_PULL_HAND_ROTATIONS = ( + (-0.9524211656, 0.0290508089, -0.2846303110, 0.1050502728), + (0.9514495724, 0.0604877516, 0.2834135157, 0.1037387205), +) +# Keep the native pinch orientation fixed until the pull begins. +H2_HAND_ROTATIONS = H2_GRASP_HAND_ROTATIONS * 7 +# The index joints are identical in the asset's open and closed poses; only the thumbs close. +H2_OPEN = (0.0, 0.0, 0.0, 0.0, 1.0) +H2_CLOSED = (1.0, 1.0, 1.0, 1.0, 1.0) +H2_PHASE_FINGERS = ( + (H2_OPEN, H2_CLOSED), + *((H2_CLOSED, H2_CLOSED),) * 7, +) + + +@wp.func +def _smoothstep(value: float) -> float: + value = wp.clamp(value, 0.0, 1.0) + return value * value * (3.0 - 2.0 * value) + + +@wp.func +def _minimum_jerk(value: float) -> float: + value = wp.clamp(value, 0.0, 1.0) + return value * value * value * (10.0 + value * (-15.0 + 6.0 * value)) + + +@wp.func +def _pull_offset(distance: float) -> wp.vec3: + # This arc preserves the grasp attitude within the arms' reachable pose manifold. + radius = 0.3072 + center = 0.2248 + height = wp.sqrt(radius * radius - center * center) - wp.sqrt( + radius * radius - (distance - center) * (distance - center) + ) + return wp.vec3(-distance, 0.0, height) + + +@wp.func +def _interpolate_rotation(start: wp.vec4, end: wp.vec4, alpha: float) -> wp.vec4: + # Quaternion signs describe the same pose; always take the shorter rotation. + if wp.dot(start, end) < 0.0: + end = -end + return wp.normalize(wp.lerp(start, end, alpha)) + + +@wp.kernel +def _infer_state_machine( + dt: float, + pull_speed: wp.array(dtype=float), + keyframes: wp.array(dtype=wp.vec3), + hand_rotations: wp.array(dtype=wp.vec4), + pull_hand_rotations: wp.array(dtype=wp.vec4), + rotate_during_pull: int, + torso_pose: wp.array2d(dtype=float), + phase_durations: wp.array(dtype=float), + phase_start_keyframes: wp.array(dtype=wp.int32), + phase_end_keyframes: wp.array(dtype=wp.int32), + phase_start_fingers: wp.array(dtype=float), + phase_end_fingers: wp.array(dtype=float), + finger_open_values: wp.array(dtype=float), + finger_closed_values: wp.array(dtype=float), + pull_arc_scale: float, + final_keyframe: int, + pull_limit: float, + finger_groups: wp.array(dtype=wp.int32), + finger_fractions: wp.array2d(dtype=float), + state: wp.array(dtype=wp.int32), + state_time: wp.array(dtype=float), + pull_distance: wp.array(dtype=float), + commands: wp.array2d(dtype=float), +): + env_id = wp.tid() + current_state = state[env_id] + elapsed = state_time[env_id] + dt + + if current_state < STATE_PULL and elapsed >= phase_durations[current_state]: + current_state += 1 + elapsed = 0.0 + + left = keyframes[0] + right = keyframes[1] + left_rotation = hand_rotations[0] + right_rotation = hand_rotations[1] + if current_state < STATE_PULL: + alpha = _smoothstep(elapsed / phase_durations[current_state]) + start_keyframe = phase_start_keyframes[current_state] + end_keyframe = phase_end_keyframes[current_state] + left = wp.lerp(keyframes[start_keyframe], keyframes[end_keyframe], alpha) + right = wp.lerp(keyframes[start_keyframe + 1], keyframes[end_keyframe + 1], alpha) + left_rotation = _interpolate_rotation(hand_rotations[start_keyframe], hand_rotations[end_keyframe], alpha) + right_rotation = _interpolate_rotation( + hand_rotations[start_keyframe + 1], hand_rotations[end_keyframe + 1], alpha + ) + for group in range(5): + index = current_state * 5 + group + finger_fractions[env_id, group] = wp.lerp(phase_start_fingers[index], phase_end_fingers[index], alpha) + elif current_state == STATE_PULL: + # Zero endpoint velocity and acceleration prevent a sudden load on the + # pinch. The quintic's peak derivative is 1.875, preserving --speeds. + duration = PULL_TIME_FACTOR * pull_limit / pull_speed[env_id] + distance = pull_limit * _minimum_jerk(elapsed / duration) + pull_distance[env_id] = distance + offset = _pull_offset(distance) + offset[2] *= pull_arc_scale + left = keyframes[final_keyframe] + offset + right = keyframes[final_keyframe + 1] + offset + left_rotation = hand_rotations[final_keyframe] + right_rotation = hand_rotations[final_keyframe + 1] + if rotate_during_pull != 0: + fraction = distance / pull_limit + left_rotation = _interpolate_rotation(left_rotation, pull_hand_rotations[0], fraction) + right_rotation = _interpolate_rotation(right_rotation, pull_hand_rotations[1], fraction) + for group in range(5): + finger_fractions[env_id, group] = phase_end_fingers[(STATE_PULL - 1) * 5 + group] + if distance >= pull_limit: + current_state = STATE_HOLD + else: + distance = pull_distance[env_id] + offset = _pull_offset(distance) + offset[2] *= pull_arc_scale + left = keyframes[final_keyframe] + offset + right = keyframes[final_keyframe + 1] + offset + left_rotation = hand_rotations[final_keyframe] + right_rotation = hand_rotations[final_keyframe + 1] + if rotate_during_pull != 0: + left_rotation = pull_hand_rotations[0] + right_rotation = pull_hand_rotations[1] + for group in range(5): + finger_fractions[env_id, group] = phase_end_fingers[(STATE_PULL - 1) * 5 + group] + + for axis in range(3): + commands[env_id, axis] = left[axis] + commands[env_id, 7 + axis] = right[axis] + for axis in range(4): + commands[env_id, 3 + axis] = left_rotation[axis] + commands[env_id, 10 + axis] = right_rotation[axis] + for axis in range(7): + commands[env_id, 14 + axis] = torso_pose[env_id, axis] + + for finger in range(finger_closed_values.shape[0]): + fraction = finger_fractions[env_id, finger_groups[finger]] + commands[env_id, POSE_COMPONENTS + finger] = wp.lerp( + finger_open_values[finger], finger_closed_values[finger], fraction + ) + + state[env_id] = current_state + state_time[env_id] = elapsed + + +class _GraspStateMachine: + """Advance calibrated hand poses and finger targets using only Warp buffers.""" + + def __init__( + self, dt: float, torso_pose: wp.array, speeds: tuple[float, ...], device: str, robot_type: str + ) -> None: + self.num_envs = len(speeds) + self._warp_device = device + self.dt = dt + self.pull_speed = wp.array(speeds, dtype=float, device=device) + if robot_type == "h2": + durations = H2_PHASE_DURATIONS + fingers = H2_PHASE_FINGERS + keyframes = H2_HAND_KEYFRAMES + open_values = tuple(H2_OPEN_JOINT_POS.values()) + closed_values = tuple(H2_PINCH_JOINT_POS.get(name, value) for name, value in H2_OPEN_JOINT_POS.items()) + groups_by_finger = {"left_thumb": 0, "right_thumb": 1, "left_index": 2, "right_index": 3} + groups = tuple(groups_by_finger.get("_".join(name.split("_")[:2]), 4) for name in H2_OPEN_JOINT_POS) + self._pull_arc_scale = 0.0 + self._pull_limit = H2_PULL_DISTANCE + phase_keyframes = H2_PHASE_KEYFRAMES + rotations = H2_HAND_ROTATIONS + else: + durations = PHASE_DURATIONS + fingers = PHASE_FINGERS + keyframes = HAND_KEYFRAMES + open_values = (0.0,) * len(FINGER_CLOSED_VALUES) + closed_values = FINGER_CLOSED_VALUES + groups = FINGER_GROUPS + self._pull_arc_scale = 1.0 + self._pull_limit = PULL_DISTANCE + phase_keyframes = PHASE_KEYFRAMES + rotations = (*(HAND_ROTATIONS * 2), *(GRASP_HAND_ROTATIONS * 5)) + if len(rotations) != len(keyframes): + raise ValueError("Each hand position keyframe requires a matching rotation.") + pull_rotations = H2_PULL_HAND_ROTATIONS if robot_type == "h2" else rotations[-2:] + self._rotate_during_pull = int(tuple(pull_rotations) != tuple(rotations[-2:])) + self._final_keyframe = len(keyframes) - 2 + phases = list(zip(durations, phase_keyframes, fingers, strict=True)) + self._keyframes = wp.array(keyframes, dtype=wp.vec3, device=self._warp_device) + self._hand_rotations = wp.array(rotations, dtype=wp.vec4, device=self._warp_device) + self._pull_hand_rotations = wp.array(pull_rotations, dtype=wp.vec4, device=self._warp_device) + self._torso_pose = torso_pose + self._phase_durations = wp.array([phase[0] for phase in phases], dtype=float, device=self._warp_device) + self._phase_start_keyframes = wp.array( + [phase[1][0] for phase in phases], dtype=wp.int32, device=self._warp_device + ) + self._phase_end_keyframes = wp.array( + [phase[1][1] for phase in phases], dtype=wp.int32, device=self._warp_device + ) + self._phase_start_fingers = wp.array( + [value for phase in phases for value in phase[2][0]], dtype=float, device=self._warp_device + ) + self._phase_end_fingers = wp.array( + [value for phase in phases for value in phase[2][1]], dtype=float, device=self._warp_device + ) + self._finger_open_values = wp.array(open_values, dtype=float, device=self._warp_device) + self._finger_closed_values = wp.array(closed_values, dtype=float, device=self._warp_device) + self._finger_groups = wp.array(groups, dtype=wp.int32, device=self._warp_device) + self._finger_fractions = wp.zeros((self.num_envs, 5), dtype=float, device=self._warp_device) + self._state = wp.zeros(self.num_envs, dtype=wp.int32, device=self._warp_device) + self._state_time = wp.zeros(self.num_envs, dtype=float, device=self._warp_device) + self._pull_distance = wp.zeros(self.num_envs, dtype=float, device=self._warp_device) + self._commands = wp.zeros((self.num_envs, POSE_COMPONENTS + len(closed_values)), dtype=float, device=device) + + def compute(self) -> None: + """Advance one frame without allocating buffers or reading device state on the host.""" + wp.launch( + _infer_state_machine, + dim=self.num_envs, + inputs=[ + self.dt, + self.pull_speed, + self._keyframes, + self._hand_rotations, + self._pull_hand_rotations, + self._rotate_during_pull, + self._torso_pose, + self._phase_durations, + self._phase_start_keyframes, + self._phase_end_keyframes, + self._phase_start_fingers, + self._phase_end_fingers, + self._finger_open_values, + self._finger_closed_values, + self._pull_arc_scale, + self._final_keyframe, + self._pull_limit, + self._finger_groups, + self._finger_fractions, + self._state, + self._state_time, + self._pull_distance, + self._commands, + ], + device=self._warp_device, + ) + + +@wp.kernel +def _seed_coordinates(current: wp.array2d(dtype=float), indices: wp.array(dtype=int), seed: wp.array2d(dtype=float)): + lane, joint = wp.tid() + if indices[joint] >= 0: + seed[lane, indices[joint]] = current[lane, joint] + + +@wp.kernel +def _clamp_ik_coordinates( + coordinates: wp.array2d(dtype=float), lower: wp.array(dtype=float), upper: wp.array(dtype=float) +): + lane, joint = wp.tid() + coordinates[lane, joint] = wp.clamp(coordinates[lane, joint], lower[joint], upper[joint]) + + +@wp.kernel +def _set_pose_targets( + poses: wp.array2d(dtype=float), + offset: int, + root: wp.transform, + positions: wp.array(dtype=wp.vec3), + rotations: wp.array(dtype=wp.vec4), +): + lane = wp.tid() + position = wp.vec3(poses[lane, offset], poses[lane, offset + 1], poses[lane, offset + 2]) + rotation = wp.quat( + poses[lane, offset + 3], poses[lane, offset + 4], poses[lane, offset + 5], poses[lane, offset + 6] + ) + positions[lane] = wp.transform_point(root, position) + result = wp.transform_get_rotation(root) * rotation + rotations[lane] = wp.vec4(result[0], result[1], result[2], result[3]) + + +@wp.kernel +def _set_elbow_position( + body_poses: wp.array(dtype=wp.transform), + roots: wp.array(dtype=int), + elbows: wp.array(dtype=int), + native_root: wp.transform, + guard_y: float, + states: wp.array(dtype=int), + times: wp.array(dtype=float), + durations: wp.array(dtype=float), + targets: wp.array(dtype=wp.vec3), +): + lane = wp.tid() + root_inverse = wp.transform_inverse(body_poses[roots[lane]]) + position = wp.transform_point(root_inverse, wp.transform_get_translation(body_poses[elbows[lane]])) + blend = float(1.0) + if states[lane] == 0: + blend = _smoothstep(times[lane] / durations[0]) + outward_y = wp.min(position[1], guard_y) + if guard_y > 0.0: + outward_y = wp.max(position[1], guard_y) + position[1] = wp.lerp(position[1], outward_y, blend) + targets[lane] = wp.transform_point(native_root, position) + + +@wp.kernel +def _gather_targets( + solved: wp.array2d(dtype=float), + poses: wp.array2d(dtype=float), + indices: wp.array(dtype=int), + arms: wp.array(dtype=int), + fingers: wp.array(dtype=int), + defaults: wp.array2d(dtype=float), + velocity_limits: wp.array2d(dtype=float), + previous: wp.array2d(dtype=float), + dt: float, + velocity_feedforward: int, + targets: wp.array2d(dtype=float), + velocities: wp.array2d(dtype=float), +): + lane, joint = wp.tid() + value = defaults[lane, joint] + if arms[joint] != 0: + value = solved[lane, indices[joint]] + if fingers[joint] >= 0: + value = poses[lane, POSE_COMPONENTS + fingers[joint]] + velocity = float(0.0) + if arms[joint] != 0 and velocity_feedforward != 0: + # Match moving arm targets without exciting the quasi-massless fingers. + limit = wp.min(velocity_limits[lane, joint], 20.0) + velocity = wp.clamp((value - previous[lane, joint]) / dt, -limit, limit) + previous[lane, joint] = value + targets[lane, joint] = value + velocities[lane, joint] = velocity + + +@wp.kernel(enable_backward=False) +def _read_arm_positions( + positions: wp.array(dtype=float), + coordinates: wp.array2d(dtype=int), + selected: wp.array2d(dtype=float), +): + lane, arm = wp.tid() + selected[lane, arm] = positions[coordinates[lane, arm]] + + +@wp.kernel(enable_backward=False) +def _stage_arm_targets( + targets: wp.array(dtype=float), + coordinates: wp.array2d(dtype=int), + start: wp.array2d(dtype=float), + end: wp.array2d(dtype=float), + counters: wp.array(dtype=int), +): + lane = wp.tid() + for arm in range(coordinates.shape[1]): + start[lane, arm] = end[lane, arm] + end[lane, arm] = targets[coordinates[lane, arm]] + counters[lane] = 0 + + +@wp.kernel(enable_backward=False) +def _interpolate_arm_targets( + coordinates: wp.array2d(dtype=int), + start: wp.array2d(dtype=float), + end: wp.array2d(dtype=float), + counters: wp.array(dtype=int), + substeps: int, + targets: wp.array(dtype=float), +): + lane = wp.tid() + tick = wp.min(counters[lane] + 1, substeps) + for arm in range(coordinates.shape[1]): + value = end[lane, arm] + if tick < substeps: + fraction = float(tick) / float(substeps) + value = start[lane, arm] + fraction * (end[lane, arm] - start[lane, arm]) + targets[coordinates[lane, arm]] = value + counters[lane] = tick + + +class TableclothController: + """Batched GPU IK and implicit joint drives for physically grasping the cloth. + + Register :meth:`compute` as a Newton post-step callback before the first + simulation step. The physics graph then includes the state machine, IK, and + actuator submission. There are no Torch operations or host state checks in + the callback. Cloth motion is entirely contact-driven: no particle targets + or artificial grasp attachments are used. + """ + + def __init__( + self, robot: Articulation, usd_path: str, dt: float, speeds: tuple[float, ...], robot_type: str = "h1" + ) -> None: + from pxr import Gf, Usd, UsdPhysics # noqa: PLC0415 + + self.robot = robot + self.device = robot.device + self.num_lanes = len(speeds) + self.num_joints = robot.num_joints + self._use_command_seed = robot_type == "h2" + if robot.num_instances != self.num_lanes: + raise ValueError("The example requires one identical fixed-base robot per environment.") + if robot_type not in ("h1", "h2"): + raise ValueError(f"Unsupported tablecloth robot: {robot_type}") + if robot_type == "h2": + self.hand_body_names = ("left_hand_C_MC", "right_hand_C_MC") + self.hand_offsets = H2_HAND_OFFSETS + arm_expr = [r"(left|right)_(shoulder|elbow|wrist)_.*"] + finger_names = list(H2_OPEN_JOINT_POS) + else: + self.hand_body_names = ("left_hand_link", "right_hand_link") + self.hand_offsets = HAND_OFFSETS + arm_expr = ["torso_joint", "(left|right)_(shoulder_.*|elbow|hand)_joint"] + finger_names = FINGER_JOINT_NAMES + arm_ids, arm_names = robot.find_joints(arm_expr) + self._arm_joint_names = arm_names + self._arm_control: newton.Control | None = None + + # Lock non-IK coordinates in an anonymous session layer only. The + # simulation retains every articulated finger; IK solves just the arms. + # This also keeps LM's tiled solve within the GPU shared-memory budget. + stage = Usd.Stage.Open(usd_path) + stage.SetEditTarget(stage.GetSessionLayer()) + fixed_positions = ( + dict(zip(robot.joint_names, robot.data.default_joint_pos.warp.numpy()[0], strict=True)) + if robot_type == "h2" + else {} + ) + for prim in stage.Traverse(): + if prim.IsA(UsdPhysics.RevoluteJoint) and prim.GetName() not in arm_names: + # A fixed joint must retain the configured posture, especially + # a forward waist bend. Freezing the authored zero angle would + # give IK a different arm chain from the simulated robot. + angle = float(fixed_positions.get(prim.GetName(), 0.0)) + if angle != 0.0: + joint = UsdPhysics.RevoluteJoint(prim) + axis = Gf.Vec3f( + *{"X": (1.0, 0.0, 0.0), "Y": (0.0, 1.0, 0.0), "Z": (0.0, 0.0, 1.0)}[joint.GetAxisAttr().Get()] + ) + rotation = Gf.Quatf(math.cos(0.5 * angle), math.sin(0.5 * angle) * axis) + joint.GetLocalRot0Attr().Set(joint.GetLocalRot0Attr().Get() * rotation) + prim.SetTypeName("PhysicsFixedJoint") + builder = newton.ModelBuilder() + builder.add_usd( + stage, + floating=False if robot_type == "h2" else None, + enable_self_collisions=False, + load_visual_shapes=False, + load_static_visual_shapes=False, + ) + model = builder.finalize(device=self.device) + if robot_type == "h2": + # Reserve room for compliant tracking without commanding physical hard stops. + model.joint_limit_lower.assign(model.joint_limit_lower.numpy() + 0.08) + model.joint_limit_upper.assign(model.joint_limit_upper.numpy() - 0.08) + if model.joint_coord_count != model.joint_dof_count: + raise ValueError("H2 arm IK requires scalar joint coordinates.") + self._ik_lower = model.joint_limit_lower + self._ik_upper = model.joint_limit_upper + starts = model.joint_q_start.numpy() + coordinates = { + label.split("/")[-1]: int(start) + for label, start, end in zip(model.joint_label, starts[:-1], starts[1:], strict=True) + if end > start + } + links = {label.split("/")[-1]: index for index, label in enumerate(model.body_label)} + self._indices = wp.array( + [coordinates.get(name, -1) for name in robot.joint_names], dtype=int, device=self.device + ) + self._seed = wp.zeros((self.num_lanes, model.joint_coord_count), dtype=float, device=self.device) + self._defaults = wp.clone(robot.data.default_joint_pos.warp) + self._previous_targets = wp.clone(self._defaults) + self._velocity_limits = wp.clone(robot.data.joint_vel_limits.warp) + self._targets = wp.zeros((self.num_lanes, self.num_joints), dtype=float, device=self.device) + self._velocity_targets = wp.zeros_like(self._targets) + self._joint_positions = robot.data.joint_pos.warp + if self._use_command_seed: + wp.launch( + _seed_coordinates, + dim=(self.num_lanes, self.num_joints), + inputs=[self._defaults, self._indices, self._seed], + device=self.device, + ) + finger_ids, _ = robot.find_joints(finger_names, preserve_order=True) + finger_indices = {joint: index for index, joint in enumerate(finger_ids)} + self._arms = wp.array([int(i in arm_ids) for i in range(self.num_joints)], dtype=int, device=self.device) + self._fingers = wp.array( + [finger_indices.get(i, -1) for i in range(self.num_joints)], dtype=int, device=self.device + ) + if robot_type == "h2": + # USD body transforms still describe the authored zero posture. + # Evaluate the configured READY seed before constructing posture targets. + initial_state = model.state() + wp.copy(model.joint_q, self._seed, count=model.joint_coord_count) + newton.eval_fk(model, model.joint_q, model.joint_qd, initial_state) + body_poses = initial_state.body_q.numpy() + else: + body_poses = model.body_q.numpy() + self._root = wp.transform(body_poses[links["pelvis"]][:3], body_poses[links["pelvis"]][3:]) + torso = wp.transform(body_poses[links["torso_link"]][:3], body_poses[links["torso_link"]][3:]) + torso = wp.transform_inverse(self._root) * torso + torso_pose = wp.array([list(torso)] * self.num_lanes, dtype=float, device=self.device) + objectives = [ + NewtonIKPoseObjectiveCfg( + body_name=body, + name=name + "_hand", + body_offset_pos=offset, + use_relative_mode=False, + position_weight=500.0 if robot_type == "h2" else 5.0, + rotation_weight=50.0 if robot_type == "h2" else 0.2, + ) + for name, body, offset in zip(("left", "right"), self.hand_body_names, self.hand_offsets, strict=True) + ] + objectives.extend( + [ + NewtonIKPoseObjectiveCfg( + body_name="torso_link", + name="torso", + use_relative_mode=False, + position_weight=50.0, + rotation_weight=50.0, + ), + NewtonIKJointLimitObjectiveCfg(weight=100.0 if robot_type == "h2" else 1.0), + ] + ) + if robot_type == "h2": + objectives.extend( + NewtonIKPoseObjectiveCfg( + body_name=f"{side}_elbow_link", + name=f"{side}_elbow", + command_type="position", + use_relative_mode=False, + position_weight=5.0, + rotation_weight=0.0, + ) + for side in ("left", "right") + ) + self._solver = NewtonIKSolver( + NewtonIKSolverCfg(iterations=32 if robot_type == "h2" else 24, lambda_initial=0.1), + model=model, + num_envs=self.num_lanes, + device=self.device, + objectives=objectives, + link_resolver=lambda name: links[name], + ) + self._poses = [self._solver.objectives_by_name[name] for name in ("left_hand", "right_hand", "torso")] + if robot_type == "h2": + self._elbow_positions = [] + for side in ("left", "right"): + positions = self._solver.objectives_by_name[f"{side}_elbow"].position_objective.target_positions + positions.assign(np.repeat(body_poses[links[f"{side}_elbow_link"], :3][None], self.num_lanes, axis=0)) + self._elbow_positions.append(positions) + self._machine = _GraspStateMachine(dt, torso_pose, speeds, self.device, robot_type) + self._scene_state: newton.State | None = None + + def bind_arm_substeps( + self, + model: newton.Model, + state: newton.State, + control: newton.Control, + env_paths: Sequence[str], + substeps: int = 16, + ) -> None: + """Bind H2 arm-position interpolation before physics graph capture. + + Call after the first :meth:`compute`, then register + :meth:`interpolate_arm_targets` after the native actuator adapter on + every inner physics tick. The caller keeps IK at the outer-frame + cadence and advances exactly ``substeps`` inner ticks per frame. + Only the fourteen arm position targets are rewritten; fingers and + velocity targets retain their controller values. + + Args: + model: Native scene model containing one H2 per environment. + state: Initial native joint state, used as the first ramp's start. + control: Native control whose position targets are updated in place. + env_paths: Environment prim paths, ordered like the controller lanes. + substeps: Number of inner physics ticks per controller update. + """ + if not self._use_command_seed or len(env_paths) != self.num_lanes: + raise ValueError("Arm interpolation requires one H2 per controller lane.") + if self._arm_control is not None: + raise RuntimeError("Arm interpolation is already bound.") + if not isinstance(substeps, int) or substeps < 1: + raise ValueError("Arm interpolation requires a positive integer substep count.") + if len(self._arm_joint_names) != 14 or len(set(self._arm_joint_names)) != 14: + raise ValueError("H2 interpolation requires fourteen distinct arm joints.") + if state.joint_q is None or control.joint_target_q is None or model.joint_target_q_start is None: + raise ValueError("Arm interpolation requires native joint positions and position targets.") + if state.joint_q.device != control.joint_target_q.device or state.joint_q.device != wp.get_device(self.device): + raise ValueError("Arm state, position targets, and controller must share a device.") + + q_starts = model.joint_q_start.numpy() + target_starts = model.joint_target_q_start.numpy() + q_coordinates = np.empty((self.num_lanes, 14), dtype=np.int32) + target_coordinates = np.empty_like(q_coordinates) + for lane, env_path in enumerate(env_paths): + prefix = env_path.rstrip("/") + "/Robot/" + selected = {} + for joint, label in enumerate(model.joint_label): + name = label.rsplit("/", 1)[-1] + if label.startswith(prefix) and name in self._arm_joint_names: + if name in selected: + raise ValueError(f"Duplicate H2 arm joint {name!r} in {env_path!r}.") + if ( + q_starts[joint + 1] - q_starts[joint] != 1 + or target_starts[joint + 1] - target_starts[joint] != 1 + ): + raise ValueError(f"H2 arm joint {name!r} must have scalar state and target coordinates.") + selected[name] = (int(q_starts[joint]), int(target_starts[joint])) + if set(selected) != set(self._arm_joint_names): + raise ValueError(f"Incomplete H2 arm selection in {env_path!r}: {sorted(selected)}") + for arm, name in enumerate(self._arm_joint_names): + q_coordinates[lane, arm], target_coordinates[lane, arm] = selected[name] + for coordinates, size in ( + (q_coordinates, state.joint_q.size), + (target_coordinates, control.joint_target_q.size), + ): + if coordinates.min() < 0 or coordinates.max() >= size or np.unique(coordinates).size != coordinates.size: + raise ValueError("Each H2 arm coordinate must be valid and distinct across lanes.") + + self._arm_target_coordinates = wp.array(target_coordinates, dtype=int, device=self.device) + self._arm_initial = wp.empty(q_coordinates.shape, dtype=float, device=self.device) + wp.launch( + _read_arm_positions, + dim=q_coordinates.shape, + inputs=[state.joint_q, wp.array(q_coordinates, dtype=int, device=self.device), self._arm_initial], + device=self.device, + ) + self._arm_start = wp.clone(self._arm_initial) + self._arm_end = wp.clone(self._arm_initial) + self._arm_counters = wp.zeros(self.num_lanes, dtype=int, device=self.device) + self._arm_substeps = substeps + self._arm_control = control + self._stage_arm_targets() + + def interpolate_arm_targets(self) -> None: + """Apply the next linear arm-position sample after the native actuator adapter.""" + if self._arm_control is None: + return + wp.launch( + _interpolate_arm_targets, + dim=self.num_lanes, + inputs=[ + self._arm_target_coordinates, + self._arm_start, + self._arm_end, + self._arm_counters, + self._arm_substeps, + self._arm_control.joint_target_q, + ], + device=self.device, + ) + + def reset_arm_targets(self) -> None: + """Restart the ramp from the initial state after the reset's existing :meth:`compute`.""" + if self._arm_control is None: + return + wp.copy(self._arm_end, self._arm_initial) + self._stage_arm_targets() + + def observe_scene(self, model: newton.Model, state: newton.State, env_prim_paths: list[str]) -> None: + """Bind native pelvis and elbow observations for H2. + + Resolve body labels once before the first update. Elbow posture guards + run inside the physics CUDA graph without changing the cloth. + """ + if not self._use_command_seed or len(env_prim_paths) != self.num_lanes: + raise ValueError("Scene observation requires one H2 per environment.") + roots, elbows = [], ([], []) + for env_path in env_prim_paths: + resolved = [] + for body in ("pelvis", "left_elbow_link", "right_elbow_link"): + matches = [ + i + for i, name in enumerate(model.body_label) + if name.startswith(env_path + "/Robot/") and name.rsplit("/", 1)[-1] == body + ] + if len(matches) != 1: + raise ValueError(f"Expected one H2 {body} in {env_path}, found {len(matches)}") + resolved.append(matches[0]) + roots.append(resolved[0]) + elbows[0].append(resolved[1]) + elbows[1].append(resolved[2]) + self._scene_state = state + self._scene_roots = wp.array(roots, dtype=int, device=self.device) + self._scene_elbows = [wp.array(side, dtype=int, device=self.device) for side in elbows] + + @staticmethod + def duration(speeds: tuple[float, ...], dt: float, robot_type: str = "h1") -> float: + """Include per-phase frame rounding, the slowest pull, and a one-second hold.""" + durations = H2_PHASE_DURATIONS if robot_type == "h2" else PHASE_DURATIONS + distance = H2_PULL_DISTANCE if robot_type == "h2" else PULL_DISTANCE + return sum(durations) + len(durations) * dt + PULL_TIME_FACTOR * distance / min(speeds) + 1.0 + + def compute(self) -> None: + """Advance the GPU controller and submit the next frame's joint targets.""" + self._machine.compute() + for i, pose in enumerate(self._poses): + wp.launch( + _set_pose_targets, + dim=self.num_lanes, + inputs=[ + self._machine._commands, + 7 * i, + self._root, + pose.position_objective.target_positions, + pose.rotation_objective.target_rotations, + ], + device=self.device, + ) + if self._scene_state is not None: + # Measured native torso/elbow clearance guards. Keep current X/Z + # free to follow the hand trajectory rather than fixing an elbow pose. + for elbows, positions, guard in zip( + self._scene_elbows, self._elbow_positions, (0.159, -0.180), strict=True + ): + wp.launch( + _set_elbow_position, + dim=self.num_lanes, + inputs=[ + self._scene_state.body_q, + self._scene_roots, + elbows, + self._root, + guard, + self._machine._state, + self._machine._state_time, + self._machine._phase_durations, + positions, + ], + device=self.device, + ) + if not self._use_command_seed: + wp.launch( + _seed_coordinates, + dim=(self.num_lanes, self.num_joints), + inputs=[self._joint_positions, self._indices, self._seed], + device=self.device, + ) + solved = self._solver.solve(self._seed) + if self._use_command_seed: + # The IK limit objective is soft. Never ask physical drives to + # follow an out-of-range solution when a contact shifts the hem. + wp.launch( + _clamp_ik_coordinates, + dim=solved.shape, + inputs=[solved, self._ik_lower, self._ik_upper], + device=self.device, + ) + # Contact tracking errors must not steer the redundant arm coordinates. + wp.copy(self._seed, solved) + wp.launch( + _gather_targets, + dim=(self.num_lanes, self.num_joints), + inputs=[ + solved, + self._machine._commands, + self._indices, + self._arms, + self._fingers, + self._defaults, + self._velocity_limits, + self._previous_targets, + self._machine.dt, + int(self._use_command_seed), + self._targets, + self._velocity_targets, + ], + device=self.device, + ) + self.robot.actuators.target_command.set_position_index(value=self._targets) + self.robot.actuators.target_command.set_velocity_index(value=self._velocity_targets) + self.robot.write_data_to_sim() + if self._arm_control is not None: + self._stage_arm_targets() + + def _stage_arm_targets(self) -> None: + wp.launch( + _stage_arm_targets, + dim=self.num_lanes, + inputs=[ + self._arm_control.joint_target_q, + self._arm_target_coordinates, + self._arm_start, + self._arm_end, + self._arm_counters, + ], + device=self.device, + ) + + +@wp.kernel +def _measure_grasp( + mesh: wp.uint64, + body_poses: wp.array(dtype=wp.transform), + hands: wp.array2d(dtype=int), + offsets: wp.array(dtype=wp.vec3), + states: wp.array(dtype=int), + faces: wp.array2d(dtype=int), + coordinates: wp.array2d(dtype=wp.vec2), + initial_points: wp.array2d(dtype=wp.vec3), + initial_gaps: wp.array2d(dtype=float), + maximum_gaps: wp.array2d(dtype=float), + travel: wp.array2d(dtype=float), +): + lane, side = wp.tid() + if states[lane] >= STATE_PULL: + hand = wp.transform_point(body_poses[hands[lane, side]], offsets[side]) + if faces[lane, side] == -1: + # Try once at pull onset; a later accidental pickup is not a successful grasp. + faces[lane, side] = -2 + query = wp.mesh_query_point_no_sign(mesh, hand, 0.2) + if query.result: + faces[lane, side] = query.face + coordinates[lane, side] = wp.vec2(query.u, query.v) + point = wp.mesh_eval_position(mesh, query.face, query.u, query.v) + initial_points[lane, side] = point + initial_gaps[lane, side] = wp.length(point - hand) + if faces[lane, side] >= 0: + uv = coordinates[lane, side] + point = wp.mesh_eval_position(mesh, faces[lane, side], uv[0], uv[1]) + maximum_gaps[lane, side] = wp.max(maximum_gaps[lane, side], wp.length(point - hand)) + travel[lane, side] = initial_points[lane, side][0] - point[0] + + +class GraspMonitor: + """Track fixed cloth material points on the GPU, rather than just commanded motion. + + Sample after each physics frame inside the graph. Only :meth:`report`, + called after the complete run, copies results to the host. This monitor + observes material motion; it never changes the cloth or attaches it to a hand. + """ + + def __init__( + self, model: newton.Model, state: newton.State, controller: TableclothController, env_prim_paths: list[str] + ) -> None: + device = controller.device + count = controller.num_lanes + if len(env_prim_paths) != count: + raise ValueError("Expected one environment path per robot instance.") + self._state = state + self._states = controller._machine._state + hand_ids = [] + for env_path in env_prim_paths: + robot_path = env_path + "/Robot" + pair = [] + for side, body in zip(("left", "right"), controller.hand_body_names, strict=True): + matches = [ + i + for i, name in enumerate(model.body_label) + if name.startswith(robot_path + "/") and name.rsplit("/", 1)[-1] == body + ] + if len(matches) != 1: + raise ValueError(f"Expected one {side} hand for {robot_path}, found {len(matches)}") + pair.append(matches[0]) + hand_ids.append(pair) + self._hands = wp.array(hand_ids, dtype=int, device=device) + self._offsets = wp.array(controller.hand_offsets, dtype=wp.vec3, device=device) + self._mesh = wp.Mesh(points=wp.clone(state.particle_q), indices=model.tri_indices.flatten()) + self._faces = wp.full((count, 2), -1, dtype=int, device=device) + self._coordinates = wp.zeros((count, 2), dtype=wp.vec2, device=device) + self._initial_points = wp.zeros((count, 2), dtype=wp.vec3, device=device) + self._initial_gaps = wp.full((count, 2), 1.0, dtype=float, device=device) + self._maximum_gaps = wp.zeros((count, 2), dtype=float, device=device) + self._travel = wp.zeros((count, 2), dtype=float, device=device) + + def compute(self) -> None: + """Refit the cloth surface and measure acquisition, retention, and withdrawal.""" + wp.copy(self._mesh.points, self._state.particle_q) + self._mesh.refit() + wp.launch( + _measure_grasp, + dim=self._faces.shape, + inputs=[ + self._mesh.id, + self._state.body_q, + self._hands, + self._offsets, + self._states, + self._faces, + self._coordinates, + self._initial_points, + self._initial_gaps, + self._maximum_gaps, + self._travel, + ], + device=self._faces.device, + ) + + def report(self) -> list[dict[str, object]]: + """Return end-of-run physical grip results, in lane order.""" + initial = self._initial_gaps.numpy() + maximum = self._maximum_gaps.numpy() + travel = self._travel.numpy() + return [ + { + "retained": bool((gap < 0.005).all() and (peak < 0.015).all() and (distance > 0.30).all()), + "initial_gap_m": gap.tolist(), + "maximum_gap_m": peak.tolist(), + "travel_m": distance.tolist(), + } + for gap, peak, distance in zip(initial, maximum, travel, strict=True) + ] diff --git a/source/isaaclab_newton/changelog.d/max-vbd-tablecloth-demos.added.rst b/source/isaaclab_newton/changelog.d/max-vbd-tablecloth-demos.added.rst deleted file mode 100644 index e8f70c6b2962..000000000000 --- a/source/isaaclab_newton/changelog.d/max-vbd-tablecloth-demos.added.rst +++ /dev/null @@ -1 +0,0 @@ -* Exposed non-rod VBD joint attachment stiffness separately from actuator gains in :class:`~isaaclab_newton.physics.VBDSolverCfg`. diff --git a/source/isaaclab_newton/changelog.d/max-vbd-tablecloth-demos.fixed.rst b/source/isaaclab_newton/changelog.d/max-vbd-tablecloth-demos.fixed.rst deleted file mode 100644 index 6d2d84ecbb53..000000000000 --- a/source/isaaclab_newton/changelog.d/max-vbd-tablecloth-demos.fixed.rst +++ /dev/null @@ -1,3 +0,0 @@ -* Included active bending constraints when graph-coloring VBD deformable models. -* Fixed Newton IK action setup for fixed-base articulations whose root joint is nested beneath the asset prim. -* Synchronized VBD joint coordinates and velocities with integrated body state so articulation and rigid-object data remained current. diff --git a/source/isaaclab_newton/changelog.d/max-vbd-tablecloth-demos.minor b/source/isaaclab_newton/changelog.d/max-vbd-tablecloth-demos.minor deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/source/isaaclab_tasks/changelog.d/max-tablecloth-h1-task.added.rst b/source/isaaclab_tasks/changelog.d/max-tablecloth-h1-task.added.rst deleted file mode 100644 index be668f211586..000000000000 --- a/source/isaaclab_tasks/changelog.d/max-tablecloth-h1-task.added.rst +++ /dev/null @@ -1,2 +0,0 @@ -* Added the ``IsaacContrib-Tablecloth-H1`` manager-based task with a GPU-resident - scripted expert in its task package and a small packaged example launcher. diff --git a/source/isaaclab_tasks/changelog.d/max-tablecloth-h1-task.fixed.rst b/source/isaaclab_tasks/changelog.d/max-tablecloth-h1-task.fixed.rst deleted file mode 100644 index b7f944d49891..000000000000 --- a/source/isaaclab_tasks/changelog.d/max-tablecloth-h1-task.fixed.rst +++ /dev/null @@ -1,3 +0,0 @@ -* Grounded H1's standing pose, held its pelvis fixed under VBD manipulation loads, and excluded leg joints from arm IK control. -* Stiffened H1's structural VBD joints and recalibrated its physical corner grasp with a reachable constant-attitude pull and smooth braking. -* Enabled H1 example and regression startup with Kit's MJCF importer when standalone importers were unavailable. diff --git a/source/isaaclab_tasks/changelog.d/max-tablecloth-h1-task.minor b/source/isaaclab_tasks/changelog.d/max-tablecloth-h1-task.minor deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/source/isaaclab_tasks/isaaclab_tasks/contrib/tablecloth/__init__.py b/source/isaaclab_tasks/isaaclab_tasks/contrib/tablecloth/__init__.py deleted file mode 100644 index fc08e34480ba..000000000000 --- a/source/isaaclab_tasks/isaaclab_tasks/contrib/tablecloth/__init__.py +++ /dev/null @@ -1,15 +0,0 @@ -# Copyright (c) 2022-2026, The Isaac Lab Project Developers (https://github.com/isaac-sim/IsaacLab/blob/main/CONTRIBUTORS.md). -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause - -"""H1 tablecloth task registration.""" - -import gymnasium as gym - -gym.register( - id="IsaacContrib-Tablecloth-H1", - entry_point=f"{__name__}.h1_env:H1TableclothEnv", - disable_env_checker=True, - kwargs={"env_cfg_entry_point": f"{__name__}.h1_env_cfg:H1TableclothEnvCfg"}, -) diff --git a/source/isaaclab_tasks/isaaclab_tasks/contrib/tablecloth/assets.py b/source/isaaclab_tasks/isaaclab_tasks/contrib/tablecloth/assets.py deleted file mode 100644 index 9235669e6216..000000000000 --- a/source/isaaclab_tasks/isaaclab_tasks/contrib/tablecloth/assets.py +++ /dev/null @@ -1,269 +0,0 @@ -# Copyright (c) 2022-2026, The Isaac Lab Project Developers (https://github.com/isaac-sim/IsaacLab/blob/main/CONTRIBUTORS.md). -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause - -"""Shared SimReady asset helpers for the tablecloth examples.""" - -from __future__ import annotations - -from collections.abc import Callable -from dataclasses import MISSING -from typing import TYPE_CHECKING - -from isaaclab_newton.sim.schemas import NewtonCollisionCfg -from isaaclab_newton.sim.spawners.materials import NewtonMaterialCfg - -import isaaclab.sim as sim_utils -from isaaclab.assets import RigidObjectCfg -from isaaclab.sim.schemas import UsdPhysicsCollisionCfg, UsdPhysicsRigidBodyCfg -from isaaclab.sim.spawners.materials import UsdPhysicsRigidBodyMaterialCfg -from isaaclab.utils import configclass -from isaaclab.utils.assets import ISAAC_NUCLEUS_DIR - -if TYPE_CHECKING: - from pxr import Usd - -RIGID_GAP = 0.001 -H1_PELVIS_HEIGHT = 1.1 - -KITCHEN_ISLAND_USD = ( - f"{ISAAC_NUCLEUS_DIR}/SimReady/Residential/Kitchen/Counters/Island_A01/sm_fixture_island_a01_01.usd" -) -BOWL_USD = f"{ISAAC_NUCLEUS_DIR}/SimReady/Residential/Kitchen/Dishware/Bowl_G01/sm_kitchenware_bowl_g01_01.usd" -WINE_GLASS_USD = ( - f"{ISAAC_NUCLEUS_DIR}/SimReady/Residential/Furnishing/Kitchen/Kitchenware/Dishware/Glass_Wine_A01/" - "sm_dishware_glass_wine_a01_01.usd" -) -FORK_USD = f"{ISAAC_NUCLEUS_DIR}/SimReady/Residential/Kitchen/Utensils/Fork_K01/sm_kitchenware_fork_k01_01.usd" - -# Dimensions measured from the SimReady assets. -KITCHEN_ISLAND_SIZE = (0.631293, 1.240893, 0.900409) -BOWL_LOCAL_Z_MIN = 0.000001783 -BOWL_LOCAL_RADIUS = 0.052765541 -BOWL_LOCAL_HEIGHT = 0.043569469 -WINE_GLASS_LOCAL_Z_MIN = 0.000358 -FORK_LOCAL_Z_MIN = 0.000127 -BOWL_SCALE = 1.35 -FORK_SCALE = 0.85 -FORK_ROTATION = (0.0, 0.0, -0.70710678, 0.70710678) -FORK_CENTER_OF_MASS = (0.0, 0.0092, 0.0089) -FORK_DIAGONAL_INERTIA = (1.86e-4, 6.2e-6, 1.90e-4) -# A base-only collision proxy would otherwise give the tall glass a flat-disk inertia. -WINE_GLASS_CENTER_OF_MASS = (0.0, 0.0, 0.04) -WINE_GLASS_DIAGONAL_INERTIA = (3.0e-3, 3.0e-3, 5.0e-4) - - -def rigid_material( - *, density: float | None, friction: float, contact_stiffness: float, contact_damping: float -) -> list[UsdPhysicsRigidBodyMaterialCfg | NewtonMaterialCfg]: - """Return solver-common friction and Newton compliant-contact material fragments.""" - return [ - UsdPhysicsRigidBodyMaterialCfg( - static_friction=friction, - dynamic_friction=friction, - restitution=0.0, - density=density, - ), - NewtonMaterialCfg(contact_stiffness=contact_stiffness, contact_damping=contact_damping), - ] - - -def collision_properties() -> list[UsdPhysicsCollisionCfg | NewtonCollisionCfg]: - """Return collision properties shared by cloth-contacting rigid shapes.""" - return [ - UsdPhysicsCollisionCfg(collision_enabled=True), - NewtonCollisionCfg(contact_margin=0.002, contact_gap=RIGID_GAP), - ] - - -def spawn_h1_from_usd( - prim_path: str, - cfg: sim_utils.UsdFileCfg, - translation: tuple[float, float, float] | None = None, - orientation: tuple[float, float, float, float] | None = None, - **kwargs: object, -) -> Usd.Prim: - """Spawn H1 while accounting for the MJCF's pelvis-height transform.""" - if translation is not None: - translation = (translation[0], translation[1], translation[2] - H1_PELVIS_HEIGHT) - return sim_utils.spawn_from_usd(prim_path, cfg, translation, orientation, **kwargs) - - -def tabletop_collider_cfg( - size: tuple[float, float, float], *, friction: float, contact_stiffness: float, contact_damping: float -) -> sim_utils.CuboidCfg: - """Create a low-cost collision proxy for a visual-only table.""" - return sim_utils.CuboidCfg( - size=size, - visible=False, - collision_props=collision_properties(), - physics_material=rigid_material( - density=None, - friction=friction, - contact_stiffness=contact_stiffness, - contact_damping=contact_damping, - ), - ) - - -def spawn_visual_table_from_usd( - prim_path: str, - cfg: VisualTableUsdFileCfg, - translation: tuple[float, float, float] | None = None, - orientation: tuple[float, float, float, float] | None = None, - **kwargs: object, -) -> Usd.Prim: - """Spawn a visual-only island and remove material inputs unsupported by Newton GL.""" - prim = sim_utils.spawn_from_usd(prim_path, cfg, translation, orientation, **kwargs) - from pxr import UsdShade # noqa: PLC0415 - - for root in sim_utils.find_matching_prims(prim_path): - for child in sim_utils.get_all_matching_child_prims(root.GetPath()): - physics_binding = child.GetRelationship("material:binding:physics") - if physics_binding: - physics_binding.SetTargets([]) - if child.IsA(UsdShade.Shader): - shader = UsdShade.Shader(child) - if shader.GetIdAttr().Get() == "UsdPreviewSurface": - for input_name in ("metallic", "roughness"): - shader.GetInput(input_name).DisconnectSource() - return prim - - -@configclass -class VisualTableUsdFileCfg(sim_utils.UsdFileCfg): - """USD spawner config for a visual-only SimReady kitchen island.""" - - func: Callable | str = spawn_visual_table_from_usd - - -def spawn_tableware_from_usd( - prim_path: str, - cfg: TablewareUsdFileCfg, - translation: tuple[float, float, float] | None = None, - orientation: tuple[float, float, float, float] | None = None, - **kwargs: object, -) -> Usd.Prim: - """Spawn a tableware visual with measured mass and analytic collision proxies.""" - prim = sim_utils.spawn_from_usd(prim_path, cfg, translation, orientation, **kwargs) - from pxr import Gf, UsdPhysics, UsdShade # noqa: PLC0415 - - for root in sim_utils.find_matching_prims(prim_path): - root_path = root.GetPath().pathString - for child in sim_utils.get_all_matching_child_prims(root_path): - physics_binding = child.GetRelationship("material:binding:physics") - if physics_binding: - physics_binding.SetTargets([]) - if child.IsA(UsdShade.Shader): - shader = UsdShade.Shader(child) - shader_id = shader.GetIdAttr().Get() - if shader_id == "UsdPreviewSurface": - for input_name in ("metallic", "roughness"): - shader.GetInput(input_name).DisconnectSource() - if cfg.visual_color is not None: - shader.GetInput("diffuseColor").Set(Gf.Vec3f(*cfg.visual_color)) - if cfg.visual_opacity is not None: - shader.GetInput("opacity").Set(cfg.visual_opacity) - if cfg.visual_roughness is not None: - shader.GetInput("roughness").Set(cfg.visual_roughness) - elif shader_id == "mdl:OmniGlass": - if cfg.visual_color is not None: - shader.GetInput("glass_color").Set(Gf.Vec3f(*cfg.visual_color)) - if cfg.visual_opacity is not None: - shader.GetInput("cutout_opacity").Set(cfg.visual_opacity) - if cfg.visual_roughness is not None: - shader.GetInput("frosting_roughness").Set(cfg.visual_roughness) - - mesh_colliders = sim_utils.get_all_matching_child_prims( - root_path, - predicate=lambda child: child.HasAPI(UsdPhysics.CollisionAPI), - ) - if len(mesh_colliders) != 1: - raise RuntimeError(f"Expected one SimReady tableware mesh collider, found {len(mesh_colliders)}") - UsdPhysics.CollisionAPI(mesh_colliders[0]).CreateCollisionEnabledAttr(False) - - bodies = sim_utils.get_all_matching_child_prims( - root_path, - predicate=lambda child: child.HasAPI(UsdPhysics.RigidBodyAPI), - ) - if len(bodies) != 1: - raise RuntimeError(f"Expected one SimReady tableware rigid body, found {len(bodies)}") - body = bodies[0] - mass_api = UsdPhysics.MassAPI.Apply(body) - mass_api.CreateMassAttr(cfg.mass) - mass_api.CreateDensityAttr(0.0) - if cfg.center_of_mass is not None: - mass_api.CreateCenterOfMassAttr(cfg.center_of_mass) - if cfg.diagonal_inertia is not None: - mass_api.CreateDiagonalInertiaAttr(cfg.diagonal_inertia) - mass_api.CreatePrincipalAxesAttr(Gf.Quatf(1.0, Gf.Vec3f(0.0))) - - proxy_cfgs = (cfg.collision_proxy_cfg, *cfg.additional_collision_proxy_cfgs) - proxy_positions = (cfg.collision_proxy_position, *cfg.additional_collision_proxy_positions) - for index, (proxy_cfg, proxy_position) in enumerate(zip(proxy_cfgs, proxy_positions, strict=True)): - suffix = "" if index == 0 else str(index) - proxy_cfg.func( - f"{body.GetPath()}/CollisionProxy{suffix}", - proxy_cfg, - translation=proxy_position, - orientation=(0.0, 0.0, 0.0, 1.0), - ) - return prim - - -@configclass -class TablewareUsdFileCfg(sim_utils.UsdFileCfg): - """USD spawner config for SimReady visuals with analytic collision proxies.""" - - func: Callable | str = spawn_tableware_from_usd - mass: float = MISSING - collision_proxy_cfg: sim_utils.ShapeCfg = MISSING - collision_proxy_position: tuple[float, float, float] = MISSING - additional_collision_proxy_cfgs: tuple[sim_utils.ShapeCfg, ...] = () - additional_collision_proxy_positions: tuple[tuple[float, float, float], ...] = () - center_of_mass: tuple[float, float, float] | None = None - diagonal_inertia: tuple[float, float, float] | None = None - visual_color: tuple[float, float, float] | None = None - visual_opacity: float | None = None - visual_roughness: float | None = None - - -def rigid_object_cfg( - *, - usd_path: str, - position: tuple[float, float, float], - mass: float, - collision_proxy_cfg: sim_utils.ShapeCfg, - collision_proxy_position: tuple[float, float, float], - orientation: tuple[float, float, float, float] = (0.0, 0.0, 0.0, 1.0), - scale: tuple[float, float, float] | None = None, - center_of_mass: tuple[float, float, float] | None = None, - diagonal_inertia: tuple[float, float, float] | None = None, - additional_collision_proxy_cfgs: tuple[sim_utils.ShapeCfg, ...] = (), - additional_collision_proxy_positions: tuple[tuple[float, float, float], ...] = (), - visual_color: tuple[float, float, float] | None = None, - visual_opacity: float | None = None, - visual_roughness: float | None = None, -) -> RigidObjectCfg: - """Create a dynamic SimReady tableware object with analytic collision.""" - return RigidObjectCfg( - prim_path="", - spawn=TablewareUsdFileCfg( - usd_path=usd_path, - scale=scale, - make_uninstanceable=True, - rigid_props={"(/.*)?": [UsdPhysicsRigidBodyCfg(rigid_body_enabled=True, kinematic_enabled=False)]}, - mass=mass, - collision_proxy_cfg=collision_proxy_cfg, - collision_proxy_position=collision_proxy_position, - additional_collision_proxy_cfgs=additional_collision_proxy_cfgs, - additional_collision_proxy_positions=additional_collision_proxy_positions, - center_of_mass=center_of_mass, - diagonal_inertia=diagonal_inertia, - visual_color=visual_color, - visual_opacity=visual_opacity, - visual_roughness=visual_roughness, - ), - init_state=RigidObjectCfg.InitialStateCfg(pos=position, rot=orientation), - ) diff --git a/source/isaaclab_tasks/isaaclab_tasks/contrib/tablecloth/expert.py b/source/isaaclab_tasks/isaaclab_tasks/contrib/tablecloth/expert.py deleted file mode 100644 index 0a9ae0c52d62..000000000000 --- a/source/isaaclab_tasks/isaaclab_tasks/contrib/tablecloth/expert.py +++ /dev/null @@ -1,292 +0,0 @@ -# Copyright (c) 2022-2026, The Isaac Lab Project Developers (https://github.com/isaac-sim/IsaacLab/blob/main/CONTRIBUTORS.md). -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause - - -"""GPU-resident scripted expert for the contributed H1 tablecloth task. - -The calibrated grasp and pull trajectory generate actions for the task. Scene -construction, physics, stepping, resets, rewards, and terminations remain owned -by the environment. -""" - -from __future__ import annotations - -import torch -import warp as wp - -PULL_DISTANCE = 0.40 -ARM_ACTION_DIM = 21 - -FINGERS_OPEN = (0.0, 0.0, 0.0, 0.0, 0.0) -FINGERS_CURLED = (0.0, 0.0, 0.0, 0.0, 0.80) -FINGERS_INSERTED = (0.0, 0.0, 0.75, 0.75, 0.80) -FINGERS_PREPINCHED = (0.0, 0.0, 0.737080, 0.713855, 0.80) -FINGERS_PINCHED = (1.0, 1.0, 0.737080, 0.713855, 0.80) - -PHASE_DURATIONS = (0.50, 0.80, 0.60, 0.50, 0.60, 0.60, 0.10, 0.10) -PHASE_KEYFRAMES = ((0, 0), (0, 2), (2, 4), (4, 6), (6, 8), (8, 8), (8, 10), (10, 10)) -PHASE_FINGERS = ( - (FINGERS_OPEN, FINGERS_OPEN), - (FINGERS_OPEN, FINGERS_CURLED), - (FINGERS_CURLED, FINGERS_INSERTED), - (FINGERS_INSERTED, FINGERS_INSERTED), - (FINGERS_INSERTED, FINGERS_PREPINCHED), - (FINGERS_PREPINCHED, FINGERS_PINCHED), - (FINGERS_PINCHED, FINGERS_PINCHED), - (FINGERS_PINCHED, FINGERS_PINCHED), -) -STATE_PULL = wp.constant(len(PHASE_DURATIONS)) -STATE_HOLD = wp.constant(len(PHASE_DURATIONS) + 1) - -# Positions are expressed in the robot root frame, matching the absolute Newton IK action contract. -HAND_KEYFRAMES = ( - (0.27, 0.24, 0.140), - (0.27, -0.24, 0.140), - (0.43, 0.38, 0.060), - (0.43, -0.38, 0.060), - (0.43, 0.38, -0.050), - (0.43, -0.38, -0.048), - (0.545, 0.38, -0.050), - (0.545, -0.38, -0.048), - (0.545, 0.38, -0.020), - (0.545, -0.38, -0.020), - (0.545, 0.38, -0.015), - (0.545, -0.38, -0.015), -) -HAND_ROTATIONS = ( - (-0.09022585, 0.46115433, 0.03007528, 0.88220828), - (0.09023000, 0.46114998, -0.03008000, 0.88220997), -) -# Feasible corner-grasp attitudes for H1's five-DOF arms, calibrated with forward kinematics. -GRASP_HAND_ROTATIONS = ( - (-0.07698878, 0.37041666, 0.08826291, 0.92145205), - (0.07860907, 0.37042228, -0.08392787, 0.92171799), -) -FINGER_CLOSED_VALUES = ( - 1.273907, - 0.160957, - 0.369535, - 0.892908, - 1.2, - 1.2, - 1.0, - 1.0, - 1.0, - 1.0, - 1.0, - 1.0, - 1.192278, - 0.195421, - 0.400690, - 0.679765, - 1.2, - 1.2, - 1.0, - 1.0, - 1.0, - 1.0, - 1.0, - 1.0, -) -FINGER_GROUPS = (0, 0, 0, 0, 2, 2, 4, 4, 4, 4, 4, 4, 1, 1, 1, 1, 3, 3, 4, 4, 4, 4, 4, 4) - - -@wp.func -def _smoothstep(value: float) -> float: - value = wp.clamp(value, 0.0, 1.0) - return value * value * (3.0 - 2.0 * value) - - -@wp.func -def _pull_offset(distance: float) -> wp.vec3: - # This arc preserves the grasp attitude within the arms' reachable pose manifold. - radius = 0.3072 - center = 0.2248 - height = wp.sqrt(radius * radius - center * center) - wp.sqrt( - radius * radius - (distance - center) * (distance - center) - ) - return wp.vec3(-distance, 0.0, height) - - -@wp.kernel -def _infer_state_machine( - dt: float, - pull_speed: float, - keyframes: wp.array(dtype=wp.vec3), - hand_rotations: wp.array(dtype=wp.vec4), - torso_pose: wp.array2d(dtype=float), - phase_durations: wp.array(dtype=float), - phase_start_keyframes: wp.array(dtype=wp.int32), - phase_end_keyframes: wp.array(dtype=wp.int32), - phase_start_fingers: wp.array(dtype=float), - phase_end_fingers: wp.array(dtype=float), - finger_closed_values: wp.array(dtype=float), - finger_groups: wp.array(dtype=wp.int32), - finger_fractions: wp.array2d(dtype=float), - state: wp.array(dtype=wp.int32), - state_time: wp.array(dtype=float), - pull_distance: wp.array(dtype=float), - actions: wp.array2d(dtype=float), -): - env_id = wp.tid() - current_state = state[env_id] - elapsed = state_time[env_id] + dt - - if current_state < STATE_PULL and elapsed >= phase_durations[current_state]: - current_state += 1 - elapsed = 0.0 - - left = keyframes[0] - right = keyframes[1] - if current_state < STATE_PULL: - alpha = _smoothstep(elapsed / phase_durations[current_state]) - start_keyframe = phase_start_keyframes[current_state] - end_keyframe = phase_end_keyframes[current_state] - left = wp.lerp(keyframes[start_keyframe], keyframes[end_keyframe], alpha) - right = wp.lerp(keyframes[start_keyframe + 1], keyframes[end_keyframe + 1], alpha) - for group in range(5): - index = current_state * 5 + group - finger_fractions[env_id, group] = wp.lerp(phase_start_fingers[index], phase_end_fingers[index], alpha) - elif current_state == STATE_PULL: - # Accelerate and brake to rest without a velocity discontinuity at the final hold. - duration = 1.5 * PULL_DISTANCE / pull_speed - distance = PULL_DISTANCE * _smoothstep(elapsed / duration) - pull_distance[env_id] = distance - offset = _pull_offset(distance) - left = keyframes[10] + offset - right = keyframes[11] + offset - for group in range(5): - finger_fractions[env_id, group] = phase_end_fingers[(STATE_PULL - 1) * 5 + group] - if distance >= PULL_DISTANCE: - current_state = STATE_HOLD - else: - distance = pull_distance[env_id] - offset = _pull_offset(distance) - left = keyframes[10] + offset - right = keyframes[11] + offset - for group in range(5): - finger_fractions[env_id, group] = phase_end_fingers[(STATE_PULL - 1) * 5 + group] - - # Finish changing attitude before closing the thumb, not while transporting the cloth. - rotation_alpha = 0.0 - if current_state >= 5: - rotation_alpha = 1.0 - elif current_state == 4: - rotation_alpha = _smoothstep(elapsed / phase_durations[4]) - left_rotation = wp.normalize(wp.lerp(hand_rotations[0], hand_rotations[2], rotation_alpha)) - right_rotation = wp.normalize(wp.lerp(hand_rotations[1], hand_rotations[3], rotation_alpha)) - - for axis in range(3): - actions[env_id, axis] = left[axis] - actions[env_id, 7 + axis] = right[axis] - for axis in range(4): - actions[env_id, 3 + axis] = left_rotation[axis] - actions[env_id, 10 + axis] = right_rotation[axis] - for axis in range(7): - actions[env_id, 14 + axis] = torso_pose[env_id, axis] - - for finger in range(finger_closed_values.shape[0]): - fraction = finger_fractions[env_id, finger_groups[finger]] - actions[env_id, ARM_ACTION_DIM + finger] = fraction * finger_closed_values[finger] - - state[env_id] = current_state - state_time[env_id] = elapsed - - -class H1TableclothStateMachine: - """Generate batched absolute hand poses and finger targets on the simulation device.""" - - def __init__(self, dt: float, torso_pose: torch.Tensor, action_dim: int, pull_speed: float) -> None: - """Initialize the expert on the torso-pose tensor's device. - - Args: - dt: Environment step duration [s]. - torso_pose: Robot-root-frame torso position [m] and quaternion, shape [N, 7]. - action_dim: Number of task action components. - pull_speed: Peak withdrawal speed [m/s]. - - Raises: - ValueError: If the task action dimension does not match the expert. - """ - self.num_envs = torso_pose.shape[0] - self.device = torso_pose.device - self._warp_device = wp.device_from_torch(self.device) - self.dt = dt - self.pull_speed = pull_speed - expected_action_dim = ARM_ACTION_DIM + len(FINGER_CLOSED_VALUES) - if action_dim != expected_action_dim: - raise ValueError(f"Expected a {expected_action_dim}-D H1 action, received {action_dim}") - - phases = list(zip(PHASE_DURATIONS, PHASE_KEYFRAMES, PHASE_FINGERS, strict=True)) - self._keyframes = wp.array(HAND_KEYFRAMES, dtype=wp.vec3, device=self._warp_device) - self._hand_rotations = wp.array( - (*HAND_ROTATIONS, *GRASP_HAND_ROTATIONS), dtype=wp.vec4, device=self._warp_device - ) - self._torso_pose = wp.from_torch(torso_pose.contiguous(), dtype=wp.float32) - self._phase_durations = wp.array([phase[0] for phase in phases], dtype=float, device=self._warp_device) - self._phase_start_keyframes = wp.array( - [phase[1][0] for phase in phases], dtype=wp.int32, device=self._warp_device - ) - self._phase_end_keyframes = wp.array( - [phase[1][1] for phase in phases], dtype=wp.int32, device=self._warp_device - ) - self._phase_start_fingers = wp.array( - [value for phase in phases for value in phase[2][0]], dtype=float, device=self._warp_device - ) - self._phase_end_fingers = wp.array( - [value for phase in phases for value in phase[2][1]], dtype=float, device=self._warp_device - ) - self._finger_closed_values = wp.array(FINGER_CLOSED_VALUES, dtype=float, device=self._warp_device) - self._finger_groups = wp.array(FINGER_GROUPS, dtype=wp.int32, device=self._warp_device) - self._finger_fractions = wp.zeros((self.num_envs, 5), dtype=float, device=self._warp_device) - self._state = wp.zeros(self.num_envs, dtype=wp.int32, device=self._warp_device) - self._state_time = wp.zeros(self.num_envs, dtype=float, device=self._warp_device) - self._pull_distance = wp.zeros(self.num_envs, dtype=float, device=self._warp_device) - self.actions = torch.zeros((self.num_envs, action_dim), device=self.device) - self._actions = wp.from_torch(self.actions, dtype=wp.float32) - - def reset_idx(self, env_ids: torch.Tensor) -> None: - """Reset the expert for environments that have started a new episode. - - Args: - env_ids: Indices of the environments to reset. - """ - wp.to_torch(self._state)[env_ids] = 0 - wp.to_torch(self._state_time)[env_ids] = 0.0 - wp.to_torch(self._pull_distance)[env_ids] = 0.0 - wp.to_torch(self._finger_fractions)[env_ids] = 0.0 - - def compute(self) -> torch.Tensor: - """Advance the expert and return its batched action tensor. - - Returns: - Expert-owned actions, shape [N, 45], containing absolute robot-root-frame - poses and finger joint targets [rad]. The next call overwrites this tensor. - """ - wp.launch( - _infer_state_machine, - dim=self.num_envs, - inputs=[ - self.dt, - self.pull_speed, - self._keyframes, - self._hand_rotations, - self._torso_pose, - self._phase_durations, - self._phase_start_keyframes, - self._phase_end_keyframes, - self._phase_start_fingers, - self._phase_end_fingers, - self._finger_closed_values, - self._finger_groups, - self._finger_fractions, - self._state, - self._state_time, - self._pull_distance, - self._actions, - ], - device=self._warp_device, - ) - return self.actions diff --git a/source/isaaclab_tasks/isaaclab_tasks/contrib/tablecloth/h1_env.py b/source/isaaclab_tasks/isaaclab_tasks/contrib/tablecloth/h1_env.py deleted file mode 100644 index 874c077b4496..000000000000 --- a/source/isaaclab_tasks/isaaclab_tasks/contrib/tablecloth/h1_env.py +++ /dev/null @@ -1,44 +0,0 @@ -# Copyright (c) 2022-2026, The Isaac Lab Project Developers (https://github.com/isaac-sim/IsaacLab/blob/main/CONTRIBUTORS.md). -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause - -"""Environment wrapper that prepares the downloadable H1 asset before startup.""" - -from __future__ import annotations - -import os -import tempfile -from typing import TYPE_CHECKING - -from isaaclab.envs import ManagerBasedRLEnv - -if TYPE_CHECKING: - from .h1_env_cfg import H1TableclothEnvCfg - - -def _convert_h1_asset() -> str: - """Download and cache the H1-with-hands MJCF as a fixed-base USD.""" - import newton.utils - - from isaaclab.sim.converters import MjcfConverter, MjcfConverterCfg - - converter_cfg = MjcfConverterCfg( - asset_path=str(newton.utils.download_asset("unitree_h1") / "mjcf/h1_with_hand.xml"), - usd_dir=os.path.join(tempfile.gettempdir(), "IsaacLab", "tablecloth_h1_vbd"), - usd_file_name="h1_with_hand.usda", - fix_base=True, - self_collision=False, - robot_type="Humanoid", - run_asset_transformer=False, - run_multi_physics_conversion=False, - ) - return MjcfConverter(converter_cfg).usd_path - - -class H1TableclothEnv(ManagerBasedRLEnv): - """Manager-based tablecloth task with lazy H1 asset conversion.""" - - def __init__(self, cfg: H1TableclothEnvCfg, **kwargs): - cfg.scene.robot.spawn.usd_path = _convert_h1_asset() - super().__init__(cfg, **kwargs) diff --git a/source/isaaclab_tasks/isaaclab_tasks/contrib/tablecloth/h1_env_cfg.py b/source/isaaclab_tasks/isaaclab_tasks/contrib/tablecloth/h1_env_cfg.py deleted file mode 100644 index be840f21c3a6..000000000000 --- a/source/isaaclab_tasks/isaaclab_tasks/contrib/tablecloth/h1_env_cfg.py +++ /dev/null @@ -1,517 +0,0 @@ -# Copyright (c) 2022-2026, The Isaac Lab Project Developers (https://github.com/isaac-sim/IsaacLab/blob/main/CONTRIBUTORS.md). -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause - -"""Manager-based configuration for the H1 tablecloth task.""" - -from __future__ import annotations - -from isaaclab_newton.controllers.ik import NewtonIKJointLimitObjectiveCfg, NewtonIKPoseObjectiveCfg, NewtonIKSolverCfg -from isaaclab_newton.envs.mdp.actions.newton_ik_actions_cfg import NewtonInverseKinematicsActionCfg -from isaaclab_newton.physics import ( - NewtonCfg, - NewtonCollisionPipelineCfg, - NewtonShapeCfg, - NewtonSoftContactCfg, - VBDSolverCfg, -) -from isaaclab_newton.sim.schemas import NewtonDeformableBodyPropertiesCfg, NewtonSDFCollisionCfg -from isaaclab_newton.sim.spawners.materials import NewtonSurfaceDeformableBodyMaterialCfg - -import isaaclab.sim as sim_utils -from isaaclab.actuators import ImplicitActuatorCfg -from isaaclab.assets import ArticulationCfg, AssetBaseCfg, DeformableObjectCfg -from isaaclab.envs import ManagerBasedRLEnvCfg -from isaaclab.managers import EventTermCfg as EventTerm -from isaaclab.managers import ObservationGroupCfg as ObsGroup -from isaaclab.managers import ObservationTermCfg as ObsTerm -from isaaclab.managers import RewardTermCfg as RewTerm -from isaaclab.managers import SceneEntityCfg -from isaaclab.managers import TerminationTermCfg as DoneTerm -from isaaclab.scene import InteractiveSceneCfg -from isaaclab.sim import SimulationCfg -from isaaclab.utils import configclass -from isaaclab.visualizers import VisualizerCfg - -from isaaclab_tasks.core.lift import mdp as lift_mdp - -from . import mdp -from .assets import ( - BOWL_LOCAL_HEIGHT, - BOWL_LOCAL_RADIUS, - BOWL_LOCAL_Z_MIN, - BOWL_SCALE, - BOWL_USD, - FORK_CENTER_OF_MASS, - FORK_DIAGONAL_INERTIA, - FORK_LOCAL_Z_MIN, - FORK_ROTATION, - FORK_SCALE, - FORK_USD, - KITCHEN_ISLAND_SIZE, - KITCHEN_ISLAND_USD, - RIGID_GAP, - WINE_GLASS_CENTER_OF_MASS, - WINE_GLASS_DIAGONAL_INERTIA, - WINE_GLASS_LOCAL_Z_MIN, - WINE_GLASS_USD, - VisualTableUsdFileCfg, - collision_properties, - rigid_material, - rigid_object_cfg, - spawn_h1_from_usd, - tabletop_collider_cfg, -) - -FPS = 60 -SUBSTEPS = 16 -# The straight-leg H1 sole is 1.0442 m below its pelvis; keep the tabletop 1 cm below the pelvis. -H1_STANDING_HEIGHT = 1.0442 + RIGID_GAP -TABLE_TOP_Z = H1_STANDING_HEIGHT - 0.01 -TABLEWARE_CLEARANCE = 0.008 -CLOTH_Z = TABLE_TOP_Z + 0.002 -TABLEWARE_NAMES = ("bowl", "glass", "fork") - -KITCHEN_ISLAND_SCALE = ( - 0.40 / KITCHEN_ISLAND_SIZE[0], - 0.72 / KITCHEN_ISLAND_SIZE[1], - TABLE_TOP_Z / KITCHEN_ISLAND_SIZE[2], -) - -HAND_OFFSETS = ((0.146273, -0.068447, 0.028077), (0.148808, 0.068652, 0.026675)) -FINGER_JOINT_NAMES = [ - f"{side}_{joint}" - for side in ("L", "R") - for joint in ( - "thumb_proximal_yaw_joint", - "thumb_proximal_pitch_joint", - "thumb_intermediate_joint", - "thumb_distal_joint", - "index_proximal_joint", - "index_intermediate_joint", - "middle_proximal_joint", - "middle_intermediate_joint", - "ring_proximal_joint", - "ring_intermediate_joint", - "pinky_proximal_joint", - "pinky_intermediate_joint", - ) -] - - -@configclass -class H1ArticulationCfg(ArticulationCfg): - """H1 articulation with SDF hand collisions and a high-friction grasp material.""" - - def _post_spawn(self, stage) -> None: - super()._post_spawn(stage) - from pxr import UsdGeom, UsdPhysics # noqa: PLC0415 - - from isaaclab.sim.schemas import apply_namespaced # noqa: PLC0415 - from isaaclab.sim.spawners.materials.physics_materials import ( # noqa: PLC0415 - spawn_physics_material_from_fragments, - ) - - root_path = self.spawn.spawn_path if self.spawn is not None and self.spawn.spawn_path else self.prim_path - meshes = sim_utils.get_all_matching_child_prims( - root_path, - predicate=lambda prim: prim.IsA(UsdGeom.Mesh), - stage=stage, - ) - for mesh in meshes: - mesh_path = mesh.GetPath().pathString - if "/left_hand_link/" in mesh_path or "/right_hand_link/" in mesh_path: - usd_mesh = UsdGeom.Mesh(mesh) - usd_mesh.CreateDisplayColorAttr([(0.0100228, 0.0100228, 0.0100228)]) - usd_mesh.CreateDisplayOpacityAttr([1.0]) - - # Full-surface rigid-soft contact requires an SDF for every participating mesh. - for collider in (mesh for mesh in meshes if mesh.HasAPI(UsdPhysics.CollisionAPI)): - collider.RemoveAppliedSchema("NewtonMeshCollisionAPI") - UsdPhysics.MeshCollisionAPI(collider).GetApproximationAttr().Set("none") - apply_namespaced( - NewtonSDFCollisionCfg(sdf_max_resolution=64, sdf_padding=0.012), - collider.GetPath().pathString, - stage, - ) - - # The global cloth friction is low so tableware can stay put; pinching needs a strong local contact. - grasp_material_path = f"{root_path}/GraspMaterial" - spawn_physics_material_from_fragments( - grasp_material_path, - rigid_material( - density=None, - friction=2000.0, - contact_stiffness=8.0e3, - contact_damping=2.0e1, - ), - stage=stage, - ) - grasp_roots = {"L_thumb_proximal_base", "L_index_proximal", "R_thumb_proximal_base", "R_index_proximal"} - finger_prims = sim_utils.get_all_matching_child_prims( - root_path, - predicate=lambda prim: prim.GetName() in grasp_roots, - stage=stage, - ) - if len(finger_prims) != len(grasp_roots): - raise RuntimeError(f"Expected {len(grasp_roots)} H1 grasp roots, found {len(finger_prims)}") - for prim in finger_prims: - sim_utils.bind_physics_material(prim.GetPath(), grasp_material_path, stage=stage) - - -H1_CFG = H1ArticulationCfg( - prim_path="{ENV_REGEX_NS}/Robot", - articulation_root_prim_path="/fix_base_joint", - spawn=sim_utils.UsdFileCfg( - func=spawn_h1_from_usd, - usd_path="", - make_uninstanceable=True, - fix_root_link=True, - # A compliant VBD world joint alone lets the base bounce under manipulation loads. - rigid_props={"/Geometry/pelvis": [sim_utils.UsdPhysicsRigidBodyCfg(kinematic_enabled=True)]}, - collision_props=collision_properties(), - physics_material=rigid_material( - density=None, - friction=0.50, - contact_stiffness=1.0e3, - contact_damping=1.0e-2, - ), - ), - init_state=ArticulationCfg.InitialStateCfg( - pos=(-0.75, 0.0, H1_STANDING_HEIGHT), - joint_pos={ - ".*(hip|knee|ankle).*": 0.0, - "torso_joint": 0.0, - "left_shoulder_pitch_joint": -0.333745, - "left_shoulder_roll_joint": 1.362674, - "left_shoulder_yaw_joint": -1.246960, - "left_elbow_joint": -0.403194, - "left_hand_joint": -1.755706, - "right_shoulder_pitch_joint": -0.347129, - "right_shoulder_roll_joint": -1.375690, - "right_shoulder_yaw_joint": 1.260851, - "right_elbow_joint": -0.409848, - "right_hand_joint": 1.769167, - }, - ), - actuators={ - "body": ImplicitActuatorCfg( - joint_names_expr=[r"(?!torso_joint$)(?![LR]_(?:thumb|index|middle|ring|pinky)_).+"], - stiffness=5.0e4, - damping=5.0e2, - ), - "torso": ImplicitActuatorCfg( - joint_names_expr=["torso_joint"], - stiffness=2.0e5, - damping=2.0e3, - ), - "fingers": ImplicitActuatorCfg( - joint_names_expr=[r"[LR]_(?:thumb|index|middle|ring|pinky)_.+"], - stiffness=1.0e3, - damping=2.0, - ), - }, -) - - -@configclass -class H1TableclothSceneCfg(InteractiveSceneCfg): - """Scene containing H1, a VBD cloth, and dynamic tableware.""" - - ground = AssetBaseCfg( - prim_path="/World/defaultGroundPlane", - spawn=sim_utils.GroundPlaneCfg(), - collision_group=-1, - ) - robot: ArticulationCfg = H1_CFG - table = AssetBaseCfg( - prim_path="{ENV_REGEX_NS}/Table", - spawn=VisualTableUsdFileCfg( - usd_path=KITCHEN_ISLAND_USD, - scale=KITCHEN_ISLAND_SCALE, - variants={"Physics": "none"}, - make_uninstanceable=True, - rigid_props={"(/.*)?": [sim_utils.UsdPhysicsRigidBodyCfg(rigid_body_enabled=False)]}, - collision_props={"(/.*)?": [sim_utils.UsdPhysicsCollisionCfg(collision_enabled=False)]}, - ), - ) - tabletop_collider = AssetBaseCfg( - prim_path="{ENV_REGEX_NS}/Tabletop", - spawn=tabletop_collider_cfg( - (0.40, 0.72, 0.08), - # VBD mixes this with soft_contact_mu=0.01, yielding about 0.2 cloth-table friction. - friction=4.0, - contact_stiffness=1.0e4, - contact_damping=1.0e1, - ), - init_state=AssetBaseCfg.InitialStateCfg(pos=(0.0, 0.0, TABLE_TOP_Z - 0.04)), - ) - cloth = DeformableObjectCfg( - prim_path="{ENV_REGEX_NS}/Cloth", - spawn=sim_utils.MeshRectangleCfg( - # Corner overhang lets the index fingers lift the cloth without pressing against the tabletop. - size=(0.48, 0.80), - edge_refinement=24, - deformable_props=NewtonDeformableBodyPropertiesCfg(), - visual_material=sim_utils.PreviewSurfaceCfg(diffuse_color=(0.76, 0.05, 0.05)), - physics_material=NewtonSurfaceDeformableBodyMaterialCfg( - density=0.24, - particle_radius=0.001, - tri_ke=5.0e4, - tri_ka=5.0e4, - tri_kd=5.0e1, - edge_ke=0.10, - edge_kd=1.0e-3, - ), - ), - init_state=DeformableObjectCfg.InitialStateCfg(pos=(0.0, 0.0, CLOTH_Z)), - ) - bowl = rigid_object_cfg( - usd_path=BOWL_USD, - position=(0.08, -0.07, CLOTH_Z + TABLEWARE_CLEARANCE - BOWL_SCALE * BOWL_LOCAL_Z_MIN), - mass=0.45, - collision_proxy_cfg=sim_utils.CylinderCfg( - radius=BOWL_LOCAL_RADIUS, - height=BOWL_LOCAL_HEIGHT, - visible=False, - collision_props=collision_properties(), - physics_material=rigid_material( - density=None, - friction=0.05, - contact_stiffness=1.0e4, - contact_damping=1.0e1, - ), - ), - collision_proxy_position=(0.0, 0.0, BOWL_LOCAL_Z_MIN + 0.5 * BOWL_LOCAL_HEIGHT), - scale=(BOWL_SCALE,) * 3, - ).replace(prim_path="{ENV_REGEX_NS}/Bowl") - glass = rigid_object_cfg( - usd_path=WINE_GLASS_USD, - position=(0.10, 0.13, CLOTH_Z + TABLEWARE_CLEARANCE - WINE_GLASS_LOCAL_Z_MIN), - mass=0.35, - collision_proxy_cfg=sim_utils.CylinderCfg( - radius=0.040, - height=0.006, - visible=False, - collision_props=collision_properties(), - physics_material=rigid_material( - density=None, - friction=0.01, - contact_stiffness=1.0e4, - contact_damping=1.0e1, - ), - ), - collision_proxy_position=(0.0, 0.0, 0.003), - center_of_mass=WINE_GLASS_CENTER_OF_MASS, - diagonal_inertia=WINE_GLASS_DIAGONAL_INERTIA, - visual_color=(0.55, 0.75, 0.90), - visual_opacity=0.90, - visual_roughness=0.12, - ).replace(prim_path="{ENV_REGEX_NS}/Glass") - fork = rigid_object_cfg( - usd_path=FORK_USD, - position=(0.12, -0.22, CLOTH_Z + TABLEWARE_CLEARANCE - FORK_SCALE * FORK_LOCAL_Z_MIN), - mass=0.07, - collision_proxy_cfg=sim_utils.CuboidCfg( - size=(0.014, 0.160, 0.003), - visible=False, - collision_props=collision_properties(), - physics_material=rigid_material( - density=None, - friction=0.02, - contact_stiffness=1.0e4, - contact_damping=1.0e1, - ), - ), - collision_proxy_position=(0.0, 0.0092, 0.0016), - orientation=FORK_ROTATION, - scale=(FORK_SCALE,) * 3, - center_of_mass=FORK_CENTER_OF_MASS, - diagonal_inertia=FORK_DIAGONAL_INERTIA, - ).replace(prim_path="{ENV_REGEX_NS}/Fork") - light = AssetBaseCfg( - prim_path="/World/Light", - spawn=sim_utils.DomeLightCfg(intensity=2500.0, color=(0.75, 0.75, 0.75)), - ) - - -@configclass -class ActionsCfg: - """Absolute arm/torso poses and finger targets; leg actuators hold the standing pose.""" - - arm_action = NewtonInverseKinematicsActionCfg( - asset_name="robot", - joint_names=["torso_joint", "(left|right)_(shoulder_.*|elbow|hand)_joint"], - controller=NewtonIKSolverCfg(iterations=24, lambda_initial=0.1), - objectives=[ - NewtonIKPoseObjectiveCfg( - body_name="left_hand_link", - name="left_hand", - body_offset_pos=HAND_OFFSETS[0], - use_relative_mode=False, - position_weight=5.0, - rotation_weight=0.2, - ), - NewtonIKPoseObjectiveCfg( - body_name="right_hand_link", - name="right_hand", - body_offset_pos=HAND_OFFSETS[1], - use_relative_mode=False, - position_weight=5.0, - rotation_weight=0.2, - ), - NewtonIKPoseObjectiveCfg( - body_name="torso_link", - name="torso", - use_relative_mode=False, - position_weight=50.0, - rotation_weight=50.0, - ), - NewtonIKJointLimitObjectiveCfg(weight=1.0), - ], - ) - finger_action = mdp.JointPositionActionCfg( - asset_name="robot", - joint_names=FINGER_JOINT_NAMES, - preserve_order=True, - scale=1.0, - use_default_offset=False, - ) - - -@configclass -class ObservationsCfg: - """Proprioception and task-object state exposed to an agent.""" - - @configclass - class PolicyCfg(ObsGroup): - joint_pos = ObsTerm(func=mdp.joint_pos_rel) - joint_vel = ObsTerm(func=mdp.joint_vel_rel) - hand_poses = ObsTerm( - func=mdp.body_pose_w, - params={"asset_cfg": SceneEntityCfg("robot", body_names=["left_hand_link", "right_hand_link"])}, - ) - cloth_points = ObsTerm( - func=lift_mdp.DeformableSampledPointsInRobotRootFrame, - params={"asset_cfg": SceneEntityCfg("cloth"), "num_points": 20}, - ) - bowl_pose = ObsTerm(func=mdp.root_pos_w, params={"asset_cfg": SceneEntityCfg("bowl")}) - bowl_orientation = ObsTerm(func=mdp.root_quat_w, params={"asset_cfg": SceneEntityCfg("bowl")}) - glass_pose = ObsTerm(func=mdp.root_pos_w, params={"asset_cfg": SceneEntityCfg("glass")}) - glass_orientation = ObsTerm(func=mdp.root_quat_w, params={"asset_cfg": SceneEntityCfg("glass")}) - fork_pose = ObsTerm(func=mdp.root_pos_w, params={"asset_cfg": SceneEntityCfg("fork")}) - fork_orientation = ObsTerm(func=mdp.root_quat_w, params={"asset_cfg": SceneEntityCfg("fork")}) - actions = ObsTerm(func=mdp.last_action) - - def __post_init__(self) -> None: - self.enable_corruption = False - self.concatenate_terms = True - - policy: PolicyCfg = PolicyCfg() - - -@configclass -class EventCfg: - """Reset the complete scene to the validated tablecloth start state.""" - - reset_scene = EventTerm( - func=mdp.reset_scene_to_default, - mode="reset", - params={"reset_joint_targets": True}, - ) - - -@configclass -class RewardsCfg: - """Task rewards that favor a clean pull with stationary tableware.""" - - cloth_progress = RewTerm(func=mdp.cloth_pull_progress, weight=2.0, params={"target_distance": 0.30}) - tableware_position = RewTerm( - func=mdp.tableware_displacement, - weight=2.0, - params={"asset_names": TABLEWARE_NAMES, "distance_scale": 0.05}, - ) - tableware_orientation = RewTerm( - func=mdp.tableware_upright, - weight=1.0, - params={"asset_names": TABLEWARE_NAMES}, - ) - action_rate = RewTerm(func=mdp.action_rate_l2, weight=-1.0e-4) - success = RewTerm( - func=mdp.is_terminated_term, - weight=10.0, - params={"term_keys": ["success"]}, - ) - - -@configclass -class TerminationsCfg: - """Success, failure, and time-limit conditions for the tablecloth task.""" - - success = DoneTerm( - func=mdp.tablecloth_success, - params={ - "asset_names": TABLEWARE_NAMES, - "table_height": TABLE_TOP_Z, - "pull_distance": 0.30, - "maximum_tilt": 0.35, - "maximum_displacement": 0.05, - }, - ) - tableware_fallen = DoneTerm( - func=mdp.tableware_fallen, - params={"asset_names": TABLEWARE_NAMES, "minimum_height": TABLE_TOP_Z - 0.15}, - ) - time_out = DoneTerm(func=mdp.time_out, time_out=True) - - -@configclass -class H1TableclothEnvCfg(ManagerBasedRLEnvCfg): - """H1 tablecloth task using Newton VBD and Newton IK.""" - - class_type: type | str = "{DIR}.h1_env:H1TableclothEnv" - scene: H1TableclothSceneCfg = H1TableclothSceneCfg(num_envs=1, env_spacing=2.0, replicate_physics=True) - actions: ActionsCfg = ActionsCfg() - observations: ObservationsCfg = ObservationsCfg() - events: EventCfg = EventCfg() - rewards: RewardsCfg = RewardsCfg() - terminations: TerminationsCfg = TerminationsCfg() - commands = None - curriculum = None - - def __post_init__(self) -> None: - self.seed = 0 - self.decimation = 1 - self.episode_length_s = 6.0 - self.sim = SimulationCfg( - dt=1.0 / FPS, - render_interval=1, - physics=NewtonCfg( - num_substeps=SUBSTEPS, - collision_decimation=1, - default_shape_cfg=NewtonShapeCfg(gap=RIGID_GAP, ke=1.0e4, kd=1.0e1, mu=0.35), - soft_contact_cfg=NewtonSoftContactCfg( - soft_contact_ke=1.0e3, - soft_contact_kd=1.0e-2, - soft_contact_mu=0.01, - ), - collision_cfg=NewtonCollisionPipelineCfg( - broad_phase="sap", - soft_contact_margin=0.008, - enable_rigid_soft_full_surface_contact=True, - ), - solver_cfg=VBDSolverCfg( - iterations=30, - rigid_compliant_alm=True, - # Structural attachment stiffness is independent of the actuator's position gains. - rigid_joint_linear_ke=1.0e7, - rigid_joint_angular_ke=1.0e7, - rigid_body_particle_contact_buffer_size=8192, - ), - ), - default_visualizer_cfg=VisualizerCfg( - eye=(-2.435, -2.70, 1.725), - lookat=(-0.08, 0.0, 0.93), - ), - ) diff --git a/source/isaaclab_tasks/isaaclab_tasks/contrib/tablecloth/mdp/__init__.py b/source/isaaclab_tasks/isaaclab_tasks/contrib/tablecloth/mdp/__init__.py deleted file mode 100644 index a699a9c9b542..000000000000 --- a/source/isaaclab_tasks/isaaclab_tasks/contrib/tablecloth/mdp/__init__.py +++ /dev/null @@ -1,10 +0,0 @@ -# Copyright (c) 2022-2026, The Isaac Lab Project Developers (https://github.com/isaac-sim/IsaacLab/blob/main/CONTRIBUTORS.md). -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause - -"""MDP terms for the H1 tablecloth task.""" - -from isaaclab.utils.module import lazy_export - -lazy_export() diff --git a/source/isaaclab_tasks/isaaclab_tasks/contrib/tablecloth/mdp/__init__.pyi b/source/isaaclab_tasks/isaaclab_tasks/contrib/tablecloth/mdp/__init__.pyi deleted file mode 100644 index 8a188f027084..000000000000 --- a/source/isaaclab_tasks/isaaclab_tasks/contrib/tablecloth/mdp/__init__.pyi +++ /dev/null @@ -1,17 +0,0 @@ -# Copyright (c) 2022-2026, The Isaac Lab Project Developers (https://github.com/isaac-sim/IsaacLab/blob/main/CONTRIBUTORS.md). -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause - -__all__ = [ - "cloth_pull_progress", - "tablecloth_success", - "tableware_displacement", - "tableware_fallen", - "tableware_upright", -] - -from isaaclab.envs.mdp import * - -from .rewards import cloth_pull_progress, tableware_displacement, tableware_upright -from .terminations import tablecloth_success, tableware_fallen diff --git a/source/isaaclab_tasks/isaaclab_tasks/contrib/tablecloth/mdp/_metrics.py b/source/isaaclab_tasks/isaaclab_tasks/contrib/tablecloth/mdp/_metrics.py deleted file mode 100644 index 7087bf23098e..000000000000 --- a/source/isaaclab_tasks/isaaclab_tasks/contrib/tablecloth/mdp/_metrics.py +++ /dev/null @@ -1,31 +0,0 @@ -# Copyright (c) 2022-2026, The Isaac Lab Project Developers (https://github.com/isaac-sim/IsaacLab/blob/main/CONTRIBUTORS.md). -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause - -from __future__ import annotations - -from typing import TYPE_CHECKING - -import torch - -from isaaclab.managers import SceneEntityCfg - -if TYPE_CHECKING: - from isaaclab.assets import DeformableObject, RigidObject - from isaaclab.envs import ManagerBasedRLEnv - - -def cloth_pull_distance( - env: ManagerBasedRLEnv, - asset_cfg: SceneEntityCfg = SceneEntityCfg("cloth"), -) -> torch.Tensor: - """Return cloth center-of-mass travel along the negative x-axis [m].""" - cloth: DeformableObject = env.scene[asset_cfg.name] - initial_x = cloth.data.default_nodal_state_w.torch[..., 0].mean(dim=1) - return initial_x - cloth.data.root_pos_w.torch[:, 0] - - -def tableware_assets(env: ManagerBasedRLEnv, asset_names: tuple[str, ...]) -> list[RigidObject]: - """Resolve the configured tableware rigid objects.""" - return [env.scene[name] for name in asset_names] diff --git a/source/isaaclab_tasks/isaaclab_tasks/contrib/tablecloth/mdp/rewards.py b/source/isaaclab_tasks/isaaclab_tasks/contrib/tablecloth/mdp/rewards.py deleted file mode 100644 index e1c92e9d1c08..000000000000 --- a/source/isaaclab_tasks/isaaclab_tasks/contrib/tablecloth/mdp/rewards.py +++ /dev/null @@ -1,47 +0,0 @@ -# Copyright (c) 2022-2026, The Isaac Lab Project Developers (https://github.com/isaac-sim/IsaacLab/blob/main/CONTRIBUTORS.md). -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause - -from __future__ import annotations - -from typing import TYPE_CHECKING - -import torch - -from isaaclab.managers import SceneEntityCfg - -from ._metrics import cloth_pull_distance, tableware_assets - -if TYPE_CHECKING: - from isaaclab.envs import ManagerBasedRLEnv - - -def cloth_pull_progress( - env: ManagerBasedRLEnv, - target_distance: float, - asset_cfg: SceneEntityCfg = SceneEntityCfg("cloth"), -) -> torch.Tensor: - """Reward cloth travel toward the pull goal.""" - return torch.clamp(cloth_pull_distance(env, asset_cfg) / target_distance, min=0.0, max=1.0) - - -def tableware_displacement( - env: ManagerBasedRLEnv, - asset_names: tuple[str, ...], - distance_scale: float, -) -> torch.Tensor: - """Reward keeping tableware near its initial horizontal position.""" - squared_distance = torch.zeros(env.num_envs, device=env.device) - for asset in tableware_assets(env, asset_names): - initial_position = asset.data.default_root_pose.torch[:, :3] + env.scene.env_origins - squared_distance += torch.sum(torch.square(asset.data.root_pos_w.torch[:, :2] - initial_position[:, :2]), dim=1) - return torch.exp(-squared_distance / distance_scale**2) - - -def tableware_upright(env: ManagerBasedRLEnv, asset_names: tuple[str, ...]) -> torch.Tensor: - """Reward keeping the tableware's local z-axes upright.""" - upright = torch.zeros(env.num_envs, device=env.device) - for asset in tableware_assets(env, asset_names): - upright += torch.clamp(-asset.data.projected_gravity_b.torch[:, 2], min=0.0, max=1.0) - return upright / len(asset_names) diff --git a/source/isaaclab_tasks/isaaclab_tasks/contrib/tablecloth/mdp/terminations.py b/source/isaaclab_tasks/isaaclab_tasks/contrib/tablecloth/mdp/terminations.py deleted file mode 100644 index 797a343b6899..000000000000 --- a/source/isaaclab_tasks/isaaclab_tasks/contrib/tablecloth/mdp/terminations.py +++ /dev/null @@ -1,64 +0,0 @@ -# Copyright (c) 2022-2026, The Isaac Lab Project Developers (https://github.com/isaac-sim/IsaacLab/blob/main/CONTRIBUTORS.md). -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause - -from __future__ import annotations - -import math -from typing import TYPE_CHECKING - -import torch - -from isaaclab.managers import SceneEntityCfg - -from ._metrics import cloth_pull_distance, tableware_assets - -if TYPE_CHECKING: - from isaaclab.envs import ManagerBasedRLEnv - - -def tablecloth_success( - env: ManagerBasedRLEnv, - asset_names: tuple[str, ...], - table_height: float, - pull_distance: float, - maximum_tilt: float, - maximum_displacement: float, - cloth_cfg: SceneEntityCfg = SceneEntityCfg("cloth"), -) -> torch.Tensor: - """Detect a pull that leaves every object upright and near its start position. - - Args: - env: Manager-based tablecloth environment. - asset_names: Names of the tableware assets. - table_height: Tabletop height [m]. - pull_distance: Required cloth travel [m]. - maximum_tilt: Allowed tableware tilt [rad]. - maximum_displacement: Allowed horizontal tableware travel [m]. - cloth_cfg: Cloth asset selector. - - Returns: - Success flags for all environments. - """ - success = cloth_pull_distance(env, cloth_cfg) >= pull_distance - minimum_up_axis = math.cos(maximum_tilt) - for asset in tableware_assets(env, asset_names): - on_table = asset.data.root_pos_w.torch[:, 2] >= table_height - 0.05 - upright = -asset.data.projected_gravity_b.torch[:, 2] >= minimum_up_axis - initial_position = asset.data.default_root_pose.torch[:, :2] + env.scene.env_origins[:, :2] - stationary = torch.linalg.vector_norm(asset.data.root_pos_w.torch[:, :2] - initial_position, dim=1) - success &= on_table & upright & (stationary <= maximum_displacement) - return success - - -def tableware_fallen( - env: ManagerBasedRLEnv, - asset_names: tuple[str, ...], - minimum_height: float, -) -> torch.Tensor: - """Terminate when any tableware object falls below the support surface.""" - fallen = torch.zeros(env.num_envs, dtype=torch.bool, device=env.device) - for asset in tableware_assets(env, asset_names): - fallen |= asset.data.root_pos_w.torch[:, 2] < minimum_height - return fallen diff --git a/source/isaaclab_tasks/test/contrib/contrib_env_test_utils.py b/source/isaaclab_tasks/test/contrib/contrib_env_test_utils.py index fd95d866112a..7f3a1d014428 100644 --- a/source/isaaclab_tasks/test/contrib/contrib_env_test_utils.py +++ b/source/isaaclab_tasks/test/contrib/contrib_env_test_utils.py @@ -7,10 +7,10 @@ The smoke tests are split by the runtime each environment needs, so a test process only starts what its environments use: ``kitless`` environments run without Isaac Sim, ``kit`` environments need Isaac Sim for -physics or asset import but no renderer, and ``kit_cameras`` environments also need the RTX renderer, -the expensive part of starting Isaac Sim. The runtime comes from :func:`isaaclab.app.sim_launcher.scan`, -the same check ``launch_simulation`` uses to decide whether to start Isaac Sim, with cold asset-import -requirements accounted for separately. +PhysX but no renderer, and ``kit_cameras`` environments also need the RTX renderer, the expensive part of +starting Isaac Sim. The runtime comes from :func:`isaaclab.app.sim_launcher.scan`, the same check +``launch_simulation`` uses to decide whether to start Isaac Sim, so a new environment lands in the right file +without being listed anywhere. Contributed environments are intentionally sampled once per task package, robot directory, and runtime. Additional variants in the same family do not add smoke tests. @@ -23,7 +23,6 @@ import pytest from isaaclab.app.sim_launcher import scan -from isaaclab.utils.version import standalone_importers_available from isaaclab_tasks.utils.parse_cfg import parse_env_cfg @@ -55,9 +54,6 @@ def _skip_reason(task_name: str) -> str | None: def task_runtime(task_name: str) -> Runtime: """Return the runtime an environment's default configuration launches with.""" - # H1 converts a downloaded MJCF before scene construction, even though its physics is kitless. - if task_name == "IsaacContrib-Tablecloth-H1" and not standalone_importers_available(): - return "kit" config_scan = scan(parse_env_cfg(task_name)) if not config_scan.needs_kit: return "kitless" diff --git a/source/isaaclab_tasks/test/contrib/test_tablecloth_h1_stance.py b/source/isaaclab_tasks/test/contrib/test_tablecloth_h1_stance.py deleted file mode 100644 index a506a8cbbe57..000000000000 --- a/source/isaaclab_tasks/test/contrib/test_tablecloth_h1_stance.py +++ /dev/null @@ -1,157 +0,0 @@ -# Copyright (c) 2022-2026, The Isaac Lab Project Developers (https://github.com/isaac-sim/IsaacLab/blob/main/CONTRIBUTORS.md). -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause - -"""Physical regression for the H1 tablecloth expert's stance and grasp.""" - -from isaaclab.test.utils import launch_test_simulation -from isaaclab.utils.version import standalone_importers_available - -# Keep Kit alive for the test process when its MJCF importer is needed. -if not standalone_importers_available(): - launch_test_simulation() - -import gymnasium as gym -import pytest -import torch -import trimesh - -import isaaclab.sim as sim_utils -from isaaclab.app import launch_simulation -from isaaclab.test.utils import DeviceScope, test_devices -from isaaclab.utils.math import quat_apply, quat_error_magnitude, quat_mul, subtract_frame_transforms - -import isaaclab_tasks # noqa: F401 -from isaaclab_tasks.contrib.tablecloth import expert -from isaaclab_tasks.contrib.tablecloth.h1_env_cfg import HAND_OFFSETS -from isaaclab_tasks.utils import parse_env_cfg - -MULTI_GPU_SKIP_REASON = "Experimental open-loop grasp diagnostic; run manually, not in CI." - - -@pytest.mark.parametrize("device", test_devices(DeviceScope.CUDA)) -def test_h1_stays_grounded_and_retains_cloth(device): - """The scripted trick retains both physical grips without destabilizing the robot.""" - cfg = parse_env_cfg("IsaacContrib-Tablecloth-H1", device=device, num_envs=1) - cfg.sim.visualizer_cfgs = [] - success_term = cfg.terminations.success - cfg.terminations.success = None - cfg.terminations.tableware_fallen = None - cfg.rewards.success = None - with launch_simulation(cfg=cfg): - from pxr import Gf, UsdGeom, UsdPhysics # noqa: PLC0415 - - env = gym.make("IsaacContrib-Tablecloth-H1", cfg=cfg).unwrapped - try: - env.reset() - robot = env.scene["robot"] - pelvis_ids, _ = robot.find_bodies("pelvis") - foot_ids, foot_names = robot.find_bodies(".*ankle_link") - leg_ids, _ = robot.find_joints(".*(hip|knee|ankle).*", preserve_order=True) - initial_pelvis = robot.data.body_pos_w.torch[:, pelvis_ids].clone() - initial_legs = robot.data.joint_pos.torch[:, leg_ids].clone() - - bbox_cache = UsdGeom.BBoxCache(0, ["default", "render", "proxy"]) - for foot_id, foot_name in zip(foot_ids, foot_names, strict=True): - foot_prims = sim_utils.get_all_matching_child_prims( - "/World/envs/env_0/Robot", - predicate=lambda prim: prim.GetName() == foot_name and prim.HasAPI(UsdPhysics.RigidBodyAPI), - stage=env.sim.stage, - ) - assert len(foot_prims) == 1 - bounds = bbox_cache.ComputeUntransformedBound(foot_prims[0]).ComputeAlignedRange() - corners = torch.tensor([tuple(bounds.GetCorner(i)) for i in range(8)], device=device) - corners_w = quat_apply(robot.data.body_quat_w.torch[0, foot_id].expand(8, -1), corners) - corners_w += robot.data.body_pos_w.torch[0, foot_id] - assert 0.0 <= corners_w[:, 2].min().item() <= 0.002, "H1's feet must start at ground level" - - body_ids, _ = robot.find_bodies(["left_hand_link", "right_hand_link", "torso_link"], preserve_order=True) - positions = robot.data.body_pos_w.torch[:, body_ids].clone() - rotations = robot.data.body_quat_w.torch[:, body_ids] - initial_torso_position = positions[:, 2].clone() - up_axis = torch.tensor([[0.0, 0.0, 1.0]], device=device) - initial_torso_up = quat_apply(rotations[:, 2], up_axis) - offsets = torch.tensor([*HAND_OFFSETS, (0.0, 0.0, 0.0)], device=device) - positions += quat_apply(rotations, offsets.unsqueeze(0)) - positions, rotations = subtract_frame_transforms( - robot.data.root_pos_w.torch[:, None].expand_as(positions), - robot.data.root_quat_w.torch[:, None].expand_as(rotations), - positions, - rotations, - ) - torso_pose = torch.cat((positions[:, 2], rotations[:, 2]), dim=-1) - machine = expert.H1TableclothStateMachine(env.step_dt, torso_pose, env.action_manager.total_action_dim, 2.0) - closed_thumbs = torch.tensor( - [expert.FINGER_CLOSED_VALUES[0], expert.FINGER_CLOSED_VALUES[12]], device=device - ) - grasp_pose = torch.tensor(expert.HAND_KEYFRAMES[-2:], device=device) - cloth_mesh = UsdGeom.Mesh(env.sim.stage.GetPrimAtPath("/World/envs/env_0/Cloth/sim_mesh")) - assert all(count == 3 for count in cloth_mesh.GetFaceVertexCountsAttr().Get()) - cloth_faces = torch.tensor(cloth_mesh.GetFaceVertexIndicesAttr().Get(), device=device).reshape(-1, 3) - mesh_transform = UsdGeom.XformCache().GetLocalToWorldTransform(cloth_mesh.GetPrim()) - rest_points = torch.tensor( - [tuple(mesh_transform.Transform(Gf.Vec3d(*point))) for point in cloth_mesh.GetPointsAttr().Get()], - device=device, - ) - torch.testing.assert_close( - rest_points, env.scene["cloth"].data.default_nodal_state_w.torch[0, :, :3], atol=1.0e-6, rtol=0.0 - ) - grasped_vertices = None - for _ in range(312): - with torch.inference_mode(): - actions = machine.compute() - env.step(actions) - torch.testing.assert_close( - robot.data.body_pos_w.torch[:, pelvis_ids], initial_pelvis, atol=1.0e-6, rtol=0.0 - ) - torch.testing.assert_close(robot.data.joint_pos.torch[:, leg_ids], initial_legs, atol=0.005, rtol=0.0) - torch.testing.assert_close( - robot.data.body_pos_w.torch[:, body_ids[2]], initial_torso_position, atol=0.001, rtol=0.0 - ) - torch.testing.assert_close( - quat_apply(robot.data.body_quat_w.torch[:, body_ids[2]], up_axis), - initial_torso_up, - atol=0.002, - rtol=0.0, - ) - - hand_positions = robot.data.body_pos_w.torch[0, body_ids[:2]] + quat_apply( - robot.data.body_quat_w.torch[0, body_ids[:2]], offsets[:2] - ) - cloth_positions = env.scene["cloth"].data.nodal_pos_w.torch[0] - thumb_targets = actions[0, [expert.ARM_ACTION_DIM, expert.ARM_ACTION_DIM + 12]] - hand_actions = actions[0, :14].reshape(2, 7) - hand_targets = hand_actions[:, :3] - if ( - grasped_vertices is None - and torch.allclose(thumb_targets, closed_thumbs) - and torch.allclose(hand_targets, grasp_pose) - ): - surface = trimesh.Trimesh( - vertices=cloth_positions.cpu().numpy(), faces=cloth_faces.cpu().numpy(), process=False - ) - points, _, face_ids = trimesh.proximity.closest_point_naive(surface, hand_positions.cpu().numpy()) - weights = trimesh.triangles.points_to_barycentric(surface.triangles[face_ids], points) - # Keep fixed material coordinates, not nearby vertices that depend on mesh resolution. - grasped_vertices = cloth_faces[torch.as_tensor(face_ids, device=device)] - grasp_weights = torch.as_tensor(weights, dtype=cloth_positions.dtype, device=device) - assert torch.isfinite(grasp_weights).all() - assert torch.all( - torch.linalg.vector_norm(torch.as_tensor(points, device=device) - hand_positions, dim=-1) - < 0.005 - ) - if grasped_vertices is not None: - grasp_points = (cloth_positions[grasped_vertices] * grasp_weights[..., None]).sum(dim=1) - separation = (grasp_points - hand_positions).norm(dim=-1) - assert torch.all(separation < 0.015), f"H1 lost its cloth grasp: {separation.tolist()} m" - desired_rotations = quat_mul(robot.data.root_quat_w.torch.expand(2, -1), hand_actions[:, 3:]) - attitude_error = torch.rad2deg( - quat_error_magnitude(robot.data.body_quat_w.torch[0, body_ids[:2]], desired_rotations) - ) - assert torch.all(attitude_error < 5.0), f"H1's wrists drifted: {attitude_error.tolist()} deg" - - assert grasped_vertices is not None, "The expert never closed its grasp" - assert success_term.func(env, **success_term.params).all(), "The tablecloth trick failed" - finally: - env.close() diff --git a/tools/test_settings.py b/tools/test_settings.py index 4fe28a2afa99..654e7d7059df 100644 --- a/tools/test_settings.py +++ b/tools/test_settings.py @@ -79,7 +79,6 @@ "test_environments_newton.py": GIT_ASSET_STARTUP_TIMEOUT, "test_environments_ovphysx.py": GIT_ASSET_STARTUP_TIMEOUT, "test_multi_agent_environments.py": GIT_ASSET_STARTUP_TIMEOUT, - "test_tablecloth_h1_stance.py": GIT_ASSET_STARTUP_TIMEOUT, } """Per-test startup timeouts for cold external asset downloads.""" @@ -154,8 +153,6 @@ # lab # lab_tasks "test_record_video.py", # Failing - # Experimental H1 full-trick validation is opt-in; launch smoke coverage stays in CI. - "test_tablecloth_h1_stance.py", # curobo / skillgen - require cuRobo installation; run via test-curobo and test-skillgen CI jobs *CUROBO_TESTS, # quarantined tests - run in dedicated CI job that does not block PR merges From 2b32a52e119003750302d76f2d57e1e2b832b079 Mon Sep 17 00:00:00 2001 From: Maximilian Krause Date: Sun, 11 Oct 2026 12:43:20 +0200 Subject: [PATCH 22/34] Preserve coupled joint-state ownership in VBD --- docs/source/how-to/solver_tuning_vbd.rst | 4 ++- .../test/coupling/test_coupler_runtime.py | 28 ++++++++++++++--- .../max-vbd-articulation-fixes.added.rst | 2 +- .../max-vbd-articulation-fixes.fixed.rst | 1 + .../isaaclab_newton/physics/vbd_manager.py | 5 ++-- .../physics/vbd_manager_cfg.py | 9 ++++-- .../test/assets/test_rigid_object.py | 5 ++-- .../test/physics/test_vbd_core.py | 30 +++++++++++++------ 8 files changed, 62 insertions(+), 22 deletions(-) diff --git a/docs/source/how-to/solver_tuning_vbd.rst b/docs/source/how-to/solver_tuning_vbd.rst index d071f0f32f5f..a835efbfb439 100644 --- a/docs/source/how-to/solver_tuning_vbd.rst +++ b/docs/source/how-to/solver_tuning_vbd.rst @@ -159,6 +159,8 @@ Core Solve - Description * - ``iterations`` - Default: ``10``. Number of VBD iterations per substep. Increasing this value improves deformation and contact convergence, especially for stiff materials or rigid gripper contacts, but increases runtime. + * - ``friction_epsilon`` + - Default: ``1.0e-2`` [m/s]. Relative tangential-speed threshold for smoothing friction near rest. Reducing it retains Coulomb-like friction at lower sliding speeds. * - ``rigid_compliant_alm`` - Default: ``None``. Preserves Newton's rigid solver mode. In Newton 1.6, ``None`` selects deprecated legacy AVBD. Set to ``True`` to use compliant ALM for rigid joints and body-body contacts, or ``False`` to explicitly retain legacy AVBD. * - ``rigid_joint_linear_ke`` @@ -166,7 +168,7 @@ Core Solve * - ``rigid_joint_angular_ke`` - Default: ``1.0e5`` [N m/rad]. Structural angular stiffness for non-rod rigid joints, separate from actuator gains. * - ``update_joint_state`` - - Default: ``True``. Derives joint positions and velocities from VBD-integrated body motion each tick. Disable only for body-state-only consumers. External rigid integration always skips this update, preserving the external solver's joint state. + - Default: ``True``. Derives standalone VBD joint positions and velocities each tick. Disable only for body-state-only consumers. External rigid integration and coupled solvers retain their generalized joint-state ownership and skip this update. * - ``rigid_body_contact_buffer_size`` - Default: ``64``. Per-body capacity for body-body contacts when VBD integrates rigid bodies. Increase it if Newton reports a per-body body-body contact buffer overflow. * - ``rigid_body_particle_contact_buffer_size`` diff --git a/source/isaaclab_contrib/test/coupling/test_coupler_runtime.py b/source/isaaclab_contrib/test/coupling/test_coupler_runtime.py index 5cd3b037fca8..8f130f45424d 100644 --- a/source/isaaclab_contrib/test/coupling/test_coupler_runtime.py +++ b/source/isaaclab_contrib/test/coupling/test_coupler_runtime.py @@ -14,11 +14,13 @@ import numpy as np import pytest import warp as wp -from isaaclab_newton.physics import NewtonManager, XPBDSolverCfg +from isaaclab_newton.physics import NewtonManager, NewtonVBDManager, XPBDSolverCfg from newton import CollisionPipeline, Mesh, Model, ModelBuilder from newton.solvers import SolverXPBD from newton.solvers.experimental.coupled import SolverCoupledADMM, SolverCoupledProxy +from isaaclab.physics import PhysicsManager + from isaaclab_contrib.coupling import ( CouplerAdmmCfg, CouplerEntryCfg, @@ -32,7 +34,7 @@ def isolated_newton_manager(monkeypatch: pytest.MonkeyPatch): """Isolate every global manager slot touched by coupler construction.""" clean_values = { - "backend": SimpleNamespace(model=None), + "backend": SimpleNamespace(model=None, state_0=None, state_1=None, control=None), "_solver": None, "_use_single_state": None, "_contacts": None, @@ -42,9 +44,15 @@ def isolated_newton_manager(monkeypatch: pytest.MonkeyPatch): "_supports_contact_sensors": True, "_supports_rigid_body_force_input": False, "_report_contacts": False, + "_solver_dt": 1.0 / 60.0, + "_num_substeps": 1, + "_collision_decimation": 0, + "_state_force_callbacks": [], } for name, value in clean_values.items(): monkeypatch.setattr(NewtonManager, name, value) + monkeypatch.setattr(NewtonVBDManager, "_update_joint_state", True) + monkeypatch.setattr(PhysicsManager, "_cfg", None) yield @@ -131,7 +139,7 @@ def test_real_coupler_constructs_resets_and_steps( expected_solver_type: type, isolated_newton_manager, ): - """Exercise supported coupling configurations or reject unsupported capacity overrides.""" + """Step supported coupling configurations without overwriting nested-solver joint state.""" model = _build_overlapping_body_model(mesh_contact=algorithm == "admm_capacity") entries = _entry_configs() if algorithm == "proxy": @@ -192,18 +200,30 @@ def test_real_coupler_constructs_resets_and_steps( state_1 = model.state() solver.reset(state_0) assert solver.entry_output_state_valid() is False + state_0.joint_qd.fill_(0.125) collision_pipeline.collide(state_0, contacts) assert int(contacts.rigid_contact_count.numpy()[0]) >= 1 body_q_before = state_0.body_q.numpy().copy() - solver.step(state_0, state_1, model.control(), contacts, 1.0 / 60.0) + # The native coupled solver, not global inverse kinematics, owns the published joint state. + native_output = model.state() + control = model.control() + solver.step(state_0, native_output, control, contacts, 1.0 / 60.0) + solver.reset(state_0, flags=0) + NewtonManager.backend.state_0 = state_0 + NewtonManager.backend.state_1 = state_1 + NewtonManager.backend.control = control + NewtonCouplerManager._run_solver_substeps(contacts) + state_1 = NewtonManager.backend.state_0 body_q_after = state_1.body_q.numpy() assert solver.entry_output_state_valid() is True assert np.all(np.isfinite(body_q_after)) assert np.all(np.isfinite(state_1.body_qd.numpy())) assert np.any(body_q_after[:, 2] < body_q_before[:, 2]) + np.testing.assert_array_equal(state_1.joint_q.numpy(), native_output.joint_q.numpy()) + np.testing.assert_array_equal(state_1.joint_qd.numpy(), native_output.joint_qd.numpy()) if algorithm == "admm_capacity": assert int(solver._admm_internal_contacts.rigid_contact_count.numpy()[0]) >= 1 assert solver._admm_internal_contacts.rigid_contact_match_index is not None diff --git a/source/isaaclab_newton/changelog.d/max-vbd-articulation-fixes.added.rst b/source/isaaclab_newton/changelog.d/max-vbd-articulation-fixes.added.rst index 117370030e48..67308815908e 100644 --- a/source/isaaclab_newton/changelog.d/max-vbd-articulation-fixes.added.rst +++ b/source/isaaclab_newton/changelog.d/max-vbd-articulation-fixes.added.rst @@ -1 +1 @@ -* Added VBD structural joint stiffness settings and optional generalized joint-state synchronization. +* Added VBD structural joint stiffness and friction-smoothing settings, and optional standalone generalized joint-state synchronization. diff --git a/source/isaaclab_newton/changelog.d/max-vbd-articulation-fixes.fixed.rst b/source/isaaclab_newton/changelog.d/max-vbd-articulation-fixes.fixed.rst index 86e74cb58ddb..7318292f3b9a 100644 --- a/source/isaaclab_newton/changelog.d/max-vbd-articulation-fixes.fixed.rst +++ b/source/isaaclab_newton/changelog.d/max-vbd-articulation-fixes.fixed.rst @@ -1,2 +1,3 @@ * Fixed VBD graph coloring for active cloth bending constraints and stale joint state after rigid-body integration. + Coupled and external rigid solvers retained ownership of their generalized joint state. * Fixed Newton IK prototype selection for nested articulation roots. diff --git a/source/isaaclab_newton/isaaclab_newton/physics/vbd_manager.py b/source/isaaclab_newton/isaaclab_newton/physics/vbd_manager.py index e5b7ac380b61..7d51b10bb7c4 100644 --- a/source/isaaclab_newton/isaaclab_newton/physics/vbd_manager.py +++ b/source/isaaclab_newton/isaaclab_newton/physics/vbd_manager.py @@ -42,10 +42,11 @@ def _build_solver(cls, model: Model, solver_cfg: VBDSolverCfg) -> None: @classmethod def _run_solver_substeps(cls, contacts) -> None: - """Synchronize generalized joint state from VBD's maximal-coordinate body state.""" + """Publish standalone VBD joint state without changing coupled-solver ownership.""" super()._run_solver_substeps(contacts) if ( - cls._update_joint_state + isinstance(cls._solver, SolverVBD) + and cls._update_joint_state and cls.backend.model.articulation_count > 0 and cls.backend.model.joint_coord_count > 0 ): diff --git a/source/isaaclab_newton/isaaclab_newton/physics/vbd_manager_cfg.py b/source/isaaclab_newton/isaaclab_newton/physics/vbd_manager_cfg.py index bef380d4fee9..b241924e7906 100644 --- a/source/isaaclab_newton/isaaclab_newton/physics/vbd_manager_cfg.py +++ b/source/isaaclab_newton/isaaclab_newton/physics/vbd_manager_cfg.py @@ -27,14 +27,17 @@ class VBDSolverCfg(NewtonSolverCfg): iterations: int = 10 """Number of VBD iterations per substep.""" + friction_epsilon: float = 1.0e-2 + """Relative tangential speed used to smooth friction near rest [m/s].""" + integrate_with_external_rigid_solver: bool = False """Whether an external solver integrates rigid bodies.""" update_joint_state: bool = True - """Derive joint positions and velocities from VBD-integrated body motion after each physics tick. + """Derive standalone VBD joint positions and velocities after each physics tick. - Disable only when consumers use body state exclusively. External rigid integration always skips - this synchronization so the external solver retains ownership of its generalized joint state. + Disable only when consumers use body state exclusively. External rigid integration and coupled + solvers retain ownership of their generalized joint state and skip this synchronization. """ particle_enable_self_contact: bool = False diff --git a/source/isaaclab_newton/test/assets/test_rigid_object.py b/source/isaaclab_newton/test/assets/test_rigid_object.py index a3c1f68d1c16..7415620c0837 100644 --- a/source/isaaclab_newton/test/assets/test_rigid_object.py +++ b/source/isaaclab_newton/test/assets/test_rigid_object.py @@ -11,8 +11,9 @@ Every environment holds a rigid-object cube and a three-cube collection, all locally spawned shapes. The cube also stands beside the collection as an unrelated rigid body, so the collection view must select exactly its configured bodies. Scene gravity is off; a test that needs gravity applies it to every world for its own duration. -Configurations that fail initialization and the single-instance cases build their own scenes. Only one simulation -context can be alive, so those tests come first and fail if selected after a shared-scene test. +Configurations that fail initialization, VBD state publication, and the single-instance cases build their own +scenes. Only one simulation context can be alive, so those tests come first and fail if selected after a +shared-scene test. """ from isaaclab_newton.physics import NewtonCfg diff --git a/source/isaaclab_newton/test/physics/test_vbd_core.py b/source/isaaclab_newton/test/physics/test_vbd_core.py index 39469b54a682..112aa5dc166d 100644 --- a/source/isaaclab_newton/test/physics/test_vbd_core.py +++ b/source/isaaclab_newton/test/physics/test_vbd_core.py @@ -121,13 +121,24 @@ def test_vbd_solver_force_input_capability(monkeypatch): assert NewtonManager._supports_rigid_body_force_input is False -@pytest.mark.parametrize("overrides", [{}, {"rigid_compliant_alm": False}], ids=["defaults", "legacy"]) +@pytest.mark.parametrize( + "overrides", [{}, {"rigid_compliant_alm": False, "friction_epsilon": 1.0e-3}], ids=["defaults", "legacy"] +) def test_vbd_rigid_solver_controls(overrides): - """VBD preserves the default controls and explicit legacy-mode selection.""" + """VBD configuration preserves native defaults and forwards explicit controls.""" physics = importlib.import_module("isaaclab_newton.physics") kwargs = NewtonManager._filter_solver_kwargs(SolverVBD, physics.VBDSolverCfg(**overrides)) - assert kwargs["rigid_compliant_alm"] is overrides.get("rigid_compliant_alm") assert kwargs["rigid_body_contact_buffer_size"] == 64 + model = ModelBuilder().finalize(device="cpu") + native_solver = SolverVBD(model, **overrides) + configured_solver = physics.NewtonVBDManager._create_solver(model, physics.VBDSolverCfg(**overrides)) + for name in ( + "rigid_compliant_alm", + "rigid_joint_linear_ke", + "rigid_joint_angular_ke", + "friction_epsilon", + ): + assert getattr(configured_solver, name) == getattr(native_solver, name) def test_vbd_compliant_alm_cable_stiffness(): @@ -167,8 +178,7 @@ def test_vbd_compliant_alm_cable_stiffness(): assert state_0.body_q.numpy()[body, 2] == pytest.approx(-expected_extension, rel=0.01) -@pytest.mark.parametrize("stiffness", [None, (1.0e3, 1.0e2)], ids=["defaults", "finite-attachment"]) -def test_vbd_structural_joint_stiffness_under_load(stiffness): +def test_vbd_structural_joint_stiffness_under_load(): """A fixed joint balances gravity with independently configured linear and angular springs.""" physics = importlib.import_module("isaaclab_newton.physics") gravity, lever = 9.81, 0.1 @@ -182,10 +192,12 @@ def test_vbd_structural_joint_stiffness_under_load(stiffness): builder.add_articulation([joint]) builder.color() model = builder.finalize(device="cpu") - solver_cfg = physics.VBDSolverCfg(rigid_compliant_alm=True, iterations=15) - linear_ke, angular_ke = (1.0e5, 1.0e5) if stiffness is None else stiffness - if stiffness is not None: - solver_cfg = solver_cfg.replace(rigid_joint_linear_ke=linear_ke, rigid_joint_angular_ke=angular_ke) + linear_ke, angular_ke = 1.0e3, 1.0e2 + solver_cfg = replace( + physics.VBDSolverCfg(rigid_compliant_alm=True, iterations=15), + rigid_joint_linear_ke=linear_ke, + rigid_joint_angular_ke=angular_ke, + ) solver = physics.NewtonVBDManager._create_solver(model, solver_cfg) state_0, state_1, control = model.state(), model.state(), model.control() for _ in range(480): From a8f2572787a767eeb215d5ab6de2921dbe17f3a2 Mon Sep 17 00:00:00 2001 From: Maximilian Krause Date: Sun, 11 Oct 2026 13:02:50 +0200 Subject: [PATCH 23/34] Specialize tablecloth GPU control and clarify example configuration --- docs/source/how-to/run_state_machines.rst | 9 +- examples/tablecloth.py | 10 +- .../test/app/standalone_script_cases.py | 2 +- .../isaaclab_contrib/assets/tablecloth.py | 23 +- .../controllers/tablecloth.py | 293 +++++++++--------- 5 files changed, 176 insertions(+), 161 deletions(-) diff --git a/docs/source/how-to/run_state_machines.rst b/docs/source/how-to/run_state_machines.rst index b08e4433be0e..8b32f68739ca 100644 --- a/docs/source/how-to/run_state_machines.rst +++ b/docs/source/how-to/run_state_machines.rst @@ -53,8 +53,8 @@ Compare five humanoid tablecloth pulls -------------------------------------- This standalone example uses :class:`~isaaclab.scene.InteractiveScene` to build -five side-by-side H2 Plus / SHARPA trials with the default Isaac Lab ground plane and SimReady -kitchen assets. Newton VBD simulates the articulations, cloth, and tableware in a +five side-by-side H2 Plus / SHARPA trials with the default Isaac Lab ground plane, +wooden dining tables, and SimReady kitchenware. Newton VBD simulates the articulations, cloth, and tableware in a single solver. The Warp state machine and Newton IK run on the GPU inside the physics CUDA graph. It does not register an RL environment or require a trained policy. @@ -84,6 +84,11 @@ asset's hardware torque limits or armature. Use ``--speeds 2.0`` for one robot, or ``--viz none`` for a complete headless run. The default run duration includes the slowest pull and a final hold. +All lanes use the same object masses, friction, cloth mesh, and 0.48 × 0.84 m +tabletop. Only the peak pull speed changes: the fastest pull leaves the arrangement +nearly unchanged, the middle pulls produce more sliding, and the two slowest +pulls carry the tableware off the table. The dining-table USD supplies the visuals; +simple box proxies supply the tabletop and leg collisions. The pelvis is fixed with the feet at ground level: this demonstrates manipulation, not humanoid balance. Asset and cloth changes require revalidating the calibrated physical grasp. This experimental example checks material-point retention after diff --git a/examples/tablecloth.py b/examples/tablecloth.py index 1a5821692be6..cc72f0a72da5 100644 --- a/examples/tablecloth.py +++ b/examples/tablecloth.py @@ -28,7 +28,7 @@ from isaaclab.app import add_launcher_args, launch_simulation -logger = logging.getLogger(__name__) +logger = logging.getLogger("isaaclab.examples.tablecloth") parser = argparse.ArgumentParser(description="Five side-by-side GPU humanoid tablecloth pulls.") parser.add_argument( @@ -67,7 +67,7 @@ import isaaclab.sim as sim_utils from isaaclab import cloner from isaaclab.scene import InteractiveSceneCfg -from isaaclab.utils import instantiate +from isaaclab.utils import clone, instantiate from isaaclab.utils.version import standalone_importers_available from isaaclab.visualizers import VisualizerCfg @@ -168,7 +168,7 @@ def main() -> None: sim_utils.standardize_xform_ops( scene.stage.GetPrimAtPath(scene.env_prim_paths[0]), translation=tuple(map(float, positions[0])) ) - cfgs = {name: cfg.copy() for name, cfg in TABLECLOTH_ASSETS.items()} + cfgs = {name: clone(cfg) for name, cfg in TABLECLOTH_ASSETS.items()} if args_cli.robot == "h1": # H1's smaller hands use the original corner-grasp arrangement. cfgs["cloth"].spawn.size = (0.48, 0.80) @@ -180,9 +180,9 @@ def main() -> None: material = cfgs["cloth"].spawn.physics_material defaults = NewtonSurfaceDeformableBodyMaterialCfg() material.tri_ke, material.tri_ka, material.tri_kd = defaults.tri_ke, defaults.tri_ka, defaults.tri_kd - cfgs["robot"] = (H2_CFG if args_cli.robot == "h2" else H1_CFG).copy() + cfgs["robot"] = clone(H2_CFG if args_cli.robot == "h2" else H1_CFG) cfgs["robot"].spawn.usd_path = usd_path - cfgs.update(ground=GROUND_CFG.copy(), light=LIGHT_CFG.copy()) + cfgs.update(ground=clone(GROUND_CFG), light=clone(LIGHT_CFG)) plan = cloner.clone_plan_from_env_0(scene.cfg.clone_cfg, cfgs.values(), len(speeds), 1.5, positions=positions) scene.articulations["robot"] = instantiate(cfgs["robot"]) scene.deformable_objects["cloth"] = instantiate(cfgs["cloth"]) diff --git a/source/isaaclab/test/app/standalone_script_cases.py b/source/isaaclab/test/app/standalone_script_cases.py index 9b90c4cb7b3b..5f648725e23b 100644 --- a/source/isaaclab/test/app/standalone_script_cases.py +++ b/source/isaaclab/test/app/standalone_script_cases.py @@ -232,7 +232,7 @@ class SmokeResult: visualizers=("newton_gl",), ), "examples/tablecloth.py": ScriptOverride( - args=("--max_steps", "2", "--viz", "none"), + args=("--speeds", "4.0", "0.5", "--max_steps", "2", "--viz", "none"), fixed_physics_backend="newton_vbd", visualizers=(None,), required_modules=("isaaclab_contrib",), diff --git a/source/isaaclab_contrib/isaaclab_contrib/assets/tablecloth.py b/source/isaaclab_contrib/isaaclab_contrib/assets/tablecloth.py index b4dc43d86e6d..22a18ae8fdf0 100644 --- a/source/isaaclab_contrib/isaaclab_contrib/assets/tablecloth.py +++ b/source/isaaclab_contrib/isaaclab_contrib/assets/tablecloth.py @@ -241,21 +241,35 @@ def spawn_tableware_from_usd( @configclass class TablewareUsdFileCfg(sim_utils.UsdFileCfg): - """USD spawner config for SimReady visuals with analytic collision proxies.""" + """USD spawner config for SimReady visuals with analytic collision proxies. + + Proxy dimensions, offsets, center of mass, and inertia are authored in the + selected rigid body's local frame, before the USD asset's scale is applied. + """ func: Callable | str = spawn_tableware_from_usd make_uninstanceable: bool = True rigid_props = {"(/.*)?": [UsdPhysicsRigidBodyCfg(rigid_body_enabled=True, kinematic_enabled=False)]} mass: float = MISSING + """Mass of the selected rigid body [kg].""" collision_proxy_cfg: sim_utils.ShapeCfg = MISSING + """Primary collision proxy; dimensions are in local meters.""" collision_proxy_position: tuple[float, float, float] = MISSING + """Primary collision proxy's body-local offset [m].""" additional_collision_proxy_cfgs: tuple[sim_utils.ShapeCfg, ...] = () + """Additional collision proxies, paired with their respective offsets.""" additional_collision_proxy_positions: tuple[tuple[float, float, float], ...] = () + """Additional proxies' body-local offsets [m], in matching order.""" center_of_mass: tuple[float, float, float] | None = None + """Body-local center of mass [m], or None to retain the asset's value.""" diagonal_inertia: tuple[float, float, float] | None = None + """Diagonal inertia in the body-local axes [kg m²], or None to retain the asset's value.""" visual_color: tuple[float, float, float] | None = None + """RGB visual color in [0, 1], or None to retain the asset's color.""" visual_opacity: float | None = None + """Visual opacity in [0, 1], or None to retain the asset's opacity.""" visual_roughness: float | None = None + """Visual roughness in [0, 1], or None to retain the asset's roughness.""" FPS = 60 @@ -266,7 +280,6 @@ class TablewareUsdFileCfg(sim_utils.UsdFileCfg): TABLEWARE_CLEARANCE = 0.008 # Start above the thin table contact skin and the cloth's 1 mm particle radius. CLOTH_Z = TABLE_TOP_Z + 0.004 -TABLEWARE_NAMES = ("bowl", "glass", "fork") TABLE_SCALE = ( TABLE_SIZE[0] / TABLE_ASSET_SIZE[0], @@ -280,10 +293,6 @@ class TablewareUsdFileCfg(sim_utils.UsdFileCfg): (0.0854352130714941, -0.004956624352234765, 0.11747110476887199), (0.08528776908502764, 0.0060654248588878044, 0.11775531545430512), ) -H2_PINCH_NORMALS = ( - (-0.2177173497347232, 0.20510326213060795, 0.9542179035670372), - (-0.21041715932142208, -0.19846220463052672, 0.957255123985395), -) # Measured native pulp pinch and unused-finger parking, inside native joint limits. H2_PINCH_JOINT_POS = { "left_thumb_CMC_FE": 1.8898998498916626, @@ -770,7 +779,7 @@ def _post_spawn(self, stage: Usd.Stage) -> None: CLOTH_CFG = TableclothCfg( prim_path="{ENV_REGEX_NS}/Cloth", spawn=sim_utils.MeshRectangleCfg( - # Balanced front/back overhangs provide a free hem below the countertop. + # The front overhang provides a free hem below the countertop. size=(0.56, TABLE_SIZE[1]), edge_refinement=64, deformable_props=NewtonDeformableBodyPropertiesCfg(), diff --git a/source/isaaclab_contrib/isaaclab_contrib/controllers/tablecloth.py b/source/isaaclab_contrib/isaaclab_contrib/controllers/tablecloth.py index 4b8095e7fd18..2186d8825636 100644 --- a/source/isaaclab_contrib/isaaclab_contrib/controllers/tablecloth.py +++ b/source/isaaclab_contrib/isaaclab_contrib/controllers/tablecloth.py @@ -184,108 +184,112 @@ def _interpolate_rotation(start: wp.vec4, end: wp.vec4, alpha: float) -> wp.vec4 return wp.normalize(wp.lerp(start, end, alpha)) -@wp.kernel -def _infer_state_machine( - dt: float, - pull_speed: wp.array(dtype=float), - keyframes: wp.array(dtype=wp.vec3), - hand_rotations: wp.array(dtype=wp.vec4), - pull_hand_rotations: wp.array(dtype=wp.vec4), - rotate_during_pull: int, - torso_pose: wp.array2d(dtype=float), - phase_durations: wp.array(dtype=float), - phase_start_keyframes: wp.array(dtype=wp.int32), - phase_end_keyframes: wp.array(dtype=wp.int32), - phase_start_fingers: wp.array(dtype=float), - phase_end_fingers: wp.array(dtype=float), - finger_open_values: wp.array(dtype=float), - finger_closed_values: wp.array(dtype=float), - pull_arc_scale: float, - final_keyframe: int, - pull_limit: float, - finger_groups: wp.array(dtype=wp.int32), - finger_fractions: wp.array2d(dtype=float), - state: wp.array(dtype=wp.int32), - state_time: wp.array(dtype=float), - pull_distance: wp.array(dtype=float), - commands: wp.array2d(dtype=float), -): - env_id = wp.tid() - current_state = state[env_id] - elapsed = state_time[env_id] + dt - - if current_state < STATE_PULL and elapsed >= phase_durations[current_state]: - current_state += 1 - elapsed = 0.0 - - left = keyframes[0] - right = keyframes[1] - left_rotation = hand_rotations[0] - right_rotation = hand_rotations[1] - if current_state < STATE_PULL: - alpha = _smoothstep(elapsed / phase_durations[current_state]) - start_keyframe = phase_start_keyframes[current_state] - end_keyframe = phase_end_keyframes[current_state] - left = wp.lerp(keyframes[start_keyframe], keyframes[end_keyframe], alpha) - right = wp.lerp(keyframes[start_keyframe + 1], keyframes[end_keyframe + 1], alpha) - left_rotation = _interpolate_rotation(hand_rotations[start_keyframe], hand_rotations[end_keyframe], alpha) - right_rotation = _interpolate_rotation( - hand_rotations[start_keyframe + 1], hand_rotations[end_keyframe + 1], alpha - ) - for group in range(5): - index = current_state * 5 + group - finger_fractions[env_id, group] = wp.lerp(phase_start_fingers[index], phase_end_fingers[index], alpha) - elif current_state == STATE_PULL: - # Zero endpoint velocity and acceleration prevent a sudden load on the - # pinch. The quintic's peak derivative is 1.875, preserving --speeds. - duration = PULL_TIME_FACTOR * pull_limit / pull_speed[env_id] - distance = pull_limit * _minimum_jerk(elapsed / duration) - pull_distance[env_id] = distance - offset = _pull_offset(distance) - offset[2] *= pull_arc_scale - left = keyframes[final_keyframe] + offset - right = keyframes[final_keyframe + 1] + offset - left_rotation = hand_rotations[final_keyframe] - right_rotation = hand_rotations[final_keyframe + 1] - if rotate_during_pull != 0: - fraction = distance / pull_limit - left_rotation = _interpolate_rotation(left_rotation, pull_hand_rotations[0], fraction) - right_rotation = _interpolate_rotation(right_rotation, pull_hand_rotations[1], fraction) - for group in range(5): - finger_fractions[env_id, group] = phase_end_fingers[(STATE_PULL - 1) * 5 + group] - if distance >= pull_limit: - current_state = STATE_HOLD - else: - distance = pull_distance[env_id] - offset = _pull_offset(distance) - offset[2] *= pull_arc_scale - left = keyframes[final_keyframe] + offset - right = keyframes[final_keyframe + 1] + offset - left_rotation = hand_rotations[final_keyframe] - right_rotation = hand_rotations[final_keyframe + 1] - if rotate_during_pull != 0: - left_rotation = pull_hand_rotations[0] - right_rotation = pull_hand_rotations[1] - for group in range(5): - finger_fractions[env_id, group] = phase_end_fingers[(STATE_PULL - 1) * 5 + group] - - for axis in range(3): - commands[env_id, axis] = left[axis] - commands[env_id, 7 + axis] = right[axis] - for axis in range(4): - commands[env_id, 3 + axis] = left_rotation[axis] - commands[env_id, 10 + axis] = right_rotation[axis] - for axis in range(7): - commands[env_id, 14 + axis] = torso_pose[env_id, axis] - - for finger in range(finger_closed_values.shape[0]): - fraction = finger_fractions[env_id, finger_groups[finger]] - commands[env_id, POSE_COMPONENTS + finger] = wp.lerp( - finger_open_values[finger], finger_closed_values[finger], fraction - ) +def _make_state_machine_kernel(rotate_during_pull: bool) -> wp.Kernel: + """Specialize pull rotation once while sharing the state-machine implementation.""" + + @wp.kernel(module="unique") + def _infer_state_machine( + dt: float, + pull_speed: wp.array(dtype=float), + keyframes: wp.array(dtype=wp.vec3), + hand_rotations: wp.array(dtype=wp.vec4), + pull_hand_rotations: wp.array(dtype=wp.vec4), + torso_pose: wp.array2d(dtype=float), + phase_durations: wp.array(dtype=float), + phase_start_keyframes: wp.array(dtype=wp.int32), + phase_end_keyframes: wp.array(dtype=wp.int32), + phase_start_fingers: wp.array(dtype=float), + phase_end_fingers: wp.array(dtype=float), + finger_open_values: wp.array(dtype=float), + finger_closed_values: wp.array(dtype=float), + pull_arc_scale: float, + final_keyframe: int, + pull_limit: float, + finger_groups: wp.array(dtype=wp.int32), + finger_fractions: wp.array2d(dtype=float), + state: wp.array(dtype=wp.int32), + state_time: wp.array(dtype=float), + pull_distance: wp.array(dtype=float), + commands: wp.array2d(dtype=float), + ): + env_id = wp.tid() + current_state = state[env_id] + elapsed = state_time[env_id] + dt + + if current_state < STATE_PULL and elapsed >= phase_durations[current_state]: + current_state += 1 + elapsed = 0.0 + + left = keyframes[0] + right = keyframes[1] + left_rotation = hand_rotations[0] + right_rotation = hand_rotations[1] + if current_state < STATE_PULL: + alpha = _smoothstep(elapsed / phase_durations[current_state]) + start_keyframe = phase_start_keyframes[current_state] + end_keyframe = phase_end_keyframes[current_state] + left = wp.lerp(keyframes[start_keyframe], keyframes[end_keyframe], alpha) + right = wp.lerp(keyframes[start_keyframe + 1], keyframes[end_keyframe + 1], alpha) + left_rotation = _interpolate_rotation(hand_rotations[start_keyframe], hand_rotations[end_keyframe], alpha) + right_rotation = _interpolate_rotation( + hand_rotations[start_keyframe + 1], hand_rotations[end_keyframe + 1], alpha + ) + for group in range(5): + index = current_state * 5 + group + finger_fractions[env_id, group] = wp.lerp(phase_start_fingers[index], phase_end_fingers[index], alpha) + elif current_state == STATE_PULL: + # Zero endpoint velocity and acceleration prevent a sudden load on the + # pinch. The quintic's peak derivative is 1.875, preserving --speeds. + duration = PULL_TIME_FACTOR * pull_limit / pull_speed[env_id] + distance = pull_limit * _minimum_jerk(elapsed / duration) + pull_distance[env_id] = distance + offset = _pull_offset(distance) + offset[2] *= pull_arc_scale + left = keyframes[final_keyframe] + offset + right = keyframes[final_keyframe + 1] + offset + left_rotation = hand_rotations[final_keyframe] + right_rotation = hand_rotations[final_keyframe + 1] + if wp.static(rotate_during_pull): + fraction = distance / pull_limit + left_rotation = _interpolate_rotation(left_rotation, pull_hand_rotations[0], fraction) + right_rotation = _interpolate_rotation(right_rotation, pull_hand_rotations[1], fraction) + for group in range(5): + finger_fractions[env_id, group] = phase_end_fingers[(STATE_PULL - 1) * 5 + group] + if distance >= pull_limit: + current_state = STATE_HOLD + else: + distance = pull_distance[env_id] + offset = _pull_offset(distance) + offset[2] *= pull_arc_scale + left = keyframes[final_keyframe] + offset + right = keyframes[final_keyframe + 1] + offset + left_rotation = hand_rotations[final_keyframe] + right_rotation = hand_rotations[final_keyframe + 1] + if wp.static(rotate_during_pull): + left_rotation = pull_hand_rotations[0] + right_rotation = pull_hand_rotations[1] + for group in range(5): + finger_fractions[env_id, group] = phase_end_fingers[(STATE_PULL - 1) * 5 + group] + + for axis in range(3): + commands[env_id, axis] = left[axis] + commands[env_id, 7 + axis] = right[axis] + for axis in range(4): + commands[env_id, 3 + axis] = left_rotation[axis] + commands[env_id, 10 + axis] = right_rotation[axis] + for axis in range(7): + commands[env_id, 14 + axis] = torso_pose[env_id, axis] + + for finger in range(finger_closed_values.shape[0]): + fraction = finger_fractions[env_id, finger_groups[finger]] + commands[env_id, POSE_COMPONENTS + finger] = wp.lerp( + finger_open_values[finger], finger_closed_values[finger], fraction + ) + + state[env_id] = current_state + state_time[env_id] = elapsed - state[env_id] = current_state - state_time[env_id] = elapsed + return _infer_state_machine class _GraspStateMachine: @@ -324,7 +328,7 @@ def __init__( if len(rotations) != len(keyframes): raise ValueError("Each hand position keyframe requires a matching rotation.") pull_rotations = H2_PULL_HAND_ROTATIONS if robot_type == "h2" else rotations[-2:] - self._rotate_during_pull = int(tuple(pull_rotations) != tuple(rotations[-2:])) + self._kernel = _make_state_machine_kernel(tuple(pull_rotations) != tuple(rotations[-2:])) self._final_keyframe = len(keyframes) - 2 phases = list(zip(durations, phase_keyframes, fingers, strict=True)) self._keyframes = wp.array(keyframes, dtype=wp.vec3, device=self._warp_device) @@ -356,7 +360,7 @@ def __init__( def compute(self) -> None: """Advance one frame without allocating buffers or reading device state on the host.""" wp.launch( - _infer_state_machine, + self._kernel, dim=self.num_envs, inputs=[ self.dt, @@ -364,7 +368,6 @@ def compute(self) -> None: self._keyframes, self._hand_rotations, self._pull_hand_rotations, - self._rotate_during_pull, self._torso_pose, self._phase_durations, self._phase_start_keyframes, @@ -445,35 +448,40 @@ def _set_elbow_position( targets[lane] = wp.transform_point(native_root, position) -@wp.kernel -def _gather_targets( - solved: wp.array2d(dtype=float), - poses: wp.array2d(dtype=float), - indices: wp.array(dtype=int), - arms: wp.array(dtype=int), - fingers: wp.array(dtype=int), - defaults: wp.array2d(dtype=float), - velocity_limits: wp.array2d(dtype=float), - previous: wp.array2d(dtype=float), - dt: float, - velocity_feedforward: int, - targets: wp.array2d(dtype=float), - velocities: wp.array2d(dtype=float), -): - lane, joint = wp.tid() - value = defaults[lane, joint] - if arms[joint] != 0: - value = solved[lane, indices[joint]] - if fingers[joint] >= 0: - value = poses[lane, POSE_COMPONENTS + fingers[joint]] - velocity = float(0.0) - if arms[joint] != 0 and velocity_feedforward != 0: - # Match moving arm targets without exciting the quasi-massless fingers. - limit = wp.min(velocity_limits[lane, joint], 20.0) - velocity = wp.clamp((value - previous[lane, joint]) / dt, -limit, limit) - previous[lane, joint] = value - targets[lane, joint] = value - velocities[lane, joint] = velocity +def _make_gather_targets_kernel(velocity_feedforward: bool) -> wp.Kernel: + """Specialize arm feedforward once while sharing joint selection and indexing.""" + + @wp.kernel(module="unique") + def _gather_targets( + solved: wp.array2d(dtype=float), + poses: wp.array2d(dtype=float), + indices: wp.array(dtype=int), + arms: wp.array(dtype=int), + fingers: wp.array(dtype=int), + defaults: wp.array2d(dtype=float), + velocity_limits: wp.array2d(dtype=float), + previous: wp.array2d(dtype=float), + dt: float, + targets: wp.array2d(dtype=float), + velocities: wp.array2d(dtype=float), + ): + lane, joint = wp.tid() + value = defaults[lane, joint] + if arms[joint] != 0: + value = solved[lane, indices[joint]] + if fingers[joint] >= 0: + value = poses[lane, POSE_COMPONENTS + fingers[joint]] + velocity = float(0.0) + if wp.static(velocity_feedforward): + if arms[joint] != 0: + # Match moving arm targets without exciting the quasi-massless fingers. + limit = wp.min(velocity_limits[lane, joint], 20.0) + velocity = wp.clamp((value - previous[lane, joint]) / dt, -limit, limit) + previous[lane, joint] = value + targets[lane, joint] = value + velocities[lane, joint] = velocity + + return _gather_targets @wp.kernel(enable_backward=False) @@ -541,6 +549,7 @@ def __init__( self.num_lanes = len(speeds) self.num_joints = robot.num_joints self._use_command_seed = robot_type == "h2" + self._gather_targets_kernel = _make_gather_targets_kernel(self._use_command_seed) if robot.num_instances != self.num_lanes: raise ValueError("The example requires one identical fixed-base robot per environment.") if robot_type not in ("h1", "h2"): @@ -763,15 +772,15 @@ def bind_arm_substeps( raise ValueError("Each H2 arm coordinate must be valid and distinct across lanes.") self._arm_target_coordinates = wp.array(target_coordinates, dtype=int, device=self.device) - self._arm_initial = wp.empty(q_coordinates.shape, dtype=float, device=self.device) + initial_positions = wp.empty(q_coordinates.shape, dtype=float, device=self.device) wp.launch( _read_arm_positions, dim=q_coordinates.shape, - inputs=[state.joint_q, wp.array(q_coordinates, dtype=int, device=self.device), self._arm_initial], + inputs=[state.joint_q, wp.array(q_coordinates, dtype=int, device=self.device), initial_positions], device=self.device, ) - self._arm_start = wp.clone(self._arm_initial) - self._arm_end = wp.clone(self._arm_initial) + self._arm_start = initial_positions + self._arm_end = wp.clone(initial_positions) self._arm_counters = wp.zeros(self.num_lanes, dtype=int, device=self.device) self._arm_substeps = substeps self._arm_control = control @@ -795,13 +804,6 @@ def interpolate_arm_targets(self) -> None: device=self.device, ) - def reset_arm_targets(self) -> None: - """Restart the ramp from the initial state after the reset's existing :meth:`compute`.""" - if self._arm_control is None: - return - wp.copy(self._arm_end, self._arm_initial) - self._stage_arm_targets() - def observe_scene(self, model: newton.Model, state: newton.State, env_prim_paths: list[str]) -> None: """Bind native pelvis and elbow observations for H2. @@ -894,7 +896,7 @@ def compute(self) -> None: # Contact tracking errors must not steer the redundant arm coordinates. wp.copy(self._seed, solved) wp.launch( - _gather_targets, + self._gather_targets_kernel, dim=(self.num_lanes, self.num_joints), inputs=[ solved, @@ -906,7 +908,6 @@ def compute(self) -> None: self._velocity_limits, self._previous_targets, self._machine.dt, - int(self._use_command_seed), self._targets, self._velocity_targets, ], From 59af43422e38b9ba27a8f7fa8302a16c82545c01 Mon Sep 17 00:00:00 2001 From: Maximilian Krause Date: Sun, 11 Oct 2026 13:12:32 +0200 Subject: [PATCH 24/34] Show the updated dining tables in the example documentation --- .../source/_static/examples/tablecloth_h2.jpg | Bin 357302 -> 364721 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/source/_static/examples/tablecloth_h2.jpg b/docs/source/_static/examples/tablecloth_h2.jpg index fbd4b56968e1242f09a7dbc4b6a5623744b057b3..5ee676eea8e7ea811f6bd812d8c7fe5efd4d125f 100644 GIT binary patch literal 364721 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

s|grs_!Dg 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%0Dk5OI$sI@;oDf??CmA_0l=sc2B^`Vh51sq>^W_ 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 z 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�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

rMThrIWG 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 From a27b78845251732b4bc8b77b09e30e7037c1bb29 Mon Sep 17 00:00:00 2001 From: Maximilian Krause Date: Sun, 11 Oct 2026 13:39:13 +0200 Subject: [PATCH 25/34] Document the final five-table pull outcomes --- .../source/_static/examples/tablecloth_h2.jpg | Bin 364721 -> 369517 bytes docs/source/how-to/run_state_machines.rst | 27 ++++++++++-------- 2 files changed, 15 insertions(+), 12 deletions(-) diff --git a/docs/source/_static/examples/tablecloth_h2.jpg b/docs/source/_static/examples/tablecloth_h2.jpg index 5ee676eea8e7ea811f6bd812d8c7fe5efd4d125f..90b7890cdc65b80f467d5aadb73c6e7e76bd3a80 100644 GIT binary patch literal 369517 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ℑQ{TlWu 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 z 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

i{)K=IvYU_{^Q9;oLJy{5Veu2Xh{1H5lmA0uvCL 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 literal 357302 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