Skip to content

Articulation Initialisation Error when loading scene with two policy controller robots #613

@SMEAC

Description

@SMEAC

Description

When loading scene (interactive example) with two robots both using seperate policies, an error occurs in the initialisation, whereby all articulation joints in scene are found, and not per robot.

Two robots have been created with code from examples:

            self.go2 = Go2FlatTerrainPolicy(
            prim_path="/World/Go2",
            name="Go2",
            ##################
            usd_path="https://omniverse-content-production.s3-us-west-2.amazonaws.com/Assets/Isaac/5.1/Isaac/Robots/Unitree/Go2/go2.usd",
            ##################
            position=np.array([0, 0, 0.5]),
        )
        cabinet_prim_path = "/World/cabinet"
        cabinet_usd_path = get_assets_root_path() + "/Isaac/Props/Sektion_Cabinet/sektion_cabinet_instanceable.usd"

        cabinet_name = "cabinet"
        cabinet_position = np.array([0.8, 0.0, 0.4])
        cabinet_orientation = np.array([0.0, 0.0, 0.0, 1.0])

        stage_utils.add_reference_to_stage(cabinet_usd_path, cabinet_prim_path)

        self.cabinet = SingleArticulation(
            prim_path=cabinet_prim_path, name=cabinet_name, position=cabinet_position, orientation=cabinet_orientation
        )

        self.franka = FrankaOpenDrawerPolicy(
            prim_path="/World/franka", name="franka", position=np.array([0, -0, 0]), cabinet=self.cabinet
        )

Then performing the initialisation in on_physics_step(self, step_size):

            self.go2.initialize()
            self.franka.initialize()
            self.go2.post_reset()
            self.franka.post_reset()

The problem occurs inside the self.go2.initialize(), here all joints are found in the scene, not just the for the go2, this is seen in the log:
2026-05-08T22:51:25Z [221,319ms] [Warning] [isaacsim.robot.policy.examples.controllers.config_loader] panda_joint1 default position not found, setting to 0
2026-05-08T22:51:25Z [221,325ms] [Warning] [isaacsim.robot.policy.examples.controllers.config_loader]
panda_joint2 default position not found, setting to 0
2026-05-08T22:51:25Z [221,327ms] [Warning] [isaacsim.robot.policy.examples.controllers.config_loader]
panda_joint3 default position not found, setting to 0
2026-05-08T22:51:25Z [221,328ms] [Warning] [isaacsim.robot.policy.examples.controllers.config_loader]
panda_joint4 default position not found, setting to 0
2026-05-08T22:51:25Z [221,328ms] [Warning] [isaacsim.robot.policy.examples.controllers.config_loader] panda_joint5 default position not found, setting to 0
2026-05-08T22:51:25Z [221,328ms] [Warning] [isaacsim.robot.policy.examples.controllers.config_loader] panda_joint6 default position not found, setting to 0
2026-05-08T22:51:25Z [221,330ms] [Warning] [isaacsim.robot.policy.examples.controllers.config_loader] panda_joint7 default position not found, setting to 0
2026-05-08T22:51:25Z [221,331ms] [Warning] [isaacsim.robot.policy.examples.controllers.config_loader] panda_finger_joint1 default position not found, setting to 0
2026-05-08T22:51:25Z [221,332ms] [Warning] [isaacsim.robot.policy.examples.controllers.config_loader] panda_finger_joint2 default position not found, setting to 0

But then an error occurs, due to the tuples not being of the correct length for the loaded policies.

2026-05-08T22:51:25Z [221,334ms] [Error] [omni.kit.app._impl] [py stderr]: Traceback (most recent call last):
2026-05-08T22:51:25Z [221,335ms] [Error] [omni.kit.app._impl] [py stderr]: File "c:/isaac-sim/exts/isaacsim.examples.interactive/isaacsim/examples/interactive/quadruped/go2_withArm_example.py", line 187, in on_physics_step
2026-05-08T22:51:25Z [221,337ms] [Error] [omni.kit.app._impl] [py stderr]: self.go2.initialize()
2026-05-08T22:51:25Z [221,337ms] [Error] [omni.kit.app._impl] [py stderr]: File "c:/isaac-sim/exts/isaacsim.robot.policy.examples/isaacsim/robot/policy/examples/controllers/policy_controller.py", line 130, in initialize
2026-05-08T22:51:25Z [221,342ms] [Error] [omni.kit.app._impl] [py stderr]: self.robot._articulation_view.set_gains(stiffness, damping)
2026-05-08T22:51:25Z [221,342ms] [Error] [omni.kit.app._impl] [py stderr]: File "c:/isaac-sim/exts/isaacsim.core.prims/isaacsim/core/prims/impl/articulation.py", line 3044, in set_gains
2026-05-08T22:51:25Z [221,344ms] [Error] [omni.kit.app._impl] [py stderr]: stiffnesses = self._backend_utils.assign(
2026-05-08T22:51:25Z [221,344ms] [Error] [omni.kit.app._impl] [py stderr]: ^^^^^^^^^^^^^^^^^^^^^^^^^^^
2026-05-08T22:51:25Z [221,346ms] [Error] [omni.kit.app._impl] [py stderr]: File "c:/isaac-sim/exts/isaacsim.core.utils/isaacsim/core/utils/numpy/tensor.py", line 97, in assign
2026-05-08T22:51:25Z [221,347ms] [Error] [omni.kit.app._impl] [py stderr]: dst[tuple(indices)] = src
2026-05-08T22:51:25Z [221,348ms] [Error] [omni.kit.app._impl] [py stderr]: ~~~^^^^^^^^^^^^^^^^
2026-05-08T22:51:25Z [221,349ms] [Error] [omni.kit.app._impl] [py stderr]: ValueError: shape mismatch: value array of shape (12,) could not be broadcast to indexing result of shape (1,21)

Problem appears to be inpolicy_controller.py, the function self.robot.initialize(physics_sim_view=physics_sim_view) filing the variable name self.robot.dof_names, with all articulation joints in scene, not just the robot.
This leads to the variables being passed to
get_robot_joint_properties in policyController.py, passing all dof_names to the config_loader.py and single_articulation.py. Where the error occurs

Isaac Sim version

5.1.0

Operating System (OS)

Windows WSL Ubuntu 24.04, but also confirmed on normal Ubuntu 24.04.

GPU Name

RTX 5070

GPU Driver and CUDA versions

NVIDIA-SMI 591.44 Driver Version: 591.44 CUDA Version: 13.1

Logs

No response

Additional information

No response

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type
No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions