Merging wheeled robot with UR10

Hi all,

I’ve used the Step Importer for creating a .USD file for a wheeled robot model. My goal is to combine the UR10 model, from the provided assets, with this model and create one asset that later will be capable of both driving and manipulating.

The question: What is the recommended way of combining these two robot models? Is see multiple options:

  • Option 1: Sticking together the two .USD files via a well-positioned fixed joint at the UR10 base.
  • Option 2: Take one step back and combine both files on the level of CAD files (aka create a dedicated CAD assembly and use the step importer again)
1 Like

Hi,

There is a third option, but first lets discuss the two you propose.

I would avoid the fixed joint method. The main reason for using a fixed joint in a simulation is the case where you would like to break the fixed joint during the simulation. If you don’t plan to break the joint, you are better off combining the two meshes that would be jointed together into a single rigid body with multiple collision shapes.

I like Option 2 the best from a workflow perspective, because CAD offers the best tools for modeling assemblies and parts. If you have a single base and a single manipulator and wish to make a robot from them, this is the way to go in my opinion.

However if you wish to do a quick one-off job and don’t have the UR10 in CAD, then you can simply combine the USDs by dragging the manipulator assembly USD into the hierarchy for the wheeled robot USD, and then rigging the physics for everything as a single articulation. The base of the manipulator and the platform to which it is attached should be modeled as a single rigid body with multiple collision shapes. I’ll ask around to see if we have an example of this laying around.

–MIke

1 Like

Hi,

I have exactly the same problem as julian.esser
and i have some more questions about this case.

  1. Option 1 means that i should literally compose two robots close enough to each other and then add joint between them?
  2. About Option 2, is there any opportunity to get CAD model from *.usd file? Which software you can recommend (best in your opinion) for working with CAD?
  3. Is there any step-by-step instruction illustrating your method(Option 3)?
    Kind regards.

Hi!

What I would suggest is the same as @MikePhysX suggested on Option 3. We are working on the documentation for that, once it’s done I’ll post an update to this thread with it.

I am not aware of any application that can go from USD to a cad model. In fact, I’m not sure this is generally possible, given that most USD assets contain only a tesselated mesh, instead of NURBS patches or a BREP. (USD format does contain native support for NURBS patches, though).

You can use whatever CAD program you have access to, as long as it exports it to STEP format. It is hard for us to give you a suggestion in which one is best, I hope you understand that.

You can also have direct conversion from Onshape, which allows you to import the kinematics of the robot if you have the joint mates set up in your assembly.

According to your reply for the problem of option 1, does it mean that we can create and break a fixed joint during the simulation ? Since I would like to create some fix joint during the simulation and later remove it. Is there any python code example for an extension development can be referenced ?

1 Like

Yes - you can define and break joints in the simulation at runtime. Here’s a snippet of creating the joint:

        from pxr import Usd, UsdLux, UsdGeom, Sdf, Gf, Vt, Tf, UsdPhysics, PhysicsSchemaTools
        stage = omni.usd.get_context().get_stage()
        body0Prim = stage.GetPrimAtPath("/body0")
        body1Prim = stage.GetPrimAtPath("/body1")

        # Create fixed joint
        fixedJoint = UsdPhysics.FixedJoint.Define(stage, "/fixedJoint")

        fixedJoint.CreateBody0Rel().SetTargets([body0Prim.GetPrimPath()])
        fixedJoint.CreateBody1Rel().SetTargets([body1Prim.GetPrimPath()])

        fixedJoint.CreateLocalPos0Attr().Set(Gf.Vec3f(-2.0, 0.0, 0.0))
        fixedJoint.CreateLocalPos1Attr().Set(Gf.Vec3f(2.0, 0.0, 0.0))

then to disable the joint, either delete it:

stage.RemovePrim("/fixedJoint")

or disable the joint

fixedJoint.GetJointEnabledAttr().Set(False)
1 Like

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.