Robotics StackExchange | Archived questions

Diff_drive Plugin Simulation Problem

Hi, I have written a urdf file for a 2 wheeled robot, but I can't seem to get it to drive properly using the diffdrivecontroller gazebo plugin. Instead of driving normally, the robot somersaults in the direction that I want it to move in. Is there anything I'm doing wrong when I'm setting the conditions of the plugin? I'm new to ROS.

<?xml version="1.0"?>

  <robot name="crobot">

<link name="base_link">
    <visual>
        <geometry>
            <box size="0.100 0.110 0.131"/>
        </geometry>     
        <origin xyz="0 0 0.0805"/>
    </visual>
    <collision>
        <geometry>
            <box size="0.100 0.110 0.131"/>
        </geometry> 
    </collision>
    <inertial>
        <mass value="1"/>
        <inertia ixx="1.0" ixy="0.0" ixz="0.0" iyy="1.0" iyz="0.0" izz="1.0"/>
    </inertial>
</link>

<link name="basecenter1">
    <visual>
        <geometry>
            <box size="0.10 0.34 0.131"/>
        </geometry>
        <origin xyz="0 0 0.0805"/>
    </visual>
    <collision>
        <geometry>
            <box size="0.10 0.34 0.131"/>
        </geometry> 
    </collision>
    <inertial>
        <mass value="0.1"/>
        <inertia ixx="1.0" ixy="0.0" ixz="0.0" iyy="1.0" iyz="0.0" izz="1.0"/>
    </inertial>
</link>

<link name="basecenter2">
    <visual>
        <geometry>
            <box size="0.330 0.110 0.131"/>
        </geometry>
        <origin xyz="0 0 0.0805"/>
    </visual>
    <collision>
        <geometry>
            <box size="0.330 0.110 0.131"/>
        </geometry> 
    </collision>
    <inertial>
        <mass value="0.1"/>
        <inertia ixx="1.0" ixy="0.0" ixz="0.0" iyy="1.0" iyz="0.0" izz="1.0"/>
    </inertial>
</link>

<link name="blcorner">
    <visual>
        <geometry>
            <cylinder length="0.131" radius=".12"/>
        </geometry>
        <origin xyz="0 0 0.0805"/>
    </visual>
    <collision>
        <geometry>
            <cylinder length="0.131" radius=".12"/>
        </geometry> 
    </collision>
    <inertial>
        <mass value="1"/>
        <inertia ixx="1.0" ixy="0.0" ixz="0.0" iyy="1.0" iyz="0.0" izz="1.0"/>
    </inertial>
</link>

<link name="brcorner">
    <visual>
        <geometry>
            <cylinder length="0.131" radius=".12"/>
        </geometry>
        <origin xyz="0 0 0.0805"/>
    </visual>
    <collision>
        <geometry>
            <cylinder length="0.131" radius=".12"/>
        </geometry> 
    </collision>
    <inertial>
        <mass value="1"/>
        <inertia ixx="1.0" ixy="0.0" ixz="0.0" iyy="1.0" iyz="0.0" izz="1.0"/>
    </inertial>
</link>

<link name="flcorner">
    <visual>
        <geometry>
            <cylinder length="0.131" radius=".11"/>
        </geometry>
        <origin xyz="0 0 0.0805"/>
    </visual>
    <collision>
        <geometry>
            <cylinder length="0.131" radius=".11"/>
        </geometry> 
    </collision>
    <inertial>
        <mass value="1"/>
        <inertia ixx="1.0" ixy="0.0" ixz="0.0" iyy="1.0" iyz="0.0" izz="1.0"/>
    </inertial>
</link>

<link name="frcorner">
    <visual>
        <geometry>
            <cylinder length="0.131" radius=".11"/>
        </geometry>
        <origin xyz="0 0 0.0805"/>
    </visual>
    <collision>
        <geometry>
            <cylinder length="0.131" radius=".11"/>
        </geometry> 
    </collision>
    <inertial>
        <mass value="1"/>
        <inertia ixx="1.0" ixy="0.0" ixz="0.0" iyy="1.0" iyz="0.0" izz="1.0"/>
    </inertial>
</link>

