diff --git a/stretch3_ws/.gitignore b/stretch3_ws/.gitignore index 621ef609..e7058ece 100644 --- a/stretch3_ws/.gitignore +++ b/stretch3_ws/.gitignore @@ -1,10 +1,12 @@ # Visual Studio Code .vscode -# ROS2 basic directories +# ROS basic directories /build /install +/devel /log +/install # Hard Links /docker/modules diff --git a/stretch3_ws/docker/Dockerfile b/stretch3_ws/docker/Dockerfile index e698afc3..798e537b 100644 --- a/stretch3_ws/docker/Dockerfile +++ b/stretch3_ws/docker/Dockerfile @@ -171,4 +171,4 @@ COPY --chown=$USERNAME:$USERNAME \ .bashrc /home/$USERNAME/.bashrc # TODO: Copy additional files here ENTRYPOINT [] -CMD ["/bin/bash"] +CMD ["/bin/bash"] \ No newline at end of file diff --git a/stretch3_ws/docker/compose.yaml b/stretch3_ws/docker/compose.yaml index f29f26f2..85331cd1 100644 --- a/stretch3_ws/docker/compose.yaml +++ b/stretch3_ws/docker/compose.yaml @@ -10,14 +10,7 @@ services: mkdir -p /isaac-sim/{logs,data,documents} && mkdir -p /isaac-sim/standalone/cache/ov && mkdir -p /isaac-sim/standalone/{logs,data} && - chown ${USER_UID:-1000}:${USER_UID:-1000} /isaac-sim && - chown ${USER_UID:-1000}:${USER_UID:-1000} /isaac-sim/cache && - chown ${USER_UID:-1000}:${USER_UID:-1000} /isaac-sim/cache/{kit,ov,pip,glcache,computecache} && - chown ${USER_UID:-1000}:${USER_UID:-1000} /isaac-sim/{logs,data,documents} && - chown ${USER_UID:-1000}:${USER_UID:-1000} /isaac-sim/standalone && - chown ${USER_UID:-1000}:${USER_UID:-1000} /isaac-sim/standalone/cache && - chown ${USER_UID:-1000}:${USER_UID:-1000} /isaac-sim/standalone/cache/ov && - chown ${USER_UID:-1000}:${USER_UID:-1000} /isaac-sim/standalone/{logs,data} + chown -R ${USER_UID:-1000}:${USER_UID:-1000} /isaac-sim " volumes: - isaac-sim-cache:/isaac-sim @@ -43,9 +36,9 @@ services: # TODO: Set to "YES" if using Isaac ROS or set to "" if not using Isaac ROS # ISAAC_ROS: "" # TODO: Set to "YES" if using Cartographer or set to "" if not using Cartographer - CARTOGRAPHER: "YES" + # CARTOGRAPHER: "" # TODO: Set to "YES" if using RTAB-Map or set to "" if not using RTAB-Map - RTABMAP: "YES" + # RTABMAP: "" cache_from: - j3soon/ros2-stretch3-ws:buildcache-amd64 - j3soon/ros2-stretch3-ws:buildcache-arm64 diff --git a/stretch3_ws/isaacsim/assets/stretch3_og_wasd.usda b/stretch3_ws/isaacsim/assets/stretch3_og_wasd.usda index 3822f764..c4e4d2a6 100644 --- a/stretch3_ws/isaacsim/assets/stretch3_og_wasd.usda +++ b/stretch3_ws/isaacsim/assets/stretch3_og_wasd.usda @@ -7,8 +7,8 @@ double radius = 5 } dictionary Perspective = { - double3 position = (5, 5, 5) - double3 target = (-3.978038431995401e-8, -3.978038254359717e-8, 7.956076863990802e-8) + double3 position = (2.3466218983008984, 1.5762107437951571, 2.788037139995245) + double3 target = (-0.09157250085818935, -0.04072218960904772, 0.2002328026177378) } dictionary Right = { double3 position = (0, -5, 0) @@ -21,7 +21,7 @@ string boundCamera = "/OmniverseKit_Persp" } dictionary omni_layer = { - string authoring_layer = "./stretch3_og.usda" + string authoring_layer = "./stretch3_og_wasd.usda" dictionary locked = { } dictionary muteness = { @@ -48,9 +48,91 @@ def Xform "World" displayName = "Namespace" doc = "Namespace of the prim in Isaac Sim" ) + quatd xformOp:orient = (1, 0, 0, 0) + double3 xformOp:scale = (1, 1, 1) + double3 xformOp:translate = (0, 0, 0.03697984622915329) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:orient", "xformOp:scale"] over "base_link" { + string isaac:nameOverride ( + displayName = "Name Override" + doc = "Name override for prim lookup in base name search" + ) + + over "visuals" + { + over "laser" ( + active = false + ) + { + } + } + + over "laser" + { + def Lidar "Lidar" + { + bool drawLines = 0 + bool drawPoints = 0 + bool enabled = 1 + bool enableSemantics = 0 + bool highLod = 0 + float horizontalFov = 360 + float horizontalResolution = 0.4 + float maxRange = 100 + float minRange = 0.4 + float rotationRate = 20 + float verticalFov = 30 + float verticalResolution = 4 + double3 xformOp:rotateXYZ + double3 xformOp:translate + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ"] + float yawOffset = 0 + } + + def Lidar "Lidar_01" + { + bool drawLines = 0 + bool drawPoints = 0 + bool enabled = 1 + bool enableSemantics = 0 + bool highLod = 0 + float horizontalFov = 360 + float horizontalResolution = 0.4 + float maxRange = 100 + float minRange = 0.4 + float rotationRate = 20 + float verticalFov = 30 + float verticalResolution = 4 + double3 xformOp:rotateXYZ + double3 xformOp:translate + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ"] + float yawOffset = 0 + } + } + + def Camera "Camera" + { + float2 clippingRange = (0.01, 10000000) + float focalLength = 18.147562 + float focusDistance = 400 + bool omni:kit:cameraLock = 0 + quatd xformOp:orient = (-0.5684126372457641, -0.4106189978382765, 0.42060322611615325, 0.5756666036989545) + double3 xformOp:scale = (1, 1, 1) + double3 xformOp:translate = (-1, 1.6653345369377348e-16, 0.4630201537708467) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:orient", "xformOp:scale"] + } + + def Xform "RPLIDAR_S2E" ( + prepend references = @https://omniverse-content-production.s3-us-west-2.amazonaws.com/Assets/Isaac/5.0/Isaac/Sensors/Slamtec/RPLIDAR_S2E/Slamtec_RPLIDAR_S2E.usd@ + ) + { + quatd xformOp:orient = (1, 0, 0, 0) + double3 xformOp:scale = (1, 1, 1) + double3 xformOp:translate = (0, 0, 0.167) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:orient", "xformOp:scale"] + } } over "link_head_pan" @@ -205,6 +287,10 @@ def Xform "World" ) } } + + over "PhysicsMaterialWheel" + { + } } } @@ -273,6 +359,68 @@ def "Render" ( custom bool overrideClipRange = 0 uniform int2 resolution = (1280, 720) } + + def RenderProduct "Replicator" ( + prepend apiSchemas = ["OmniRtxSettingsCommonAdvancedAPI_1", "OmniRtxSettingsRtAdvancedAPI_1", "OmniRtxSettingsPtAdvancedAPI_1", "OmniRtxPostColorGradingAPI_1", "OmniRtxPostChromaticAberrationAPI_1", "OmniRtxPostBloomPhysicalAPI_1", "OmniRtxPostMatteObjectAPI_1", "OmniRtxPostCompositingAPI_1", "OmniRtxPostDofAPI_1", "OmniRtxPostMotionBlurAPI_1", "OmniRtxPostTvNoiseAPI_1", "OmniRtxPostTonemapIrayReinhardAPI_1", "OmniRtxPostDebugSettingsAPI_1", "OmniRtxDebugSettingsAPI_1"] + hide_in_stage_window = true + no_delete = true + ) + { + rel camera = + custom string ogPostProcessPath = "/Render/OmniverseKit/HydraTextures/Replicator/PostRender" + token omni:rtx:background:source:texture:textureMode = "repeatMirrored" + token omni:rtx:background:source:type = "domeLight" + bool omni:rtx:dlss:frameGeneration = 0 + string omni:rtx:material:db:rtSensorNameToIdMap = "DefaultMaterial:0;AsphaltStandardMaterial:1;AsphaltWeatheredMaterial:2;VegetationGrassMaterial:3;WaterStandardMaterial:4;GlassStandardMaterial:5;FiberGlassMaterial:6;MetalAlloyMaterial:7;MetalAluminumMaterial:8;MetalAluminumOxidizedMaterial:9;PlasticStandardMaterial:10;RetroMarkingsMaterial:11;RetroSignMaterial:12;RubberStandardMaterial:13;SoilClayMaterial:14;ConcreteRoughMaterial:15;ConcreteSmoothMaterial:16;OakTreeBarkMaterial:17;FabricStandardMaterial:18;PlexiGlassStandardMaterial:19;MetalSilverMaterial:20" + bool omni:rtx:material:db:syncLoads = 1 + bool omni:rtx:post:registeredCompositing:invertColorCorrection = 1 + bool omni:rtx:post:registeredCompositing:invertToneMap = 1 + bool omni:rtx:pt:lightcache:cached:dontResolveConflicts = 1 + int omni:rtx:pt:maxSamplesPerLaunch = 2073600 + int omni:rtx:pt:mgpu:maxPixelsPerRegionExponent = 12 + color3f omni:rtx:rt:ambientLight:color = (0.1, 0.1, 0.1) + bool omni:rtx:rt:demoire = 0 + bool omni:rtx:rt:ecoMode:enabled = 0 + bool omni:rtx:rt:lightcache:spatialCache:dontResolveConflicts = 1 + bool omni:rtx:scene:hydra:materialSyncLoads = 1 + bool omni:rtx:scene:hydra:mdlMaterialWarmup = 1 + uint omni:rtx:viewTile:limit = 4294967295 + rel orderedVars = [ + , + , + ] + custom bool overrideClipRange = 0 + uniform int2 resolution = (1280, 720) + } + + def RenderProduct "Replicator_01" ( + prepend apiSchemas = ["OmniRtxSettingsCommonAdvancedAPI_1", "OmniRtxSettingsRtAdvancedAPI_1", "OmniRtxSettingsPtAdvancedAPI_1", "OmniRtxPostColorGradingAPI_1", "OmniRtxPostChromaticAberrationAPI_1", "OmniRtxPostBloomPhysicalAPI_1", "OmniRtxPostMatteObjectAPI_1", "OmniRtxPostCompositingAPI_1", "OmniRtxPostDofAPI_1", "OmniRtxPostMotionBlurAPI_1", "OmniRtxPostTvNoiseAPI_1", "OmniRtxPostTonemapIrayReinhardAPI_1", "OmniRtxPostDebugSettingsAPI_1", "OmniRtxDebugSettingsAPI_1"] + hide_in_stage_window = true + no_delete = true + ) + { + rel camera = + token omni:rtx:background:source:texture:textureMode = "repeatMirrored" + token omni:rtx:background:source:type = "domeLight" + bool omni:rtx:dlss:frameGeneration = 0 + string omni:rtx:material:db:rtSensorNameToIdMap = "DefaultMaterial:0;AsphaltStandardMaterial:1;AsphaltWeatheredMaterial:2;VegetationGrassMaterial:3;WaterStandardMaterial:4;GlassStandardMaterial:5;FiberGlassMaterial:6;MetalAlloyMaterial:7;MetalAluminumMaterial:8;MetalAluminumOxidizedMaterial:9;PlasticStandardMaterial:10;RetroMarkingsMaterial:11;RetroSignMaterial:12;RubberStandardMaterial:13;SoilClayMaterial:14;ConcreteRoughMaterial:15;ConcreteSmoothMaterial:16;OakTreeBarkMaterial:17;FabricStandardMaterial:18;PlexiGlassStandardMaterial:19;MetalSilverMaterial:20" + bool omni:rtx:material:db:syncLoads = 1 + bool omni:rtx:post:registeredCompositing:invertColorCorrection = 1 + bool omni:rtx:post:registeredCompositing:invertToneMap = 1 + bool omni:rtx:pt:lightcache:cached:dontResolveConflicts = 1 + int omni:rtx:pt:maxSamplesPerLaunch = 2073600 + int omni:rtx:pt:mgpu:maxPixelsPerRegionExponent = 12 + color3f omni:rtx:rt:ambientLight:color = (0.1, 0.1, 0.1) + bool omni:rtx:rt:demoire = 0 + bool omni:rtx:rt:ecoMode:enabled = 0 + bool omni:rtx:rt:lightcache:spatialCache:dontResolveConflicts = 1 + bool omni:rtx:scene:hydra:materialSyncLoads = 1 + bool omni:rtx:scene:hydra:mdlMaterialWarmup = 1 + uint omni:rtx:viewTile:limit = 4294967295 + rel orderedVars = + custom bool overrideClipRange = 0 + uniform int2 resolution = (1280, 720) + } } } @@ -281,7 +429,11 @@ def "Render" ( no_delete = true ) { - rel products = + rel products = [ + , + , + , + ] } def "Vars" @@ -294,17 +446,40 @@ def "Render" ( uniform string sourceName = "LdrColor" } } + + over "PostProcess" + { + over "SDGPipeline" + { + over "DispatchSync" + { + custom int2[] inputs:simTimesToWrite = [(2221, 2), (16658, 15), (33317, 30), (5553, 5), (33319, 30), (3332, 3), (11107, 10), (16661, 15), (33323, 30), (5554, 5)] + } + } + } } def "FlatGrid" ( prepend references = @https://omniverse-content-production.s3-us-west-2.amazonaws.com/Assets/Isaac/5.0/Isaac/Environments/Grid/default_environment.usd@ ) { + over "Environment" + { + over "Geometry" + { + quatd xformOp:orient = (1, 0, 0, 0) + double3 xformOp:scale = (100, 100, 1) + double3 xformOp:translate = (-0.425, 0.425, -0.006342573288611653) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:orient", "xformOp:scale"] + } + } } def "Graphs" { - def OmniGraph "differential_controller" + def OmniGraph "differential_controller" ( + active = true + ) { token evaluationMode = "Automatic" token evaluator:type = "execution" @@ -381,26 +556,29 @@ def "Graphs" int node:typeVersion = 1 } - def OmniGraphNode "ArrayNames" + def OmniGraphNode "ArrayNames" ( + prepend apiSchemas = ["NodeGraphNodeAPI"] + ) { custom int inputs:arraySize = 2 custom token inputs:arrayType = "token[]" ( 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 ( + custom token inputs:input0 = "joint_left_wheel" ( customData = { dictionary omni = { dictionary graph = { - token attrValue = "joint_right_wheel" + token attrValue = "joint_left_wheel" string resolvedType = "token" } } } ) - custom token inputs:input1 = "joint_left_wheel" + custom token inputs:input1 = "joint_right_wheel" token node:type = "omni.graph.nodes.ConstructArray" int node:typeVersion = 1 custom token outputs:array + uniform float2 ui:nodegraph:node:pos = (-513.13, 188.33904) } def OmniGraphNode "W" @@ -536,7 +714,9 @@ def "Graphs" custom token outputs:sum } - def OmniGraphNode "AddAngular" + def OmniGraphNode "AddAngular" ( + prepend apiSchemas = ["NodeGraphNodeAPI"] + ) { custom token inputs:a prepend token inputs:a.connect = @@ -545,6 +725,7 @@ def "Graphs" token node:type = "omni.graph.nodes.Add" int node:typeVersion = 2 custom token outputs:sum + uniform float2 ui:nodegraph:node:pos = (-1359.7896, 59.25263) } def OmniGraphNode "SpeedLinear" @@ -590,5 +771,687 @@ def "Graphs" int node:typeVersion = 1 } } + + def OmniGraph "ros2_differential_controller" + { + token evaluationMode = "Automatic" + token evaluator:type = "execution" + token fabricCacheBacking = "StageWithoutHistory" + int2 fileFormatVersion = (1, 9) + token pipelineStage = "pipelineStageSimulation" + + def OmniGraphNode "ros2_context" ( + prepend apiSchemas = ["NodeGraphNodeAPI"] + ) + { + custom uchar inputs:domain_id + custom bool inputs:useDomainIDEnvVar + token node:type = "isaacsim.ros2.bridge.ROS2Context" + int node:typeVersion = 2 + custom uint64 outputs:context + uniform token ui:nodegraph:node:expansionState = "open" + uniform float2 ui:nodegraph:node:pos = (-1973.153, -164.23357) + } + + def OmniGraphNode "on_playback_tick" ( + prepend apiSchemas = ["NodeGraphNodeAPI"] + ) + { + 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 + uniform token ui:nodegraph:node:expansionState = "open" + uniform float2 ui:nodegraph:node:pos = (-1977.9453, 44.35899) + } + + def OmniGraphNode "ros2_subscribe_twist" ( + prepend apiSchemas = ["NodeGraphNodeAPI"] + ) + { + custom uint64 inputs:context + prepend uint64 inputs:context.connect = + custom uint inputs:execIn ( + customData = { + bool isExecution = 1 + } + ) + prepend uint inputs:execIn.connect = + custom string inputs:nodeNamespace + custom string inputs:qosProfile + custom uint64 inputs:queueSize + custom string inputs:topicName + token node:type = "isaacsim.ros2.bridge.ROS2SubscribeTwist" + int node:typeVersion = 1 + custom vector3d outputs:angularVelocity + custom uint outputs:execOut ( + customData = { + bool isExecution = 1 + } + ) + custom vector3d outputs:linearVelocity + uniform token ui:nodegraph:node:expansionState = "open" + uniform float2 ui:nodegraph:node:pos = (-1612.7487, -189.74889) + } + + def OmniGraphNode "scale_to_from_stage_units" ( + prepend apiSchemas = ["NodeGraphNodeAPI"] + ) + { + custom token inputs:conversion ( + allowedTokens = ["Convert to stage units", "Convert to meters"] + ) + custom token inputs:value + prepend token inputs:value.connect = + token node:type = "isaacsim.core.nodes.OgnIsaacScaleToFromStageUnit" + int node:typeVersion = 1 + custom token outputs:result + uniform token ui:nodegraph:node:expansionState = "open" + uniform float2 ui:nodegraph:node:pos = (-1307.4493, -61.973255) + } + + def OmniGraphNode "break_3_vector" ( + prepend apiSchemas = ["NodeGraphNodeAPI"] + ) + { + custom token inputs:tuple + prepend token inputs:tuple.connect = + token node:type = "omni.graph.nodes.BreakVector3" + int node:typeVersion = 1 + custom token outputs:x + custom token outputs:y + custom token outputs:z + uniform token ui:nodegraph:node:expansionState = "open" + uniform float2 ui:nodegraph:node:pos = (-1283.7749, -226.63982) + } + + def OmniGraphNode "break_3_vector_01" ( + prepend apiSchemas = ["NodeGraphNodeAPI"] + ) + { + custom token inputs:tuple + prepend token inputs:tuple.connect = + token node:type = "omni.graph.nodes.BreakVector3" + int node:typeVersion = 1 + custom token outputs:x + custom token outputs:y + custom token outputs:z + uniform token ui:nodegraph:node:expansionState = "open" + uniform float2 ui:nodegraph:node:pos = (-1081.504, 9.803499) + } + + def OmniGraphNode "make_array" ( + prepend apiSchemas = ["NodeGraphNodeAPI"] + ) + { + custom int inputs:arraySize = 2 + custom token inputs:arrayType = "token[]" ( + 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 = "joint_left_wheel" ( + customData = { + dictionary omni = { + dictionary graph = { + token attrValue = "joint_left_wheel" + string resolvedType = "token" + } + } + } + ) + delete token inputs:input0.connect = + prepend token inputs:input0.connect = + custom token inputs:input1 = "joint_right_wheel" ( + customData = { + string ExtendedAttributeType = "Union-->bool,colord[3],colord[4],colorf[3],colorf[4],colorh[3],colorh[4],double,double[2],double[3],double[4],float,float[2],float[3],float[4],frame[4],half,half[2],half[3],half[4],int,int64,int[2],int[3],int[4],matrixd[2],matrixd[3],matrixd[4],normald[3],normalf[3],normalh[3],pointd[3],pointf[3],pointh[3],quatd[4],quatf[4],quath[4],texcoordd[2],texcoordd[3],texcoordf[2],texcoordf[3],texcoordh[2],texcoordh[3],timecode,token,transform[4],uchar,uint,uint64,vectord[3],vectorf[3],vectorh[3]" + dictionary omni = { + dictionary graph = { + string attrType = "Union-->bool,colord[3],colord[4],colorf[3],colorf[4],colorh[3],colorh[4],double,double[2],double[3],double[4],float,float[2],float[3],float[4],frame[4],half,half[2],half[3],half[4],int,int64,int[2],int[3],int[4],matrixd[2],matrixd[3],matrixd[4],normald[3],normalf[3],normalh[3],pointd[3],pointf[3],pointh[3],quatd[4],quatf[4],quath[4],texcoordd[2],texcoordd[3],texcoordf[2],texcoordf[3],texcoordh[2],texcoordh[3],timecode,token,transform[4],uchar,uint,uint64,vectord[3],vectorf[3],vectorh[3]" + token attrValue = "joint_right_wheel" + string resolvedType = "token" + } + } + } + ) + delete token inputs:input1.connect = + prepend token inputs:input1.connect = + token node:type = "omni.graph.nodes.ConstructArray" + int node:typeVersion = 1 + custom token outputs:array + uniform token ui:nodegraph:node:expansionState = "open" + uniform float2 ui:nodegraph:node:pos = (-995.2072, 196.04956) + } + + def OmniGraphNode "differential_controller" ( + prepend apiSchemas = ["NodeGraphNodeAPI"] + ) + { + custom double inputs:angularVelocity + prepend double inputs:angularVelocity.connect = + custom double inputs:dt + custom uint inputs:execIn ( + customData = { + bool isExecution = 1 + } + ) + prepend uint inputs:execIn.connect = + custom double inputs:linearVelocity + prepend double inputs:linearVelocity.connect = + custom double inputs:maxAcceleration + custom double inputs:maxAngularAcceleration + custom double inputs:maxAngularSpeed + custom double inputs:maxDeceleration + custom double inputs:maxLinearSpeed + custom double inputs:maxWheelSpeed + custom double inputs:wheelDistance = 0.3157 + custom double inputs:wheelRadius = 0.05 + token node:type = "isaacsim.robot.wheeled_robots.DifferentialController" + int node:typeVersion = 1 + custom double[] outputs:velocityCommand + uniform token ui:nodegraph:node:expansionState = "open" + uniform float2 ui:nodegraph:node:pos = (-724.8841, -120.785194) + } + + def OmniGraphNode "articulation_controller" ( + prepend apiSchemas = ["NodeGraphNodeAPI"] + ) + { + custom double[] inputs:effortCommand + custom uint inputs:execIn ( + customData = { + bool isExecution = 1 + } + ) + prepend uint inputs:execIn.connect = + custom int[] inputs:jointIndices + custom token[] inputs:jointNames + prepend token[] inputs:jointNames.connect = + custom double[] inputs:positionCommand + custom string inputs:robotPath + custom rel inputs:targetPrim = ( + customData = { + dictionary omni = { + dictionary graph = { + string relType = "target" + } + } + } + ) + custom double[] inputs:velocityCommand + prepend double[] inputs:velocityCommand.connect = + token node:type = "isaacsim.core.nodes.IsaacArticulationController" + int node:typeVersion = 1 + uniform token ui:nodegraph:node:expansionState = "open" + uniform float2 ui:nodegraph:node:pos = (-383.22812, -23.25205) + } + + def OmniGraphNode "multiply" ( + prepend apiSchemas = ["NodeGraphNodeAPI"] + ) + { + custom token inputs:a + prepend token inputs:a.connect = + custom token inputs:b + prepend token inputs:b.connect = + token node:type = "omni.graph.nodes.Multiply" + int node:typeVersion = 2 + custom token outputs:product + uniform token ui:nodegraph:node:expansionState = "open" + uniform float2 ui:nodegraph:node:pos = (-980.267, -309.43924) + } + + def OmniGraphNode "constant_double" ( + prepend apiSchemas = ["NodeGraphNodeAPI"] + ) + { + custom double inputs:value = 10 + token node:type = "omni.graph.nodes.ConstantDouble" + int node:typeVersion = 1 + uniform token ui:nodegraph:node:expansionState = "open" + uniform float2 ui:nodegraph:node:pos = (-1269.4031, -358.02997) + } + + def OmniGraphNode "multiply_01" ( + prepend apiSchemas = ["NodeGraphNodeAPI"] + ) + { + custom token inputs:a + prepend token inputs:a.connect = + custom token inputs:b + prepend token inputs:b.connect = + token node:type = "omni.graph.nodes.Multiply" + int node:typeVersion = 2 + custom token outputs:product + uniform token ui:nodegraph:node:expansionState = "open" + uniform float2 ui:nodegraph:node:pos = (-983.002, -182.62186) + } + } +} + +def "Graph" +{ + def OmniGraph "ROS_Odometry" + { + token evaluationMode = "Automatic" + token evaluator:type = "execution" + token fabricCacheBacking = "StageWithoutHistory" + int2 fileFormatVersion = (1, 9) + token pipelineStage = "pipelineStageSimulation" + + 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 "Context" + { + custom uchar inputs:domain_id + custom bool inputs:useDomainIDEnvVar + token node:type = "isaacsim.ros2.bridge.ROS2Context" + int node:typeVersion = 2 + custom uint64 outputs:context + } + + def OmniGraphNode "ReadSimTime" + { + custom uint64 inputs:referenceTimeDenominator + custom int64 inputs:referenceTimeNumerator + custom bool inputs:resetOnStop = 0 + token node:type = "isaacsim.core.nodes.IsaacReadSimulationTime" + int node:typeVersion = 1 + custom double outputs:simulationTime + } + + def OmniGraphNode "TFWorld2Odom" + { + custom string inputs:childFrameId = "odom" + custom uint64 inputs:context + prepend uint64 inputs:context.connect = + custom uint inputs:execIn ( + customData = { + bool isExecution = 1 + } + ) + prepend uint inputs:execIn.connect = + custom string inputs:nodeNamespace = "" + custom string inputs:parentFrameId = "world" + custom string inputs:qosProfile + custom uint64 inputs:queueSize + custom quatd inputs:rotation + custom bool inputs:staticPublisher + custom double inputs:timeStamp + prepend double inputs:timeStamp.connect = + custom string inputs:topicName + custom vector3d inputs:translation + token node:type = "isaacsim.ros2.bridge.ROS2PublishRawTransformTree" + int node:typeVersion = 1 + } + + def OmniGraphNode "TFOdom2Robot" + { + custom string inputs:childFrameId = "base_link" + custom uint64 inputs:context + prepend uint64 inputs:context.connect = + custom uint inputs:execIn ( + customData = { + bool isExecution = 1 + } + ) + prepend uint inputs:execIn.connect = + custom string inputs:nodeNamespace = "" + custom string inputs:parentFrameId + custom string inputs:qosProfile + custom uint64 inputs:queueSize + custom quatd inputs:rotation + prepend quatd inputs:rotation.connect = + custom bool inputs:staticPublisher + custom double inputs:timeStamp + prepend double inputs:timeStamp.connect = + custom string inputs:topicName + custom vector3d inputs:translation + prepend vector3d inputs:translation.connect = + token node:type = "isaacsim.ros2.bridge.ROS2PublishRawTransformTree" + int node:typeVersion = 1 + } + + def OmniGraphNode "ComputeOdometry" + { + custom rel inputs:chassisPrim = ( + customData = { + dictionary omni = { + dictionary graph = { + string relType = "target" + } + } + } + ) + custom uint inputs:execIn ( + customData = { + bool isExecution = 1 + } + ) + prepend uint inputs:execIn.connect = + token node:type = "isaacsim.core.nodes.IsaacComputeOdometry" + int node:typeVersion = 1 + custom vector3d outputs:angularAcceleration + custom vector3d outputs:angularVelocity + custom uint outputs:execOut ( + customData = { + bool isExecution = 1 + } + ) + custom vector3d outputs:globalLinearAcceleration + custom vector3d outputs:globalLinearVelocity + custom vector3d outputs:linearAcceleration + custom vector3d outputs:linearVelocity + custom quatd outputs:orientation + custom vector3d outputs:position + } + + def OmniGraphNode "PublisherOdometry" + { + custom vector3d inputs:angularVelocity + prepend vector3d inputs:angularVelocity.connect = + custom string inputs:chassisFrameId = "base_link" + custom uint64 inputs:context + prepend uint64 inputs:context.connect = + custom uint inputs:execIn ( + customData = { + bool isExecution = 1 + } + ) + prepend uint inputs:execIn.connect = + custom vector3d inputs:linearVelocity + prepend vector3d inputs:linearVelocity.connect = + custom string inputs:nodeNamespace = "" + custom string inputs:odomFrameId + custom quatd inputs:orientation + prepend quatd inputs:orientation.connect = + custom vector3d inputs:position + prepend vector3d inputs:position.connect = + custom bool inputs:publishRawVelocities + custom string inputs:qosProfile + custom uint64 inputs:queueSize + custom vector3d inputs:robotFront + custom double inputs:timeStamp + prepend double inputs:timeStamp.connect = + custom string inputs:topicName = "/odom" + token node:type = "isaacsim.ros2.bridge.ROS2PublishOdometry" + int node:typeVersion = 1 + } + + def OmniGraphNode "TFRobot" + { + custom uint64 inputs:context + prepend uint64 inputs:context.connect = + custom uint inputs:execIn ( + customData = { + bool isExecution = 1 + } + ) + prepend uint inputs:execIn.connect = + custom string inputs:nodeNamespace = "" + custom rel inputs:parentPrim = ( + customData = { + dictionary omni = { + dictionary graph = { + string relType = "target" + } + } + } + ) + custom string inputs:qosProfile + custom uint64 inputs:queueSize + custom bool inputs:staticPublisher + custom rel inputs:targetPrims = ( + customData = { + dictionary omni = { + dictionary graph = { + string relType = "target" + } + } + } + ) + custom double inputs:timeStamp + prepend double inputs:timeStamp.connect = + custom string inputs:topicName = "/tf" + token node:type = "isaacsim.ros2.bridge.ROS2PublishTransformTree" + int node:typeVersion = 1 + } + } + + def OmniGraph "ROS_TF" + { + token evaluationMode = "Automatic" + token evaluator:type = "execution" + token fabricCacheBacking = "StageWithoutHistory" + int2 fileFormatVersion = (1, 9) + token pipelineStage = "pipelineStageSimulation" + + 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 "Context" + { + custom uchar inputs:domain_id + custom bool inputs:useDomainIDEnvVar + token node:type = "isaacsim.ros2.bridge.ROS2Context" + int node:typeVersion = 2 + custom uint64 outputs:context + } + + def OmniGraphNode "ReadSimTime" + { + custom uint64 inputs:referenceTimeDenominator + custom int64 inputs:referenceTimeNumerator + custom bool inputs:resetOnStop = 0 + token node:type = "isaacsim.core.nodes.IsaacReadSimulationTime" + int node:typeVersion = 1 + custom double outputs:simulationTime + } + + def OmniGraphNode "PublisherTF" + { + custom uint64 inputs:context + prepend uint64 inputs:context.connect = + custom uint inputs:execIn ( + customData = { + bool isExecution = 1 + } + ) + prepend uint inputs:execIn.connect = + custom string inputs:nodeNamespace = "" + custom rel inputs:parentPrim = ( + customData = { + dictionary omni = { + dictionary graph = { + string relType = "target" + } + } + } + ) + custom string inputs:qosProfile + custom uint64 inputs:queueSize + custom bool inputs:staticPublisher + custom rel inputs:targetPrims = ( + customData = { + dictionary omni = { + dictionary graph = { + string relType = "target" + } + } + } + ) + custom double inputs:timeStamp + prepend double inputs:timeStamp.connect = + custom string inputs:topicName = "/tf" + token node:type = "isaacsim.ros2.bridge.ROS2PublishTransformTree" + int node:typeVersion = 1 + } + } + + def OmniGraph "ROS_LidarRTX" + { + token evaluationMode = "Automatic" + token evaluator:type = "execution" + token fabricCacheBacking = "StageWithoutHistory" + int2 fileFormatVersion = (1, 9) + token pipelineStage = "pipelineStageSimulation" + + 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 "RunOnce" + { + custom uint inputs:execIn ( + customData = { + bool isExecution = 1 + } + ) + prepend uint inputs:execIn.connect = + token node:type = "isaacsim.core.nodes.OgnIsaacRunOneSimulationFrame" + int node:typeVersion = 1 + custom uint outputs:step ( + customData = { + bool isExecution = 1 + } + ) + } + + def OmniGraphNode "RenderProduct" + { + custom rel inputs:cameraPrim = ( + customData = { + dictionary omni = { + dictionary graph = { + string relType = "target" + } + } + } + ) + custom bool inputs:enabled + custom uint inputs:execIn ( + customData = { + bool isExecution = 1 + } + ) + prepend uint inputs:execIn.connect = + custom uint inputs:height + custom uint inputs:width + token node:type = "isaacsim.core.nodes.IsaacCreateRenderProduct" + int node:typeVersion = 2 + custom uint outputs:execOut ( + customData = { + bool isExecution = 1 + } + ) + custom token outputs:renderProductPath + } + + def OmniGraphNode "Context" + { + custom uchar inputs:domain_id + custom bool inputs:useDomainIDEnvVar + token node:type = "isaacsim.ros2.bridge.ROS2Context" + int node:typeVersion = 2 + custom uint64 outputs:context + } + + def OmniGraphNode "LaserScanPublish" + { + custom uint64 inputs:context + prepend uint64 inputs:context.connect = + custom bool inputs:enabled + custom uint inputs:execIn ( + customData = { + bool isExecution = 1 + } + ) + prepend uint inputs:execIn.connect = + custom string inputs:frameId = "RPLIDAR_S2E" + custom uint inputs:frameSkipCount + custom bool inputs:fullScan + custom string inputs:nodeNamespace = "" + custom string inputs:qosProfile + custom uint64 inputs:queueSize + custom token inputs:renderProductPath + prepend token inputs:renderProductPath.connect = + custom bool inputs:resetSimulationTimeOnStop + custom bool inputs:showDebugView + custom string inputs:topicName = "/laser_scan" + custom token inputs:type = "laser_scan" ( + allowedTokens = ["laser_scan", "point_cloud"] + ) + custom bool inputs:useSystemTime + token node:type = "isaacsim.ros2.bridge.ROS2RtxLidarHelper" + int node:typeVersion = 1 + } + + def OmniGraphNode "PointCloudPublish" + { + custom uint64 inputs:context + prepend uint64 inputs:context.connect = + custom bool inputs:enabled + custom uint inputs:execIn ( + customData = { + bool isExecution = 1 + } + ) + prepend uint inputs:execIn.connect = + custom string inputs:frameId = "RPLIDAR_S2E" + custom uint inputs:frameSkipCount + custom bool inputs:fullScan + custom string inputs:nodeNamespace = "" + custom string inputs:qosProfile + custom uint64 inputs:queueSize + custom token inputs:renderProductPath + prepend token inputs:renderProductPath.connect = + custom bool inputs:resetSimulationTimeOnStop + custom bool inputs:showDebugView + custom string inputs:topicName = "/point_cloud" + custom token inputs:type = "point_cloud" ( + allowedTokens = ["laser_scan", "point_cloud"] + ) + custom bool inputs:useSystemTime + token node:type = "isaacsim.ros2.bridge.ROS2RtxLidarHelper" + int node:typeVersion = 1 + } + } }