#usda 1.0 ( doc = """Two-finger parallel gripper dynamically referenced on R1's flange by the Robotics OpenUSD example. Sized for the DIN ISO 9409-1-A50 tool flange the robot asset exposes: a 63 mm adapter plate, a ribbed anodised body, hardened steel guide rods, and two machined jaws. +X is the tool approach direction, matching the flange frame. """ defaultPrim = "Gripper" metersPerUnit = 1 upAxis = "Z" ) def Xform "Gripper" ( kind = "component" ) { # Adapter plate bolted to the ISO 50 flange. def Cylinder "AdapterPlate" ( prepend apiSchemas = ["MaterialBindingAPI"] ) { uniform token axis = "X" double height = 0.012 double radius = 0.0320 color3f[] primvars:displayColor = [(0.52, 0.53, 0.55)] rel material:binding = double3 xformOp:translate = (0.0060, 0, 0) uniform token[] xformOpOrder = ["xformOp:translate"] } # Ribbed anodised body housing the drive. def Mesh "Body" ( prepend apiSchemas = ["MaterialBindingAPI"] ) { uniform bool doubleSided = true int[] faceVertexCounts = [4, 4, 4, 4, 4, 4] int[] faceVertexIndices = [0, 1, 2, 3, 7, 6, 5, 4, 0, 4, 5, 1, 1, 5, 6, 2, 2, 6, 7, 3, 3, 7, 4, 0] point3f[] points = [ (0.0120, -0.0420, -0.0300), (0.0900, -0.0480, -0.0340), (0.0900, 0.0480, -0.0340), (0.0120, 0.0420, -0.0300), (0.0120, -0.0420, 0.0300), (0.0900, -0.0480, 0.0340), (0.0900, 0.0480, 0.0340), (0.0120, 0.0420, 0.0300) ] color3f[] primvars:displayColor = [(0.13, 0.14, 0.16)] rel material:binding = } def Cube "RibA" ( prepend apiSchemas = ["MaterialBindingAPI"] ) { double size = 1 color3f[] primvars:displayColor = [(0.10, 0.11, 0.13)] rel material:binding = double3 xformOp:translate = (0.0340, 0, 0) double3 xformOp:scale = (0.0050, 0.0510, 0.0350) uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:scale"] } def Cube "RibB" ( prepend apiSchemas = ["MaterialBindingAPI"] ) { double size = 1 color3f[] primvars:displayColor = [(0.10, 0.11, 0.13)] rel material:binding = double3 xformOp:translate = (0.0620, 0, 0) double3 xformOp:scale = (0.0050, 0.0520, 0.0360) uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:scale"] } # Hardened guide rods the jaws ride on. def Cylinder "GuideRodUpper" ( prepend apiSchemas = ["MaterialBindingAPI"] ) { uniform token axis = "X" double height = 0.055 double radius = 0.0060 color3f[] primvars:displayColor = [(0.60, 0.61, 0.64)] rel material:binding = double3 xformOp:translate = (0.1100, 0, 0.0210) uniform token[] xformOpOrder = ["xformOp:translate"] } def Cylinder "GuideRodLower" ( prepend apiSchemas = ["MaterialBindingAPI"] ) { uniform token axis = "X" double height = 0.055 double radius = 0.0060 color3f[] primvars:displayColor = [(0.60, 0.61, 0.64)] rel material:binding = double3 xformOp:translate = (0.1100, 0, -0.0210) uniform token[] xformOpOrder = ["xformOp:translate"] } # Jaw carriers and the machined gripping fingers. Each jaw is one Xform so a single # transform strokes the carrier and its finger together - binding the carrier alone # would slide the block out from under the finger it is bolted to. Like every other # live-bound prim it declares one matrix op: this file is referenced onto the flange, # so any op order declared here sits in a layer weaker than the one a connector edits # and could not be cleared from there. The authored pose is the fully open one, with # the finger inner faces at y = +/-0.048, clearing a 70 mm part. def Xform "JawUpper" { matrix4d xformOp:transform = ( (1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (0, 0.0600, 0, 1) ) uniform token[] xformOpOrder = ["xformOp:transform"] def Cube "Carrier" ( prepend apiSchemas = ["MaterialBindingAPI"] ) { double size = 1 color3f[] primvars:displayColor = [(0.16, 0.17, 0.19)] rel material:binding = double3 xformOp:translate = (0.1080, 0, 0) double3 xformOp:scale = (0.0260, 0.0130, 0.0300) uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:scale"] } def Mesh "Finger" ( prepend apiSchemas = ["MaterialBindingAPI"] ) { uniform bool doubleSided = true int[] faceVertexCounts = [4, 4, 4, 4, 4, 4] int[] faceVertexIndices = [0, 1, 2, 3, 7, 6, 5, 4, 0, 4, 5, 1, 1, 5, 6, 2, 2, 6, 7, 3, 3, 7, 4, 0] point3f[] points = [ (0.1210, -0.0120, -0.0230), (0.1900, -0.0120, -0.0170), (0.1900, 0.0100, -0.0170), (0.1210, 0.0120, -0.0230), (0.1210, -0.0120, 0.0230), (0.1900, -0.0120, 0.0170), (0.1900, 0.0100, 0.0170), (0.1210, 0.0120, 0.0230) ] color3f[] primvars:displayColor = [(0.05, 0.05, 0.06)] rel material:binding = } } def Xform "JawLower" { matrix4d xformOp:transform = ( (1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (0, -0.0600, 0, 1) ) uniform token[] xformOpOrder = ["xformOp:transform"] def Cube "Carrier" ( prepend apiSchemas = ["MaterialBindingAPI"] ) { double size = 1 color3f[] primvars:displayColor = [(0.16, 0.17, 0.19)] rel material:binding = double3 xformOp:translate = (0.1080, 0, 0) double3 xformOp:scale = (0.0260, 0.0130, 0.0300) uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:scale"] } def Mesh "Finger" ( prepend apiSchemas = ["MaterialBindingAPI"] ) { uniform bool doubleSided = true int[] faceVertexCounts = [4, 4, 4, 4, 4, 4] int[] faceVertexIndices = [0, 1, 2, 3, 7, 6, 5, 4, 0, 4, 5, 1, 1, 5, 6, 2, 2, 6, 7, 3, 3, 7, 4, 0] point3f[] points = [ (0.1210, -0.0120, -0.0230), (0.1900, -0.0100, -0.0170), (0.1900, 0.0120, -0.0170), (0.1210, 0.0120, -0.0230), (0.1210, -0.0120, 0.0230), (0.1900, -0.0100, 0.0170), (0.1900, 0.0120, 0.0170), (0.1210, 0.0120, 0.0230) ] color3f[] primvars:displayColor = [(0.05, 0.05, 0.06)] rel material:binding = } } # Pneumatic feed to the drive. def Cylinder "AirLine" ( prepend apiSchemas = ["MaterialBindingAPI"] ) { uniform token axis = "X" double height = 0.06 double radius = 0.0055 color3f[] primvars:displayColor = [(0.10, 0.30, 0.55)] rel material:binding = double3 xformOp:translate = (0.0500, 0, 0.0390) uniform token[] xformOpOrder = ["xformOp:translate"] } def Scope "Materials" { def Material "Anodised" { token outputs:surface.connect = def Shader "Surface" { uniform token info:id = "UsdPreviewSurface" color3f inputs:diffuseColor = (0.13, 0.14, 0.16) float inputs:roughness = 0.38 float inputs:metallic = 0.6 token outputs:surface } } def Material "Steel" { token outputs:surface.connect = def Shader "Surface" { uniform token info:id = "UsdPreviewSurface" color3f inputs:diffuseColor = (0.58, 0.59, 0.62) float inputs:roughness = 0.22 float inputs:metallic = 1 token outputs:surface } } def Material "JawBlack" { token outputs:surface.connect = def Shader "Surface" { uniform token info:id = "UsdPreviewSurface" color3f inputs:diffuseColor = (0.05, 0.05, 0.06) float inputs:roughness = 0.70 float inputs:metallic = 0 token outputs:surface } } def Material "AirLineBlue" { token outputs:surface.connect = def Shader "Surface" { uniform token info:id = "UsdPreviewSurface" color3f inputs:diffuseColor = (0.10, 0.30, 0.55) float inputs:roughness = 0.60 float inputs:metallic = 0 token outputs:surface } } } }