Optimización del modelo URDF-modelo xacro

Visión de conjunto

Este artículo habla principalmente de la versión avanzada del modelo URDF, el modelo xacro.
Para el establecimiento del modelo URDF, consulte este artículo:
Simulación de robot-Modelado URDF .

1. Comparación de modelos

1. Modelo URDF

  • El modelo es detallado con demasiada repetición;
  • La modificación de parámetros es problemática y no conveniente para el desarrollo secundario;
  • Sin función de cálculo de parámetros

2. Modelo URDF versión avanzada-xacro

  • Simplificar el código del modelo

Crear
archivo de definición de macro contiene

  • Proporcionar interfaz programable

Enunciado condicional de cálculo matemático de
variable constante

En segundo lugar, la definición del modelo xacro

1. Constante

Definición constante

<xacro:property name="M_PI" value="3.14159"/>

Uso constante

<origin xyz="0 0 0" rpy="${M_PI/2} 0 0"/>

2. Cálculo matemático

Cálculo matemático

<origin xyz="0 ${(motor_length+wheel_length)/2} 0" rpy="0 0 0"/>

注意:所有数学运算都会转换成浮点数进行,以保证运算精度

3. Definición macro

Definición de macro

<xacro:macro name="name" params="A B C">
   ......
</xacro:macro>

Llamada macro

<name A="A_value" B="B_value" C="C_value" />

4. El archivo contiene

El archivo contiene

<xacro:include filename="$(find mbot_descripiton)/urdf/xacro/mbot_base.xacro" />

Tres, xacro crea un modelo de coche

instrucción

cd ~/catkin_ws/src/mbot_description/urdf
mkdir xacro
cd xacro
sudo gedit mbot_base.xacro 

Inserte la descripción de la imagen aquí
Pegue el siguiente contenido en el texto

<?xml version="1.0"?>
<robot name="mbot" xmlns:xacro="http://www.ros.org/wiki/xacro">
    <xacro:property name="M_PI" value="3.1415926"/>
    <xacro:property name="base_radius" value="0.20"/>
    <xacro:property name="base_length" value="0.16"/>

    <xacro:property name="wheel_radius" value="0.06"/>
    <xacro:property name="wheel_length" value="0.025"/>
    <xacro:property name="wheel_joint_y" value="0.19"/>
    <xacro:property name="wheel_joint_z" value="0.05"/>

    <xacro:property name="caster_radius" value="0.015"/> 
    <xacro:property name="caster_joint_x" value="0.18"/>
  
    <material name="yellow">
        <color rgba="1 0.4 0 1"/>
    </material>
    <material name="black">
        <color rgba="0 0 0 0.95"/>
    </material>
    <material name="gray">
        <color rgba="0.75 0.75 0.75 1"/>
    </material>
   
   
    <xacro:macro name="wheel" params="prefix reflect">
        <joint name="${prefix}_wheel_joint" type="fixed">
            <origin xyz="0 ${reflect*wheel_joint_y} ${-wheel_joint_z}" rpy="0 0 0"/>
            <parent link="base_link"/>
            <child link="${prefix}_wheel_link"/>
            <axis xyz="0 1 0"/>
        </joint>

        <link name="${prefix}_wheel_link">
            <visual>
                <origin xyz="0 0 0" rpy="${M_PI/2} 0 0" />
                <geometry>
                    <cylinder radius="${wheel_radius}"  length = "${wheel_length}"/>
                </geometry>
                <material name="gray" />
            </visual>
        </link>
    </xacro:macro>
  
    <xacro:macro name="caster" params="prefix reflect">
        <joint name="${prefix}_caster_joint" type="fixed">
            <origin xyz="${reflect*caster_joint_x} 0 ${-(base_length/2 + caster_radius)}" rpy="0 0 0"/>
            <parent link="base_link"/>
            <child link="${prefix}_caster_link"/>
            <axis xyz="0 1 0"/>
        </joint>

        <link name="${prefix}_caster_link">
            <visual>
                <origin xyz="0 0 0" rpy="0 0 0"/>
                <geometry>
                    <sphere radius="${caster_radius}" />
                </geometry>
                <material name="black" />
            </visual>
        </link>
    </xacro:macro>
   
        <xacro:macro name="mbot_base">  
        <link name="base_footprint">   
            <visual>
                <origin xyz="0 0 0" rpy="0 0 0" />
                <geometry>
                    <box size="0.001 0.001 0.001" />
                </geometry>
            </visual>
        </link>

        <joint name="base_footprint_joint" type="fixed">
            <origin xyz="0 0 ${base_length/2 + caster_radius*2}" rpy="0 0 0" />        
            <parent link="base_footprint"/>
            <child link="base_link" />
        </joint>

        <link name="base_link">
            <visual>
                <origin xyz=" 0 0 0" rpy="0 0 0" />
                <geometry>
                    <cylinder length="${base_length}" radius="${base_radius}"/>
                </geometry>
                <material name="yellow" />
            </visual>
        </link>

        <wheel prefix="left" reflect="-1"/> 
        <wheel prefix="right" reflect="1"/> 

        <caster prefix="front" reflect="-1"/> 
        <caster prefix="back" reflect="1"/> 
    </xacro:macro>
</robot>

instrucción

sudo gedit mbot.xacro

Pegar al texto

<?xml version="1.0"?>
<robot name="arm" xmlns:xacro="http://www.ros.org/wiki/xacro">
    <xacro:include filename="$(find mbot_description)/urdf/xacro/mbot_base.xacro" /> 
    <mbot_base/>    
</robot>

instrucción

cd ~/catkin_ws/src/mbot_description/launch
mkdir xacro
cd xacro
sudo gedit display_mbot_base_xacro.launch

Inserte la descripción de la imagen aquí
Pegar al texto

<launch>
	<arg name="model" default="$(find xacro)/xacro --inorder '$(find mbot_description)/urdf/xacro/mbot.xacro'" />
	<arg name="gui" default="true" />
	<param name="robot_description" command="$(arg model)" />
    
	<param name="use_gui" value="$(arg gui)"/>
   
	<node name="joint_state_publisher" pkg="joint_state_publisher" type="joint_state_publisher" />
	
	<node name="robot_state_publisher" pkg="robot_state_publisher" type="robot_state_publisher" />
   
	<node name="rviz" pkg="rviz" type="rviz" args="-d $(find mbot_description)/config/mbot.rviz" required="true" />
</launch>

Ver el efecto de demostración

roslaunch mbot_description display_mbot_base_xacro.launch

Inserte la descripción de la imagen aquí

Preste atención a modificar Fixed Frameel mapen su lugar base_link; luego haga clic en addAgregar robotmodel.

Cuatro, resumen y materiales de referencia

1. Resumen

La versión avanzada del modelo URDF xacro model, obviamente debido al modelo URDF, el proceso de modelado también es mucho más simple.

2. Materiales de referencia

Utilice Xacro para escribir un modelo de automóvil ROS .

Supongo que te gusta

Origin blog.csdn.net/QWERTYzxw/article/details/115030321
Recomendado
Clasificación