Clase 08
Semana 9 - 12/05/2025
XML
: La información se representa a través de etiquetas anidadasEtiquetas principales:
<robot>
,<link>
,<joint>
<link>
<joint>
Link
Joint
Muy importante
Identificar de forma conveniente como dividir la estructura física del robot en links y joints
<robot>..<\robot>
<link>..</link>
Por convención el nombre tiene sufijo ‘_link
’
<link>..</link>
Geometría visual
<visual>..</visual>
<link>..</link>
Geometría visual
<visual>..</visual>
<link>..</link>
<link>..</link>
Geometría visual
<visual>..</visual>
<link>..</link>
Geometría para simulación
<collision>..</collision>
<joint>..</joint>
Por convención el nombre tiene sufijo ‘_joint
’
fixed
)continuous
)revolute
)3 elementos:
<origin .. />
<axis ../>
y<limit ../>
fixed
)continuous
)revolute
)prismatic
)Se necesita un paso de compilación:
$ xacro description.urdf.xacro
Actualizar dependencias: <exec_depend>xacro</exec_depend>
Ejemplos:
.urdf.xacro
’robot
con nombre.xacro
’robot
(sin nombre)Se incluyen las partes mediante el tag <xacro:include .. />
xacro:include
${..}
xacro:property
: Nombre y valor<?xml version="1.0"?>
<robot name="MyBot" ...>
<xacro:property name="diametro" value="2.1" />
<xacro:property name="ancho" value="4.5" />
<xacro:property name="alpha" value="${30/180*pi}" />
...
<geometry type="cylinder"
radius="${diametro / 2}" length="${ancho}" />
...
<origin xyz="0 0 0" rpy="0 0 ${alpha}" />
...
</robot>
xacro:args
: Nombre y valor por defectoxacro:if
para true
y xacro:unless
para false
xacro:macro
: Nombre y parámetros a recibirmacro.xacro
<xacro:macro name="rueda_esferica"
params="prefijo link_padre radio
pos_x:=0 pos_y:=0 pos_z:=0">
<xacro:property name="nombre_link"
value="${prefijo}_link" />
<link name="${nombre_link}">
<visual>
<geometry>
<sphere radius="${radio}" />
</geometry>
<material name="black" />
</visual>
...
</link>
<joint name="${prefijo}_joint" type="fixed">
<parent link="${link_padre}$"/>
<child link="${nombre_link}"/>
<origin xyz="${pos_x} ${pos_y} ${pos_z}"
rpy="0 0 0"/>
</joint>
</xacro:macro>
Resultado:
URDF |
|
|
---|---|---|
arbol de .. | arbol de .. | |
links |
frames |
|
conectados por .. | conectados por .. | |
joints |
transforms |
Tip
Interpretando los links
y joints
del robot description puedo publicar los frames
y tf
correspondientes
robot_state_publisher
/robot_description
/tf_static
/joint_states
➡️ transformaciones dinámicas ➡️ /tf
/joint_states
sensor_msgs/JointState
├── std_msgs/Header header
├── string[] name
├── float64[] position
├── float64[] velocity
└── float64[] effort
Quién publica en el /joint_states
?
URDF + XACRO + robot_state_publisher
+ joint_state_publisher_gui
robot_state_publisher
$ ros2 run robot_state_publisher robot_state_publisher
--ros-args -p robot_description:='<robot_description>'
joint_state_publisher_gui
$ ros2 run joint_state_publisher_gui joint_state_publisher_gui
Ejercicios 1 y 2
Robótica - TUAR - FICH - UNL