How do I use D6joint in Gain Tuner?

Isaac Sim Version

5.1.0
■ 5.0.0
4.5.0
4.2.0
4.1.0
4.0.0
4.5.0
2023.1.1
2023.1.0-hotfix.1
Other (please specify):

Operating System

Ubuntu 24.04
Ubuntu 22.04
Ubuntu 20.04
Windows 11
■ Windows 10
Other (please specify):

Problem Description

I’m currently trying to use a D6 joint drive to drive a joint, so I’d like to use the Gain Tuner to set the Stiffness and Damping. However, I’m having trouble correctly setting the D6 joint in the Gain Tuner.

My Step :

  1. Create each Joint (Revolute Joint & D6joint)

  2. Apply the Robot schema, and I set IsaacRobotAPI to the Prim of the Articulation root.

  3. Setup the IsaacRobotAPI

  4. Open the Gain Tuner (Tools → Robotics → Assets editors→ Gain Tuner).

  5. As soon as I open the Gain Tuner, Console會顯示以下Error messages:

2025-10-18 13:30:45 [Error] [omni.ui.python] TypeError: loop of ufunc does not support argument 0 of type NoneType which has no callable deg2rad method
2025-10-18 13:30:45 [Error] [omni.ui.python]
2025-10-18 13:30:45 [Error] [omni.ui.python] At:
2025-10-18 13:30:45 [Error] [omni.ui.python] c:/isaacsim/exts/isaacsim.core.experimental.prims/isaacsim/core/experimental/prims/impl/articulation.py(755): get_dof_limits
2025-10-18 13:30:45 [Error] [omni.ui.python] c:/isaacsim/exts/isaacsim.robot_setup.gain_tuner/isaacsim/robot_setup/gain_tuner/ui/test_table_widget.py(482): init
2025-10-18 13:30:45 [Error] [omni.ui.python] c:/isaacsim/exts/isaacsim.robot_setup.gain_tuner/isaacsim/robot_setup/gain_tuner/ui/test_table_widget.py(553): init
2025-10-18 13:30:45 [Error] [omni.ui.python] c:/isaacsim/exts/isaacsim.robot_setup.gain_tuner/isaacsim/robot_setup/gain_tuner/ui/ui_builder.py(529): _build_test_gains_frame
2025-10-18 13:30:45 [Error] [omni.ui.python]
2025-10-18 13:30:45 [Warning] [isaacsim.core.experimental.prims.impl.articulation] Number of DOFs mismatch: USD (7) != Physics tensor (15)
2025-10-18 13:30:45 [Warning] [isaacsim.core.experimental.prims.impl.articulation] DOF names mismatch: USD ([‘Torso_Hip_Fix_Joint’, ‘Right_Hip_Joint’, ‘Left_Hip_Joint’, ‘Right_Knee’, ‘Left_Knee’, ‘Right_Ankle’, ‘Left_Ankle’]) != Physics tensor ([‘Torso_Hip_Fix_Joint:0’, ‘Torso_Hip_Fix_Joint:1’, ‘Torso_Hip_Fix_Joint:2’, ‘Right_Hip_Joint:0’, ‘Right_Hip_Joint:1’, ‘Right_Hip_Joint:2’, ‘Left_Hip_Joint:0’, ‘Left_Hip_Joint:1’, ‘Left_Hip_Joint:2’, ‘Right_Knee’, ‘Left_Knee’, ‘Right_Ankle:0’, ‘Right_Ankle:1’, ‘Left_Ankle:0’, ‘Left_Ankle:1’])
2025-10-18 13:30:45 [Warning] [isaacsim.core.experimental.prims.impl.articulation] DOF indices mismatch: USD ({‘Torso_Hip_Fix_Joint’: 0, ‘Right_Hip_Joint’: 1, ‘Left_Hip_Joint’: 2, ‘Right_Knee’: 3, ‘Left_Knee’: 4, ‘Right_Ankle’: 5, ‘Left_Ankle’: 6}) != Physics tensor ({‘Left_Ankle:0’: 13, ‘Left_Ankle:1’: 14, ‘Left_Hip_Joint:0’: 6, ‘Left_Hip_Joint:1’: 7, ‘Left_Hip_Joint:2’: 8, ‘Left_Knee’: 10, ‘Right_Ankle:0’: 11, ‘Right_Ankle:1’: 12, ‘Right_Hip_Joint:0’: 3, ‘Right_Hip_Joint:1’: 4, ‘Right_Hip_Joint:2’: 5, ‘Right_Knee’: 9, ‘Torso_Hip_Fix_Joint:0’: 0, ‘Torso_Hip_Fix_Joint:1’: 1, ‘Torso_Hip_Fix_Joint:2’: 2})
2025-10-18 13:30:45 [Warning] [isaacsim.core.experimental.prims.impl.articulation] DOF paths mismatch: USD ([[‘/DigitalTwin/Joints/Torso_Hip_Fix_Joint’, ‘/DigitalTwin/Joints/Right_Hip_Joint’, ‘/DigitalTwin/Joints/Left_Hip_Joint’, ‘/DigitalTwin/Joints/Right_Knee’, ‘/DigitalTwin/Joints/Left_Knee’, ‘/DigitalTwin/Joints/Right_Ankle’, ‘/DigitalTwin/Joints/Left_Ankle’]]) != Physics tensor ([[‘/DigitalTwin/Joints/Torso_Hip_Fix_Joint’, ‘/DigitalTwin/Joints/Torso_Hip_Fix_Joint’, ‘/DigitalTwin/Joints/Torso_Hip_Fix_Joint’, ‘/DigitalTwin/Joints/Right_Hip_Joint’, ‘/DigitalTwin/Joints/Right_Hip_Joint’, ‘/DigitalTwin/Joints/Right_Hip_Joint’, ‘/DigitalTwin/Joints/Left_Hip_Joint’, ‘/DigitalTwin/Joints/Left_Hip_Joint’, ‘/DigitalTwin/Joints/Left_Hip_Joint’, ‘/DigitalTwin/Joints/Right_Knee’, ‘/DigitalTwin/Joints/Left_Knee’, ‘/DigitalTwin/Joints/Right_Ankle’, ‘/DigitalTwin/Joints/Right_Ankle’, ‘/DigitalTwin/Joints/Left_Ankle’, ‘/DigitalTwin/Joints/Left_Ankle’]])
2025-10-18 13:30:45 [Warning] [isaacsim.core.experimental.prims.impl.articulation] DOF types mismatch: USD ([<DofType.Invalid: 255>, <DofType.Invalid: 255>, <DofType.Invalid: 255>, <DofType.Rotation: 0>, <DofType.Rotation: 0>, <DofType.Invalid: 255>, <DofType.Invalid: 255>]) != Physics tensor ([<DofType.Rotation: 0>, <DofType.Rotation: 0>, <DofType.Rotation: 0>, <DofType.Rotation: 0>, <DofType.Rotation: 0>, <DofType.Rotation: 0>, <DofType.Rotation: 0>, <DofType.Rotation: 0>, <DofType.Rotation: 0>, <DofType.Rotation: 0>, <DofType.Rotation: 0>, <DofType.Rotation: 0>, <DofType.Rotation: 0>, <DofType.Rotation: 0>, <DofType.Rotation: 0>])

Hi @Y.C.Zeng, thank you for posting your question. Can you share your setup? (usd file) for us to take a look at the issue?

Sorry, but I can’t share the USD file because it’s part of an ongoing paper.

It seems like there may be some issues with the Gain Tuner extension. I am looking into it and will keep you updated.

Hi @Y.C.Zeng, unfortunately D6 joints are not supported for articulations, and the Gain Tuner is designed to work for articulations. You could decompose the D6 joint into revolute and prismatic joints to achieve the same behavior, and then use the Gain Tuner. Hope that helps.