-
Notifications
You must be signed in to change notification settings - Fork 3.1k
Open
Description
Question
Hello, how do I spawn an asset with spatial tendons with ArticulationCfg in a manager based workflow?
I have a USD of a robot with spatial tendons:
I am trying use the manager based workflow to train a policy for the robot. When I run the scripts zero_agent.py the log warns:
"2026-02-10T21:06:23Z [17,565ms] [Warning] [omni.physxui.plugin] PhysX Spatial Tendon: Cannot add attachment /World/envs/env_0/Robot/base/A3 to simulation while simulation is running. It is displayed but does not affect the simulation."
It seems I need to spawn the asset before starting the simulation, but I am not sure how to do this with the manager based workflow.
Here is environment configuration:
import isaaclab.sim as sim_utils
from isaaclab.envs import ViewerCfg
from isaaclab.managers import EventTermCfg as EventTerm
from isaaclab.managers import ObservationGroupCfg as ObsGroup
from isaaclab.managers import ObservationTermCfg as ObsTerm
from isaaclab.managers import RewardTermCfg, SceneEntityCfg
from isaaclab.managers import TerminationTermCfg as DoneTerm
from isaaclab.utils import configclass
from isaaclab.utils.noise import AdditiveUniformNoiseCfg as Unoise
from isaaclab.actuators import DelayedPDActuatorCfg, IdealPDActuatorCfg
from isaaclab.assets.articulation import ArticulationCfg
from isaaclab.utils.assets import ISAAC_NUCLEUS_DIR
import math
from isaaclab.envs import ManagerBasedRLEnvCfg
from . import mdp as Spine_mdp
import isaaclab.envs.mdp as mdp
from isaaclab.scene import InteractiveSceneCfg
from dataclasses import MISSING
from isaaclab.assets import AssetBaseCfg
##
# Pre-defined configs
##
Spine_v1_CFG= ArticulationCfg(
spawn=sim_utils.UsdFileCfg(
usd_path=f"C:/Users/eweissm1/projects/assets/Q1-RB/ExploratorySpine2.usd",
activate_contact_sensors=True,
rigid_props=sim_utils.RigidBodyPropertiesCfg(
disable_gravity=False,
retain_accelerations=False,
linear_damping=0.0,
angular_damping=0.0,
max_linear_velocity=1000.0,
max_angular_velocity=1000.0,
max_depenetration_velocity=1.0,
),
articulation_props=sim_utils.ArticulationRootPropertiesCfg(
enabled_self_collisions=True,
solver_position_iteration_count=4,
solver_velocity_iteration_count=0,
fix_root_link= True
),
),
init_state=ArticulationCfg.InitialStateCfg(
pos=(0.0, 0.0, 0.4),
joint_pos={".*": 0.0}, # all joints
joint_vel={".*": 0.0},
),
actuators={
"spine_v1__cable_joints": DelayedPDActuatorCfg(
joint_names_expr=["m_.*"],
effort_limit=100.0,
stiffness=1000.0,
damping=10,
min_delay=0, # physics time steps (min: 2.0*0=0.0ms)
max_delay=20, # physics time steps (max: 2.0*4=8.0ms) #changed from 4 to 40
velocity_limit = 20,
friction = 1.0,
),
"spine_v1_passive_joints": IdealPDActuatorCfg(
joint_names_expr=["p_.*"],
effort_limit=100.0,
stiffness=0.05,
damping=.01,
velocity_limit = 100,
friction = .1,
)
}
)
@configclass
class MySceneCfg(InteractiveSceneCfg):
"""Configuration for the terrain scene with a legged robot."""
# robots
robot: ArticulationCfg = MISSING
sky_light = AssetBaseCfg(
prim_path="/World/skyLight",
spawn=sim_utils.DomeLightCfg(
intensity=750.0,
texture_file=f"{ISAAC_NUCLEUS_DIR}/Materials/Textures/Skies/PolyHaven/kloofendal_43d_clear_puresky_4k.hdr",
),
)
@configclass
class Spine_ActionsCfg:
...
@configclass
class Spine_CommandsCfg:
...
@configclass
class Spine_ObservationsCfg:
...
@configclass
class Spine_EventCfg:
...
@configclass
class Spine_RewardsCfg:
...
class Spine_CurriculumCfg:
...
@configclass
class Spine_TerminationsCfg:
...
@configclass
class Spine_EnvCfg(ManagerBasedRLEnvCfg):
scene: MySceneCfg = MySceneCfg(num_envs=4096, env_spacing=2.5)
# Basic settings
observations: Spine_ObservationsCfg = Spine_ObservationsCfg()
actions: Spine_ActionsCfg = Spine_ActionsCfg()
commands: Spine_CommandsCfg = Spine_CommandsCfg()
# MDP setting
rewards: Spine_RewardsCfg = Spine_RewardsCfg()
terminations: Spine_TerminationsCfg = Spine_TerminationsCfg()
events: Spine_EventCfg = Spine_EventCfg()
curriculum: Spine_CurriculumCfg = Spine_CurriculumCfg()
# Viewer
viewer = ViewerCfg(eye=(10.5, 10.5, 0.3), origin_type="world", env_index=0, asset_name="robot")
def __post_init__(self):
# general settings
self.decimation = 10 # 50 Hz
self.episode_length_s = 20.0
# simulation settings
self.sim.dt = 0.002 # 500 Hz self.sim.render_interval = self.decimation
self.sim.physics_material.static_friction = 1.0
self.sim.physics_material.dynamic_friction = 1.0
self.sim.physics_material.friction_combine_mode = "multiply"
self.sim.physics_material.restitution_combine_mode = "multiply"
# update sensor update periods
# we tick all the sensors based on the smallest update period (physics update period)
self.observations.policy.enable_corruption = True #added to add noise to policy
# switch robot
self.scene.robot = Spine_v1_CFG.replace(prim_path="{ENV_REGEX_NS}/Robot")
Build Info
Describe the versions that you are currently using:
- Isaac Lab Version: 2.3.0
- Isaac Sim Version: 5.1.0
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels