> For the complete documentation index, see [llms.txt](https://angellm.gitbook.io/isaac-sim-and-lab/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://angellm.gitbook.io/isaac-sim-and-lab/proyectos/robot-tipo-segway/creacion-del-urdf-y-del-usd.md).

# Creación del URDF y del USD

## Creación del URDF

Para crear el URDF del robot he utilizado la herramienta online [URDF Studio](https://urdf.d-robotics.cc/) que permite diseñar de manera interactiva y visual el URDF de un robot.

<figure><img src="https://4149706768-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F269LOCCa5jMjvHrpmwVL%2Fuploads%2FEZtHlwRSDvfDjBEkVolZ%2Fimage.png?alt=media&amp;token=afbf3d00-1892-43a1-afc7-d18b8dcd0227" alt=""><figcaption></figcaption></figure>

### Estructura del robot

#### Links

* **`base_link`**\
  Chasis del robot. Es una caja (0.25×0.25×0.5 m), link raíz, contiene la mayor parte de la masa.
* **`left_wheel` / `right_wheel`**\
  Dos ruedas cilíndricas idénticas (radio 0.15 m, ancho 0.05 m), orientadas correctamente para rodar.

#### Joints

* **2 joints rueda–chasis**
  * Tipo: **`continuous`**
  * Cada rueda rota alrededor de su eje
  * Conectan cada wheel con `base_link`

### URDF

{% code title="my\_robot.urdf" expandable="true" %}

```xml
<?xml version="1.0" ?>
<robot>

  <material name="blue">
    <color rgba="0.2 0.2 1 1"/>
  </material>
  <material name="black">
    <color rgba="0 0 0 1"/>
  </material>
  <material name="white">
    <color rgba="1 1 1 1"/>
  </material>
  
  <link name="base_link">
    <visual>
      <origin rpy="0.0000 0.0000 0.0000" xyz="0.0000 0.0000 0.3500"/>
      <geometry>
        <box size="0.2500 0.2500 0.5000"/>
      </geometry>
      <material name="blue"/>
    </visual>
    <collision>
      <origin rpy="0.0000 0.0000 0.0000" xyz="0.0000 0.0000 0.3500"/>
      <geometry>
        <box size="0.2500 0.2500 0.5000"/>
      </geometry>
    </collision>
    <inertial>
      <origin xyz="0 0 0.35"/>
      <mass value="1"/>
      <inertia ixx="0.026041666666666664" ixy="0.0" ixz="0.0" iyy="0.026041666666666664" iyz="0.0" izz="0.010416666666666666"/>
    </inertial>
  </link>
  
  <link name="right_wheel">
    <visual>
      <origin rpy="1.5747 0.0000 0.0000" xyz="0.0000 0.0000 0.0000"/>
      <geometry>
        <cylinder length="0.0500" radius="0.1500"/>
      </geometry>
      <material name="white"/>
    </visual>
    <collision>
      <origin rpy="1.5747 0.0000 0.0000" xyz="0.0000 0.0000 0.0000"/>
      <geometry>
        <cylinder length="0.0500" radius="0.1500"/>
      </geometry>
    </collision>
    <inertial>
      <origin rpy="1.5747 0 0" xyz="0 0 0"/>
      <mass value="0.1"/>
      <inertia ixx="0.0005833333333333333" ixy="0.0" ixz="0.0" iyy="0.0005833333333333333" iyz="0.0" izz="0.001125"/>
    </inertial>
  </link>
  
  <link name="left_wheel">
    <visual>
      <origin rpy="1.5747 0.0000 0.0000" xyz="0.0000 0.0000 0.0000"/>
      <geometry>
        <cylinder length="0.0500" radius="0.1500"/>
      </geometry>
      <material name="black"/>
    </visual>
    <collision>
      <origin rpy="1.5747 0.0000 0.0000" xyz="0.0000 0.0000 0.0000"/>
      <geometry>
        <cylinder length="0.0500" radius="0.1500"/>
      </geometry>
    </collision>
    <inertial>
      <origin rpy="1.5747 0 0" xyz="0 0 0"/>
      <mass value="0.1"/>
      <inertia ixx="0.0005833333333333333" ixy="0.0" ixz="0.0" iyy="0.0005833333333333333" iyz="0.0" izz="0.001125"/>
    </inertial>
  </link>
  
  <joint name="right_joint" type="continuous">
    <parent link="base_link"/>
    <child link="right_wheel"/>
    <origin rpy="0.0000 0.0000 0.0000" xyz="0.0000 -0.1500 0.1500"/>
    <axis xyz="0.0000 1.0000 0.0000"/>
  </joint>
  
  <joint name="left_joint" type="continuous">
    <parent link="base_link"/>
    <child link="left_wheel"/>
    <origin rpy="0.0000 0.0000 0.0000" xyz="0.0000 0.1500 0.1500"/>
    <axis xyz="0.0000 1.0000 0.0000"/>
  </joint>
  
</robot>
```

{% endcode %}

## Creación del USD

Un archivo USD (Universal Scene Description) es un formato de escena 3D completo que describe geometría, jerarquías, materiales, físicas y animaciones de forma eficiente y escalable.\
Isaac Sim lo usa en lugar de URDF porque USD soporta físicas avanzadas, grandes escenas y edición no destructiva, mientras que URDF es solo una descripción cinemática básica.

Podemos crear el USD de nuestro robot abriendo un proyecto nuevo en Isaac Sim e importando el URDF. Al momento de la importación del URDF hay que tener en cuenta que hay que activar la casilla de "base móvil", ya que nuestro robot va a ser un robot que se va a poder desplazar por la escena. Yo he configurado el Target de las articulaciones como "Velocity" porque me parecía que tenía sentido, pero realmente no se si tiene algún efecto.&#x20;

<figure><img src="https://4149706768-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F269LOCCa5jMjvHrpmwVL%2Fuploads%2F67Yzk4G0rFKkw6tJ9391%2Fimage.png?alt=media&amp;token=3995fa61-aeae-4fb4-a78d-a94c2308f2c1" alt=""><figcaption></figcaption></figure>

Una vez pulsamos sobre el botón de import, aparecerá una ventana avisándonos de que se van a crear unos archivos en una nueva carpeta ubicada en la misma ruta que nuestro archivo URDF importado. Tras pulsar el botón de confirmación, Isaac Sim habrá creado allí el archivo USD que utlizaremos para nuestro proyecto. Podemos moverlo a otra ubicación o dejarlo ahí, lo que nos sea más cómodo. Yo lo copiaré más tarde a la carpeta del proyecto de Isaac Lab para tenerlo a mano.

<figure><img src="https://4149706768-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F269LOCCa5jMjvHrpmwVL%2Fuploads%2FLozU02oA9TlpiCvawWXy%2Fimage.png?alt=media&amp;token=1b6aa670-c80d-463d-b053-8cb85ae475c9" alt=""><figcaption></figcaption></figure>
