Gazebo | Ignition | Community
Ask Your Question

Revision history [back]

click to hide/show revision 1
initial version

Double caster wheel problem

Hi guys, I'm trying to implement a double wheeled caster. Obviously it's different from the other one of the tutorial, which it's a sphere.

My new caster works well, except when the model try to turn 180º. At this point, the joint doesn't turn 180º only, it continues turning...

Here is the code of my caster:

<?xml version='1.0'?>
<sdf version='1.3'>
  <model name="castor_doble_v2">
    <link name='ejev1'>
      <pose>0 0 0.049375 0 0 0</pose>
      <inertial>
        <mass>0.1</mass>
      </inertial>
      <collision name='collision1'>
        <geometry>
          <box>
            <size>0.008 0.008 0.02125</size>
          </box>
        </geometry>
      </collision>

      <visual name='visual1'>
        <geometry>
          <box>
            <size>0.008 0.008 0.02125</size>
          </box>
        </geometry>
      </visual>

      <collision name='collision2'>
        <pose>0.0145 0 -0.006625 0 0 0</pose>
        <geometry>
          <box>
            <size>0.01825 0.008 0.008</size>
          </box>
        </geometry>
      </collision>

      <visual name='visual2'>
        <pose>0.0145 0 -0.006625 0 0 0</pose>
        <geometry>
          <box>
            <size>0.02125 0.008 0.008</size>
          </box>
        </geometry>
      </visual>

      <collision name='collision3'>
        <pose>0.029 0 -0.01325 0 0 0</pose>
        <geometry>
          <box>
            <size>0.008 0.008 0.02125</size>
          </box>
        </geometry>
      </collision>

      <visual name='visual3'>
        <pose>0.029 0 -0.01325 0 0 0</pose>
        <geometry>
          <box>
            <size>0.008 0.008 0.02125</size>
          </box>
        </geometry>
      </visual>
    </link>

    <link name="castor_izq">
      <pose>0.0295 0.0085 0.0255 0 1.5707 1.5707</pose>
      <inertial>
        <mass>0.05</mass>
      </inertial>
      <collision name="collision">
        <geometry>
          <cylinder>
            <radius>.0255</radius>
            <length>.01</length>
          </cylinder>
        </geometry>
        <surface>
          <friction>
            <ode>
              <mu>0.1</mu>
              <mu2>0.1</mu2>
              <slip1>1</slip1>
              <slip2>1</slip2>
            </ode>
          </friction>
        </surface>
      </collision>

      <visual name="visual">
        <geometry>
          <cylinder>
            <radius>.0255</radius>
            <length>.01</length>
          </cylinder>
        </geometry>
      </visual>
    </link>

    <link name="castor_der">
      <pose>0.0295 -0.0085 0.0255 0 1.5707 1.5707</pose>
      <inertial>
        <mass>0.05</mass>
      </inertial>
      <collision name="collision">
        <geometry>
          <cylinder>
            <radius>.0255</radius>
            <length>.01</length>
          </cylinder>
        </geometry>
        <surface>
          <friction>
            <ode>
              <mu>0.1</mu>
              <mu2>0.1</mu2>
              <slip1>1</slip1>
              <slip2>1</slip2>
            </ode>
          </friction>
        </surface>
      </collision>

      <visual name="visual">
        <geometry>
          <cylinder>
            <radius>.0255</radius>
            <length>.01</length>
          </cylinder>
        </geometry>
      </visual>
    </link>

    <joint type="revolute" name="eje_castor_izq">
      <pose>0 0 -0.03 0 0 0</pose>
      <child>castor_izq</child>
      <parent>ejev1</parent>
      <axis>
        <xyz>0 1 0</xyz>
      </axis>
    </joint>

    <joint type="revolute" name="eje_castor_der">
      <pose>0 0 -0.03 0 0 0</pose>
      <child>castor_der</child>
      <parent>ejev1</parent>
      <axis>
        <xyz>0 1 0</xyz>
      </axis>
    </joint>
  </model>
</sdf>

And the joint with my robot is as follows:

<joint name="castor_joint" type="revolute">
  <child>castor_doble_v2::ejev1</child>
  <parent>chassis</parent>
  <axis>
    <xyz>0 0 1</xyz>
  </axis>
</joint>

Here you have a picture with the bot having the issue: http://dl.dropbox.com/u/6821156/gazebo-issue1.png

I tried with different types of joints, parameters as physics or surface with mu, etc. but nothing better (maybe I was doing wrong).

