Issac sim-Articulation

I am working with articulations in Isaac Sim 5.1. I created a prismatic joint between two objects and applied forward and backward motion. The joint moves forward correctly, but when I command it to move backward, it does not move. Can someone suggest a solution for this issue? The code and usd model, I am using is shown below.

import numpy as np
from isaacsim.core.utils.stage import add_reference_to_stage
from isaacsim.core.prims import SingleArticulation
from isaacsim.core.utils.types import ArticulationAction
from isaacsim.core.api.world import World
import asyncio

async def robot_control_example():
    # Reset world if already running
    if World.instance():
        World.instance().clear_instance()

    world = World()
    await world.initialize_simulation_context_async()
    world.scene.add_default_ground_plane()

    # Load USD
    usd_path = "/home/v-b-naik/SVC_II/Script/Script_06Nov_25/assets/New_CAD/Example_prismatic_joint.usd"
    prim_path = "/World/envs/env_0/Diver_V0_rev_joints1"
    add_reference_to_stage(usd_path, prim_path)

    # Create articulation
    robot = SingleArticulation(prim_path=prim_path)
    await world.reset_async()
    robot.initialize()

    print("DOF:", robot.num_dof)

    await world.play_async()

    # Zero velocities
    robot.set_joint_velocities(np.zeros(robot.num_dof))

    # Helper function to move robot
    async def move_joint(target_positions, steps=30, description="Moving"):
        action = ArticulationAction(joint_positions=target_positions)
        print(f"{description} to {target_positions[0]} ...")
        for _ in range(steps):
            robot.apply_action(action)
            await world.step_async()

    # Target positions
    target_pos_forward = np.zeros(robot.num_dof)
    target_pos_forward[0] = -0.7

    target_pos_back = np.zeros(robot.num_dof)
    target_pos_back[0] = 0.0

    # Move forward and backward
    await move_joint(target_pos_forward, description="Moving forward")
    await move_joint(target_pos_back, description="Moving backward")

    # Print final joint states
    print("Final positions:", robot.get_joint_positions())
    print("Final velocities:", robot.get_joint_velocities())

    world.pause()

# Run the async task
asyncio.ensure_future(robot_control_example())






Example_prismatic_joint.zip (4.9 KB)

Hi, I cannot load the USD you shared. Can you check your joint position before commanding it to move backward?
And also double check the joint limit so you can move it backward to the target position.