Ask Your Question

Revision history [back]

Gazebo doesn't open xacro elements

I've got a model: body and 4 legs, consist of 4 parts. Legs are made through xacro. When I launch file via gazebo, body is shown, but legs - don't. What'wrong?

<?xml version='1.0'?>

<robot name ="thespot_robot" xmlns:xacro="http://www.ros.org/wiki/xacro">
    <static>true</static>

    <link name ="body">
        <visual>
    <origin xyz="0 0 0.2" rpy="0 0 0" />
        <geometry>
        <box size="0.4 0.2 0.1" />
        </geometry>
        <material name="Cyan">
        <color rgba="0 1.0 1.0 1.0"/>
        </material>
  </visual>
        <inertial>
            <mass value="10"/>
            <inertia ixx="0.4" ixy="0.0" ixz="0.0" iyy="0.4" iyz="0.0" izz="0.2"/>
        </inertial>
        <collision>
            <geometry>
        <box size="0.4 0.2 0.1" />
        </geometry>
        </collision>
    </link> 

        <xacro:macro name="leg" params="prefix reflect_big_link reflect_big_joint reflect_small_link  reflect_small_joint">

    <link name="${prefix}_big_leg">
        <visual>
            <origin xyz="${reflect_big_link}" rpy="0 -0.7 0" />
        <geometry>
        <box size="0.2 0.03 0.03" />
        </geometry>
            <material name="red" >
        <color rgba="1.00 0 0 1.0"/>
            </material>
  </visual>
        <inertial>
            <mass value="10"/>
            <inertia ixx="0.4" ixy="0.0" ixz="0.0" iyy="0.4" iyz="0.0" izz="0.2"/>
        </inertial>
        <collision>
            <geometry>
        <box size="0.2 0.03 0.03" />
        </geometry>
        </collision>
    </link>

    <joint name="body_to_${prefix}_big_leg" type="revolute">
   <origin xyz="${reflect_big_joint}" rpy="0 0 0"/>
    <parent link="body"/>
    <child link="${prefix}_big_leg"/>
            <axis xyz = "0 1 0"/>
    <limit effort="30" velocity="1.0" lower="-2.2" upper="0.7" />
</joint>

    <link name="${prefix}_small_leg">
        <visual>
            <origin xyz="${reflect_small_link}" rpy="0 0.7 0" />
        <geometry>
        <box size="0.2 0.03 0.03" />
        </geometry>
            <material name="red" >
        <color rgba="1.00 0 0 1.0"/>
            </material>
  </visual>
            <inertial>
                <mass value="10"/>
                <inertia ixx="0.4" ixy="0.0" ixz="0.0" iyy="0.4" iyz="0.0" izz="0.2"/>
            </inertial>
        <collision>
            <geometry>
        <box size="0.2 0.03 0.03" />
        </geometry>
        </collision>
    </link>

    <joint name="${prefix}_big_leg_to_${prefix}_small_leg" type="revolute">
   <origin xyz="${reflect_small_joint}" rpy="0 0 0"/>
    <parent link="${prefix}_big_leg"/>
    <child link="${prefix}_small_leg"/>
            <axis xyz = "0 1 0"/>
    <limit effort="30" velocity="1.0" lower="-0.7" upper="0.7" />
</joint> 

        <!-- A bunch of stuff cut -->

</xacro:macro> <xacro:leg prefix="left_back" reflect_big_link="-0.05 -0.05 -0.05" reflect_big_joint="-0.15 0.2 0.2" reflect_small_link="0.05 -0.05 -0.05" reflect_small_joint="-0.13 0.055 -0.1"/> <xacro:leg prefix="right_back" reflect_big_link="-0.05 -0.05 -0.05" reflect_big_joint="0.15 0.2 0.2" reflect_small_link="0.05 -0.05 -0.05" reflect_small_joint="-0.15 0.055 -0.1"/> <xacro:leg prefix="right_forward" reflect_big_link="-0.05 -0.05 -0.05" reflect_big_joint="-0.15 -0.1 0.2" reflect_small_link="0.05 -0.05 -0.05" reflect_small_joint="-0.15 -0.055 -0.1"/> <xacro:leg prefix="left_forward" reflect_big_link="-0.05 -0.05 -0.05" reflect_big_joint="0.15 -0.1 0.2" reflect_small_link="0.05 -0.05 -0.05" reflect_small_joint="-0.15 -0.055 -0.1"/> </robot> this is main code and this is launch:

<launch>

<arg name="paused" default="false"/> <arg name="use_sim_time" default="true"/> <arg name="gui" default="true"/> <arg name="headless" default="false"/> <arg name="debug" default="false"/> <arg name="model" default="$(find myrobot)/urdf/thespot.urdf.xacro"/>

<include file="$(find gazebo_ros)/launch/empty_world.launch"> </include>

<node name="urdf_spawner" pkg="gazebo_ros" type="spawn_model" respawn="false" output="screen" args="-urdf -model hammer -param robot_description"/>

</launch>

Gazebo doesn't open xacro elements

I've got a model: body and 4 legs, consist of 4 parts. Legs are made through xacro. When I launch file via gazebo, body is shown, but legs - don't. What'wrong?

<?xml version='1.0'?>

