Lula robot description editor giving error

Hi,

I’m trying to use the Lula robot description editor but I’m getting the following error as soon as I choose an articulation:

2023-09-29 12:04:16 [84,322,635ms] [Error] [omni.ui.python] IndexError: list index out of range

At:
  /home/dan/.local/share/ov/pkg/isaac_sim-2022.2.1/exts/omni.isaac.robot_description_editor/omni/isaac/robot_description_editor/extension.py(273): _on_select_sphere_gen_link
  /home/dan/.local/share/ov/pkg/isaac_sim-2022.2.1/exts/omni.isaac.robot_description_editor/omni/isaac/robot_description_editor/extension.py(319): _refresh_sphere_gen_link_combobox
  /home/dan/.local/share/ov/pkg/isaac_sim-2022.2.1/exts/omni.isaac.robot_description_editor/omni/isaac/robot_description_editor/extension.py(220): _on_selection
  /home/dan/.local/share/ov/pkg/isaac_sim-2022.2.1/exts/omni.isaac.robot_description_editor/omni/isaac/robot_description_editor/extension.py(246): _on_combobox_selection
  /home/dan/.local/share/ov/pkg/isaac_sim-2022.2.1/exts/omni.isaac.ui/omni/isaac/ui/widgets.py(31): <lambda>

I’ve created a simplified example – two cubes with a revolute joint in between them. I’ve tried putting the articulation root at different places, adding mass, putting everything in an Xform or not, … but no luck.

Zipped USD:
two_cubes.zip (3.3 KB)

Any ideas?

Thanks!

@dan.sandberg not sure if this thread is relevant:

Seems like the same issue, but I’m not sure how to make my robot instantiable or not instantiable…

-Dan

Nope :(. I tried making every instantiable, and it didn’t work, and I tried making everything non instantiable, and it also didn’t work.

Thanks for the idea in any case :)

i see. hopefully the mods/devs can chime in and give you some pointers!

The issue seems to be here – somehow the robot description editor expects the articulation root to be an xform with a mesh? I tried adding a material to the xform but that didn’t help. I tried using meshes instead of shapes (what’s the difference anyway?) but that didn’t help either.

        if stage and self.articulation is not None:
            for prim in Usd.PrimRange(stage.GetPrimAtPath(self.articulation.prim_path)):
                path = str(prim.GetPath())
                # Get prim type get_prim_object_type
                type = get_prim_object_type(path)

                if type == "xform":
                    geom_mesh = UsdGeom.Mesh(prim)
                    if geom_mesh.GetPointsAttr().HasValue():
                        rel_path = path[len(self.articulation.prim_path) :]
                        div_index = rel_path[1:].find("/") + 1
                        key = rel_path[:div_index]
                        l = self._sphere_gen_link_2_mesh.get(key, [])
                        l.append(rel_path[div_index:])
                        self._sphere_gen_link_2_mesh[key] = l

If I make the xform an articulation root, and then add a mesh to the xform, then I get past the error above. But then if I try to generate spheres I get a warning that my mesh isn’t made of triangles.

How is one supposed to take a robot made in Isaac Sim and then use Robot Description Editor on it? Are you supposed to use Meshes instead of Shapes? What’s the difference? Right now getting this to work is total mystery voodoo.

fyi - here’s the difference between a mesh and a shape:
https://docs.omniverse.nvidia.com/composer/latest/common/glossary-of-terms.html#term-Shape

Thank you, that’s helpful.

I just tried importing a robot from OnShape and I got the same errors in the Lula Robot Description Editor. How come I’m the only one experiencing problems with this thing?

I’m getting warning that the spheres generated by hitting “Generate Spheres” aren’t nested properly. The code below checks that if you remove the last two segments from the sphere prim names, that it’s the same as the articulation root. But the spheres generated are directly under the articulation root, rather than 2 levels under, so the warning is triggering. Perhaps this is because there are no “Links” listed?

                s = prim_path.split("/")
                if s[:-2] != robot_path_split:
                    carb.log_warn(
                        "Not writing sphere at path {} to file because it is not nested under the robot Articulation".format(
                            prim_path
                        )
                    )
                    continue

Getting the robot description editor working feels like a treasure hunt…

Update: The articulation root should be an XPrim which is the parent of a bunch of XPrims that contain meshes. The direct children of the root XPrim should be rigid bodies, but not any grand children. Each of root children becomes a “Link” in the robot description editor.

Update: Getting the following error when I try to generate spheres. I picked a torus mesh because I figured it would be made out of triangles. Somehow the vertex_cts is [4 4 4 …] Ideas?

2023-10-03 14:30:36 [40,788ms] [Error] [omni.isaac.robot_description_editor.collision_sphere_editor] Cannot generate collsision spheres for mesh because the specified mesh is not composed of triangles.
2023-10-03 14:30:36 [40,788ms] [Error] [omni.ui.python] ValueError: cannot reshape array of size 4096 into shape (1365,3)