<link name="lwheel">
    <visual>
        <geometry>
            <cylinder length="0.018" radius="0.0325"/>
        </geometry>
        <origin rpy="0 1.570796 0" xyz="0 0 0"/>
        <material name="blue">
            <color rgba="0 0 .8 1"/>
        </material>
    </visual>
    <collision>
        <geometry>
            <cylinder length="0.018" radius="0.0325"/> 
            <!--radius="0.0325"-->
        </geometry> 
    </collision>
    <inertial>
        <mass value="0.5"/>
        <inertia ixx="1.0" ixy="0.0" ixz="0.0" iyy="1.0" iyz="0.0" izz="1.0"/>
    </inertial>
    <gazebo>
        <selfCollide>false</selfCollide>
    </gazebo>
</link>

<link name="rwheel">
    <visual>
        <geometry>
            <cylinder length="0.018" radius="0.0325"/>
        </geometry>
        <origin rpy="0 1.570796 0" xyz="0 0 0"/>
        <material name="blue">
            <color rgba="0 0 .8 1"/>
        </material>
    </visual>
    <collision>
        <geometry>
            <cylinder length="0.018" radius="0.0325"/>
            <!--radius="0.0325"-->
        </geometry> 
    </collision>
    <inertial>
        <mass value="0.5"/>
        <inertia ixx="1.0" ixy="0.0" ixz="0.0" iyy="1.0" iyz="0.0" izz="1.0"/>
    </inertial>
    <gazebo>
        <selfCollide>false</selfCollide>
    </gazebo>
</link>

<joint name="base_lwheel" type="continuous">
    <parent link="base_link"/>
    <child link="lwheel"/>
    <origin xyz="-0.130 0 0.0325" rpy="-1.570796 0 0"/>
</joint>
<joint name="base_rwheel" type="continuous">
    <parent link="base_link"/>
    <child link="rwheel"/>
    <origin xyz="0.130 0 0.0325" rpy="-1.570796 0 0"/>
</joint>

<joint name="base_basecenter1" type="fixed">
    <parent link="base_link"/>
    <child link="basecenter1"/>
    <origin xyz="0 -0.005 0"/>
</joint>
<joint name="base_basecenter2" type="fixed">
    <parent link="base_link"/>
    <child link="basecenter2"/>
    <origin xyz="0 0 0"/>
</joint>
<joint name="base_blcorner" type="fixed">
    <parent link="base_link"/>
    <child link="blcorner"/>
    <origin xyz="-0.05 -0.055 0"/>
</joint>
<joint name="base_brcorner" type="fixed">
    <parent link="base_link"/>
    <child link="brcorner"/>
    <origin xyz="0.05 -0.055 0"/>
</joint>
<joint name="base_flcorner" type="fixed">
    <parent link="base_link"/>
    <child link="flcorner"/>
    <origin xyz="-0.05 0.055 0"/>
</joint>
<joint name="base_frcorner" type="fixed">
    <parent link="base_link"/>
    <child link="frcorner"/>
    <origin xyz="0.05 0.055 0"/>
</joint>

<gazebo>
    <plugin name="diff_drive_controller" filename="libgazebo_ros_diff_drive.so">
        <rosDebugLevel>false</rosDebugLevel>
        <alwaysOn>true</alwaysOn>
        <publishWheelJointState>true</publishWheelJointState>
        <updateRate>100.0</updateRate>
        <leftJoint>base_lwheel</leftJoint>
        <rightJoint>base_rwheel</rightJoint>
        <wheelSeparation>0.26</wheelSeparation>
        <wheelDiameter>0.065</wheelDiameter>
        <wheelAcceleration>1</wheelAcceleration>
        <wheelTorque>20</wheelTorque>
        <commandTopic>cmd_vel</commandTopic>
        <odometryTopic>odom</odometryTopic>
        <odometryFrame>odom</odometryFrame>
        <robotBaseFrame>base_link</robotBaseFrame>
    </plugin>
</gazebo>

Asked by Lunescense on 2016-07-19 21:48:47 UTC

Comments

Check your inertia values, collision shapes, and joints. Also try reducing (or otherwise alternating) wheel torque.

Asked by nkoenig on 2016-07-20 13:14:24 UTC

Answers