Skip to content

Concert ISAAC conversion #10

@JVALPASS

Description

@JVALPASS

Purpose

This document provides a line-by-line reference of all changes required to convert the Concert robot URDF from Gazebo format to Isaac Sim 5.1.0 format. Use this to update the Python URDF generator script.


Summary of Required Changes

Issue Type Occurrences Lines Affected
Floating Joint 1 28-31
World Link 1 27
Gazebo Blocks 3 39-59, 315-318, 320-369
Empty Links 43 See table below
Mesh Hyphens 24 See table below

Issue 1: floating Joint Type

Error in Isaac Sim

RuntimeError: Used null prim
Coding Error: Path must be an absolute path: <>

Location in Original URDF

File: concert_robot_original.urdf
Lines: 28-31

28:  <joint name="reference" type="floating">
29:    <parent link="world"/>
30:    <child link="base_link"/>
31:  </joint>

Required Change

DELETE these lines entirely. Isaac Sim doesn't support floating joints. The base_link becomes the root instead.

Python Generator Fix

# BEFORE (Gazebo)
def create_world_joint():
    return '''
    <link name="world"/>
    <joint name="reference" type="floating">
        <parent link="world"/>
        <child link="base_link"/>
    </joint>
    '''

# AFTER (Isaac Sim)
def create_world_joint():
    # Don't create world link or floating joint for Isaac Sim
    return ''  # Empty - base_link is root

Issue 2: world Link

Location in Original URDF

Line: 27

27:  <link name="world"/>

Required Change

DELETE this line. Isaac Sim doesn't need a world link.

Python Generator Fix

# BEFORE (Gazebo)
urdf_content += '<link name="world"/>\n'

# AFTER (Isaac Sim)
# Remove this line entirely

Issue 3: Gazebo Blocks

Error in Isaac Sim

Isaac Sim ignores <gazebo> elements but they can cause XML parsing issues.

Locations in Original URDF

Block 1: Lines 39-59 (Gazebo plugins)

39:  <gazebo>
40:    <plugin filename="libxbot2_gz_joint_server.so" name="xbot2_gz_joint_server">
...
59:  </gazebo>

Block 2: Lines 315-318 (Gazebo material)

315:  <gazebo>
316:    <material>Gazebo/DarkGrey</material>
317:    <self_collide>0</self_collide>
318:  </gazebo>

Block 3: Lines 320-369 (IMU sensor)

320:  <gazebo reference="imu_link">
321:    <gravity>true</gravity>
322:    <sensor name="imu_sensor" type="imu">
...
369:  </gazebo>

Required Change

DELETE all <gazebo> blocks (lines 39-59, 315-318, 320-369).

Python Generator Fix

# BEFORE (Gazebo)
def add_gazebo_plugins():
    return '''
    <gazebo>
        <plugin filename="libxbot2_gz_joint_server.so" ...>
        </plugin>
    </gazebo>
    '''

# AFTER (Isaac Sim)
def add_gazebo_plugins():
    return ''  # Don't add any gazebo blocks for Isaac Sim

Issue 4: Empty Links (Self-Closing Tags)

Error in Isaac Sim

RuntimeError: Used null prim

Cause

Isaac Sim requires ALL links to have at least <visual> OR <inertial> elements. Empty links (self-closing <link name="..."/>) cause null prim errors.

All 43 Occurrences in Original URDF

Line Link Name Purpose
27 world World reference (DELETE)
91 base_link_projected Ground projection
121 D435i_camera_front_link Camera frame
128 D435i_camera_front_depth_frame Depth sensor
135 D435i_camera_front_depth_optical_frame Depth optical
142 D435i_camera_front_color_frame Color sensor
149 D435i_camera_front_color_optical_frame Color optical
156 D435i_camera_front_left_ir_frame Left IR
163 D435i_camera_front_left_ir_optical_frame Left IR optical
170 D435i_camera_front_right_ir_frame Right IR
177 D435i_camera_front_right_ir_optical_frame Right IR optical
212 D435i_camera_back_link Back camera
219 D435i_camera_back_depth_frame Back depth
226 D435i_camera_back_depth_optical_frame Back depth optical
233 D435i_camera_back_color_frame Back color
240 D435i_camera_back_color_optical_frame Back color optical
247 D435i_camera_back_left_ir_frame Back left IR
254 D435i_camera_back_left_ir_optical_frame Back left IR optical
261 D435i_camera_back_right_ir_frame Back right IR
268 D435i_camera_back_right_ir_optical_frame Back right IR optical
279 T265_camera_left_pose_frame T265 left
285 T265_camera_right_pose_frame T265 right
375 VLP16_lidar_front_base_link Front LiDAR
381 VLP16_lidar_back_base_link Back LiDAR
387 ultrasound_fl_sag_base_link Ultrasound FL sagittal base
393 ultrasound_fl_sag Ultrasound FL sagittal
399 ultrasound_fr_sag_base_link Ultrasound FR sagittal base
405 ultrasound_fr_sag Ultrasound FR sagittal
411 ultrasound_rl_sag_base_link Ultrasound RL sagittal base
417 ultrasound_rl_sag Ultrasound RL sagittal
423 ultrasound_rr_sag_base_link Ultrasound RR sagittal base
429 ultrasound_rr_sag Ultrasound RR sagittal
435 ultrasound_fl_lat_base_link Ultrasound FL lateral base
441 ultrasound_fl_lat Ultrasound FL lateral
447 ultrasound_rl_lat_base_link Ultrasound RL lateral base
453 ultrasound_rl_lat Ultrasound RL lateral
459 ultrasound_fr_lat_base_link Ultrasound FR lateral base
465 ultrasound_fr_lat Ultrasound FR lateral
471 ultrasound_rr_lat_base_link Ultrasound RR lateral base
477 ultrasound_rr_lat Ultrasound RR lateral
485 dalsa_camera_right Dalsa camera right
492 dalsa_camera_left Dalsa camera left
1291 ee_E End effector

