Joint match problems in scripts

Note: For any Isaac Lab topics, please submit your topic to its GitHub repo (GitHub - isaac-sim/IsaacLab: Unified framework for robot learning built on NVIDIA Isaac Sim) following the instructions provided on Isaac Lab’s Contributing Guidelines (Contribution Guidelines — Isaac Lab Documentation).

Please provide all relevant details below before submitting your post. This will help the community provide more accurate and timely assistance. After submitting, you can check the appropriate boxes. Remember, you can always edit your post later to include additional information if needed.

Isaac Sim Version

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 22.04
Ubuntu 20.04
Windows 11
Windows 10
Other (please specify):

GPU Information

  • Model: 4090
  • Driver Version: 12.8

Topic Description

Detailed Description

Now I’m adding a new robot using the template ‘add_new_robot.py’ in tutorial. I’m sure that the articulationRoot, joints and their corresponding drives are set well. And I’ve run a successful simulation in isaacsim GUI, however when I ran the add_new_robot.py and tried to matches all the joints with drive, it gives no available joints actuators.

Error Messages

Traceback (most recent call last):
  File "/home/houzhinan/Workspace/GeoTrussRover-simulation/GeoTrussRover/scripts/GeoTrussRover/add_new_robot.py", line 152, in <module>
    main()
  File "/home/houzhinan/Workspace/GeoTrussRover-simulation/GeoTrussRover/scripts/GeoTrussRover/add_new_robot.py", line 127, in main
    sim.reset()
  File "/home/houzhinan/Workspace/IsaacLab/source/isaaclab/isaaclab/sim/simulation_context.py", line 536, in reset
    self.render()
  File "/home/houzhinan/Workspace/IsaacLab/source/isaaclab/isaaclab/sim/simulation_context.py", line 591, in render
    raise exception_to_raise
  File "/home/houzhinan/Workspace/IsaacLab/source/isaaclab/isaaclab/assets/asset_base.py", line 291, in _initialize_callback
    self._initialize_impl()
  File "/home/houzhinan/Workspace/IsaacLab/source/isaaclab/isaaclab/assets/articulation/articulation.py", line 1208, in _initialize_impl
    self._process_cfg()
  File "/home/houzhinan/Workspace/IsaacLab/source/isaaclab/isaaclab/assets/articulation/articulation.py", line 1297, in _process_cfg
    indices_list, _, values_list = string_utils.resolve_matching_names_values(
  File "/home/houzhinan/Workspace/IsaacLab/source/isaaclab/isaaclab/utils/string.py", line 364, in resolve_matching_names_values
    raise ValueError(
ValueError: Not all regular expressions are matched! Please check that the regular expressions are correct: 
        .*: []
Available strings: []

2025-07-02 08:31:17 [9,653ms] [Warning] [omni.graph.core.plugin] Could not find category 'Replicator:Annotators' for removal
2025-07-02 08:31:17 [9,653ms] [Warning] [omni.graph.core.plugin] Could not find category 'Replicator:Annotators' for removal
2025-07-02 08:31:17 [9,653ms] [Warning] [omni.graph.core.plugin] Could not find category 'Replicator:Annotators' for removal
2025-07-02 08:31:17 [9,653ms] [Warning] [omni.graph.core.plugin] Could not find category 'Replicator:Annotators' for removal
2025-07-02 08:31:17 [9,653ms] [Warning] [omni.graph.core.plugin] Could not find category 'Replicator:Annotators' for removal
2025-07-02 08:31:17 [9,653ms] [Warning] [omni.graph.core.plugin] Could not find category 'Replicator:Annotators' for removal
2025-07-02 08:31:17 [9,653ms] [Warning] [omni.graph.core.plugin] Could not find category 'Replicator:Annotators' for removal
2025-07-02 08:31:17 [9,653ms] [Warning] [omni.graph.core.plugin] Could not find category 'Replicator:Annotators' for removal
2025-07-02 08:31:17 [9,653ms] [Warning] [omni.graph.core.plugin] Could not find category 'Replicator:Annotators' for removal
2025-07-02 08:31:17 [9,653ms] [Warning] [omni.graph.core.plugin] Could not find category 'Replicator:Annotators' for removal
2025-07-02 08:31:17 [9,654ms] [Warning] [omni.graph.core.plugin] Could not find category 'Replicator:Annotators' for removal
2025-07-02 08:31:17 [9,654ms] [Warning] [omni.graph.core.plugin] Could not find category 'Replicator:Annotators' for removal
2025-07-02 08:31:17 [9,654ms] [Warning] [omni.graph.core.plugin] Could not find category 'Replicator:Core' for removal
2025-07-02 08:31:17 [9,655ms] [Warning] [omni.graph.core.plugin] Could not find category 'animation' for removal
2025-07-02 08:31:17 [9,737ms] [Warning] [omni.fabric.plugin] gFabricState->gUsdStageToSimStageWithHistoryMap had 1 outstanding SimStageWithHistory(s) at shutdown
2025-07-02 08:31:17 [9,738ms] [Warning] [carb.audio.context] 1 contexts were leaked
2025-07-02 08:31:18 [9,853ms] [Warning] [carb] Recursive unloadAllPlugins() detected!

Screenshots or Videos

Maybe you need the tree structure of the robot model:

The simulation runs well in GUI:

Additional Information

What I’ve Tried

Here’s the code I use, maybe something does not match my model for the time being. But I do believe the problem existing in the simulation model structure because I’ve tested the code with official assets and some simple robots I created.

# Copyright (c) 2022-2025, The Isaac Lab Project Developers (https://github.com/isaac-sim/IsaacLab/blob/main/CONTRIBUTORS.md).
# All rights reserved.
#
# SPDX-License-Identifier: BSD-3-Clause

import argparse

from isaaclab.app import AppLauncher

# add argparse arguments
parser = argparse.ArgumentParser(
    description="This script demonstrates adding a custom robot to an Isaac Lab environment."
)
parser.add_argument("--num_envs", type=int, default=1, help="Number of environments to spawn.")
# append AppLauncher cli args
AppLauncher.add_app_launcher_args(parser)
# parse the arguments
args_cli = parser.parse_args()

# launch omniverse app
app_launcher = AppLauncher(args_cli)
simulation_app = app_launcher.app

import numpy as np
import torch

import isaaclab.sim as sim_utils
from isaaclab.actuators import ImplicitActuatorCfg
from isaaclab.assets import AssetBaseCfg
from isaaclab.assets.articulation import ArticulationCfg
from isaaclab.scene import InteractiveScene, InteractiveSceneCfg
from isaaclab.utils.assets import ISAAC_NUCLEUS_DIR

GEOTRUSSROVER_CONFIG = ArticulationCfg(
    spawn=sim_utils.UsdFileCfg(
        usd_path="/home/houzhinan/Workspace/GeoTrussRover-simulation/opt_isaac/sphere_car_0701_2_with_plane.usd",
        rigid_props=sim_utils.RigidBodyPropertiesCfg(
            disable_gravity=False,
            retain_accelerations=False,
        ),
        articulation_props=sim_utils.ArticulationRootPropertiesCfg(
            enabled_self_collisions=True,
            solver_position_iteration_count=8,
            solver_velocity_iteration_count=1,
        ),
    ),
        actuators={
            "wheels_only": ImplicitActuatorCfg(
                joint_names_expr=[".*"],
                damping=None,
                stiffness=None,
            ),
        },
)

class NewRobotsSceneCfg(InteractiveSceneCfg):
    """Designs the scene."""

    # Ground-plane
    ground = AssetBaseCfg(prim_path="/World/defaultGroundPlane", spawn=sim_utils.GroundPlaneCfg())

    # lights
    dome_light = AssetBaseCfg(
        prim_path="/World/Light", spawn=sim_utils.DomeLightCfg(intensity=3000.0, color=(0.75, 0.75, 0.75))
    )

    # robot
    GeoTrussRover = GEOTRUSSROVER_CONFIG.replace(prim_path="{ENV_REGEX_NS}/GeoTrussRover")


def run_simulator(sim: sim_utils.SimulationContext, scene: InteractiveScene):
    sim_dt = sim.get_physics_dt()
    sim_time = 0.0
    count = 0

    while simulation_app.is_running():
        # reset
        if count % 500 == 0:
            # reset counters
            count = 0
            # reset the scene entities to their initial positions offset by the environment origins
            root_geotrussrover_state = scene["GeoTrussRover"].data.default_root_state.clone()
            root_geotrussrover_state[:, :3] += scene.env_origins

            # copy the default root state to the sim
            scene["GeoTrussRover"].write_root_pose_to_sim(root_geotrussrover_state[:, :7])
            scene["GeoTrussRover"].write_root_velocity_to_sim(root_geotrussrover_state[:, 7:])

            # copy the default joint states to the sim
            joint_pos, joint_vel = (
                scene["GeoTrussRover"].data.default_joint_pos.clone(),
                scene["GeoTrussRover"].data.default_joint_vel.clone(),
            )
            scene["GeoTrussRover"].write_joint_state_to_sim(joint_pos, joint_vel)
            # clear internal buffers
            scene.reset()
            print("[INFO]: Resetting GeoTrussRover, Jetbot and Dofbot state...")

        # drive around
        # if count % 100 < 75:
        #     # Drive straight by setting equal wheel velocities
        #     action = torch.Tensor([[10.0, 10.0]])
        # else:
        #     # Turn by applying different velocitiesscripts/GeoTrussRover/add_new_robot.py
        #     action = torch.Tensor([[5.0, -5.0]])

        # 控制GeoTrussRover 
        # scene["GeoTrussRover"].set_joint_velocity_target(action)
        # scene["Jetbot"].set_joint_velocity_target(action)

        scene.write_data_to_sim()
        sim.step()
        sim_time += sim_dt
        count += 1
        scene.update(sim_dt)


def main():
    """Main function."""
    sim_cfg = sim_utils.SimulationCfg(device=args_cli.device)
    sim = sim_utils.SimulationContext(sim_cfg)

    sim.set_camera_view([3.5, 0.0, 3.2], [0.0, 0.0, 0.5])
    scene_cfg = NewRobotsSceneCfg(args_cli.num_envs, env_spacing=2.0)
    scene = InteractiveScene(scene_cfg)
    
    sim.reset()
    
    print("[INFO]: Setup complete...")
    
    print(f"[DEBUG]: GeoTrussRover joint names: {scene['GeoTrussRover'].joint_names}")
    print(f"[DEBUG]: GeoTrussRover DoF: {scene['GeoTrussRover'].num_joints}")
    print(f"[DEBUG]: GeoTrussRover body names: {scene['GeoTrussRover'].body_names}")
    print(f"[DEBUG]: GeoTrussRover num bodies: {scene['GeoTrussRover'].num_bodies}")

    if scene['GeoTrussRover'].num_joints > 0:
        print(f"[DEBUG]: Joint position shape: {scene['GeoTrussRover'].data.joint_pos.shape}")
        print(f"[DEBUG]: Joint velocity shape: {scene['GeoTrussRover'].data.joint_vel.shape}")
        print(f"[DEBUG]: Joint limits: {scene['GeoTrussRover'].data.joint_limits}")
    else:
        print("[WARNING]: No joints found in GeoTrussRover!")

    print(f"[DEBUG]: Root state shape: {scene['GeoTrussRover'].data.root_state_w.shape}")
    
    run_simulator(sim, scene)


if __name__ == "__main__":
    main()
    simulation_app.close()

@1127642041 i am just another user, but may i inquire which version of Isaac Lab are you using? there are other users reporting similar Available strings: [] message on the Isaac Lab’s Github, perhaps it is worth following up over at the repo:

@Simplychenable Thanks for you reply. I am trying to contact with these guys since the post seems not to give the answer. By the way, my isaaclab version is 0.40.1.

i wonder if using the latest Isaac Lab (should be 2.1.0) would affect anything on your end?

Thanks for your advice. I’ve updated to the version of 0.40.11. It didn’t work either. I will try the version of 2.1.0.

I have ruled out the possible cause of the isaaclab version (it has been updated to 0.40.11); I have ruled out the reason that the robot was added by reference (it cannot be recognized even if it is directly imported as sphere_v3,my origin robot file without any environments setting); I have ruled out the problem of the folder hierarchy (I tried to put the drivable joint directly under GeoTrussRover of auticulationRootAPi, but it still cannot be recognized)

Hi @1127642041 thank you for your question! Could you share the .usd file you are using and any other necessary files so I can try to reproduce this? Thanks!

@shalinj Hi, I’ve solved the problem by reconstruct the model in new version of isaac-sim. Maybe the problems exist in the version unmatching. But the model explode when I try to simulate it. Through exclude some joint from the articulation root, it worked in simulation. But when I tried to import the model to the isaac-lab using code, it exploded. Could you please figure it out, thanks so much.
Problem Post

Hi @1127642041 not sure if you are still having trouble with the explosion of the parts. Typically this can happen because of either some joint setup such that it create an excessively large amount of force/torque, or a body in your system that has very low mass. I realized that in the other post you shared a USD to your robot setup, but I was not able to open the USD for some reason I cannot figure out. Would you be able to share the setup again, you can try File > Collect and Save As... in case there are any linked USD files that are needed.

If this issue is already resolved, also please let us know. Thank you.