2929import omni .usd
3030from isaacsim .core .api .simulation_context import SimulationContext as _SimulationContext
3131from isaacsim .core .simulation_manager import SimulationManager
32- from isaacsim .core .utils .carb import get_carb_setting , set_carb_setting
3332from isaacsim .core .utils .viewports import set_camera_view
3433from isaacsim .core .version import get_version
3534from pxr import Gf , PhysxSchema , Sdf , Usd , UsdPhysics
@@ -455,7 +454,19 @@ def set_setting(self, name: str, value: Any):
455454 name: The name of the setting.
456455 value: The value of the setting.
457456 """
458- self ._settings .set (name , value )
457+ # Route through typed setters for correctness and consistency for common scalar types.
458+ if isinstance (value , bool ):
459+ self .carb_settings .set_bool (name , value )
460+ elif isinstance (value , int ):
461+ self .carb_settings .set_int (name , value )
462+ elif isinstance (value , float ):
463+ self .carb_settings .set_float (name , value )
464+ elif isinstance (value , str ):
465+ self .carb_settings .set_string (name , value )
466+ elif isinstance (value , (list , tuple )):
467+ self .carb_settings .set (name , value )
468+ else :
469+ raise ValueError (f"Unsupported value type for setting '{ name } ': { type (value )} " )
459470
460471 def get_setting (self , name : str ) -> Any :
461472 """Read the simulation setting using the Carbonite SDK.
@@ -466,7 +477,7 @@ def get_setting(self, name: str) -> Any:
466477 Returns:
467478 The value of the setting.
468479 """
469- return self ._settings .get (name )
480+ return self .carb_settings .get (name )
470481
471482 def forward (self ) -> None :
472483 """Updates articulation kinematics and fabric for rendering."""
@@ -658,10 +669,10 @@ def _apply_physics_settings(self):
658669 """Sets various carb physics settings."""
659670 # enable hydra scene-graph instancing
660671 # note: this allows rendering of instanceable assets on the GUI
661- set_carb_setting ( self .carb_settings , "/persistent/omnihydra/useSceneGraphInstancing" , True )
672+ self .carb_settings . set_bool ( "/persistent/omnihydra/useSceneGraphInstancing" , True )
662673 # change dispatcher to use the default dispatcher in PhysX SDK instead of carb tasking
663674 # note: dispatcher handles how threads are launched for multi-threaded physics
664- set_carb_setting ( self .carb_settings , "/physics/physxDispatcher" , True )
675+ self .carb_settings . set_bool ( "/physics/physxDispatcher" , True )
665676 # disable contact processing in omni.physx
666677 # note: we disable it by default to avoid the overhead of contact processing when it isn't needed.
667678 # The physics flag gets enabled when a contact sensor is created.
@@ -673,16 +684,16 @@ def _apply_physics_settings(self):
673684 )
674685 # FIXME: From investigation, it seems this flag only affects CPU physics. For GPU physics, contacts
675686 # are always processed. The issue is reported to the PhysX team by @mmittal.
676- set_carb_setting ( self .carb_settings , "/physics/disableContactProcessing" , True )
687+ self .carb_settings . set_bool ( "/physics/disableContactProcessing" , True )
677688 # disable custom geometry for cylinder and cone collision shapes to allow contact reporting for them
678689 # reason: cylinders and cones aren't natively supported by PhysX so we need to use custom geometry flags
679690 # reference: https://nvidia-omniverse.github.io/PhysX/physx/5.4.1/docs/Geometry.html?highlight=capsule#geometry
680- set_carb_setting ( self .carb_settings , "/physics/collisionConeCustomGeometry" , False )
681- set_carb_setting ( self .carb_settings , "/physics/collisionCylinderCustomGeometry" , False )
691+ self .carb_settings . set_bool ( "/physics/collisionConeCustomGeometry" , False )
692+ self .carb_settings . set_bool ( "/physics/collisionCylinderCustomGeometry" , False )
682693 # hide the Simulation Settings window
683- set_carb_setting ( self .carb_settings , "/physics/autoPopupSimulationOutputWindow" , False )
694+ self .carb_settings . set_bool ( "/physics/autoPopupSimulationOutputWindow" , False )
684695
685- def _apply_render_settings_from_cfg (self ):
696+ def _apply_render_settings_from_cfg (self ): # noqa: C901
686697 """Sets rtx settings specified in the RenderCfg."""
687698
688699 # define mapping of user-friendly RenderCfg names to native carb names
@@ -706,7 +717,7 @@ def _apply_render_settings_from_cfg(self):
706717 # 1. command line argument --rendering_mode, if provided
707718 # 2. rendering_mode from Render Config, if set
708719 # 3. lastly, default to "balanced" mode, if neither is specified
709- rendering_mode = get_carb_setting ( self .carb_settings , "/isaaclab/rendering/rendering_mode" )
720+ rendering_mode = self .carb_settings . get ( "/isaaclab/rendering/rendering_mode" )
710721 if not rendering_mode :
711722 rendering_mode = self .cfg .render .rendering_mode
712723 if not rendering_mode :
@@ -736,7 +747,7 @@ def _apply_render_settings_from_cfg(self):
736747 # set presets
737748 for key , value in preset_dict .items ():
738749 key = "/" + key .replace ("." , "/" ) # convert to carb setting format
739- set_carb_setting ( self .carb_settings , key , value )
750+ self .set_setting ( key , value )
740751
741752 # set user-friendly named settings
742753 for key , value in vars (self .cfg .render ).items ():
@@ -749,7 +760,7 @@ def _apply_render_settings_from_cfg(self):
749760 " need to be updated."
750761 )
751762 key = rendering_setting_name_mapping [key ]
752- set_carb_setting ( self .carb_settings , key , value )
763+ self .set_setting ( key , value )
753764
754765 # set general carb settings
755766 carb_settings = self .cfg .render .carb_settings
@@ -759,9 +770,9 @@ def _apply_render_settings_from_cfg(self):
759770 key = "/" + key .replace ("_" , "/" ) # convert from python variable style string
760771 elif "." in key :
761772 key = "/" + key .replace ("." , "/" ) # convert from .kit file style string
762- if get_carb_setting ( self .carb_settings , key ) is None :
773+ if self .get_setting ( key ) is None :
763774 raise ValueError (f"'{ key } ' in RenderCfg.general_parameters does not map to a carb setting." )
764- set_carb_setting ( self .carb_settings , key , value )
775+ self .set_setting ( key , value )
765776
766777 # set denoiser mode
767778 if self .cfg .render .antialiasing_mode is not None :
@@ -773,8 +784,8 @@ def _apply_render_settings_from_cfg(self):
773784 pass
774785
775786 # WAR: Ensure /rtx/renderMode RaytracedLighting is correctly cased.
776- if get_carb_setting ( self .carb_settings , "/rtx/rendermode" ).lower () == "raytracedlighting" :
777- set_carb_setting ( self .carb_settings , "/rtx/rendermode" , "RaytracedLighting" )
787+ if self .carb_settings . get ( "/rtx/rendermode" ).lower () == "raytracedlighting" :
788+ self .carb_settings . set_string ( "/rtx/rendermode" , "RaytracedLighting" )
778789
779790 def _set_additional_physx_params (self ):
780791 """Sets additional PhysX parameters that are not directly supported by the parent class."""
@@ -886,10 +897,10 @@ def _setup_anim_recording(self):
886897 self ._physxPvdInterface = _physxPvd .acquire_physx_pvd_interface ()
887898
888899 # Set carb settings for the output path and enabling pvd recording
889- set_carb_setting (
890- self . carb_settings , "/persistent/physics/omniPvdOvdRecordingDirectory" , self ._anim_recording_output_dir
900+ self . carb_settings . set_string (
901+ "/persistent/physics/omniPvdOvdRecordingDirectory" , self ._anim_recording_output_dir
891902 )
892- set_carb_setting ( self .carb_settings , "/physics/omniPvdOutputEnabled" , True )
903+ self .carb_settings . set_bool ( "/physics/omniPvdOutputEnabled" , True )
893904
894905 def _update_usda_start_time (self , file_path , start_time ):
895906 """Updates the start time of the USDA baked anim recordingfile."""
@@ -954,7 +965,7 @@ def _finish_anim_recording(self):
954965 )
955966
956967 # Disable recording
957- set_carb_setting ( self .carb_settings , "/physics/omniPvdOutputEnabled" , False )
968+ self .carb_settings . set_bool ( "/physics/omniPvdOutputEnabled" , False )
958969
959970 return result
960971
0 commit comments