#usda 1.0 ( customLayerData = { dictionary cameraSettings = { dictionary Front = { double3 position = (5, 0, 0) double radius = 5 } dictionary Perspective = { double3 position = (4.476158253317509, 3.654877728987201, 1.3570391385052043) double3 target = (-0.6192311091531382, 1.9982868946483097, 0.34649823446241834) } dictionary Right = { double3 position = (0, -5, 0) double radius = 5 } dictionary Top = { double3 position = (0, 0, 5) double radius = 5 } string boundCamera = "/OmniverseKit_Persp" } dictionary omni_layer = { dictionary locked = { } dictionary muteness = { } } dictionary physicsSettings = { int "/persistent/simulation/minFrameRate" = 60 } dictionary renderSettings = { } } endTimeCode = 1000000 metersPerUnit = 1 startTimeCode = 0 timeCodesPerSecond = 60 upAxis = "Z" ) def PhysicsScene "physicsScene" ( prepend apiSchemas = ["PhysxSceneAPI"] ) { vector3f physics:gravityDirection = (0, 0, -1) float physics:gravityMagnitude = 9.81 uniform token physxScene:broadphaseType = "MBP" bool physxScene:enableCCD = 1 bool physxScene:enableGPUDynamics = 0 bool physxScene:enableStabilization = 1 uniform token physxScene:solverType = "TGS" uint physxScene:timeStepsPerSecond = 60 } def "World" { def Xform "ground_plane" ( prepend apiSchemas = ["MaterialBindingAPI"] ) { rel material:binding = ( bindMaterialAs = "strongerThanDescendants" ) quatf xformOp:orient = (1, 0, 0, 0) float3 xformOp:scale = (1, 1, 1) float3 xformOp:translate = (0, 0, 0) uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:orient", "xformOp:scale"] def Mesh "geom" ( prepend apiSchemas = ["PhysicsCollisionAPI", "PhysicsMeshCollisionAPI", "PhysxCollisionAPI"] ) { uniform bool doubleSided = 1 int[] faceVertexCounts = [4] int[] faceVertexIndices = [0, 1, 2, 3] normal3f[] normals = [(0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1)] point3f[] points = [(-50, -50, 0), (50, -50, 0), (50, 50, 0), (-50, 50, 0)] color3f[] primvars:displayColor = [(0, 0, 0)] quatd xformOp:orient = (1, 0, 0, 0) double3 xformOp:scale = (1, 1, 1) double3 xformOp:translate = (0, 0, 0) uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:orient", "xformOp:scale"] } def Plane "collisionPlane" ( prepend apiSchemas = ["PhysicsCollisionAPI"] ) { uniform token axis = "Z" uniform token purpose = "guide" } } def "Physics_Materials" { def Material "physics_material" ( prepend apiSchemas = ["PhysicsMaterialAPI"] ) { float physics:dynamicFriction = 0.5 float physics:restitution = 0.8 float physics:staticFriction = 0.5 } def Material "physics_material_1" ( prepend apiSchemas = ["PhysicsMaterialAPI"] ) { float physics:dynamicFriction = 1 float physics:restitution = 0 float physics:staticFriction = 0.2 } def Material "physics_material_2" ( prepend apiSchemas = ["PhysicsMaterialAPI"] ) { float physics:dynamicFriction = 1 float physics:restitution = 0 float physics:staticFriction = 0.2 } } def "Looks" { def Material "visual_material" { token outputs:surface.connect = def Shader "shader" { uniform token info:id = "UsdPreviewSurface" float3 inputs:diffuseColor = (0.5, 0.5, 0.5) token outputs:surface } } def Material "visual_material_1" { token outputs:surface.connect = def Shader "shader" { uniform token info:id = "UsdPreviewSurface" float3 inputs:diffuseColor = (0.5, 0.5, 0.5) token outputs:surface } } def Material "visual_material_2" { token outputs:surface.connect = def Shader "shader" { uniform token info:id = "UsdPreviewSurface" float3 inputs:diffuseColor = (0.5, 0.5, 0.5) token outputs:surface } } } def DomeLight "dome_light" { float inputs:intensity = 1000 } def Cube "cube" ( prepend apiSchemas = ["MaterialBindingAPI", "PhysicsCollisionAPI", "PhysicsMeshCollisionAPI", "PhysxCollisionAPI", "PhysicsMassAPI", "PhysicsRigidBodyAPI", "PhysxRigidBodyAPI"] ) { float3[] extent = [(-0.5, -0.5, -0.5), (0.5, 0.5, 0.5)] rel material:binding = None ( bindMaterialAs = "strongerThanDescendants" ) rel material:binding:physics = ( bindMaterialAs = "strongerThanDescendants" ) bool physics:collisionEnabled = 1 float physics:mass = 0.02 float physxCollision:contactOffset = 0.1 float physxCollision:minTorsionalPatchRadius = 0.8 float physxCollision:restOffset = 0 float physxCollision:torsionalPatchRadius = 1 float physxRigidBody:sleepThreshold = 0 color3f[] primvars:displayColor = [(0, 0, 1)] double size = 1 quatd xformOp:orient = (1, 0, 0, 0) double3 xformOp:scale = (1, 1, 1) double3 xformOp:translate = (0, 0, 0.5) uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:orient", "xformOp:scale"] } def Cone "cone" ( prepend apiSchemas = ["MaterialBindingAPI", "PhysicsCollisionAPI", "PhysicsMeshCollisionAPI", "PhysxCollisionAPI", "PhysicsMassAPI", "PhysicsRigidBodyAPI", "PhysxRigidBodyAPI"] ) { float3[] extent = [(-1, -1, -0.5), (1, 1, 0.5)] double height = 1 rel material:binding = None ( bindMaterialAs = "strongerThanDescendants" ) rel material:binding:physics = ( bindMaterialAs = "strongerThanDescendants" ) bool physics:collisionEnabled = 1 float physics:mass = 0.02 float physxRigidBody:sleepThreshold = 0 color3f[] primvars:displayColor = [(0, 1, 0)] double radius = 1 custom bool refinementEnableOverride = 1 custom int refinementLevel = 2 quatd xformOp:orient = (1, 0, 0, 0) double3 xformOp:scale = (0.5, 0.5, 1) double3 xformOp:translate = (0, 0, 1.5) uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:orient", "xformOp:scale"] def Xform "gripper_force_origin" { quatd xformOp:orient = (0.7071067690849304, 0, 0.7071067690849304, 0) double3 xformOp:scale = (1, 1, 1) double3 xformOp:translate = (0, 0, -0.5009999871253967) uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:orient", "xformOp:scale"] } } } def "graph" { def OmniGraph "SurfaceGripperActionGraph" { token evaluationMode = "Automatic" token evaluator:type = "execution" token fabricCacheBacking = "Shared" int2 fileFormatVersion = (1, 9) token pipelineStage = "pipelineStageSimulation" def OmniGraphNode "OnImpulseClose" { custom bool inputs:onlyPlayback = 0 token node:type = "omni.graph.action.OnImpulseEvent" int node:typeVersion = 3 custom uint outputs:execOut ( customData = { bool isExecution = 1 } ) custom bool state:enableImpulse } def OmniGraphNode "OnImpulseOpen" { custom bool inputs:onlyPlayback = 0 token node:type = "omni.graph.action.OnImpulseEvent" int node:typeVersion = 3 custom uint outputs:execOut ( customData = { bool isExecution = 1 } ) custom bool state:enableImpulse } def OmniGraphNode "OnKeyboardInputClose" { custom bool inputs:altIn custom bool inputs:ctrlIn custom token inputs:keyIn = "C" ( allowedTokens = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "Apostrophe", "Backslash", "Backspace", "CapsLock", "Comma", "Del", "Down", "End", "Enter", "Equal", "Escape", "F1", "F10", "F11", "F12", "F2", "F3", "F4", "F5", "F6", "F7", "F8", "F9", "GraveAccent", "Home", "Insert", "Key0", "Key1", "Key2", "Key3", "Key4", "Key5", "Key6", "Key7", "Key8", "Key9", "Left", "LeftAlt", "LeftBracket", "LeftControl", "LeftShift", "LeftSuper", "Menu", "Minus", "NumLock", "Numpad0", "Numpad1", "Numpad2", "Numpad3", "Numpad4", "Numpad5", "Numpad6", "Numpad7", "Numpad8", "Numpad9", "NumpadAdd", "NumpadDel", "NumpadDivide", "NumpadEnter", "NumpadEqual", "NumpadMultiply", "NumpadSubtract", "PageDown", "PageUp", "Pause", "Period", "PrintScreen", "Right", "RightAlt", "RightBracket", "RightControl", "RightShift", "RightSuper", "ScrollLock", "Semicolon", "Slash", "Space", "Tab", "Up"] ) custom bool inputs:onlyPlayback = 0 custom bool inputs:shiftIn token node:type = "omni.graph.action.OnKeyboardInput" int node:typeVersion = 4 custom bool outputs:isPressed custom token outputs:keyOut custom uint outputs:pressed ( customData = { bool isExecution = 1 } ) custom uint outputs:released ( customData = { bool isExecution = 1 } ) } def OmniGraphNode "OnKeyboardInputOpen" { custom bool inputs:altIn custom bool inputs:ctrlIn custom token inputs:keyIn = "O" ( allowedTokens = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "Apostrophe", "Backslash", "Backspace", "CapsLock", "Comma", "Del", "Down", "End", "Enter", "Equal", "Escape", "F1", "F10", "F11", "F12", "F2", "F3", "F4", "F5", "F6", "F7", "F8", "F9", "GraveAccent", "Home", "Insert", "Key0", "Key1", "Key2", "Key3", "Key4", "Key5", "Key6", "Key7", "Key8", "Key9", "Left", "LeftAlt", "LeftBracket", "LeftControl", "LeftShift", "LeftSuper", "Menu", "Minus", "NumLock", "Numpad0", "Numpad1", "Numpad2", "Numpad3", "Numpad4", "Numpad5", "Numpad6", "Numpad7", "Numpad8", "Numpad9", "NumpadAdd", "NumpadDel", "NumpadDivide", "NumpadEnter", "NumpadEqual", "NumpadMultiply", "NumpadSubtract", "PageDown", "PageUp", "Pause", "Period", "PrintScreen", "Right", "RightAlt", "RightBracket", "RightControl", "RightShift", "RightSuper", "ScrollLock", "Semicolon", "Slash", "Space", "Tab", "Up"] ) custom bool inputs:onlyPlayback = 0 custom bool inputs:shiftIn token node:type = "omni.graph.action.OnKeyboardInput" int node:typeVersion = 4 custom bool outputs:isPressed custom token outputs:keyOut custom uint outputs:pressed ( customData = { bool isExecution = 1 } ) custom uint outputs:released ( customData = { bool isExecution = 1 } ) } def OmniGraphNode "OnPlaybackTick" { token node:type = "omni.graph.action.OnPlaybackTick" int node:typeVersion = 2 custom double outputs:deltaSeconds custom double outputs:frame custom uint outputs:tick ( customData = { bool isExecution = 1 } ) custom double outputs:time } def OmniGraphNode "SurfaceGripperNode" { custom float inputs:BendAngle custom uint inputs:Close ( customData = { bool isExecution = 1 } ) prepend uint inputs:Close.connect = [ , , ] custom float inputs:Damping custom float inputs:Delta custom bool inputs:DisableGravity custom bool inputs:enabled custom float inputs:ForceLimit custom rel inputs:GripPosition = ( customData = { dictionary omni = { dictionary graph = { string relType = "target" } } } ) custom float inputs:GripThreshold custom uint inputs:onStep ( customData = { bool isExecution = 1 } ) custom uint inputs:Open ( customData = { bool isExecution = 1 } ) prepend uint inputs:Open.connect = [ , , ] custom rel inputs:ParentRigidBody = ( customData = { dictionary omni = { dictionary graph = { string relType = "target" } } } ) custom bool inputs:RetryClose custom float inputs:Stiffness custom float inputs:TorqueLimit token node:type = "omni.isaac.surface_gripper.SurfaceGripper" int node:typeVersion = 1 custom bool outputs:Closed custom uint outputs:GripBroken ( customData = { bool isExecution = 1 } ) } def OmniGraphNode "ROS2Context" { custom uchar inputs:domain_id custom bool inputs:useDomainIDEnvVar token node:type = "omni.isaac.ros2_bridge.ROS2Context" int node:typeVersion = 2 custom uint64 outputs:context } def OmniGraphNode "ROS2Publisher" { custom uint64 inputs:context prepend uint64 inputs:context.connect = custom double[] inputs:effort custom uint inputs:execIn ( customData = { bool isExecution = 1 } ) prepend uint inputs:execIn.connect = custom token inputs:header:frame_id custom uint inputs:header:stamp:nanosec prepend uint inputs:header:stamp:nanosec.connect = custom int inputs:header:stamp:sec prepend int inputs:header:stamp:sec.connect = custom string inputs:messageName = "JointState" custom string inputs:messagePackage = "sensor_msgs" custom string inputs:messageSubfolder custom token[] inputs:name custom string inputs:nodeNamespace = "surface_gripper" custom double[] inputs:position prepend double[] inputs:position.connect = custom string inputs:qosProfile custom uint64 inputs:queueSize custom string inputs:topicName = "joint_states" custom double[] inputs:velocity token node:type = "omni.isaac.ros2_bridge.ROS2Publisher" int node:typeVersion = 1 custom uint outputs:execOut ( customData = { bool isExecution = 1 } ) } def OmniGraphNode "IsaacReadSimulationTime" { custom bool inputs:resetOnStop = 0 custom int64 inputs:swhFrameNumber token node:type = "omni.isaac.core_nodes.IsaacReadSimulationTime" int node:typeVersion = 1 custom double outputs:simulationTime } def OmniGraphNode "IsaacTimeSplitter" { custom token inputs:time prepend token inputs:time.connect = token node:type = "omni.isaac.core_nodes.IsaacTimeSplitter" int node:typeVersion = 1 custom uint outputs:microseconds custom uint outputs:milliseconds custom uint outputs:nanoseconds custom int outputs:seconds } def OmniGraphNode "ConstantDoubleOpen" { custom double inputs:value = 0 token node:type = "omni.graph.nodes.ConstantDouble" int node:typeVersion = 1 } def OmniGraphNode "ConstantDoubleClose" { custom double inputs:value = 1 token node:type = "omni.graph.nodes.ConstantDouble" int node:typeVersion = 1 } def OmniGraphNode "SelectIfPosition" { custom token inputs:condition prepend token inputs:condition.connect = custom token inputs:ifFalse prepend token inputs:ifFalse.connect = custom token inputs:ifTrue prepend token inputs:ifTrue.connect = token node:type = "omni.graph.nodes.SelectIf" int node:typeVersion = 1 custom token outputs:result } def OmniGraphNode "ConstructArrayPosition" { custom int inputs:arraySize custom token inputs:arrayType ( allowedTokens = ["auto", "bool[]", "double[]", "float[]", "half[]", "int[]", "int64[]", "token[]", "uchar[]", "uint[]", "uint64[]", "double[2][]", "double[3][]", "double[4][]", "matrixd[2][]", "matrixd[3][]", "matrixd[4][]", "float[2][]", "float[3][]", "float[4][]", "half[2][]", "half[3][]", "half[4][]", "int[2][]", "int[3][]", "int[4][]", "timecode[]", "frame[4][]", "colord[3][]", "colorf[3][]", "colorh[3][]", "colord[4][]", "colorf[4][]", "colorh[4][]", "normald[3][]", "normalf[3][]", "normalh[3][]", "pointd[3][]", "pointf[3][]", "pointh[3][]", "quatd[4][]", "quatf[4][]", "quath[4][]", "texcoordd[2][]", "texcoordf[2][]", "texcoordh[2][]", "texcoordd[3][]", "texcoordf[3][]", "texcoordh[3][]", "vectord[3][]", "vectorf[3][]", "vectorh[3][]"] ) custom token inputs:input0 delete token inputs:input0.connect = prepend token inputs:input0.connect = token node:type = "omni.graph.nodes.ConstructArray" int node:typeVersion = 1 custom token outputs:array } def OmniGraphNode "ConstantColor3fOpen" { custom color3f inputs:value = (0, 1, 0) token node:type = "omni.graph.nodes.ConstantColor3f" int node:typeVersion = 1 } def OmniGraphNode "ConstantColor3fClose" { custom color3f inputs:value = (1, 0, 0) token node:type = "omni.graph.nodes.ConstantColor3f" int node:typeVersion = 1 } def OmniGraphNode "SelectIfColor" { custom token inputs:condition prepend token inputs:condition.connect = custom token inputs:ifFalse prepend token inputs:ifFalse.connect = custom token inputs:ifTrue prepend token inputs:ifTrue.connect = token node:type = "omni.graph.nodes.SelectIf" int node:typeVersion = 1 custom token outputs:result } def OmniGraphNode "ConstructArrayColor" { custom int inputs:arraySize custom token inputs:arrayType ( allowedTokens = ["auto", "bool[]", "double[]", "float[]", "half[]", "int[]", "int64[]", "token[]", "uchar[]", "uint[]", "uint64[]", "double[2][]", "double[3][]", "double[4][]", "matrixd[2][]", "matrixd[3][]", "matrixd[4][]", "float[2][]", "float[3][]", "float[4][]", "half[2][]", "half[3][]", "half[4][]", "int[2][]", "int[3][]", "int[4][]", "timecode[]", "frame[4][]", "colord[3][]", "colorf[3][]", "colorh[3][]", "colord[4][]", "colorf[4][]", "colorh[4][]", "normald[3][]", "normalf[3][]", "normalh[3][]", "pointd[3][]", "pointf[3][]", "pointh[3][]", "quatd[4][]", "quatf[4][]", "quath[4][]", "texcoordd[2][]", "texcoordf[2][]", "texcoordh[2][]", "texcoordd[3][]", "texcoordf[3][]", "texcoordh[3][]", "vectord[3][]", "vectorf[3][]", "vectorh[3][]"] ) custom token inputs:input0 delete token inputs:input0.connect = prepend token inputs:input0.connect = token node:type = "omni.graph.nodes.ConstructArray" int node:typeVersion = 1 custom token outputs:array } def OmniGraphNode "WriteGripperColor" { custom uint inputs:execIn ( customData = { bool isExecution = 1 } ) prepend uint inputs:execIn.connect = custom token inputs:name custom rel inputs:prim = ( customData = { dictionary omni = { dictionary graph = { string relType = "target" } } } ) custom token inputs:primPath custom bool inputs:usdWriteBack custom bool inputs:usePath custom token inputs:value prepend token inputs:value.connect = token node:type = "omni.graph.nodes.WritePrimAttribute" int node:typeVersion = 2 custom uint outputs:execOut ( customData = { bool isExecution = 1 } ) custom bool state:correctlySetup custom uint64 state:destAttrib custom uint64 state:destPath custom uint64 state:destPathToken } def OmniGraphNode "ConstantStringOpen" { custom string inputs:value = "Open" token node:type = "omni.graph.nodes.ConstantString" int node:typeVersion = 1 } def OmniGraphNode "ConstantStringClose" { custom string inputs:value = "Close" token node:type = "omni.graph.nodes.ConstantString" int node:typeVersion = 1 } def OmniGraphNode "SelectIfGripperState" { custom token inputs:condition prepend token inputs:condition.connect = custom token inputs:ifFalse prepend token inputs:ifFalse.connect = custom token inputs:ifTrue prepend token inputs:ifTrue.connect = token node:type = "omni.graph.nodes.SelectIf" int node:typeVersion = 1 custom token outputs:result } def OmniGraphNode "PrintGripperState" { custom uint inputs:execIn ( customData = { bool isExecution = 1 } ) prepend uint inputs:execIn.connect = custom token inputs:logLevel ( allowedTokens = ["Info", "Warning", "Error"] ) custom string inputs:text prepend string inputs:text.connect = custom bool inputs:toScreen = 1 custom token inputs:viewport token node:type = "omni.graph.ui_nodes.PrintText" int node:typeVersion = 1 custom uint outputs:execOut ( customData = { bool isExecution = 1 } ) } } }