Sorry for my English and thank you very much!

click to hide/show revision 2
limits don't work for me

Double caster wheel problem

Hi guys, I'm trying to implement a double wheeled caster. Obviously it's different from the other one of the tutorial, which it's a sphere.

My new caster works well, except when the model try to turn 180º. At this point, the joint doesn't turn 180º only, it continues turning...

Here is the code of my caster:

<?xml version='1.0'?>
<sdf version='1.3'>
  <model name="castor_doble_v2">
    <link name='ejev1'>
      <pose>0 0 0.049375 0 0 0</pose>
      <inertial>
        <mass>0.1</mass>
      </inertial>
      <collision name='collision1'>
        <geometry>
          <box>
            <size>0.008 0.008 0.02125</size>
          </box>
        </geometry>
      </collision>

      <visual name='visual1'>
        <geometry>
          <box>
            <size>0.008 0.008 0.02125</size>
          </box>
        </geometry>
      </visual>

      <collision name='collision2'>
        <pose>0.0145 0 -0.006625 0 0 0</pose>
        <geometry>
          <box>
            <size>0.01825 0.008 0.008</size>
          </box>
        </geometry>
      </collision>

      <visual name='visual2'>
        <pose>0.0145 0 -0.006625 0 0 0</pose>
        <geometry>
          <box>
            <size>0.02125 0.008 0.008</size>
          </box>
        </geometry>
      </visual>

      <collision name='collision3'>
        <pose>0.029 0 -0.01325 0 0 0</pose>
        <geometry>
          <box>
            <size>0.008 0.008 0.02125</size>
          </box>
        </geometry>
      </collision>

      <visual name='visual3'>
        <pose>0.029 0 -0.01325 0 0 0</pose>
        <geometry>
          <box>
            <size>0.008 0.008 0.02125</size>
          </box>
        </geometry>
      </visual>
    </link>

    <link name="castor_izq">
      <pose>0.0295 0.0085 0.0255 0 1.5707 1.5707</pose>
      <inertial>
        <mass>0.05</mass>
      </inertial>
      <collision name="collision">
        <geometry>
          <cylinder>
            <radius>.0255</radius>
            <length>.01</length>
          </cylinder>
        </geometry>
        <surface>
          <friction>
            <ode>
              <mu>0.1</mu>
              <mu2>0.1</mu2>
              <slip1>1</slip1>
              <slip2>1</slip2>
            </ode>
          </friction>
        </surface>
      </collision>

      <visual name="visual">
        <geometry>
          <cylinder>
            <radius>.0255</radius>
            <length>.01</length>
          </cylinder>
        </geometry>
      </visual>
    </link>

    <link name="castor_der">
      <pose>0.0295 -0.0085 0.0255 0 1.5707 1.5707</pose>
      <inertial>
        <mass>0.05</mass>
      </inertial>
      <collision name="collision">
        <geometry>
          <cylinder>
            <radius>.0255</radius>
            <length>.01</length>
          </cylinder>
        </geometry>
        <surface>
          <friction>
            <ode>
              <mu>0.1</mu>
              <mu2>0.1</mu2>
              <slip1>1</slip1>
              <slip2>1</slip2>
            </ode>
          </friction>
        </surface>
      </collision>

      <visual name="visual">
        <geometry>
          <cylinder>
            <radius>.0255</radius>
            <length>.01</length>
          </cylinder>
        </geometry>
      </visual>
    </link>

    <joint type="revolute" name="eje_castor_izq">
      <pose>0 0 -0.03 0 0 0</pose>
      <child>castor_izq</child>
      <parent>ejev1</parent>
      <axis>
        <xyz>0 1 0</xyz>
      </axis>
    </joint>

    <joint type="revolute" name="eje_castor_der">
      <pose>0 0 -0.03 0 0 0</pose>
      <child>castor_der</child>
      <parent>ejev1</parent>
      <axis>
        <xyz>0 1 0</xyz>
      </axis>
    </joint>
  </model>
</sdf>

And the joint with my robot is as follows:

<joint name="castor_joint" type="revolute">
  <child>castor_doble_v2::ejev1</child>
  <parent>chassis</parent>
  <axis>
    <xyz>0 0 1</xyz>
  </axis>
</joint>

Here you have a picture with the bot having the issue: http://dl.dropbox.com/u/6821156/gazebo-issue1.png

I tried with different types of joints, parameters as physics or surface with mu, etc. but nothing better (maybe I was doing wrong).

Sorry for my English and thank you very much!