Required Change

BEFORE (Line 121 example):

121:  <link name="D435i_camera_front_link"/>

AFTER:

<link name="D435i_camera_front_link">
    <visual>
        <geometry>
            <sphere radius="0.01"/>
        </geometry>
    </visual>
    <inertial>
        <mass value="0.001"/>
        <inertia ixx="1e-9" ixy="0" ixz="0" iyy="1e-9" iyz="0" izz="1e-9"/>
    </inertial>
</link>

Python Generator Fix

# BEFORE (Gazebo - allowed empty links)
def create_sensor_frame(name):
    return f'<link name="{name}"/>'

# AFTER (Isaac Sim - must have content)
def create_sensor_frame(name):
    return f'''<link name="{name}">
    <visual>
        <geometry>
            <sphere radius="0.01"/>
        </geometry>
    </visual>
    <inertial>
        <mass value="0.001"/>
        <inertia ixx="1e-9" ixy="0" ixz="0" iyy="1e-9" iyz="0" izz="1e-9"/>
    </inertial>
</link>'''

Issue 5: Hyphens in Mesh Filenames

Error in Isaac Sim

Ill-formed SdfPath </visuals/J1_E_stator/concert_yaw-base>

Cause

USD (Universal Scene Description) paths cannot contain hyphens (-). Mesh filenames with hyphens get converted to prim paths and cause parsing errors.

All 24 Occurrences in Original URDF

Line Original Filename Required Filename
887 concert_yaw-base.stl concert_yaw_base.stl
896 simple/concert_yaw-base.stl simple/concert_yaw_base.stl
916 concert_yaw-link.stl concert_yaw_link.stl
925 simple/concert_yaw-link.stl simple/concert_yaw_link.stl
944 concert_elbow-base.stl concert_elbow_base.stl
953 simple/concert_elbow-base.stl simple/concert_elbow_base.stl
973 concert_elbow-link.stl concert_elbow_link.stl
982 simple/concert_elbow-link.stl simple/concert_elbow_link.stl
1001 concert_yaw-base.stl concert_yaw_base.stl
1010 simple/concert_yaw-base.stl simple/concert_yaw_base.stl
1030 concert_yaw-link.stl concert_yaw_link.stl
1039 simple/concert_yaw-link.stl simple/concert_yaw_link.stl
1084 concert_elbow-base.stl concert_elbow_base.stl
1093 simple/concert_elbow-base.stl simple/concert_elbow_base.stl
1113 concert_elbow-link.stl concert_elbow_link.stl
1122 simple/concert_elbow-link.stl simple/concert_elbow_link.stl
1141 concert_yaw-base.stl concert_yaw_base.stl
1150 simple/concert_yaw-base.stl simple/concert_yaw_base.stl
1170 concert_yaw-link.stl concert_yaw_link.stl
1179 simple/concert_yaw-link.stl simple/concert_yaw_link.stl
1224 concert_elbow-base.stl concert_elbow_base.stl
1233 simple/concert_elbow-base.stl simple/concert_elbow_base.stl
1253 concert_elbow-link.stl concert_elbow_link.stl
1262 simple/concert_elbow-link.stl simple/concert_elbow_link.stl

Required Changes

  1. Rename the STL files (4 unique files + 4 in simple/):
cd models/modular/meshes/concert/
mv concert_yaw-base.stl concert_yaw_base.stl
mv concert_yaw-link.stl concert_yaw_link.stl
mv concert_elbow-base.stl concert_elbow_base.stl
mv concert_elbow-link.stl concert_elbow_link.stl

cd simple/
mv concert_yaw-base.stl concert_yaw_base.stl
mv concert_yaw-link.stl concert_yaw_link.stl
mv concert_elbow-base.stl concert_elbow_base.stl
mv concert_elbow-link.stl concert_elbow_link.stl
  1. Update URDF references:
sed -i 's/-base\.stl/_base.stl/g; s/-link\.stl/_link.stl/g' concert_robot.urdf

Python Generator Fix

# BEFORE (Gazebo - hyphens allowed)
def get_mesh_filename(joint_type):
    return f"concert_{joint_type}-base.stl"

# AFTER (Isaac Sim - use underscores)
def get_mesh_filename(joint_type):
    return f"concert_{joint_type}_base.stl"

Issue 6: base_link Without Visual

Error in Isaac Sim

RuntimeError: Used null prim

Location in Original URDF

Lines: 33-38

33:  <link name="base_link">
34:    <inertial>
35:      <mass value="0.001"/>
36:      <inertia ixx="1.0e-06" ixy="0.0" ixz="0.0" iyy="1.0e-06" iyz="0.0" izz="1.0e-06"/>
37:    </inertial>
38:  </link>

Required Change

Add a visual element (even a tiny sphere):

<link name="base_link">
    <visual>
        <geometry>
            <sphere radius="0.01"/>
        </geometry>
    </visual>
    <inertial>
        <mass value="0.001"/>
        <inertia ixx="1.0e-06" ixy="0.0" ixz="0.0" iyy="1.0e-06" iyz="0.0" izz="1.0e-06"/>
    </inertial>
</link>

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions