Gazebo | Ignition | Community
Ask Your Question

Revision history [back]

click to hide/show revision 1
initial version

How to implement the Skid Steering Drive plugin in Gazebo?

Hello, I'm new to Gazebo and ROS and wanted to implement the skid steering plugin from Gazebo for the a very basic 4 wheeled 'robot' , but I'm not sure what how the axis are supposed to be set and what some of the requiried variables truly mean e.g torque (not sure which number I should give as input) or broadcastTF (not sure why I should not want to broadcast) . At the moment I can drive backwards and forwards but it the robot does not turn. Here is the xacro that I'm using at the moment:

<?xml version="1.0"?>
<robot xmlns:xacro="http://www.ros.org/wiki/xacro"   name="base1">
<!-- variables-->
<xacro:property name="length_wheel" value="0.1"/>
<xacro:property name="radius_wheel" value="0.2"/>
<xacro:property name="base_heigth" value="0.3"/>
<xacro:property name="base_width" value="0.6"/>
<xacro:property name="base_length" value="1.0"/>
<xacro:property name="hokuyo_box_size" value="0.05"/>
<xacro:property name="camera_box_size" value="0.05"/>
<!--<xacro::property name="offset" value=""/>-->
<xacro:property name="PI" value="3.14159265359"/>
<!-- Gazebo colors -->
<xacro:include filename="$(find own_base)/urdf/base1.gazebo"/>

<!-- macros-->
<xacro:macro name="default_inertial" params="mass">
<inertial>
    <mass value="${mass}"/>
    <inertia ixx="1.0" ixy="0.0" ixz="0.0" iyy="1.0" iyz="0.0" izz="1.0"/>
</inertial>
</xacro:macro>
<link name="base">
    <visual>
        <geometry>
            <box size="${base_length} ${base_width} ${base_heigth}"/>
        </geometry>
        <origin xyz="0 0 0" rpy="0 0 0"/>
        <material name="red">
            <color rgba="1 0 0 1"/>
        </material>       
    </visual>
    <collision>
        <geometry>
             <box size="${base_length} ${base_width} ${base_heigth}"/>
        </geometry>
        <origin xyz="0 0 0" rpy="0 0 0"/>
    </collision>
    <xacro:default_inertial mass="100"/>
</link>

   <link name="wheele_1">
        <visual>
         <geometry>
            <cylinder length="${length_wheel}" radius="${radius_wheel}"/>
        </geometry>
        <material name="black"> 
            <color rgba="0 0 0 1"/>
        </material>
        <origin xyz="0 0 0" rpy="0 0 0"/>

    </visual>
    <collision>
        <geometry>
            <cylinder length="${length_wheel}" radius="${radius_wheel}"/>
        </geometry>
        <origin xyz="0 0 0" rpy="0 0 0"/>
    </collision>
<xacro:default_inertial mass="5"/>
</link>

<link name="wheele_2">
        <visual>
         <geometry>
             <cylinder length="${length_wheel}" radius="${radius_wheel}"/>
        </geometry>
        <origin xyz="0 0 0" rpy="0 0 0"/>
        <material name="black"> 
            <color rgba="0 0 0 1"/>
        </material>
    </visual>
    <collision>
        <geometry>
            <cylinder length="${length_wheel}" radius="${radius_wheel}"/>
        </geometry>
        <origin xyz="0 0 0" rpy="0 0 0"/>
    </collision>
     <xacro:default_inertial mass="5"/>

</link>

<link name="wheele_3">
        <visual>
         <geometry>
             <cylinder length="${length_wheel}" radius="${radius_wheel}"/>
        </geometry>
        <origin xyz="0 0 0" rpy="0 0 0"/>
        <material name="black"> 
            <color rgba="0 0 0 1"/>
        </material>
    </visual>
    <collision>
        <geometry>
            <cylinder length="${length_wheel}" radius="${radius_wheel}"/>
        </geometry>
        <origin xyz="0 0 0" rpy="0 0 0"/>
    </collision>
     <xacro:default_inertial mass="5"/>
</link>


<link name="wheele_4">
        <visual>
         <geometry>
             <cylinder length="${length_wheel}" radius="${radius_wheel}"/>
        </geometry>
        <origin xyz="0 0 0" rpy="0 0 0"/>
        <material name="black"> 
            <color rgba="0 0 0 1"/>
        </material>
    </visual>
    <collision>
        <geometry>
            <cylinder length="${length_wheel}" radius="${radius_wheel}"/>
        </geometry>
        <origin xyz="0 0 0" rpy="0 0 0"/>
    </collision>
     <xacro:default_inertial mass="5"/>
</link>
<link name="hokuyo_link">
    <visual>
        <geometry>
            <box size="${hokuyo_box_size} ${hokuyo_box_size} ${hokuyo_box_size}"/>
        </geometry>
        <origin xyz="0 0 0" rpy="0 0 0"/>
        <material name="yellow">
            <color rgba="1 1 0 1"/>
        </material>     
    </visual>
    <collision>
        <geometry>
            <box size="${hokuyo_box_size} ${hokuyo_box_size} ${hokuyo_box_size}"/>
        </geometry>
        <origin xyz="0 0 0" rpy="0 0 0"/>
    </collision>
    <xacro:default_inertial mass="1"/>
</link>

<link name="camera_link">
    <visual>
        <geometry>
            <box size="${camera_box_size} ${camera_box_size} ${camera_box_size}"/>
        </geometry>
        <origin xyz="0 0 0" rpy="0 0 0"/>
        <material name="blue">
            <color rgba="0 0 1 1"/>
        </material>     
    </visual>
    <collision>
        <geometry>
            <box size="${camera_box_size} ${camera_box_size} ${camera_box_size}"/>
        </geometry>
        <origin xyz="0 0 0" rpy="0 0 0"/>
    </collision>
    <xacro:default_inertial mass="1"/>
</link>

<joint name="wheel_1_base_joint" type="continuous">
    <parent link="base"/>
    <child link="wheele_1"/>
    <origin xyz="${base_length/2} ${base_width/2+length_wheel/2} 0" rpy="-${PI/2} 0 0"/>
    <axis xyz="0 0 1"/>
</joint>
<joint name="wheel_2_base_joint" type="continuous">
    <parent link="base"/>
    <child link="wheele_2"/>
    <origin xyz="-${base_length/2} ${base_width/2+length_wheel/2} 0" rpy="-${PI/2} 0 0"/>
    <axis xyz="0 0 1"/>
</joint>
<joint name="wheel_3_base_joint" type="continuous">
    <parent link="base"/>
    <child link="wheele_3"/>
    <origin xyz="-${base_length/2} -${base_width/2+length_wheel/2} 0" rpy=" -${PI/2} 0 0"/>
    <axis xyz="0 0 1"/>
</joint>
<joint name="wheel_4_base_joint" type="continuous">
    <parent link="base"/>
    <child link="wheele_4"/>
    <origin xyz="${base_length/2} -${base_width/2+length_wheel/2} 0" rpy="-${PI/2} 0 0"/>
    <axis xyz="0 0 1"/>
</joint>

<joint name="camera_joint" type="fixed">
    <parent link="base"/>
    <child link="camera_link"/>
    <origin xyz="${base_length/2-camera_box_size/2} 0 ${base_heigth/2+camera_box_size/2}"/>

</joint>
<joint name="hokuyo_joint" type="fixed">
    <child link="hokuyo_link"/>
    <parent link="camera_link"/>
    <origin xyz="0 0 ${hokuyo_box_size/2+camera_box_size/2}"/>

</joint>



</robot>

and here the plugin:

  <gazebo>
    <plugin name="skid_steer_drive_controller" filename="libgazebo_ros_skid_steer_drive.so">
            <updateRate>100.0</updateRate>
            <robotNamespace>/</robotNamespace>
            <leftFrontJoint>wheel_1_base_joint</leftFrontJoint>
            <rightFrontJoint>wheel_2_base_joint</rightFrontJoint>
            <leftRearJoint>wheel_4_base_joint</leftRearJoint>
            <rightRearJoint>wheel_3_base_joint</rightRearJoint>
            <wheelSeparation>0.6</wheelSeparation>
            <wheelDiameter>0.4</wheelDiameter>
            <robotBaseFrame>base</robotBaseFrame>
            <torque>1</torque>
            <topicName>cmd_vel</topicName>
            <broadcastTF>0</broadcastTF>
    </plugin>

</gazebo>

How to implement the Skid Steering Drive plugin in Gazebo?

Hello, I'm new to Gazebo and ROS and wanted to implement the skid steering plugin from Gazebo for the a very basic 4 wheeled 'robot' , but I'm not sure what how the axis are supposed to be set and what some of the requiried variables truly mean e.g torque (not sure which number I should give as input) or broadcastTF (not sure why I should not want to broadcast) . At the moment I can drive backwards and forwards but it the robot does not turn. Here is the xacro that I'm using at the moment:

<?xml version="1.0"?>
<robot xmlns:xacro="http://www.ros.org/wiki/xacro"   name="base1">
<!-- variables-->
<xacro:property name="length_wheel" value="0.1"/>
<xacro:property name="radius_wheel" value="0.2"/>
<xacro:property name="base_heigth" value="0.3"/>
<xacro:property name="base_width" value="0.6"/>
<xacro:property name="base_length" value="1.0"/>
<xacro:property name="hokuyo_box_size" value="0.05"/>
<xacro:property name="camera_box_size" value="0.05"/>
<!--<xacro::property name="offset" value=""/>-->
<xacro:property name="PI" value="3.14159265359"/>
<!-- Gazebo colors -->
<xacro:include filename="$(find own_base)/urdf/base1.gazebo"/>

<!-- macros-->
<xacro:macro name="default_inertial" params="mass">
<inertial>
    <mass value="${mass}"/>
    <inertia ixx="1.0" ixy="0.0" ixz="0.0" iyy="1.0" iyz="0.0" izz="1.0"/>
</inertial>
</xacro:macro>
<link name="base">
    <visual>
        <geometry>
            <box size="${base_length} ${base_width} ${base_heigth}"/>
        </geometry>
        <origin xyz="0 0 0" rpy="0 0 0"/>
        <material name="red">
            <color rgba="1 0 0 1"/>
        </material>       
    </visual>
    <collision>
        <geometry>
             <box size="${base_length} ${base_width} ${base_heigth}"/>
        </geometry>
        <origin xyz="0 0 0" rpy="0 0 0"/>
    </collision>
    <xacro:default_inertial mass="100"/>
</link>

   <link name="wheele_1">
        <visual>
         <geometry>
            <cylinder length="${length_wheel}" radius="${radius_wheel}"/>
        </geometry>
        <material name="black"> 
            <color rgba="0 0 0 1"/>
        </material>
        <origin xyz="0 0 0" rpy="0 0 0"/>

    </visual>
    <collision>
        <geometry>
            <cylinder length="${length_wheel}" radius="${radius_wheel}"/>
        </geometry>
        <origin xyz="0 0 0" rpy="0 0 0"/>
    </collision>
<xacro:default_inertial mass="5"/>
</link>

<link name="wheele_2">
        <visual>
         <geometry>
             <cylinder length="${length_wheel}" radius="${radius_wheel}"/>
        </geometry>
        <origin xyz="0 0 0" rpy="0 0 0"/>
        <material name="black"> 
            <color rgba="0 0 0 1"/>
        </material>
    </visual>
    <collision>
        <geometry>
            <cylinder length="${length_wheel}" radius="${radius_wheel}"/>
        </geometry>
        <origin xyz="0 0 0" rpy="0 0 0"/>
    </collision>
     <xacro:default_inertial mass="5"/>

</link>

<link name="wheele_3">
        <visual>
         <geometry>
             <cylinder length="${length_wheel}" radius="${radius_wheel}"/>
        </geometry>
        <origin xyz="0 0 0" rpy="0 0 0"/>
        <material name="black"> 
            <color rgba="0 0 0 1"/>
        </material>
    </visual>
    <collision>
        <geometry>
            <cylinder length="${length_wheel}" radius="${radius_wheel}"/>
        </geometry>
        <origin xyz="0 0 0" rpy="0 0 0"/>
    </collision>
     <xacro:default_inertial mass="5"/>
</link>


<link name="wheele_4">
        <visual>
         <geometry>
             <cylinder length="${length_wheel}" radius="${radius_wheel}"/>
        </geometry>
        <origin xyz="0 0 0" rpy="0 0 0"/>
        <material name="black"> 
            <color rgba="0 0 0 1"/>
        </material>
    </visual>
    <collision>
        <geometry>
            <cylinder length="${length_wheel}" radius="${radius_wheel}"/>
        </geometry>
        <origin xyz="0 0 0" rpy="0 0 0"/>
    </collision>
     <xacro:default_inertial mass="5"/>
</link>
<link name="hokuyo_link">
    <visual>
        <geometry>
            <box size="${hokuyo_box_size} ${hokuyo_box_size} ${hokuyo_box_size}"/>
        </geometry>
        <origin xyz="0 0 0" rpy="0 0 0"/>
        <material name="yellow">
            <color rgba="1 1 0 1"/>
        </material>     
    </visual>
    <collision>
        <geometry>
            <box size="${hokuyo_box_size} ${hokuyo_box_size} ${hokuyo_box_size}"/>
        </geometry>
        <origin xyz="0 0 0" rpy="0 0 0"/>
    </collision>
    <xacro:default_inertial mass="1"/>
</link>

<link name="camera_link">
    <visual>
        <geometry>
            <box size="${camera_box_size} ${camera_box_size} ${camera_box_size}"/>
        </geometry>
        <origin xyz="0 0 0" rpy="0 0 0"/>
        <material name="blue">
            <color rgba="0 0 1 1"/>
        </material>     
    </visual>
    <collision>
        <geometry>
            <box size="${camera_box_size} ${camera_box_size} ${camera_box_size}"/>
        </geometry>
        <origin xyz="0 0 0" rpy="0 0 0"/>
    </collision>
    <xacro:default_inertial mass="1"/>
</link>

<joint name="wheel_1_base_joint" type="continuous">
    <parent link="base"/>
    <child link="wheele_1"/>
    <origin xyz="${base_length/2} ${base_width/2+length_wheel/2} 0" rpy="-${PI/2} 0 0"/>
    <axis xyz="0 0 1"/>
</joint>
<joint name="wheel_2_base_joint" type="continuous">
    <parent link="base"/>
    <child link="wheele_2"/>
    <origin xyz="-${base_length/2} ${base_width/2+length_wheel/2} 0" rpy="-${PI/2} 0 0"/>
    <axis xyz="0 0 1"/>
</joint>
<joint name="wheel_3_base_joint" type="continuous">
    <parent link="base"/>
    <child link="wheele_3"/>
    <origin xyz="-${base_length/2} -${base_width/2+length_wheel/2} 0" rpy=" -${PI/2} 0 0"/>
    <axis xyz="0 0 1"/>
</joint>
<joint name="wheel_4_base_joint" type="continuous">
    <parent link="base"/>
    <child link="wheele_4"/>
    <origin xyz="${base_length/2} -${base_width/2+length_wheel/2} 0" rpy="-${PI/2} 0 0"/>
    <axis xyz="0 0 1"/>
</joint>

<joint name="camera_joint" type="fixed">
    <parent link="base"/>
    <child link="camera_link"/>
    <origin xyz="${base_length/2-camera_box_size/2} 0 ${base_heigth/2+camera_box_size/2}"/>

</joint>
<joint name="hokuyo_joint" type="fixed">
    <child link="hokuyo_link"/>
    <parent link="camera_link"/>
    <origin xyz="0 0 ${hokuyo_box_size/2+camera_box_size/2}"/>

</joint>



</robot>

and here the plugin:

  <gazebo>
    <plugin name="skid_steer_drive_controller" filename="libgazebo_ros_skid_steer_drive.so">
            <updateRate>100.0</updateRate>
            <robotNamespace>/</robotNamespace>
            <leftFrontJoint>wheel_1_base_joint</leftFrontJoint>
            <rightFrontJoint>wheel_2_base_joint</rightFrontJoint>
            <leftRearJoint>wheel_4_base_joint</leftRearJoint>
            <rightRearJoint>wheel_3_base_joint</rightRearJoint>
            <wheelSeparation>0.6</wheelSeparation>
            <wheelDiameter>0.4</wheelDiameter>
            <robotBaseFrame>base</robotBaseFrame>
            <torque>1</torque>
            <topicName>cmd_vel</topicName>
            <broadcastTF>0</broadcastTF>
    </plugin>

</gazebo>

How to implement the Skid Steering Drive plugin in Gazebo?

Hello, I'm new to Gazebo and ROS and wanted to implement the skid steering plugin from Gazebo for the a very basic 4 wheeled 'robot' , but I'm not sure what how the axis are supposed to be set and what some of the requiried variables truly mean e.g torque (not sure which number I should give as input) or broadcastTF (not sure why I should not want to broadcast) . At the moment I can drive backwards and forwards but it the robot does not turn. Here is the xacro that I'm using at the moment:

<?xml version="1.0"?>
<robot xmlns:xacro="http://www.ros.org/wiki/xacro"   name="base1">
<!-- variables-->
<xacro:property name="length_wheel" value="0.1"/>
<xacro:property name="radius_wheel" value="0.2"/>
<xacro:property name="base_heigth" value="0.3"/>
<xacro:property name="base_width" value="0.6"/>
<xacro:property name="base_length" value="1.0"/>
<xacro:property name="hokuyo_box_size" value="0.05"/>
<xacro:property name="camera_box_size" value="0.05"/>
<!--<xacro::property name="offset" value=""/>-->
<xacro:property name="PI" value="3.14159265359"/>
<!-- Gazebo colors -->
<xacro:include filename="$(find own_base)/urdf/base1.gazebo"/>

<!-- macros-->
<xacro:macro name="default_inertial" params="mass">
<inertial>
    <mass value="${mass}"/>
    <inertia ixx="1.0" ixy="0.0" ixz="0.0" iyy="1.0" iyz="0.0" izz="1.0"/>
</inertial>
</xacro:macro>
<link name="base">
    <visual>
        <geometry>
            <box size="${base_length} ${base_width} ${base_heigth}"/>
        </geometry>
        <origin xyz="0 0 0" rpy="0 0 0"/>
        <material name="red">
            <color rgba="1 0 0 1"/>
        </material>       
    </visual>
    <collision>
        <geometry>
             <box size="${base_length} ${base_width} ${base_heigth}"/>
        </geometry>
        <origin xyz="0 0 0" rpy="0 0 0"/>
    </collision>
    <xacro:default_inertial mass="100"/>
</link>

   <link name="wheele_1">
        <visual>
         <geometry>
            <cylinder length="${length_wheel}" radius="${radius_wheel}"/>
        </geometry>
        <material name="black"> 
            <color rgba="0 0 0 1"/>
        </material>
        <origin xyz="0 0 0" rpy="0 0 0"/>

    </visual>
    <collision>
        <geometry>
            <cylinder length="${length_wheel}" radius="${radius_wheel}"/>
        </geometry>
        <origin xyz="0 0 0" rpy="0 0 0"/>
    </collision>
<xacro:default_inertial mass="5"/>
</link>

<link name="wheele_2">
        <visual>
         <geometry>
             <cylinder length="${length_wheel}" radius="${radius_wheel}"/>
        </geometry>
        <origin xyz="0 0 0" rpy="0 0 0"/>
        <material name="black"> 
            <color rgba="0 0 0 1"/>
        </material>
    </visual>
    <collision>
        <geometry>
            <cylinder length="${length_wheel}" radius="${radius_wheel}"/>
        </geometry>
        <origin xyz="0 0 0" rpy="0 0 0"/>
    </collision>
     <xacro:default_inertial mass="5"/>

</link>

<link name="wheele_3">
        <visual>
         <geometry>
             <cylinder length="${length_wheel}" radius="${radius_wheel}"/>
        </geometry>
        <origin xyz="0 0 0" rpy="0 0 0"/>
        <material name="black"> 
            <color rgba="0 0 0 1"/>
        </material>
    </visual>
    <collision>
        <geometry>
            <cylinder length="${length_wheel}" radius="${radius_wheel}"/>
        </geometry>
        <origin xyz="0 0 0" rpy="0 0 0"/>
    </collision>
     <xacro:default_inertial mass="5"/>
</link>


<link name="wheele_4">
        <visual>
         <geometry>
             <cylinder length="${length_wheel}" radius="${radius_wheel}"/>
        </geometry>
        <origin xyz="0 0 0" rpy="0 0 0"/>
        <material name="black"> 
            <color rgba="0 0 0 1"/>
        </material>
    </visual>
    <collision>
        <geometry>
            <cylinder length="${length_wheel}" radius="${radius_wheel}"/>
        </geometry>
        <origin xyz="0 0 0" rpy="0 0 0"/>
    </collision>
     <xacro:default_inertial mass="5"/>
</link>
<link name="hokuyo_link">
    <visual>
        <geometry>
            <box size="${hokuyo_box_size} ${hokuyo_box_size} ${hokuyo_box_size}"/>
        </geometry>
        <origin xyz="0 0 0" rpy="0 0 0"/>
        <material name="yellow">
            <color rgba="1 1 0 1"/>
        </material>     
    </visual>
    <collision>
        <geometry>
            <box size="${hokuyo_box_size} ${hokuyo_box_size} ${hokuyo_box_size}"/>
        </geometry>
        <origin xyz="0 0 0" rpy="0 0 0"/>
    </collision>
    <xacro:default_inertial mass="1"/>
</link>

<link name="camera_link">
    <visual>
        <geometry>
            <box size="${camera_box_size} ${camera_box_size} ${camera_box_size}"/>
        </geometry>
        <origin xyz="0 0 0" rpy="0 0 0"/>
        <material name="blue">
            <color rgba="0 0 1 1"/>
        </material>     
    </visual>
    <collision>
        <geometry>
            <box size="${camera_box_size} ${camera_box_size} ${camera_box_size}"/>
        </geometry>
        <origin xyz="0 0 0" rpy="0 0 0"/>
    </collision>
    <xacro:default_inertial mass="1"/>
</link>

<joint name="wheel_1_base_joint" type="continuous">
    <parent link="base"/>
    <child link="wheele_1"/>
    <origin xyz="${base_length/2} ${base_width/2+length_wheel/2} 0" rpy="-${PI/2} 0 0"/>
    <axis xyz="0 0 1"/>
</joint>
<joint name="wheel_2_base_joint" type="continuous">
    <parent link="base"/>
    <child link="wheele_2"/>
    <origin xyz="-${base_length/2} ${base_width/2+length_wheel/2} 0" rpy="-${PI/2} 0 0"/>
    <axis xyz="0 0 1"/>
</joint>
<joint name="wheel_3_base_joint" type="continuous">
    <parent link="base"/>
    <child link="wheele_3"/>
    <origin xyz="-${base_length/2} -${base_width/2+length_wheel/2} 0" rpy=" -${PI/2} 0 0"/>
    <axis xyz="0 0 1"/>
</joint>
<joint name="wheel_4_base_joint" type="continuous">
    <parent link="base"/>
    <child link="wheele_4"/>
    <origin xyz="${base_length/2} -${base_width/2+length_wheel/2} 0" rpy="-${PI/2} 0 0"/>
    <axis xyz="0 0 1"/>
</joint>

<joint name="camera_joint" type="fixed">
    <parent link="base"/>
    <child link="camera_link"/>
    <origin xyz="${base_length/2-camera_box_size/2} 0 ${base_heigth/2+camera_box_size/2}"/>

</joint>
<joint name="hokuyo_joint" type="fixed">
    <child link="hokuyo_link"/>
    <parent link="camera_link"/>
    <origin xyz="0 0 ${hokuyo_box_size/2+camera_box_size/2}"/>

</joint>



</robot>

and here the plugin:

  <gazebo>
    <plugin name="skid_steer_drive_controller" filename="libgazebo_ros_skid_steer_drive.so">
            <updateRate>100.0</updateRate>
            <robotNamespace>/</robotNamespace>
            <leftFrontJoint>wheel_1_base_joint</leftFrontJoint>
            <rightFrontJoint>wheel_2_base_joint</rightFrontJoint>
            <leftRearJoint>wheel_4_base_joint</leftRearJoint>
            <rightRearJoint>wheel_3_base_joint</rightRearJoint>
            <wheelSeparation>0.6</wheelSeparation>
            <wheelDiameter>0.4</wheelDiameter>
            <robotBaseFrame>base</robotBaseFrame>
            <torque>1</torque>
            <topicName>cmd_vel</topicName>
            <broadcastTF>0</broadcastTF>
    </plugin>

</gazebo>