EDIT 1: The limits are not the solution. I've tried the limit to PI (180 degrees are PI rads) and the behavior isn't good. The caster should turn totally free, but without affect the model chassis. It's like if the caster has more priority or weight at the moment of turning or movement.

A video better than 1000 words: http://www.youtube.com/watch?v=rKppVt4Yivk

click to hide/show revision 3
Force have been applied to big wheels, not caster wheels

Double caster wheel problem

Hi guys, I'm trying to implement a double wheeled caster. Obviously it's different from the other one of the tutorial, which it's a sphere.

My new caster works well, except when the model try to turn 180º. At this point, the joint doesn't turn 180º only, it continues turning...

Here is the code of my caster:

<?xml version='1.0'?>
<sdf version='1.3'>
  <model name="castor_doble_v2">
    <link name='ejev1'>
      <pose>0 0 0.049375 0 0 0</pose>
      <inertial>
        <mass>0.1</mass>
      </inertial>
      <collision name='collision1'>
        <geometry>
          <box>
            <size>0.008 0.008 0.02125</size>
          </box>
        </geometry>
      </collision>

      <visual name='visual1'>
        <geometry>
          <box>
            <size>0.008 0.008 0.02125</size>
          </box>
        </geometry>
      </visual>

      <collision name='collision2'>
        <pose>0.0145 0 -0.006625 0 0 0</pose>
        <geometry>
          <box>
            <size>0.01825 0.008 0.008</size>
          </box>
        </geometry>
      </collision>

      <visual name='visual2'>
        <pose>0.0145 0 -0.006625 0 0 0</pose>
        <geometry>
          <box>
            <size>0.02125 0.008 0.008</size>
          </box>
        </geometry>
      </visual>

      <collision name='collision3'>
        <pose>0.029 0 -0.01325 0 0 0</pose>
        <geometry>
          <box>
            <size>0.008 0.008 0.02125</size>
          </box>
        </geometry>
      </collision>

      <visual name='visual3'>
        <pose>0.029 0 -0.01325 0 0 0</pose>
        <geometry>
          <box>
            <size>0.008 0.008 0.02125</size>
          </box>
        </geometry>
      </visual>
    </link>

    <link name="castor_izq">
      <pose>0.0295 0.0085 0.0255 0 1.5707 1.5707</pose>
      <inertial>
        <mass>0.05</mass>
      </inertial>
      <collision name="collision">
        <geometry>
          <cylinder>
            <radius>.0255</radius>
            <length>.01</length>
          </cylinder>
        </geometry>
        <surface>
          <friction>
            <ode>
              <mu>0.1</mu>
              <mu2>0.1</mu2>
              <slip1>1</slip1>
              <slip2>1</slip2>
            </ode>
          </friction>
        </surface>
      </collision>

      <visual name="visual">
        <geometry>
          <cylinder>
            <radius>.0255</radius>
            <length>.01</length>
          </cylinder>
        </geometry>
      </visual>
    </link>

    <link name="castor_der">
      <pose>0.0295 -0.0085 0.0255 0 1.5707 1.5707</pose>
      <inertial>
        <mass>0.05</mass>
      </inertial>
      <collision name="collision">
        <geometry>
          <cylinder>
            <radius>.0255</radius>
            <length>.01</length>
          </cylinder>
        </geometry>
        <surface>
          <friction>
            <ode>
              <mu>0.1</mu>
              <mu2>0.1</mu2>
              <slip1>1</slip1>
              <slip2>1</slip2>
            </ode>
          </friction>
        </surface>
      </collision>

      <visual name="visual">
        <geometry>
          <cylinder>
            <radius>.0255</radius>
            <length>.01</length>
          </cylinder>
        </geometry>
      </visual>
    </link>

    <joint type="revolute" name="eje_castor_izq">
      <pose>0 0 -0.03 0 0 0</pose>
      <child>castor_izq</child>
      <parent>ejev1</parent>
      <axis>
        <xyz>0 1 0</xyz>
      </axis>
    </joint>

    <joint type="revolute" name="eje_castor_der">
      <pose>0 0 -0.03 0 0 0</pose>
      <child>castor_der</child>
      <parent>ejev1</parent>
      <axis>
        <xyz>0 1 0</xyz>
      </axis>
    </joint>
  </model>
</sdf>

And the joint with my robot is as follows:

<joint name="castor_joint" type="revolute">
  <child>castor_doble_v2::ejev1</child>
  <parent>chassis</parent>
  <axis>
    <xyz>0 0 1</xyz>
  </axis>
