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()
