Difference between revisions of "Modelo para simulación MYRAbot (urdf+gazebo)"
(→Modelo del MYRAbot) |
(→URDF Roomba) |
||
Line 611: | Line 611: | ||
===URDF Roomba=== | ===URDF Roomba=== | ||
− | Para la base móvil [http://store.irobot.com/family/index.jsp?categoryId=3358508&s=A-ProductAge Roomba] se ha empleado el modelo del turtlebot, aunque equipado con una base móvil [http://store.irobot.com/family/index.jsp?categoryId=2591511&s=A-ProductAge create], esta tiene unas físicas y sensores similares a la nuestra. Para esto necesitamos instalar los ''stacks'' [http://wiki.ros.org/turtlebot turtlebot] y [http://wiki.ros.org/turtlebot_simulator turtlebot_simulator], que contienen el modelo y los ''plugins'' para [http://wiki.ros.org/simulator_gazebo?distro=electric gazebo], respectivamente. | + | Para la base móvil [http://store.irobot.com/family/index.jsp?categoryId=3358508&s=A-ProductAge Roomba] se ha empleado el modelo del [http://www.turtlebot.com/ turtlebot], aunque equipado con una base móvil [http://store.irobot.com/family/index.jsp?categoryId=2591511&s=A-ProductAge create], esta tiene unas físicas y sensores similares a la nuestra. Para esto necesitamos instalar los ''stacks'' [http://wiki.ros.org/turtlebot turtlebot] y [http://wiki.ros.org/turtlebot_simulator turtlebot_simulator], que contienen el modelo y los ''plugins'' para [http://wiki.ros.org/simulator_gazebo?distro=electric gazebo], respectivamente. Eliminando lo que no necesitamos del modelo del [http://www.turtlebot.com/ turtlebot] y modificacndo el elemento de la base, el contenido del archivo que guardaremos con el nombre "roomba.xacro" en el directorio "urdf" de nuestro ''package'' es el siguiente: |
+ | |||
+ | <syntaxhighlight lang="xml"> | ||
+ | |||
+ | <?xml version="1.0"?> | ||
+ | |||
+ | <robot xmlns:xacro="http://ros.org/wiki/xacro"> | ||
+ | |||
+ | <property name="M_PI" value="3.14159"/> | ||
+ | |||
+ | <include filename="$(find myrabot_fer_modelo)/urdf/gazebo.xacro"/> | ||
+ | |||
+ | <property name="base_x" value="0.33" /> | ||
+ | <property name="base_y" value="0.33" /> | ||
+ | |||
+ | <xacro:macro name="create"> | ||
+ | <material name="Green"> | ||
+ | <color rgba="0.0 0.8 0.0 1.0"/> | ||
+ | </material> | ||
+ | |||
+ | <link name="base_footprint"> | ||
+ | <inertial> | ||
+ | <mass value="0.0001" /> | ||
+ | <origin xyz="0 0 0" /> | ||
+ | <inertia ixx="0.0001" ixy="0.0" ixz="0.0" | ||
+ | iyy="0.0001" iyz="0.0" | ||
+ | izz="0.0001" /> | ||
+ | </inertial> | ||
+ | |||
+ | <visual> | ||
+ | <origin xyz="0 0 0" rpy="0 0 0" /> | ||
+ | <geometry> | ||
+ | <box size="0.001 0.001 0.001" /> | ||
+ | </geometry> | ||
+ | <material name="Green" /> | ||
+ | </visual> | ||
+ | |||
+ | <collision> | ||
+ | <origin xyz="0 0 0.017" rpy="0 0 0" /> | ||
+ | <geometry> | ||
+ | <box size="0.001 0.001 0.001" /> | ||
+ | </geometry> | ||
+ | </collision> | ||
+ | </link> | ||
+ | |||
+ | <link name="base_link"> | ||
+ | <inertial> | ||
+ | <mass value="3.6" /> | ||
+ | <origin xyz="0 0 ${0.092/2}" /> | ||
+ | <inertia ixx="0.01" ixy="0.0" ixz="0.0" | ||
+ | iyy="0.01" iyz="0.0" izz="0.5" /> | ||
+ | </inertial> | ||
+ | |||
+ | <visual> | ||
+ | <origin xyz=" 0 0 ${0.092/2}" rpy="0 0 0" /> | ||
+ | <geometry> | ||
+ | <cylinder length="0.092" radius="0.17"/> | ||
+ | </geometry> | ||
+ | <material name="white"> | ||
+ | <color rgba="1 1 1 1" /> | ||
+ | </material> | ||
+ | </visual> | ||
+ | |||
+ | <collision> | ||
+ | <origin xyz="0.0 0.0 ${0.092/2}" rpy="0 0 0" /> | ||
+ | <geometry> | ||
+ | <cylinder length="0.092" radius="0.17"/> | ||
+ | </geometry> | ||
+ | </collision> | ||
+ | </link> | ||
+ | |||
+ | <link name="wall_sensor_link"> | ||
+ | <inertial> | ||
+ | <mass value="0.01" /> | ||
+ | <origin xyz="0 0 0"/> | ||
+ | <inertia ixx="0.001" ixy="0.0" ixz="0.0" | ||
+ | iyy="0.001" iyz="0.0" izz="0.001" /> | ||
+ | </inertial> | ||
+ | </link> | ||
+ | |||
+ | |||
+ | <link name="left_cliff_sensor_link"> | ||
+ | <inertial> | ||
+ | <mass value="0.01" /> | ||
+ | <origin xyz="0 0 0"/> | ||
+ | <inertia ixx="0.001" ixy="0.0" ixz="0.0" | ||
+ | iyy="0.001" iyz="0.0" izz="0.001" /> | ||
+ | </inertial> | ||
+ | </link> | ||
+ | |||
+ | <link name="right_cliff_sensor_link"> | ||
+ | <inertial> | ||
+ | <mass value="0.01" /> | ||
+ | <origin xyz="0 0 0"/> | ||
+ | <inertia ixx="0.001" ixy="0.0" ixz="0.0" | ||
+ | iyy="0.001" iyz="0.0" izz="0.001" /> | ||
+ | </inertial> | ||
+ | </link> | ||
+ | |||
+ | |||
+ | |||
+ | <link name="leftfront_cliff_sensor_link"> | ||
+ | <inertial> | ||
+ | <mass value="0.01" /> | ||
+ | <origin xyz="0 0 0"/> | ||
+ | <inertia ixx="1.0" ixy="0.0" ixz="0.0" | ||
+ | iyy="0.01" iyz="0.0" izz="0.01" /> | ||
+ | </inertial> | ||
+ | </link> | ||
+ | |||
+ | <link name="rightfront_cliff_sensor_link"> | ||
+ | <inertial> | ||
+ | <mass value="0.01" /> | ||
+ | <origin xyz="0 0 0"/> | ||
+ | <inertia ixx="0.001" ixy="0.0" ixz="0.0" | ||
+ | iyy="0.001" iyz="0.0" izz="0.001" /> | ||
+ | </inertial> | ||
+ | </link> | ||
+ | |||
+ | |||
+ | <joint name="base_footprint_joint" type="fixed"> | ||
+ | <origin xyz="0 0 0.017" rpy="0 0 0" /> | ||
+ | <parent link="base_footprint"/> | ||
+ | <child link="base_link" /> | ||
+ | </joint> | ||
+ | |||
+ | <joint name="base_wall_sensor_joint" type="fixed"> | ||
+ | <origin xyz="0.09 -0.120 0.042" rpy="0 0 -1.0" /> | ||
+ | <parent link="base_link"/> | ||
+ | <child link="wall_sensor_link" /> | ||
+ | </joint> | ||
+ | |||
+ | <joint name="base_left_cliff_sensor_joint" type="fixed"> | ||
+ | <origin xyz="0.07 0.14 0.01" rpy="0 1.57079 0" /> | ||
+ | <parent link="base_link"/> | ||
+ | <child link="left_cliff_sensor_link" /> | ||
+ | </joint> | ||
+ | |||
+ | <joint name="base_right_cliff_sensor_joint" type="fixed"> | ||
+ | <origin xyz="0.07 -0.14 0.01" rpy="0 1.57079 0" /> | ||
+ | <parent link="base_link"/> | ||
+ | <child link="right_cliff_sensor_link" /> | ||
+ | </joint> | ||
+ | |||
+ | <joint name="base_leftfront_cliff_sensor_joint" type="fixed"> | ||
+ | <origin xyz="0.15 0.04 0.01" rpy="0 1.57079 0" /> | ||
+ | <parent link="base_link"/> | ||
+ | <child link="leftfront_cliff_sensor_link" /> | ||
+ | </joint> | ||
+ | |||
+ | <joint name="base_rightfront_cliff_sensor_joint" type="fixed"> | ||
+ | <origin xyz="0.15 -0.04 0.01" rpy="0 1.57079 0" /> | ||
+ | <parent link="base_link"/> | ||
+ | <child link="rightfront_cliff_sensor_link" /> | ||
+ | </joint> | ||
+ | |||
+ | <link name="left_wheel_link"> | ||
+ | <inertial> | ||
+ | <origin xyz="0 0 0"/> | ||
+ | <mass value="0.01" /> | ||
+ | <inertia ixx="0.001" ixy="0.0" ixz="0.0" | ||
+ | iyy="0.001" iyz="0.0" izz="0.001" /> | ||
+ | </inertial> | ||
+ | |||
+ | <visual> | ||
+ | <origin xyz="0 0 0" rpy="0 1.5707 1.5707" /> | ||
+ | <geometry> | ||
+ | <cylinder radius="0.033" length = "0.023"/> | ||
+ | </geometry> | ||
+ | </visual> | ||
+ | |||
+ | <collision> | ||
+ | <origin xyz="0 0 0" rpy="0 1.5707 1.5707" /> | ||
+ | <geometry> | ||
+ | <cylinder radius="0.033" length = "0.023"/> | ||
+ | </geometry> | ||
+ | </collision> | ||
+ | </link> | ||
+ | |||
+ | <joint name="left_wheel_joint" type="continuous"> | ||
+ | <origin xyz="0 0.13 0.015" rpy="0 0 0"/> | ||
+ | <parent link="base_link"/> | ||
+ | <child link="left_wheel_link"/> | ||
+ | <axis xyz="0 1 0"/> | ||
+ | </joint> | ||
+ | |||
+ | <link name="right_wheel_link"> | ||
+ | <inertial> | ||
+ | <origin xyz="0 0 0"/> | ||
+ | <mass value="0.01" /> | ||
+ | <inertia ixx="0.001" ixy="0.0" ixz="0.0" | ||
+ | iyy="0.001" iyz="0.0" izz="0.001" /> | ||
+ | </inertial> | ||
+ | |||
+ | <visual> | ||
+ | <origin xyz="0 0 0" rpy="0 1.5707 1.5707" /> | ||
+ | <geometry> | ||
+ | <cylinder radius="0.033" length = "0.023"/> | ||
+ | </geometry> | ||
+ | </visual> | ||
+ | |||
+ | <collision> | ||
+ | <origin xyz="0 0 0" rpy="0 1.5707 1.5707" /> | ||
+ | <geometry> | ||
+ | <cylinder radius="0.033" length = "0.023"/> | ||
+ | </geometry> | ||
+ | </collision> | ||
+ | </link> | ||
+ | |||
+ | <joint name="right_wheel_joint" type="continuous"> | ||
+ | <origin xyz="0 -0.13 0.015" rpy="0 0 0"/> | ||
+ | <parent link="base_link"/> | ||
+ | <child link="right_wheel_link"/> | ||
+ | <axis xyz="0 1 0"/> | ||
+ | </joint> | ||
+ | |||
+ | <link name="rear_wheel_link"> | ||
+ | <inertial> | ||
+ | <origin xyz="0 0 0"/> | ||
+ | <mass value="0.001" /> | ||
+ | <inertia ixx="0.0001" ixy="0.0" ixz="0.0" | ||
+ | iyy="0.0001" iyz="0.0" izz="0.0001" /> | ||
+ | </inertial> | ||
+ | |||
+ | <visual> | ||
+ | <origin xyz="0 0 0" rpy="0 1.5707 1.5707"/> | ||
+ | <geometry> | ||
+ | <sphere radius="0.015" /> | ||
+ | </geometry> | ||
+ | </visual> | ||
+ | |||
+ | <collision> | ||
+ | <origin xyz="0 0 0" rpy="0 1.5707 1.5707" /> | ||
+ | <geometry> | ||
+ | <sphere radius="0.015" /> | ||
+ | </geometry> | ||
+ | </collision> | ||
+ | </link> | ||
+ | <!-- fixed because there's no transmission --> | ||
+ | <joint name="rear_castor_joint" type="fixed"> | ||
+ | <origin xyz="-0.13 0 0.0" rpy="0 0 0"/> | ||
+ | <parent link="base_link"/> | ||
+ | <child link="rear_wheel_link"/> | ||
+ | <axis xyz="0 1 0"/> | ||
+ | </joint> | ||
+ | |||
+ | <link name="front_wheel_link"> | ||
+ | <inertial> | ||
+ | <origin xyz="0 0 0" /> | ||
+ | <mass value="0.01" /> | ||
+ | <inertia ixx="0.001" ixy="0.0" ixz="0.0" | ||
+ | iyy="0.001" iyz="0.0" izz="0.001" /> | ||
+ | </inertial> | ||
+ | |||
+ | <visual> | ||
+ | <origin xyz="0 0 0" rpy="0 1.5707 1.5707"/> | ||
+ | <geometry> | ||
+ | <sphere radius="0.018" /> | ||
+ | </geometry> | ||
+ | </visual> | ||
+ | |||
+ | <collision> | ||
+ | <origin xyz="0 0 0" rpy="0 1.5707 1.5707" /> | ||
+ | <geometry> | ||
+ | <sphere radius="0.018" /> | ||
+ | </geometry> | ||
+ | </collision> | ||
+ | </link> | ||
+ | |||
+ | <!-- fixed because there's no transmission --> | ||
+ | <joint name="front_castor_joint" type="fixed"> | ||
+ | <origin xyz="0.13 0 0.0" rpy="0 0 0"/> | ||
+ | <parent link="base_link"/> | ||
+ | <child link="front_wheel_link"/> | ||
+ | <axis xyz="0 1 0"/> | ||
+ | </joint> | ||
+ | |||
+ | |||
+ | <joint name="gyro_joint" type="fixed"> | ||
+ | <axis xyz="0 1 0" /> | ||
+ | <origin xyz="0 0 0.04" rpy="0 0 0" /> | ||
+ | <parent link="base_link"/> | ||
+ | <child link="gyro_link"/> | ||
+ | </joint> | ||
+ | <link name="gyro_link"> | ||
+ | <inertial> | ||
+ | <mass value="0.001" /> | ||
+ | <origin xyz="0 0 0" rpy="0 0 0" /> | ||
+ | <inertia ixx="0.0001" ixy="0" ixz="0" iyy="0.000001" iyz="0" izz="0.0001" /> | ||
+ | </inertial> | ||
+ | </link> | ||
+ | |||
+ | <joint name="laser_joint" type="fixed"> | ||
+ | <origin xyz="-0.065 0 0.075" rpy="0 0 0" /> | ||
+ | <parent link="base_link" /> | ||
+ | <child link="laser" /> | ||
+ | </joint> | ||
+ | |||
+ | <link name="laser"> | ||
+ | <visual> | ||
+ | <geometry> | ||
+ | <box size="0.02 0.035 0.002" /> | ||
+ | </geometry> | ||
+ | <material name="Green" /> | ||
+ | </visual> | ||
+ | <inertial> | ||
+ | <mass value="0.001" /> | ||
+ | <origin xyz="0 0 0" /> | ||
+ | <inertia ixx="0.0001" ixy="0.0" ixz="0.0" | ||
+ | iyy="0.0001" iyz="0.0" | ||
+ | izz="0.0001" /> | ||
+ | </inertial> | ||
+ | </link> | ||
+ | |||
+ | <gaezebo> | ||
+ | <material>Gazebo/White</material> | ||
+ | </gaezebo> | ||
+ | |||
+ | <turtlebot_sim_imu/> | ||
+ | <turtlebot_sim_laser/> | ||
+ | <turtlebot_sim_create/> | ||
+ | <turtlebot_sim_wall_sensors/> | ||
+ | |||
+ | </xacro:macro> | ||
+ | |||
+ | </robot> | ||
+ | |||
+ | |||
+ | <syntaxhighlight> | ||
[[Mobile manipulation | < volver a principal]] | [[Mobile manipulation | < volver a principal]] |
Revision as of 19:40, 11 November 2013
Modelo del MYRAbot
Se ha realizado un modelo de la estructura del MYRAbot a le que se le ha integrado la base Roomba, la cámara kinect y el brazo modelado. Hemos comenzado creando un package que va a contener el modelo de nuestro robot, que llamaremos "myrabot_fer_modelo", con la dependencia urdf.
URDF estructura MYRAbot
Se ha realizado previamente un modelo 3D de la estructura con un programa CAD, del que vamos a emplear las partes con una geometria singular, ya que el diseño empleando los elementos geométricos básicos sería complicado. Para el archivo principal crearemos un archivo llamdo "estructura-myrabot.xacro" en el directorio "urdf" de el package anteriormente creado, con el siguiente contenido:
<?xml version="1.0"?>
<robot>
<include filename="$(find myrabot_fer_modelo)/urdf/estructura-myrabot-macros.xacro" />
<macro name="estructura_myrabot" params="parent *origin">
<joint name="world_joint" type="fixed">
<parent link="${parent}"/>
<child link="e_base_1_link"/>
<insert_block name="origin" />
</joint>
<link name="e_base_1_link">
<inertial>
<mass value="0.05"/>
<origin rpy="0 0 0" xyz="0.135 0.135 ${0.015/2}"/>
<default_inertia_e />
</inertial>
<visual>
<origin rpy="0 0 0" xyz="0.135 0.135 ${0.015/2}"/>
<geometry>
<cylinder radius="0.135" length="0.015" />
</geometry>
<material name="wood">
<color rgba="${205/255} ${133/255} ${63/255} 1" />
</material>
</visual>
<collision>
<origin rpy="0 0 0" xyz="0.135 0.135 ${0.015/2}"/>
<geometry>
<cylinder radius="0.135" length="0.015" />
</geometry>
</collision>
</link>
<separador_base id="1" />
<e_separador_base id="1" xsim="1" ysim="1" />
<separador_base id="2" />
<e_separador_base id="2" xsim="1" ysim="-1" />
<separador_base id="3" />
<e_separador_base id="3" xsim="-1" ysim="-1" />
<separador_base id="4" />
<e_separador_base id="4" xsim="-1" ysim="1" />
<joint name="base_2" type="fixed">
<parent link="e_base_1_link"/>
<child link="e_base_2_link"/>
<origin xyz="0 0 0.135" rpy="0 0 0" />
</joint>
<link name="e_base_2_link">
<inertial>
<mass value="0.05"/>
<origin rpy="0 0 0" xyz="0.135 0.135 ${0.02/2}"/>
<default_inertia_e />
</inertial>
<visual>
<origin rpy="0 0 0" xyz="0.135 0.135 ${0.02/2}"/>
<geometry>
<cylinder radius="0.135" length="0.02" />
</geometry>
<material name="wood">
<color rgba="${205/255} ${133/255} ${63/255} 1" />
</material>
</visual>
<collision>
<origin rpy="0 0 0" xyz="0.135 0.135 ${0.02/2}"/>
<geometry>
<cylinder radius="0.135" length="0.02" />
</geometry>
</collision>
</link>
<joint name="pilar" type="fixed">
<parent link="e_base_2_link"/>
<child link="e_pilar_link"/>
<origin xyz="0 0 0.02" rpy="0 0 0" />
</joint>
<link name="e_pilar_link">
<inertial>
<mass value="0.08"/>
<origin rpy="0 0 0" xyz="0 0 ${0.7/2}"/>
<default_inertia_e />
</inertial>
<visual>
<origin rpy="0 0 0" xyz="0 0 0"/>
<geometry>
<mesh filename="package://myrabot_fer_modelo/meshes/e_pilar.stl" scale="0.001 0.001 0.001"/>
</geometry>
<material name="wood" />
</visual>
<collision>
<origin rpy="0 0 0" xyz="0 0 0"/>
<geometry>
<mesh filename="package://myrabot_fer_modelo/meshes/e_pilar.stl" scale="0.001 0.001 0.001"/>
</geometry>
</collision>
</link>
<joint name="botonera" type="fixed">
<parent link="e_base_2_link"/>
<child link="e_botonera_link"/>
<origin xyz="0 0 0.02" rpy="0 0 0" />
</joint>
<link name="e_botonera_link">
<inertial>
<mass value="0.06"/>
<origin rpy="0 0 0" xyz="0.135 ${0.165-(0.09/2)} ${0.1/2}"/>
<default_inertia_e />
</inertial>
<visual>
<origin rpy="0 0 0" xyz="0.135 ${0.165-(0.09/2)} ${0.1/2}"/>
<geometry>
<box size="0.2 0.09 0.1"/>
</geometry>
<material name="wood" />
</visual>
<collision>
<origin rpy="0 0 0" xyz="0.135 ${0.165-(0.09/2)} ${0.1/2}"/>
<geometry>
<box size="0.2 0.09 0.1"/>
</geometry>
</collision>
</link>
<joint name="start_button_1" type="fixed">
<parent link="e_botonera_link"/>
<child link="e_start_button_1_link"/>
<origin xyz="-0.06 0 0.1" rpy="0 0 0" />
</joint>
<link name="e_start_button_1_link">
<inertial>
<mass value="0.001"/>
<origin rpy="0 0 0" xyz="0.135 ${0.165-(0.09/2)} ${0.002/2}"/>
<default_inertia_e />
</inertial>
<visual>
<origin rpy="0 0 0" xyz="0.135 ${0.165-(0.09/2)} ${0.002/2}"/>
<geometry>
<cylinder radius="0.009" length="0.002"/>
</geometry>
<material name="black">
<color rgba="0 0 0 1"/>
</material>
</visual>
<collision>
<origin rpy="0 0 0" xyz="0.135 ${0.165-(0.09/2)} ${0.002/2}"/>
<geometry>
<cylinder radius="0.009" length="0.002"/>
</geometry>
</collision>
</link>
<joint name="start_button_2" type="fixed">
<parent link="e_start_button_1_link"/>
<child link="e_start_button_2_link"/>
<origin xyz="0.0 0 0.002" rpy="0 0 0" />
</joint>
<link name="e_start_button_2_link">
<inertial>
<mass value="0.001"/>
<origin rpy="0 0 0" xyz="0.135 ${0.165-(0.09/2)} ${0.004/2}"/>
<default_inertia_e />
</inertial>
<visual>
<origin rpy="0 0 0" xyz="0.135 ${0.165-(0.09/2)} ${0.004/2}"/>
<geometry>
<cylinder radius="0.0075" length="0.004"/>
</geometry>
<material name="green">
<color rgba="0 1 0 1"/>
</material>
</visual>
<collision>
<origin rpy="0 0 0" xyz="0.135 ${0.165-(0.09/2)} ${0.004/2}"/>
<geometry>
<cylinder radius="0.0075" length="0.004"/>
</geometry>
</collision>
</link>
<joint name="emergency_button_1" type="fixed">
<parent link="e_botonera_link"/>
<child link="e_emergency_button_1_link"/>
<origin xyz="0.06 0 0.1" rpy="0 0 0" />
</joint>
<link name="e_emergency_button_1_link">
<inertial>
<mass value="0.001"/>
<origin rpy="0 0 0" xyz="0.135 ${0.165-(0.09/2)} ${0.015/2}"/>
<default_inertia_e />
</inertial>
<visual>
<origin rpy="0 0 0" xyz="0.135 ${0.165-(0.09/2)} ${0.015/2}"/>
<geometry>
<cylinder radius="0.0125" length="0.015"/>
</geometry>
<material name="metal" />
</visual>
<collision>
<origin rpy="0 0 0" xyz="0.135 ${0.165-(0.09/2)} ${0.015/2}"/>
<geometry>
<cylinder radius="0.0125" length="0.015"/>
</geometry>
</collision>
</link>
<joint name="emergency_button_2" type="fixed">
<parent link="e_emergency_button_1_link"/>
<child link="e_emergency_button_2_link"/>
<origin xyz="0.0 0 0.015" rpy="0 0 0" />
</joint>
<link name="e_emergency_button_2_link">
<inertial>
<mass value="0.001"/>
<origin rpy="0 0 0" xyz="0.135 ${0.165-(0.09/2)} ${0.003/2}"/>
<default_inertia_e />
</inertial>
<visual>
<origin rpy="0 0 0" xyz="0.135 ${0.165-(0.09/2)} ${0.003/2}"/>
<geometry>
<cylinder radius="0.018" length="0.003"/>
</geometry>
<material name="red">
<color rgba="1 0 0 1"/>
</material>
</visual>
<collision>
<origin rpy="0 0 0" xyz="0.135 ${0.165-(0.09/2)} ${0.003/2}"/>
<geometry>
<cylinder radius="0.018" length="0.003"/>
</geometry>
</collision>
</link>
<joint name="base_kinect" type="fixed">
<parent link="e_pilar_link"/>
<child link="e_base_kinect_link"/>
<origin xyz="0 0 ${0.395-0.155}" rpy="0 0 0" />
</joint>
<link name="e_base_kinect_link">
<inertial>
<mass value="0.02"/>
<origin rpy="0 0 0" xyz="0 0 ${0.005/2}"/>
<default_inertia_e />
</inertial>
<visual>
<origin rpy="0 0 0" xyz="0 0 0"/>
<geometry>
<mesh filename="package://myrabot_fer_modelo/meshes/e_base_kinect.stl" scale="0.001 0.001 0.001"/>
</geometry>
<material name="wood" />
</visual>
<collision>
<origin rpy="0 0 0" xyz="0 0 0"/>
<geometry>
<mesh filename="package://myrabot_fer_modelo/meshes/e_base_kinect.stl" scale="0.001 0.001 0.001"/>
</geometry>
</collision>
</link>
<joint name="base_brazo_1" type="fixed">
<parent link="e_pilar_link"/>
<child link="e_base_brazo_1_link"/>
<origin xyz="0 0 ${0.708-(0.395-0.155)}" rpy="0 0 0" />
</joint>
<link name="e_base_brazo_1_link">
<inertial>
<mass value="0.03"/>
<origin rpy="0 0 0" xyz="0 0 ${0.005/2}"/>
<default_inertia_e />
</inertial>
<visual>
<origin rpy="0 0 0" xyz="0 0 0"/>
<geometry>
<mesh filename="package://myrabot_fer_modelo/meshes/e_base_brazo_1.stl" scale="0.001 0.001 0.001"/>
</geometry>
<material name="wood" />
</visual>
<collision>
<origin rpy="0 0 0" xyz="0 0 0"/>
<geometry>
<mesh filename="package://myrabot_fer_modelo/meshes/e_base_brazo_1.stl" scale="0.001 0.001 0.001"/>
</geometry>
</collision>
</link>
<separador_base_brazo id="1" />
<e_separador_base_brazo id="1" xsim="1" ysim="1" />
<separador_base_brazo id="2" />
<e_separador_base_brazo id="2" xsim="1" ysim="-1" />
<separador_base_brazo id="3" />
<e_separador_base_brazo id="3" xsim="-1" ysim="-1" />
<separador_base_brazo id="4" />
<e_separador_base_brazo id="4" xsim="-1" ysim="1" />
<joint name="base_brazo_2" type="fixed">
<parent link="e_base_brazo_1_link"/>
<child link="e_base_brazo_2_link"/>
<origin xyz="0 0 0.074" rpy="0 0 0" />
</joint>
<link name="e_base_brazo_2_link">
<inertial>
<mass value="0.005"/>
<origin rpy="0 0 0" xyz="0 0 ${0.005/2}"/>
<default_inertia_e />
</inertial>
<visual>
<origin rpy="0 0 0" xyz="0 0 0"/>
<geometry>
<mesh filename="package://myrabot_fer_modelo/meshes/e_base_brazo_2.stl" scale="0.001 0.001 0.001"/>
</geometry>
<material name="wood" />
</visual>
<collision>
<origin rpy="0 0 0" xyz="0 0 0"/>
<geometry>
<mesh filename="package://myrabot_fer_modelo/meshes/e_base_brazo_2.stl" scale="0.001 0.001 0.001"/>
</geometry>
</collision>
</link>
<joint name="soporte_1" type="fixed">
<parent link="e_pilar_link"/>
<child link="e_soporte_1_link"/>
<origin xyz="0 0 ${0.995-(0.708-0.155)-(0.395-0.155)}" rpy="0 0 0" />
</joint>
<link name="e_soporte_1_link">
<inertial>
<mass value="0.05"/>
<origin rpy="0 0 0" xyz="0 0 ${0.64/2}"/>
<default_inertia_e />
</inertial>
<visual>
<origin rpy="0 0 0" xyz="0 0 0"/>
<geometry>
<mesh filename="package://myrabot_fer_modelo/meshes/e_soporte_1.stl" scale="0.001 0.001 0.001"/>
</geometry>
<material name="wood" />
</visual>
<collision>
<origin rpy="0 0 0" xyz="0 0 0"/>
<geometry>
<mesh filename="package://myrabot_fer_modelo/meshes/e_soporte_1.stl" scale="0.001 0.001 0.001"/>
</geometry>
</collision>
</link>
<joint name="soporte_2" type="fixed">
<parent link="e_soporte_1_link"/>
<child link="e_soporte_2_link"/>
<origin xyz="0 0.2 0.61" rpy="-0.12 0 0" />
</joint>
<link name="e_soporte_2_link">
<inertial>
<mass value="0.01"/>
<origin rpy="0 0 0" xyz="0 0 ${0.06/2}"/>
<default_inertia_e />
</inertial>
<visual>
<origin rpy="0 0 0" xyz="0 -0.2 -0.03"/>
<geometry>
<mesh filename="package://myrabot_fer_modelo/meshes/e_soporte_2.stl" scale="0.001 0.001 0.001"/>
</geometry>
<material name="wood" />
</visual>
<collision>
<origin rpy="0 0 0" xyz="0 -0.2 -0.03"/>
<geometry>
<mesh filename="package://myrabot_fer_modelo/meshes/e_soporte_2.stl" scale="0.001 0.001 0.001"/>
</geometry>
</collision>
</link>
<joint name="monitor" type="fixed">
<parent link="e_soporte_2_link"/>
<child link="e_monitor_link"/>
<origin xyz="0 -0.2 -0.09" rpy="0 0 0" />
</joint>
<link name="e_monitor_link">
<inertial>
<mass value="0.1"/>
<origin rpy="0 0 0" xyz="0 0 ${0.180/2}"/>
<default_inertia_e />
</inertial>
<visual>
<origin rpy="0 0 0" xyz="0 0 0"/>
<geometry>
<mesh filename="package://myrabot_fer_modelo/meshes/e_monitor.stl" scale="0.001 0.001 0.001"/>
</geometry>
<material name="wood" />
</visual>
<collision>
<origin rpy="0 0 0" xyz="0 0 0"/>
<geometry>
<mesh filename="package://myrabot_fer_modelo/meshes/e_monitor.stl" scale="0.001 0.001 0.001"/>
</geometry>
</collision>
</link>
<joint name="pantalla" type="fixed">
<parent link="e_monitor_link"/>
<child link="e_pantalla_link"/>
<origin xyz="0.135 ${0.135-0.005-0.03-0.0001} 0.086" rpy="0 0 0" />
</joint>
<link name="e_pantalla_link">
<inertial>
<mass value="0.0001"/>
<origin rpy="0 0 0" xyz="0 0 0"/>
<default_inertia_e />
</inertial>
<visual>
<origin rpy="0 0 0" xyz="0 0 0"/>
<geometry>
<box size="0.22 0.0001 0.130" />
</geometry>
<material name="black" />
</visual>
<collision>
<origin rpy="0 0 0" xyz="0 0 0"/>
<geometry>
<box size="0.22 0.0001 0.127" />
</geometry>
</collision>
</link>
<gazebo_propiedades nombre="e_base_1_link" material="LightWood" />
<gazebo_propiedades nombre="e_base_2_link" material="LightWood" />
<gazebo_propiedades nombre="e_separador_base_1_link" material="Grey" />
<gazebo_propiedades nombre="e_separador_base_2_link" material="Grey" />
<gazebo_propiedades nombre="e_separador_base_3_link" material="Grey" />
<gazebo_propiedades nombre="e_separador_base_4_link" material="Grey" />
<gazebo_propiedades nombre="e_separador_base_brazo_1_link" material="Grey" />
<gazebo_propiedades nombre="e_separador_base_brazo_2_link" material="Grey" />
<gazebo_propiedades nombre="e_separador_base_brazo_3_link" material="Grey" />
<gazebo_propiedades nombre="e_separador_base_brazo_4_link" material="Grey" />
<gazebo_propiedades nombre="e_pilar_link" material="LightWood" />
<gazebo_propiedades nombre="e_base_kinect_link" material="LightWood" />
<gazebo_propiedades nombre="e_base_brazo_1_link" material="LightWood" />
<gazebo_propiedades nombre="e_base_brazo_2_link" material="LightWood" />
<gazebo_propiedades nombre="e_botonera_link" material="LightWood" />
<gazebo_propiedades nombre="e_start_button_1_link" material="Black" />
<gazebo_propiedades nombre="e_start_button_2_link" material="Green" />
<gazebo_propiedades nombre="e_emergency_button_1_link" material="Grey" />
<gazebo_propiedades nombre="e_emergency_button_2_link" material="Red" />
<gazebo_propiedades nombre="e_soporte_1_link" material="LightWood" />
<gazebo_propiedades nombre="e_soporte_2_link" material="LightWood" />
<gazebo_propiedades nombre="e_monitor_link" material="LightWood" />
<gazebo_propiedades nombre="e_pantalla_link" material="Black" />
</macro>
</robot>
Los archivos empleados, con los modelos de malla 3D ".stl", en la descrición de la estructura del robot se pueden descargar a continuación, deben guardarse en el directorio "meshes" de nuestro package:
- e_ e_pilar.stl
- e_base_kinect.stl
- e_ e_base_brazo_1.stl
- e_ e_base_brazo_2.stl
- e_ e_soporte_1.stl
- e_ e_soporte_2.stl
- e_ e_monitor.stl
Los macros que estamos usando en el archivo principal del URDF son los que se muestran continuación, que guardaremos en un archivo llamado "estructura-myrabot-macros.xacro" en el directorio "urdf" de nuestro package:
<?xml version="1.0"?>
<robot>
<macro name="default_inertia_e">
<inertia ixx="0.01" ixy="0.0" ixz="0.0" iyy="0.01" iyz="0.0" izz="0.01"/>
</macro>
<macro name="separador_base" params="id">
<joint name="separador_base_${id}" type="fixed">
<parent link="e_base_1_link"/>
<child link="e_separador_base_${id}_link"/>
<origin xyz="0.135 0.135 0.015" rpy="0 0 0" />
</joint>
</macro>
<macro name="e_separador_base" params="id xsim ysim">
<link name="e_separador_base_${id}_link">
<inertial>
<mass value="0.02"/>
<origin rpy="0 0 0" xyz="${xsim*0.040} ${ysim*0.105} ${0.120/2}"/>
<default_inertia_e />
</inertial>
<visual>
<origin rpy="0 0 0" xyz="${xsim*0.040} ${ysim*0.105} ${0.120/2}"/>
<geometry>
<cylinder radius="0.0075" length="0.120" />
</geometry>
<material name="metal">
<color rgba="${211/255} ${211/255} ${211/255} 1" />
</material>
</visual>
<collision>
<origin rpy="0 0 0" xyz="${xsim*0.040} ${ysim*0.105} ${0.120/2}"/>
<geometry>
<cylinder radius="0.0075" length="0.120" />
</geometry>
</collision>
</link>
</macro>
<macro name="separador_base_brazo" params="id">
<joint name="separador_base_brazo_${id}" type="fixed">
<parent link="e_base_brazo_1_link"/>
<child link="e_separador_base_brazo_${id}_link"/>
<origin xyz="0.135 ${0.135-0.082} 0.075" rpy="0 0 0" />
</joint>
</macro>
<macro name="e_separador_base_brazo" params="id xsim ysim">
<link name="e_separador_base_brazo_${id}_link">
<inertial>
<mass value="0.002"/>
<origin rpy="0 0 0" xyz="${xsim*0.029} ${ysim*0.019} ${0.034/2}"/>
<default_inertia_e />
</inertial>
<visual>
<origin rpy="0 0 0" xyz="${xsim*0.029} ${ysim*0.019} ${0.034/2}"/>
<geometry>
<cylinder radius="0.002" length="0.034" />
</geometry>
<material name="metal" />
</visual>
<collision>
<origin rpy="0 0 0" xyz="${xsim*0.029} ${ysim*0.019} ${0.034/2}"/>
<geometry>
<cylinder radius="0.002" length="0.034" />
</geometry>
</collision>
</link>
</macro>
<macro name="gazebo_propiedades" params="nombre material">
<gazebo reference="${nombre}">
<material>Gazebo/${material}</material>
<mu1>0.5</mu1>
<mu2>0.5</mu2>
<selfCollide>true</selfCollide>
<turnGravityOff>false</turnGravityOff>
</gazebo>
</macro>
</robot>
URDF Roomba
Para la base móvil Roomba se ha empleado el modelo del turtlebot, aunque equipado con una base móvil create, esta tiene unas físicas y sensores similares a la nuestra. Para esto necesitamos instalar los stacks turtlebot y turtlebot_simulator, que contienen el modelo y los plugins para gazebo, respectivamente. Eliminando lo que no necesitamos del modelo del turtlebot y modificacndo el elemento de la base, el contenido del archivo que guardaremos con el nombre "roomba.xacro" en el directorio "urdf" de nuestro package es el siguiente:
<syntaxhighlight lang="xml">
<?xml version="1.0"?>
<robot xmlns:xacro="http://ros.org/wiki/xacro">
<property name="M_PI" value="3.14159"/>
<include filename="$(find myrabot_fer_modelo)/urdf/gazebo.xacro"/>
<property name="base_x" value="0.33" /> <property name="base_y" value="0.33" />
<xacro:macro name="create"> <material name="Green"> <color rgba="0.0 0.8 0.0 1.0"/> </material>
<link name="base_footprint"> <inertial> <mass value="0.0001" /> <origin xyz="0 0 0" /> <inertia ixx="0.0001" ixy="0.0" ixz="0.0" iyy="0.0001" iyz="0.0" izz="0.0001" /> </inertial>
<visual> <origin xyz="0 0 0" rpy="0 0 0" /> <geometry> <box size="0.001 0.001 0.001" /> </geometry> <material name="Green" /> </visual>
<collision> <origin xyz="0 0 0.017" rpy="0 0 0" /> <geometry> <box size="0.001 0.001 0.001" /> </geometry> </collision> </link>
<link name="base_link"> <inertial> <mass value="3.6" /> <origin xyz="0 0 ${0.092/2}" /> <inertia ixx="0.01" ixy="0.0" ixz="0.0" iyy="0.01" iyz="0.0" izz="0.5" /> </inertial>
<visual> <origin xyz=" 0 0 ${0.092/2}" rpy="0 0 0" /> <geometry> <cylinder length="0.092" radius="0.17"/> </geometry> <material name="white">
<color rgba="1 1 1 1" />
</material> </visual>
<collision> <origin xyz="0.0 0.0 ${0.092/2}" rpy="0 0 0" /> <geometry> <cylinder length="0.092" radius="0.17"/> </geometry> </collision> </link>
<link name="wall_sensor_link"> <inertial> <mass value="0.01" /> <origin xyz="0 0 0"/> <inertia ixx="0.001" ixy="0.0" ixz="0.0" iyy="0.001" iyz="0.0" izz="0.001" /> </inertial> </link>
<link name="left_cliff_sensor_link"> <inertial> <mass value="0.01" /> <origin xyz="0 0 0"/> <inertia ixx="0.001" ixy="0.0" ixz="0.0" iyy="0.001" iyz="0.0" izz="0.001" /> </inertial> </link>
<link name="right_cliff_sensor_link"> <inertial> <mass value="0.01" /> <origin xyz="0 0 0"/> <inertia ixx="0.001" ixy="0.0" ixz="0.0" iyy="0.001" iyz="0.0" izz="0.001" /> </inertial> </link>
<link name="leftfront_cliff_sensor_link"> <inertial> <mass value="0.01" /> <origin xyz="0 0 0"/> <inertia ixx="1.0" ixy="0.0" ixz="0.0" iyy="0.01" iyz="0.0" izz="0.01" /> </inertial> </link>
<link name="rightfront_cliff_sensor_link"> <inertial> <mass value="0.01" /> <origin xyz="0 0 0"/> <inertia ixx="0.001" ixy="0.0" ixz="0.0" iyy="0.001" iyz="0.0" izz="0.001" /> </inertial> </link>
<joint name="base_footprint_joint" type="fixed"> <origin xyz="0 0 0.017" rpy="0 0 0" /> <parent link="base_footprint"/> <child link="base_link" /> </joint>
<joint name="base_wall_sensor_joint" type="fixed"> <origin xyz="0.09 -0.120 0.042" rpy="0 0 -1.0" /> <parent link="base_link"/> <child link="wall_sensor_link" /> </joint>
<joint name="base_left_cliff_sensor_joint" type="fixed"> <origin xyz="0.07 0.14 0.01" rpy="0 1.57079 0" /> <parent link="base_link"/> <child link="left_cliff_sensor_link" /> </joint>
<joint name="base_right_cliff_sensor_joint" type="fixed"> <origin xyz="0.07 -0.14 0.01" rpy="0 1.57079 0" /> <parent link="base_link"/> <child link="right_cliff_sensor_link" /> </joint>
<joint name="base_leftfront_cliff_sensor_joint" type="fixed"> <origin xyz="0.15 0.04 0.01" rpy="0 1.57079 0" /> <parent link="base_link"/> <child link="leftfront_cliff_sensor_link" /> </joint>
<joint name="base_rightfront_cliff_sensor_joint" type="fixed"> <origin xyz="0.15 -0.04 0.01" rpy="0 1.57079 0" /> <parent link="base_link"/> <child link="rightfront_cliff_sensor_link" /> </joint>
<link name="left_wheel_link"> <inertial> <origin xyz="0 0 0"/> <mass value="0.01" /> <inertia ixx="0.001" ixy="0.0" ixz="0.0" iyy="0.001" iyz="0.0" izz="0.001" /> </inertial>
<visual> <origin xyz="0 0 0" rpy="0 1.5707 1.5707" /> <geometry> <cylinder radius="0.033" length = "0.023"/> </geometry> </visual>
<collision> <origin xyz="0 0 0" rpy="0 1.5707 1.5707" /> <geometry> <cylinder radius="0.033" length = "0.023"/> </geometry> </collision> </link>
<joint name="left_wheel_joint" type="continuous"> <origin xyz="0 0.13 0.015" rpy="0 0 0"/> <parent link="base_link"/> <child link="left_wheel_link"/> <axis xyz="0 1 0"/> </joint>
<link name="right_wheel_link"> <inertial> <origin xyz="0 0 0"/> <mass value="0.01" /> <inertia ixx="0.001" ixy="0.0" ixz="0.0" iyy="0.001" iyz="0.0" izz="0.001" /> </inertial>
<visual> <origin xyz="0 0 0" rpy="0 1.5707 1.5707" /> <geometry> <cylinder radius="0.033" length = "0.023"/> </geometry> </visual>
<collision> <origin xyz="0 0 0" rpy="0 1.5707 1.5707" /> <geometry> <cylinder radius="0.033" length = "0.023"/> </geometry> </collision> </link>
<joint name="right_wheel_joint" type="continuous"> <origin xyz="0 -0.13 0.015" rpy="0 0 0"/> <parent link="base_link"/> <child link="right_wheel_link"/> <axis xyz="0 1 0"/> </joint>
<link name="rear_wheel_link"> <inertial> <origin xyz="0 0 0"/> <mass value="0.001" /> <inertia ixx="0.0001" ixy="0.0" ixz="0.0" iyy="0.0001" iyz="0.0" izz="0.0001" /> </inertial>
<visual> <origin xyz="0 0 0" rpy="0 1.5707 1.5707"/> <geometry> <sphere radius="0.015" /> </geometry> </visual>
<collision> <origin xyz="0 0 0" rpy="0 1.5707 1.5707" /> <geometry> <sphere radius="0.015" /> </geometry> </collision> </link> <joint name="rear_castor_joint" type="fixed"> <origin xyz="-0.13 0 0.0" rpy="0 0 0"/> <parent link="base_link"/> <child link="rear_wheel_link"/> <axis xyz="0 1 0"/> </joint>
<link name="front_wheel_link"> <inertial> <origin xyz="0 0 0" /> <mass value="0.01" /> <inertia ixx="0.001" ixy="0.0" ixz="0.0" iyy="0.001" iyz="0.0" izz="0.001" /> </inertial>
<visual> <origin xyz="0 0 0" rpy="0 1.5707 1.5707"/> <geometry> <sphere radius="0.018" /> </geometry> </visual>
<collision> <origin xyz="0 0 0" rpy="0 1.5707 1.5707" /> <geometry> <sphere radius="0.018" /> </geometry> </collision> </link>
<joint name="front_castor_joint" type="fixed"> <origin xyz="0.13 0 0.0" rpy="0 0 0"/> <parent link="base_link"/> <child link="front_wheel_link"/> <axis xyz="0 1 0"/> </joint>
<joint name="gyro_joint" type="fixed"> <axis xyz="0 1 0" /> <origin xyz="0 0 0.04" rpy="0 0 0" /> <parent link="base_link"/> <child link="gyro_link"/> </joint> <link name="gyro_link"> <inertial> <mass value="0.001" /> <origin xyz="0 0 0" rpy="0 0 0" /> <inertia ixx="0.0001" ixy="0" ixz="0" iyy="0.000001" iyz="0" izz="0.0001" /> </inertial> </link>
<joint name="laser_joint" type="fixed"> <origin xyz="-0.065 0 0.075" rpy="0 0 0" /> <parent link="base_link" /> <child link="laser" /> </joint>
<link name="laser"> <visual> <geometry> <box size="0.02 0.035 0.002" /> </geometry> <material name="Green" /> </visual> <inertial> <mass value="0.001" /> <origin xyz="0 0 0" /> <inertia ixx="0.0001" ixy="0.0" ixz="0.0" iyy="0.0001" iyz="0.0" izz="0.0001" /> </inertial> </link>
<gaezebo>
<material>Gazebo/White</material>
</gaezebo>
<turtlebot_sim_imu/> <turtlebot_sim_laser/> <turtlebot_sim_create/> <turtlebot_sim_wall_sensors/>
</xacro:macro>
</robot>
<syntaxhighlight>