</joint>

Here you have a picture with the bot having the issue: http://dl.dropbox.com/u/6821156/gazebo-issue1.png

I tried with different types of joints, parameters as physics or surface with mu, etc. but nothing better (maybe I was doing wrong).

Sorry for my English and thank you very much!

EDIT 1: The limits are not the solution. I've tried the limit to PI (180 degrees are PI rads) and the behavior isn't good. The caster should turn totally free, but without affect the model chassis. It's like if the caster has more priority or weight at the moment of turning or movement.

A video better than 1000 words: http://www.youtube.com/watch?v=rKppVt4Yivk

EDIT 2: I've applied the force to the joints of big wheels, not to the caster wheels. Caster wheels is always at 0 N/m². I want a behavior similar as the office chairs casters, only joint, without force.

click to hide/show revision 4
New code pasted with links

Double caster wheel problem

Hi guys, I'm trying to implement a double wheeled caster. Obviously it's different from the other one of the tutorial, which it's a sphere.

My new caster works well, except when the model try to turn 180º. At this point, the joint doesn't turn 180º only, it continues turning...

Here is the code of my caster:

<?xml version='1.0'?>
<sdf version='1.3'>
  <model name="castor_doble_v2">
    <link name='ejev1'>
      <pose>0 0 0.049375 0 0 0</pose>
      <inertial>
        <mass>0.1</mass>
      </inertial>
      <collision name='collision1'>
        <geometry>
          <box>
            <size>0.008 0.008 0.02125</size>
          </box>
        </geometry>
      </collision>

      <visual name='visual1'>
        <geometry>
          <box>
            <size>0.008 0.008 0.02125</size>
          </box>
        </geometry>
      </visual>

      <collision name='collision2'>
        <pose>0.0145 0 -0.006625 0 0 0</pose>
        <geometry>
          <box>
            <size>0.01825 0.008 0.008</size>
          </box>
        </geometry>
      </collision>

      <visual name='visual2'>
        <pose>0.0145 0 -0.006625 0 0 0</pose>
        <geometry>
          <box>
            <size>0.02125 0.008 0.008</size>
          </box>
        </geometry>
      </visual>

      <collision name='collision3'>
        <pose>0.029 0 -0.01325 0 0 0</pose>
        <geometry>
          <box>
            <size>0.008 0.008 0.02125</size>
          </box>
        </geometry>
      </collision>

      <visual name='visual3'>
        <pose>0.029 0 -0.01325 0 0 0</pose>
        <geometry>
          <box>
            <size>0.008 0.008 0.02125</size>
          </box>
        </geometry>
      </visual>
    </link>

    <link name="castor_izq">
      <pose>0.0295 0.0085 0.0255 0 1.5707 1.5707</pose>
      <inertial>
        <mass>0.05</mass>
      </inertial>
      <collision name="collision">
        <geometry>
          <cylinder>
            <radius>.0255</radius>
            <length>.01</length>
          </cylinder>
        </geometry>
        <surface>
          <friction>
            <ode>
              <mu>0.1</mu>
              <mu2>0.1</mu2>
              <slip1>1</slip1>
              <slip2>1</slip2>
            </ode>
          </friction>
        </surface>
      </collision>

      <visual name="visual">
        <geometry>
          <cylinder>
            <radius>.0255</radius>
            <length>.01</length>
          </cylinder>
        </geometry>
      </visual>
    </link>

    <link name="castor_der">
      <pose>0.0295 -0.0085 0.0255 0 1.5707 1.5707</pose>
      <inertial>
        <mass>0.05</mass>
      </inertial>
      <collision name="collision">
        <geometry>
          <cylinder>
            <radius>.0255</radius>
            <length>.01</length>
          </cylinder>
        </geometry>
        <surface>
          <friction>
            <ode>
              <mu>0.1</mu>
              <mu2>0.1</mu2>
              <slip1>1</slip1>
              <slip2>1</slip2>
            </ode>
          </friction>
        </surface>
      </collision>

      <visual name="visual">
        <geometry>
          <cylinder>
            <radius>.0255</radius>
            <length>.01</length>
          </cylinder>
        </geometry>
      </visual>
    </link>

    <joint type="revolute" name="eje_castor_izq">
      <pose>0 0 -0.03 0 0 0</pose>
      <child>castor_izq</child>
      <parent>ejev1</parent>
      <axis>
        <xyz>0 1 0</xyz>
      </axis>
    </joint>

    <joint type="revolute" name="eje_castor_der">
      <pose>0 0 -0.03 0 0 0</pose>
      <child>castor_der</child>
      <parent>ejev1</parent>
      <axis>
        <xyz>0 1 0</xyz>
      </axis>
    </joint>
  </model>
