NVIDIA Isaac Sim™
Create tools

Create a tool

In this section you will learn how to create a reusable tool in Isaac Sim and connect it to Wandelbots NOVA. First time using OmniGraph (OGN)? Check out the OmniGraph Nodes documentation to learn more about the basics of OGN.

Creating tools from CAD files is not in the scope of this section.

⚠️

As the tool configuration via the Robot Pad will be deprecated with Wandelbots NOVA extension 2.0, please transfer your existing tools to the OmniGraph Nodes approach as described in the following article.

You'll need a scene containing a tool. Check out our asset package provided on the Developer Portal (opens in a new tab) to get started.

Open tool and add function attributes

Open the desired tool which only contains the tool which can be attached to the robot later on. In case there are any other elements (xform, mesh, lights etc.) in the stage of your tool which should not be imported into the robot scene, please remove them.

In the first step the interface of the tool needs to be defined. This will be done via custom attributes. In the video below the workflow is shown for a boolean open attribute which indicates the gripper open state (true or false). Additionally a finger distance attribute (float) is added which indicates the distance between the gripper fingers. This is used to calculate the target position of the gripper fingers later on.

Using attributes as abstraction of the inner logic offers the user of the tool an easy way to connect the node with any scene logic later on.

Adding I/O logic right to the tool decreases the flexibility of the tool and makes it harder to use in different scenarios.

Add OGN trigger for attribute changes

Next up, the tool needs an action graph. An action graph allows for modifying the gripper fingers on attribute change (open to true or false). On USD object change (opens in a new tab) enables listening for changes to the created open property. Once a change is detected for open, the node will trigger a changed execution which can be used in action graphs to call other nodes and change properties of the tool prims.

Stacking boxes simulated in NVIDIA Isaac Sim

Read the attributes to change tool prims

Before writing anything to the tool prims, the values of the open and finger_distance attributes need to be read. This can be done with the Read Prim Attribute (opens in a new tab) node.

Stacking boxes simulated in NVIDIA Isaac Sim

Based on the open attribute, finger_distance value is selected. If the gripper state open is true, the distance is read from the prim attribute. Otherwise a constant value of zero is used.

Stacking boxes simulated in NVIDIA Isaac Sim

With the right distance values passed, the values can be updated via a Write Prim Attribute (opens in a new tab) node. In this case the tool has one prismatic joint for each finger. These joints are controlled using their targetPosition attribute. One joint needs to move in the opposite direction of the other joint, so the finger_distance value is negated for one of the joints with a multiply node which takes minus one as one constant input.

Replicator offers a Write Prim Attribute (opens in a new tab) as well. The input requires an array and the node from omni.graph.nodes offers a dropdown to select the right attribute which smooths the workflow.

Stacking boxes simulated in NVIDIA Isaac Sim

Testing the tool

Now the tool graph should look something like this:

Stacking boxes simulated in NVIDIA Isaac Sim

For debugging a print text node was added to print a string once the open attribute is changed.

To test the setup, start the simulation and change the open attribute of the tool prim.

The gripper fingers should move to the target position based on the finger_distance value. If everything works as expected, the tool is ready to be added to the robot scene and connected to the robot. Save the scene and close it.

Add the tool to the scene

To explain how to add the created tool to a robot scene, the explanatory video uses a minimal scene with a UR5e robot.

Drag and drop the tool scene into the robot scene. The tool will be added as a child of the flange_tcp prim. This way the tool will receive the right offsets once its moved to be a child of the robot root node.

Once the tool is at the right position, link the rigid body of the tool to the flange rigid body, usually at link_6.

If everything is connected properly the tool is attached to the flange and will move with any robot motion.

Connect the tool to the robot

You have tested the tool functionality with toggling the open attribute. You can do the same with the provided Input/Output nodes. Create an On IO Change node which is connected to a Write Prim Attribute node. The Write Prim Attribute node will write the value of the open attribute to the tool prim. The On IO Change node will listen to the bool/digital tool_out[0] Input/Output from the scene UR5e robot.

Use the tool via Input/Output changes

If everything is set up correctly, you can toggle tthe gripper state via python or Wandelscript by writing true or false to the tool_out[0] Input/Output of the UR5e robot.

controller = await cell.controller("ur5e")
await controller.write("tool_out[0]", True)