cyberbotics / webots

Webots Robot Simulator
https://cyberbotics.com
Apache License 2.0
3.29k stars 1.71k forks source link

URDF export fails with track nodes #2067

Closed DavidMansolino closed 4 years ago

DavidMansolino commented 4 years ago

Describe the Bug If a Robot contains a Track node the URDF export is completely corrupted. It is fine to ignore the Track part since it is not supported in URDF, but the generated model should still be valid.

URDF obtained when exporting the track sample:

<?xml version="1.0"?>
<robot name="tracked robot" xmlns:xacro="http://ros.org/wiki/xacro">
  <link name="base_link">
    <visual name="shape_156">
      <geometry>
        <box size="0.01 0.01 0.01"/>
      </geometry>
    </visual>
    <visual name="shape_287">
      <geometry>
        <box size="0.01 0.01 0.01"/>
      </geometry>
    </visual>
  </link>
  <link name="right track">
  children [      <visual name="trackwheel_224">
        <geometry>
          <box size="0.01 0.01 0.01"/>
        </geometry>
      </visual>
      <visual name="transform_225">
        <geometry>
          <box size="0.01 0.01 0.01"/>
        </geometry>
      </visual>
      <visual name="shape_226">
        <geometry>
          <box size="0.01 0.01 0.01"/>
        </geometry>
      </visual>
      <visual name="trackwheel_230">
        <geometry>
          <box size="0.01 0.01 0.01"/>
        </geometry>
      </visual>
      <visual name="transform_231">
        <geometry>
          <box size="0.01 0.01 0.01"/>
        </geometry>
      </visual>
      <visual name="shape_232">
        <geometry>
          <box size="0.01 0.01 0.01"/>
        </geometry>
      </visual>
      <visual name="trackwheel_236">
        <geometry>
          <box size="0.01 0.01 0.01"/>
        </geometry>
      </visual>
      <visual name="transform_237">
        <geometry>
          <box size="0.01 0.01 0.01"/>
        </geometry>
      </visual>
      <visual name="shape_238">
        <geometry>
          <box size="0.01 0.01 0.01"/>
        </geometry>
      </visual>
      <visual name="trackwheel_242">
        <geometry>
          <box size="0.01 0.01 0.01"/>
        </geometry>
      </visual>
      <visual name="transform_243">
        <geometry>
          <box size="0.01 0.01 0.01"/>
        </geometry>
      </visual>
      <visual name="shape_244">
        <geometry>
          <box size="0.01 0.01 0.01"/>
        </geometry>
      </visual>
      <visual name="trackwheel_248">
        <geometry>
          <box size="0.01 0.01 0.01"/>
        </geometry>
      </visual>
      <visual name="transform_249">
        <geometry>
          <box size="0.01 0.01 0.01"/>
        </geometry>
      </visual>
      <visual name="shape_250">
        <geometry>
          <box size="0.01 0.01 0.01"/>
        </geometry>
      </visual>
      <visual name="trackwheel_254">
        <geometry>
          <box size="0.01 0.01 0.01"/>
        </geometry>
      </visual>
      <visual name="transform_255">
        <geometry>
          <box size="0.01 0.01 0.01"/>
        </geometry>
      </visual>
      <visual name="shape_256">
        <geometry>
          <box size="0.01 0.01 0.01"/>
        </geometry>
      </visual>
      <visual name="trackwheel_260">
        <geometry>
          <box size="0.01 0.01 0.01"/>
        </geometry>
      </visual>
      <visual name="transform_261">
        <geometry>
          <box size="0.01 0.01 0.01"/>
        </geometry>
      </visual>
      <visual name="shape_262">
        <geometry>
          <box size="0.01 0.01 0.01"/>
        </geometry>
      </visual>
    Transform {
      translation -0.3 0.107 0
      rotation 0 0 -1 0
      children [
                  <visual name="group_279">
            <geometry>
              <box size="0.01 0.01 0.01"/>
            </geometry>
          </visual>
          <visual name="shape_280">
            <geometry>
              <box size="0.01 0.01 0.01"/>
            </geometry>
          </visual>
          <visual name="transform_283">
            <geometry>
              <box size="0.01 0.01 0.01"/>
            </geometry>
          </visual>
          <visual name="shape_284">
            <geometry>
              <box size="0.01 0.01 0.01"/>
            </geometry>
          </visual>
        ]
      }
      Transform {
        translation -0.2556028163237002 0.107 0
        rotation 0 0 -1 0
        children [
          USE ANIMATED_GEOM
        ]
      }
      Transform {
        translation -0.2112056326474004 0.107 0
        rotation 0 0 -1 0
        children [
          USE ANIMATED_GEOM
        ]
      }
      Transform {
        translation -0.1668084489711006 0.107 0
        rotation 0 0 -1 0
        children [
          USE ANIMATED_GEOM
        ]
      }
      Transform {
        translation -0.12241126529480079 0.107 0
        rotation 0 0 -1 0
        children [
          USE ANIMATED_GEOM
        ]
      }
      Transform {
        translation -0.07801408161850099 0.107 0
        rotation 0 0 -1 0
        children [
          USE ANIMATED_GEOM
        ]
      }
      Transform {
        translation -0.03361689794220119 0.107 0
        rotation 0 0 -1 0
        children [
          USE ANIMATED_GEOM
        ]
      }
      Transform {
        translation 0.010780285734098602 0.107 0
        rotation 0 0 -1 0
        children [
          USE ANIMATED_GEOM
        ]
      }
      Transform {
        translation 0.055177469410398396 0.107 0
        rotation 0 0 -1 0
        children [
          USE ANIMATED_GEOM
        ]
      }
      Transform {
        translation 0.09957465308669819 0.107 0
        rotation 0 0 -1 0
        children [
          USE ANIMATED_GEOM
        ]
      }
      Transform {
        translation 0.143971836762998 0.107 0
        rotation 0 0 -1 0
        children [
          USE ANIMATED_GEOM
        ]
      }
      Transform {
        translation 0.1883690204392978 0.107 0
        rotation 0 0 -1 0
        children [
          USE ANIMATED_GEOM
        ]
      }
      Transform {
        translation 0.2327662041155976 0.107 0
        rotation 0 0 -1 0
        children [
          USE ANIMATED_GEOM
        ]
      }
      Transform {
        translation 0.27716338779189736 0.107 0
        rotation 0 0 -1 0
        children [
          USE ANIMATED_GEOM
        ]
      }
      Transform {
        translation 0.3208211857065435 0.1009463191115046 0
        rotation 0 0 -1 0.36478882030649107
        children [
          USE ANIMATED_GEOM
        ]
      }
      Transform {
        translation 0.35695768033236563 0.0759002325379737 0
        rotation 0 0 -1 0.8473669037445324
        children [
          USE ANIMATED_GEOM
        ]
      }
      Transform {
        translation 0.3773444436634963 0.03694471203867422 0
        rotation 0 0 -1 1.3299449871825737
        children [
          USE ANIMATED_GEOM
        ]
      }
      Transform {
        translation 0.37732519893879457 -0.007022916122638355 0
        rotation 0 0 -1 1.812523070620615
        children [
          USE ANIMATED_GEOM
        ]
      }
      Transform {
        translation 0.3569043415967589 -0.045960575039259204 0
        rotation 0 0 -1 2.2951011540586563
        children [
          USE ANIMATED_GEOM
        ]
      }
      Transform {
        translation 0.32080321196065814 -0.0711099088206901 0
        rotation 0 0 -1 2.7212337286561454
        children [
          USE ANIMATED_GEOM
        ]
      }
      Transform {
        translation 0.2802711349431988 -0.0892278736908913 0
        rotation 0 0 -1 2.7212337286561454
        children [
          USE ANIMATED_GEOM
        ]
      }
      Transform {
        translation 0.2397390579257394 -0.1073458385610925 0
        rotation 0 0 -1 2.7212337286561454
        children [
          USE ANIMATED_GEOM
        ]
      }
      Transform {
        translation 0.19918075562027748 -0.1254019540938434 0
        rotation 0 0 -1 2.7791931652629693
        children [
          USE ANIMATED_GEOM
        ]
      }
      Transform {
        translation 0.15509879585677316 -0.128 0
        rotation 0 0 -1 -3.141592653589793
        children [
          USE ANIMATED_GEOM
        ]
      }
      Transform {
        translation 0.11070161218047336 -0.128 0
        rotation 0 0 -1 -3.141592653589793
        children [
          USE ANIMATED_GEOM
        ]
      }
      Transform {
        translation 0.06630442850417356 -0.128 0
        rotation 0 0 -1 -3.141592653589793
        children [
          USE ANIMATED_GEOM
        ]
      }
      Transform {
        translation 0.02190724482787377 -0.128 0
        rotation 0 0 -1 -3.141592653589793
        children [
          USE ANIMATED_GEOM
        ]
      }
      Transform {
        translation -0.022489938848426025 -0.128 0
        rotation 0 0 -1 -3.141592653589793
        children [
          USE ANIMATED_GEOM
        ]
      }
      Transform {
        translation -0.06688712252472581 -0.128 0
        rotation 0 0 -1 -3.141592653589793
        children [
          USE ANIMATED_GEOM
        ]
      }
      Transform {
        translation -0.11128430620102561 -0.128 0
        rotation 0 0 -1 -3.141592653589793
        children [
          USE ANIMATED_GEOM
        ]
      }
      Transform {
        translation -0.1556814898773254 -0.128 0
        rotation 0 0 -1 -3.141592653589793
        children [
          USE ANIMATED_GEOM
        ]
      }
      Transform {
        translation -0.1999723669629856 -0.12673695776846128 0
        rotation 0 0 -1 -2.889625814749163
        children [
          USE ANIMATED_GEOM
        ]
      }
      Transform {
        translation -0.24101182042987918 -0.10985090156437308 0
        rotation 0 0 -1 -2.7413574556655504
        children [
          USE ANIMATED_GEOM
        ]
      }
      Transform {
        translation -0.2819002670715105 -0.09255220653782363 0
        rotation 0 0 -1 -2.7413574556655504
        children [
          USE ANIMATED_GEOM
        ]
      }
      Transform {
        translation -0.3227887137131419 -0.07525351151127418 0
        rotation 0 0 -1 -2.7413574556655504
        children [
          USE ANIMATED_GEOM
        ]
      }
      Transform {
        translation -0.3612629852412825 -0.05363560766341627 0
        rotation 0 0 -1 -2.412890417190205
        children [
          USE ANIMATED_GEOM
        ]
      }
      Transform {
        translation -0.3861181835346128 -0.01736755265228966 0
        rotation 0 0 -1 -1.9303123337521637
        children [
          USE ANIMATED_GEOM
        ]
      }
      Transform {
        translation -0.3913042420929676 0.026293156150021268 0
        rotation 0 0 -1 -1.4477342503141224
        children [
          USE ANIMATED_GEOM
        ]
      }
      Transform {
        translation -0.37563668040048637 0.06737454131536313 0
        rotation 0 0 -1 -0.9651561668760811
        children [
          USE ANIMATED_GEOM
        ]
      }
      Transform {
        translation -0.3426939234492836 0.09649373534515833 0
        rotation 0 0 -1 -0.4825780834380398
        children [
          USE ANIMATED_GEOM
        ]
      }
    ]
    </link>
    <joint name="base_link_right track_joint" type="fixed">
      <parent link="base_link"/>
      <child link="right track"/>
      <origin xyz="0 0 0.07" rpy="0 0 0" />
    </joint>
    <link name="left track">
    children [        <visual name="trackwheel_160">
          <geometry>
            <box size="0.01 0.01 0.01"/>
          </geometry>
        </visual>
        <visual name="transform_161">
          <geometry>
            <box size="0.01 0.01 0.01"/>
          </geometry>
        </visual>
        <visual name="shape_162">
          <geometry>
            <box size="0.01 0.01 0.01"/>
          </geometry>
        </visual>
        <visual name="trackwheel_166">
          <geometry>
            <box size="0.01 0.01 0.01"/>
          </geometry>
        </visual>
        <visual name="transform_167">
          <geometry>
            <box size="0.01 0.01 0.01"/>
          </geometry>
        </visual>
        <visual name="shape_168">
          <geometry>
            <box size="0.01 0.01 0.01"/>
          </geometry>
        </visual>
        <visual name="trackwheel_172">
          <geometry>
            <box size="0.01 0.01 0.01"/>
          </geometry>
        </visual>
        <visual name="transform_173">
          <geometry>
            <box size="0.01 0.01 0.01"/>
          </geometry>
        </visual>
        <visual name="shape_174">
          <geometry>
            <box size="0.01 0.01 0.01"/>
          </geometry>
        </visual>
        <visual name="trackwheel_178">
          <geometry>
            <box size="0.01 0.01 0.01"/>
          </geometry>
        </visual>
        <visual name="transform_179">
          <geometry>
            <box size="0.01 0.01 0.01"/>
          </geometry>
        </visual>
        <visual name="shape_180">
          <geometry>
            <box size="0.01 0.01 0.01"/>
          </geometry>
        </visual>
        <visual name="trackwheel_184">
          <geometry>
            <box size="0.01 0.01 0.01"/>
          </geometry>
        </visual>
        <visual name="transform_185">
          <geometry>
            <box size="0.01 0.01 0.01"/>
          </geometry>
        </visual>
        <visual name="shape_186">
          <geometry>
            <box size="0.01 0.01 0.01"/>
          </geometry>
        </visual>
        <visual name="trackwheel_190">
          <geometry>
            <box size="0.01 0.01 0.01"/>
          </geometry>
        </visual>
        <visual name="transform_191">
          <geometry>
            <box size="0.01 0.01 0.01"/>
          </geometry>
        </visual>
        <visual name="shape_192">
          <geometry>
            <box size="0.01 0.01 0.01"/>
          </geometry>
        </visual>
        <visual name="trackwheel_196">
          <geometry>
            <box size="0.01 0.01 0.01"/>
          </geometry>
        </visual>
        <visual name="transform_197">
          <geometry>
            <box size="0.01 0.01 0.01"/>
          </geometry>
        </visual>
        <visual name="shape_198">
          <geometry>
            <box size="0.01 0.01 0.01"/>
          </geometry>
        </visual>
      Transform {
        translation -0.3 0.107 0
        rotation 0 0 -1 0
        children [
                      <visual name="group_215">
              <geometry>
                <box size="0.01 0.01 0.01"/>
              </geometry>
            </visual>
            <visual name="shape_216">
              <geometry>
                <box size="0.01 0.01 0.01"/>
              </geometry>
            </visual>
            <visual name="transform_219">
              <geometry>
                <box size="0.01 0.01 0.01"/>
              </geometry>
            </visual>
            <visual name="shape_220">
              <geometry>
                <box size="0.01 0.01 0.01"/>
              </geometry>
            </visual>
          ]
        }
        Transform {
          translation -0.2556028163237002 0.107 0
          rotation 0 0 -1 0
          children [
            USE ANIMATED_GEOM
          ]
        }
        Transform {
          translation -0.2112056326474004 0.107 0
          rotation 0 0 -1 0
          children [
            USE ANIMATED_GEOM
          ]
        }
        Transform {
          translation -0.1668084489711006 0.107 0
          rotation 0 0 -1 0
          children [
            USE ANIMATED_GEOM
          ]
        }
        Transform {
          translation -0.12241126529480079 0.107 0
          rotation 0 0 -1 0
          children [
            USE ANIMATED_GEOM
          ]
        }
        Transform {
          translation -0.07801408161850099 0.107 0
          rotation 0 0 -1 0
          children [
            USE ANIMATED_GEOM
          ]
        }
        Transform {
          translation -0.03361689794220119 0.107 0
          rotation 0 0 -1 0
          children [
            USE ANIMATED_GEOM
          ]
        }
        Transform {
          translation 0.010780285734098602 0.107 0
          rotation 0 0 -1 0
          children [
            USE ANIMATED_GEOM
          ]
        }
        Transform {
          translation 0.055177469410398396 0.107 0
          rotation 0 0 -1 0
          children [
            USE ANIMATED_GEOM
          ]
        }
        Transform {
          translation 0.09957465308669819 0.107 0
          rotation 0 0 -1 0
          children [
            USE ANIMATED_GEOM
          ]
        }
        Transform {
          translation 0.143971836762998 0.107 0
          rotation 0 0 -1 0
          children [
            USE ANIMATED_GEOM
          ]
        }
        Transform {
          translation 0.1883690204392978 0.107 0
          rotation 0 0 -1 0
          children [
            USE ANIMATED_GEOM
          ]
        }
        Transform {
          translation 0.2327662041155976 0.107 0
          rotation 0 0 -1 0
          children [
            USE ANIMATED_GEOM
          ]
        }
        Transform {
          translation 0.27716338779189736 0.107 0
          rotation 0 0 -1 0
          children [
            USE ANIMATED_GEOM
          ]
        }
        Transform {
          translation 0.3208211857065435 0.1009463191115046 0
          rotation 0 0 -1 0.36478882030649107
          children [
            USE ANIMATED_GEOM
          ]
        }
        Transform {
          translation 0.35695768033236563 0.0759002325379737 0
          rotation 0 0 -1 0.8473669037445324
          children [
            USE ANIMATED_GEOM
          ]
        }
        Transform {
          translation 0.3773444436634963 0.03694471203867422 0
          rotation 0 0 -1 1.3299449871825737
          children [
            USE ANIMATED_GEOM
          ]
        }
        Transform {
          translation 0.37732519893879457 -0.007022916122638355 0
          rotation 0 0 -1 1.812523070620615
          children [
            USE ANIMATED_GEOM
          ]
        }
        Transform {
          translation 0.3569043415967589 -0.045960575039259204 0
          rotation 0 0 -1 2.2951011540586563
          children [
            USE ANIMATED_GEOM
          ]
        }
        Transform {
          translation 0.32080321196065814 -0.0711099088206901 0
          rotation 0 0 -1 2.7212337286561454
          children [
            USE ANIMATED_GEOM
          ]
        }
        Transform {
          translation 0.2802711349431988 -0.0892278736908913 0
          rotation 0 0 -1 2.7212337286561454
          children [
            USE ANIMATED_GEOM
          ]
        }
        Transform {
          translation 0.2397390579257394 -0.1073458385610925 0
          rotation 0 0 -1 2.7212337286561454
          children [
            USE ANIMATED_GEOM
          ]
        }
        Transform {
          translation 0.19918075562027748 -0.1254019540938434 0
          rotation 0 0 -1 2.7791931652629693
          children [
            USE ANIMATED_GEOM
          ]
        }
        Transform {
          translation 0.15509879585677316 -0.128 0
          rotation 0 0 -1 -3.141592653589793
          children [
            USE ANIMATED_GEOM
          ]
        }
        Transform {
          translation 0.11070161218047336 -0.128 0
          rotation 0 0 -1 -3.141592653589793
          children [
            USE ANIMATED_GEOM
          ]
        }
        Transform {
          translation 0.06630442850417356 -0.128 0
          rotation 0 0 -1 -3.141592653589793
          children [
            USE ANIMATED_GEOM
          ]
        }
        Transform {
          translation 0.02190724482787377 -0.128 0
          rotation 0 0 -1 -3.141592653589793
          children [
            USE ANIMATED_GEOM
          ]
        }
        Transform {
          translation -0.022489938848426025 -0.128 0
          rotation 0 0 -1 -3.141592653589793
          children [
            USE ANIMATED_GEOM
          ]
        }
        Transform {
          translation -0.06688712252472581 -0.128 0
          rotation 0 0 -1 -3.141592653589793
          children [
            USE ANIMATED_GEOM
          ]
        }
        Transform {
          translation -0.11128430620102561 -0.128 0
          rotation 0 0 -1 -3.141592653589793
          children [
            USE ANIMATED_GEOM
          ]
        }
        Transform {
          translation -0.1556814898773254 -0.128 0
          rotation 0 0 -1 -3.141592653589793
          children [
            USE ANIMATED_GEOM
          ]
        }
        Transform {
          translation -0.1999723669629856 -0.12673695776846128 0
          rotation 0 0 -1 -2.889625814749163
          children [
            USE ANIMATED_GEOM
          ]
        }
        Transform {
          translation -0.24101182042987918 -0.10985090156437308 0
          rotation 0 0 -1 -2.7413574556655504
          children [
            USE ANIMATED_GEOM
          ]
        }
        Transform {
          translation -0.2819002670715105 -0.09255220653782363 0
          rotation 0 0 -1 -2.7413574556655504
          children [
            USE ANIMATED_GEOM
          ]
        }
        Transform {
          translation -0.3227887137131419 -0.07525351151127418 0
          rotation 0 0 -1 -2.7413574556655504
          children [
            USE ANIMATED_GEOM
          ]
        }
        Transform {
          translation -0.3612629852412825 -0.05363560766341627 0
          rotation 0 0 -1 -2.412890417190205
          children [
            USE ANIMATED_GEOM
          ]
        }
        Transform {
          translation -0.3861181835346128 -0.01736755265228966 0
          rotation 0 0 -1 -1.9303123337521637
          children [
            USE ANIMATED_GEOM
          ]
        }
        Transform {
          translation -0.3913042420929676 0.026293156150021268 0
          rotation 0 0 -1 -1.4477342503141224
          children [
            USE ANIMATED_GEOM
          ]
        }
        Transform {
          translation -0.37563668040048637 0.06737454131536313 0
          rotation 0 0 -1 -0.9651561668760811
          children [
            USE ANIMATED_GEOM
          ]
        }
        Transform {
          translation -0.3426939234492836 0.09649373534515833 0
          rotation 0 0 -1 -0.4825780834380398
          children [
            USE ANIMATED_GEOM
          ]
        }
      ]
      </link>
      <joint name="base_link_left track_joint" type="fixed">
        <parent link="base_link"/>
        <child link="left track"/>
        <origin xyz="0 0 -0.07" rpy="0 0 0" />
      </joint>
</robot>
omichel commented 4 years ago

Fixed in #2068.