</sdf>

And the joint with my robot is as follows:

<joint name="castor_joint" type="revolute">
  <child>castor_doble_v2::ejev1</child>
  <parent>chassis</parent>
  <axis>
    <xyz>0 0 1</xyz>
  </axis>
</joint>

caster: (PASTED IN PASTEBIN) Here you have a picture with the bot having the issue: http://dl.dropbox.com/u/6821156/gazebo-issue1.png

I tried with different types of joints, parameters as physics or surface with mu, etc. but nothing better (maybe I was doing wrong).

Sorry for my English and thank you very much!

EDIT 1: The limits are not the solution. I've tried the limit to PI (180 degrees are PI rads) and the behavior isn't good. The caster should turn totally free, but without affect the model chassis. It's like if the caster has more priority or weight at the moment of turning or movement.

A video better than 1000 words: http://www.youtube.com/watch?v=rKppVt4Yivk

EDIT 2: I've applied the force to the joints of big wheels, not to the caster wheels. Caster wheels is always at 0 N/m². I want a behavior similar as the office chairs casters, only joint, without force.

EDIT 3: Matrix, Dumping, and many other intents of modify the physical or dynamic properties of the joint and nothing. Absolutely nothing. I paste the code of the robot and the castor models here, maybe you can see something wrong or try to implement the model in Gazebo (I'm in 1.3.1): Model: http://pastebin.com/pHcirtLC Double wheel castor: http://pastebin.com/dahypi5f

A little explanation from the castor: is a unique link for the body (with 3 parts, in 'S' form). At the top of this, there is a small cylinder to joint the castor with another model. And below are 1 collision (instead 2, 1 for each wheel) and 2 visual (1 for each wheel).

The name of the parts are in Spanish: Rueda = Wheel Eje = Axis/Hing Castor = Caster Izq = Left Der = Right

I don't know how much difficult could be this to implement...it's too simple: the castor must stop turning when the robot acquires a direction! :D

Thank you so much again!

Double caster wheel problem

Hi guys, I'm trying to implement a double wheeled caster. Obviously it's different from the other one of the tutorial, which it's a sphere.

My new caster works well, except when the model try to turn 180º. At this point, the joint doesn't turn 180º only, it continues turning...

Here is the code of my caster: (PASTED IN PASTEBIN) Here you have a picture with the bot having the issue: http://dl.dropbox.com/u/6821156/gazebo-issue1.png

I tried with different types of joints, parameters as physics or surface with mu, etc. but nothing better (maybe I was doing wrong).

Sorry for my English and thank you very much!

EDIT 1: The limits are not the solution. I've tried the limit to PI (180 degrees are PI rads) and the behavior isn't good. The caster should turn totally free, but without affect the model chassis. It's like if the caster has more priority or weight at the moment of turning or movement.

A video better than 1000 words: http://www.youtube.com/watch?v=rKppVt4Yivk

EDIT 2: I've applied the force to the joints of big wheels, not to the caster wheels. Caster wheels is always at 0 N/m². I want a behavior similar as the office chairs casters, only joint, without force.

EDIT 3: Matrix, Dumping, and many other intents of modify the physical or dynamic properties of the joint and nothing. Absolutely nothing. I paste the code of the robot and the castor models here, maybe you can see something wrong or try to implement the model in Gazebo (I'm in 1.3.1): Model: http://pastebin.com/pHcirtLC Double wheel castor: http://pastebin.com/dahypi5f

A little explanation from the castor: is a unique link for the body (with 3 parts, in 'S' form). At the top of this, there is a small cylinder to joint the castor with another model. And below are 1 collision (instead 2, 1 for each wheel) and 2 visual (1 for each wheel).

The name of the parts are in Spanish: Rueda = Wheel Eje = Axis/Hing Castor = Caster Izq = Left Der = Right

I don't know how much difficult could be this to implement...it's too simple: the castor must stop turning when the robot acquires a direction! :D

SOLUTION: As my German friend saids, the intertial matrix had the solution. Changing some values I have obtained a best behavior. Video: http://www.youtube.com/watch?v=x6YERSiA3n4 It's not perfect, but better by far from the first one.

The code of this castor: http://pastebin.com/3ZA22s8T

Thank you so much again!!!

Now, I will try to improve the behavior :)