<robot name ="thespot_robot" xmlns:xacro="http://www.ros.org/wiki/xacro">
    <static>true</static>

    <link name ="body">
        <visual>
    <origin xyz="0 0 0.2" rpy="0 0 0" />
        <geometry>
        <box size="0.4 0.2 0.1" />
        </geometry>
        <material name="Cyan">
        <color rgba="0 1.0 1.0 1.0"/>
        </material>
  </visual>
        <inertial>
            <mass value="10"/>
            <inertia ixx="0.4" ixy="0.0" ixz="0.0" iyy="0.4" iyz="0.0" izz="0.2"/>
        </inertial>
        <collision>
            <geometry>
        <box size="0.4 0.2 0.1" />
        </geometry>
        </collision>
    </link> 

        <xacro:macro name="leg" params="prefix reflect_big_link reflect_big_joint reflect_small_link  reflect_small_joint">

    <link name="${prefix}_big_leg">
        <visual>
            <origin xyz="${reflect_big_link}" rpy="0 -0.7 0" />
        <geometry>
        <box size="0.2 0.03 0.03" />
        </geometry>
            <material name="red" >
        <color rgba="1.00 0 0 1.0"/>
            </material>
  </visual>
        <inertial>
            <mass value="10"/>
            <inertia ixx="0.4" ixy="0.0" ixz="0.0" iyy="0.4" iyz="0.0" izz="0.2"/>
        </inertial>
        <collision>
            <geometry>
        <box size="0.2 0.03 0.03" />
        </geometry>
        </collision>
    </link>

    <joint name="body_to_${prefix}_big_leg" type="revolute">
   <origin xyz="${reflect_big_joint}" rpy="0 0 0"/>
    <parent link="body"/>
    <child link="${prefix}_big_leg"/>
            <axis xyz = "0 1 0"/>
    <limit effort="30" velocity="1.0" lower="-2.2" upper="0.7" />
</joint>

    <link name="${prefix}_small_leg">
        <visual>
            <origin xyz="${reflect_small_link}" rpy="0 0.7 0" />
        <geometry>
        <box size="0.2 0.03 0.03" />
        </geometry>
            <material name="red" >
        <color rgba="1.00 0 0 1.0"/>
            </material>
  </visual>
            <inertial>
                <mass value="10"/>
                <inertia ixx="0.4" ixy="0.0" ixz="0.0" iyy="0.4" iyz="0.0" izz="0.2"/>
            </inertial>
        <collision>
            <geometry>
        <box size="0.2 0.03 0.03" />
        </geometry>
        </collision>
    </link>

    <joint name="${prefix}_big_leg_to_${prefix}_small_leg" type="revolute">
   <origin xyz="${reflect_small_joint}" rpy="0 0 0"/>
    <parent link="${prefix}_big_leg"/>
    <child link="${prefix}_small_leg"/>
            <axis xyz = "0 1 0"/>
    <limit effort="30" velocity="1.0" lower="-0.7" upper="0.7" />
</joint> 

        <!-- A bunch of stuff cut -->

</xacro:macro> <xacro:leg prefix="left_back" reflect_big_link="-0.05 -0.05 -0.05" reflect_big_joint="-0.15 0.2 0.2" reflect_small_link="0.05 -0.05 -0.05" reflect_small_joint="-0.13 0.055 -0.1"/> -0.1" /> <xacro:leg prefix="right_back" reflect_big_link="-0.05 -0.05 -0.05" reflect_big_joint="0.15 0.2 0.2" reflect_small_link="0.05 -0.05 -0.05" reflect_small_joint="-0.15 0.055 -0.1"/> -0.1" /> <xacro:leg prefix="right_forward" reflect_big_link="-0.05 -0.05 -0.05" reflect_big_joint="-0.15 -0.1 0.2" reflect_small_link="0.05 -0.05 -0.05" reflect_small_joint="-0.15 -0.055 -0.1"/> -0.1" /> <xacro:leg prefix="left_forward" reflect_big_link="-0.05 -0.05 -0.05" reflect_big_joint="0.15 -0.1 0.2" reflect_small_link="0.05 -0.05 -0.05" reflect_small_joint="-0.15 -0.055 -0.1"/> -0.1" /> </robot>

this is main code and this is launch:

<launch>

<!-- these are the arguments you can pass this launch file --> <arg name="paused" default="false"/> <arg name="use_sim_time" default="true"/> <arg name="gui" default="true"/> <arg name="headless" default="false"/> <arg name="debug" default="false"/> <!--<arg name="model" default="$(find my_pkg)/urdf/robot.xacro"/>--> <arg name="model" default="$(find myrobot)/urdf/thespot.urdf.xacro"/>

myrobot)/urdf/thespot.urdf.xacro"/> <!-- We resume the logic in empty_world.launch, changing only the name of the world to be launched --> <include file="$(find gazebo_ros)/launch/empty_world.launch"> </include>

</include> <!-- Load the XACRO into the ROS Parameter Server --> <param name="robot_description" command="$(find xacro)/xacro.py $(arg model)" /> <!-- Run a python script to the send a service call to gazebo_ros to spawn a URDF robot --> <node name="urdf_spawner" pkg="gazebo_ros" type="spawn_model" respawn="false" output="screen" output="screen" args="-urdf -model hammer -param robot_description"/>

</launch>

robot_description"/> </launch>