Differential drive robot inertia in Gazebo

classic Classic list List threaded Threaded
4 messages Options
Reply | Threaded
Open this post in threaded view
|

Differential drive robot inertia in Gazebo

David Michal-3
I have modeled a differential drive robot in Gazebo.  The problem is
that when I driver the robot from Player it seems to have quite a bit of
inertia. When turning to the left or the right it overshoots the target
quite a bit.  The real robot uses stepper motors so that once you tell
it to stop turning it does.  Is there a way to get Gazebo to better
model a stepper motor?  I am using Player 3.0.1, Gazebo 0.9.0, and ODE
0.11.1.

Here is what I have in the model file.

<body:cylinder name="left_wheel_body">
  <xyz>0.0 0.1325 -0.2032</xyz>
  <rpy>0 90 90</rpy>
  <geom:cylinder name="left_wheel_geom">
    <size>.0635 .032</size>
    <mass>0.5</mass>
    <visual>
      <rpy>0 0 90</rpy>
      <size>0.127 0.127 0.032</size>
      <mesh>drivewheel.mesh</mesh>
      <material>Gazebo/Black</material>
    </visual>
  </geom:cylinder>
</body:cylinder>

<body:cylinder name="right_wheel_body">
  <xyz>0.0 -0.1325 -0.2032</xyz>
  <rpy>0 90 90</rpy>
  <geom:cylinder name="right_wheel_geom">
    <size>.0635 .032</size>
    <mass>0.5</mass>
   <visual>
      <rpy>0 0 90</rpy>
      <size>0.127 0.127 0.032</size>
      <mesh>drivewheel.mesh</mesh>
      <material>Gazebo/Black</material>
    </visual>
  </geom:cylinder>
</body:cylinder>

<joint:hinge name="left_wheel_joint">
  <body1>left_wheel_body</body1>
  <body2>chassis_body</body2>
  <anchor>left_wheel_body</anchor>
  <anchorOffset>0 0 0</anchorOffset>
  <axis>0 1 0</axis>
  <erp>0.8</erp>
  <cfm>10e-5</cfm>
</joint:hinge>

<joint:hinge name="right_wheel_joint">
  <body1>right_wheel_body</body1>
  <body2>chassis_body</body2>
  <anchor>right_wheel_body</anchor>
  <anchorOffset>0 0 0</anchorOffset>
  <axis>0 1 0</axis>
  <erp>0.8</erp>
  <cfm>10e-5</cfm>
</joint:hinge>

<controller:differential_position2d name="controller1">
  <leftJoint>right_wheel_joint</leftJoint>
  <rightJoint>left_wheel_joint</rightJoint>
  <wheelSeparation>0.265</wheelSeparation>
  <wheelDiameter>0.127</wheelDiameter>
  <torque>1</torque>
  <interface:position name="position_iface_0"/>
</controller:differential_position2d>



------------------------------------------------------------------------------
Download Intel&#174; Parallel Studio Eval
Try the new software tools for yourself. Speed compiling, find bugs
proactively, and fine-tune applications for parallel performance.
See why Intel Parallel Studio got high marks during beta.
http://p.sf.net/sfu/intel-sw-dev
_______________________________________________
Playerstage-gazebo mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/playerstage-gazebo
Reply | Threaded
Open this post in threaded view
|

Re: Differential drive robot inertia in Gazebo

Nate Koenig
Hello,

You can reduce the torque parameter, and play with the masses.

You can also modify the friction of the wheels. To do this add a the
following parameters to a geom:

<geom ...>
  <kp>100000000</kp>
  <kd>1.0</kd> <!-- Damping constraint -->
  <bounce>0.0</bounce> <!-- How bouncy the surface is -->
  <bounceVel>10</bounceVel> <!-- MAx velocity before bounce is applied -->
  <mu1> BIG NUMBER </mu1>
  <mu2> BIG NUMBER </mu2>
  <slip1> small number (0.01) </slip1>
  <slip2> small number (0.01)</slip2>
</geom>

The ODE manual has descriptions of all these parameters.

-nate

On Sun, Mar 28, 2010 at 9:41 PM, David Michal <[hidden email]> wrote:

> I have modeled a differential drive robot in Gazebo.  The problem is
> that when I driver the robot from Player it seems to have quite a bit of
> inertia. When turning to the left or the right it overshoots the target
> quite a bit.  The real robot uses stepper motors so that once you tell
> it to stop turning it does.  Is there a way to get Gazebo to better
> model a stepper motor?  I am using Player 3.0.1, Gazebo 0.9.0, and ODE
> 0.11.1.
>
> Here is what I have in the model file.
>
> <body:cylinder name="left_wheel_body">
>  <xyz>0.0 0.1325 -0.2032</xyz>
>  <rpy>0 90 90</rpy>
>  <geom:cylinder name="left_wheel_geom">
>    <size>.0635 .032</size>
>    <mass>0.5</mass>
>    <visual>
>      <rpy>0 0 90</rpy>
>      <size>0.127 0.127 0.032</size>
>      <mesh>drivewheel.mesh</mesh>
>      <material>Gazebo/Black</material>
>    </visual>
>  </geom:cylinder>
> </body:cylinder>
>
> <body:cylinder name="right_wheel_body">
>  <xyz>0.0 -0.1325 -0.2032</xyz>
>  <rpy>0 90 90</rpy>
>  <geom:cylinder name="right_wheel_geom">
>    <size>.0635 .032</size>
>    <mass>0.5</mass>
>   <visual>
>      <rpy>0 0 90</rpy>
>      <size>0.127 0.127 0.032</size>
>      <mesh>drivewheel.mesh</mesh>
>      <material>Gazebo/Black</material>
>    </visual>
>  </geom:cylinder>
> </body:cylinder>
>
> <joint:hinge name="left_wheel_joint">
>  <body1>left_wheel_body</body1>
>  <body2>chassis_body</body2>
>  <anchor>left_wheel_body</anchor>
>  <anchorOffset>0 0 0</anchorOffset>
>  <axis>0 1 0</axis>
>  <erp>0.8</erp>
>  <cfm>10e-5</cfm>
> </joint:hinge>
>
> <joint:hinge name="right_wheel_joint">
>  <body1>right_wheel_body</body1>
>  <body2>chassis_body</body2>
>  <anchor>right_wheel_body</anchor>
>  <anchorOffset>0 0 0</anchorOffset>
>  <axis>0 1 0</axis>
>  <erp>0.8</erp>
>  <cfm>10e-5</cfm>
> </joint:hinge>
>
> <controller:differential_position2d name="controller1">
>  <leftJoint>right_wheel_joint</leftJoint>
>  <rightJoint>left_wheel_joint</rightJoint>
>  <wheelSeparation>0.265</wheelSeparation>
>  <wheelDiameter>0.127</wheelDiameter>
>  <torque>1</torque>
>  <interface:position name="position_iface_0"/>
> </controller:differential_position2d>
>
>
>
> ------------------------------------------------------------------------------
> Download Intel&#174; Parallel Studio Eval
> Try the new software tools for yourself. Speed compiling, find bugs
> proactively, and fine-tune applications for parallel performance.
> See why Intel Parallel Studio got high marks during beta.
> http://p.sf.net/sfu/intel-sw-dev
> _______________________________________________
> Playerstage-gazebo mailing list
> [hidden email]
> https://lists.sourceforge.net/lists/listinfo/playerstage-gazebo
>

------------------------------------------------------------------------------
Download Intel&#174; Parallel Studio Eval
Try the new software tools for yourself. Speed compiling, find bugs
proactively, and fine-tune applications for parallel performance.
See why Intel Parallel Studio got high marks during beta.
http://p.sf.net/sfu/intel-sw-dev
_______________________________________________
Playerstage-gazebo mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/playerstage-gazebo
Reply | Threaded
Open this post in threaded view
|

Re: Differential drive robot inertia in Gazebo

David Michal-3
I have already turned the torque way down and experimented with changing
the masses.  I added the additional parameters you suggested as well.
Unfortunately it didn't really change much.  The best that I have been
able to do so far is to keep the velocity low.  In my particular case it
would be better if I could turn some of the physics off for just the
robot's wheels and have it behave more like it does in Stage.  I have
done some experimentation with Microsoft Robotics Developer Studio as
well.  When I modeled the same robot there, they recommended that the
wheels should just be set to a given velocity instead of having the
physics engine try to compute their behavior.

On Thu, 2010-04-01 at 12:58 -0700, Nate Koenig wrote:

> Hello,
>
> You can reduce the torque parameter, and play with the masses.
>
> You can also modify the friction of the wheels. To do this add a the
> following parameters to a geom:
>
> <geom ...>
>   <kp>100000000</kp>
>   <kd>1.0</kd> <!-- Damping constraint -->
>   <bounce>0.0</bounce> <!-- How bouncy the surface is -->
>   <bounceVel>10</bounceVel> <!-- MAx velocity before bounce is applied -->
>   <mu1> BIG NUMBER </mu1>
>   <mu2> BIG NUMBER </mu2>
>   <slip1> small number (0.01) </slip1>
>   <slip2> small number (0.01)</slip2>
> </geom>
>
> The ODE manual has descriptions of all these parameters.
>
> -nate
>
> On Sun, Mar 28, 2010 at 9:41 PM, David Michal <[hidden email]> wrote:
> > I have modeled a differential drive robot in Gazebo.  The problem is
> > that when I driver the robot from Player it seems to have quite a bit of
> > inertia. When turning to the left or the right it overshoots the target
> > quite a bit.  The real robot uses stepper motors so that once you tell
> > it to stop turning it does.  Is there a way to get Gazebo to better
> > model a stepper motor?  I am using Player 3.0.1, Gazebo 0.9.0, and ODE
> > 0.11.1.
> >
> > Here is what I have in the model file.
> >
> > <body:cylinder name="left_wheel_body">
> >  <xyz>0.0 0.1325 -0.2032</xyz>
> >  <rpy>0 90 90</rpy>
> >  <geom:cylinder name="left_wheel_geom">
> >    <size>.0635 .032</size>
> >    <mass>0.5</mass>
> >    <visual>
> >      <rpy>0 0 90</rpy>
> >      <size>0.127 0.127 0.032</size>
> >      <mesh>drivewheel.mesh</mesh>
> >      <material>Gazebo/Black</material>
> >    </visual>
> >  </geom:cylinder>
> > </body:cylinder>
> >
> > <body:cylinder name="right_wheel_body">
> >  <xyz>0.0 -0.1325 -0.2032</xyz>
> >  <rpy>0 90 90</rpy>
> >  <geom:cylinder name="right_wheel_geom">
> >    <size>.0635 .032</size>
> >    <mass>0.5</mass>
> >   <visual>
> >      <rpy>0 0 90</rpy>
> >      <size>0.127 0.127 0.032</size>
> >      <mesh>drivewheel.mesh</mesh>
> >      <material>Gazebo/Black</material>
> >    </visual>
> >  </geom:cylinder>
> > </body:cylinder>
> >
> > <joint:hinge name="left_wheel_joint">
> >  <body1>left_wheel_body</body1>
> >  <body2>chassis_body</body2>
> >  <anchor>left_wheel_body</anchor>
> >  <anchorOffset>0 0 0</anchorOffset>
> >  <axis>0 1 0</axis>
> >  <erp>0.8</erp>
> >  <cfm>10e-5</cfm>
> > </joint:hinge>
> >
> > <joint:hinge name="right_wheel_joint">
> >  <body1>right_wheel_body</body1>
> >  <body2>chassis_body</body2>
> >  <anchor>right_wheel_body</anchor>
> >  <anchorOffset>0 0 0</anchorOffset>
> >  <axis>0 1 0</axis>
> >  <erp>0.8</erp>
> >  <cfm>10e-5</cfm>
> > </joint:hinge>
> >
> > <controller:differential_position2d name="controller1">
> >  <leftJoint>right_wheel_joint</leftJoint>
> >  <rightJoint>left_wheel_joint</rightJoint>
> >  <wheelSeparation>0.265</wheelSeparation>
> >  <wheelDiameter>0.127</wheelDiameter>
> >  <torque>1</torque>
> >  <interface:position name="position_iface_0"/>
> > </controller:differential_position2d>
> >
> >
> >
> > ------------------------------------------------------------------------------
> > Download Intel&#174; Parallel Studio Eval
> > Try the new software tools for yourself. Speed compiling, find bugs
> > proactively, and fine-tune applications for parallel performance.
> > See why Intel Parallel Studio got high marks during beta.
> > http://p.sf.net/sfu/intel-sw-dev
> > _______________________________________________
> > Playerstage-gazebo mailing list
> > [hidden email]
> > https://lists.sourceforge.net/lists/listinfo/playerstage-gazebo
> >
>
> ------------------------------------------------------------------------------
> Download Intel&#174; Parallel Studio Eval
> Try the new software tools for yourself. Speed compiling, find bugs
> proactively, and fine-tune applications for parallel performance.
> See why Intel Parallel Studio got high marks during beta.
> http://p.sf.net/sfu/intel-sw-dev
> _______________________________________________
> Playerstage-gazebo mailing list
> [hidden email]
> https://lists.sourceforge.net/lists/listinfo/playerstage-gazebo
>



------------------------------------------------------------------------------
Download Intel&#174; Parallel Studio Eval
Try the new software tools for yourself. Speed compiling, find bugs
proactively, and fine-tune applications for parallel performance.
See why Intel Parallel Studio got high marks during beta.
http://p.sf.net/sfu/intel-sw-dev
_______________________________________________
Playerstage-gazebo mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/playerstage-gazebo
Reply | Threaded
Open this post in threaded view
|

Re: Differential drive robot inertia in Gazebo

John Hsu-2
Hi,
I suggest turning up the torque limits, up about 2/3rd way before sim goes
unstable is probably where you'll get the better instantaneous response.
John


On Fri, Apr 2, 2010 at 7:38 PM, David Michal <[hidden email]>wrote:

> I have already turned the torque way down and experimented with changing
> the masses.  I added the additional parameters you suggested as well.
> Unfortunately it didn't really change much.  The best that I have been
> able to do so far is to keep the velocity low.  In my particular case it
> would be better if I could turn some of the physics off for just the
> robot's wheels and have it behave more like it does in Stage.  I have
> done some experimentation with Microsoft Robotics Developer Studio as
> well.  When I modeled the same robot there, they recommended that the
> wheels should just be set to a given velocity instead of having the
> physics engine try to compute their behavior.
>
> On Thu, 2010-04-01 at 12:58 -0700, Nate Koenig wrote:
> > Hello,
> >
> > You can reduce the torque parameter, and play with the masses.
> >
> > You can also modify the friction of the wheels. To do this add a the
> > following parameters to a geom:
> >
> > <geom ...>
> >   <kp>100000000</kp>
> >   <kd>1.0</kd> <!-- Damping constraint -->
> >   <bounce>0.0</bounce> <!-- How bouncy the surface is -->
> >   <bounceVel>10</bounceVel> <!-- MAx velocity before bounce is applied
> -->
> >   <mu1> BIG NUMBER </mu1>
> >   <mu2> BIG NUMBER </mu2>
> >   <slip1> small number (0.01) </slip1>
> >   <slip2> small number (0.01)</slip2>
> > </geom>
> >
> > The ODE manual has descriptions of all these parameters.
> >
> > -nate
> >
> > On Sun, Mar 28, 2010 at 9:41 PM, David Michal <[hidden email]>
> wrote:
> > > I have modeled a differential drive robot in Gazebo.  The problem is
> > > that when I driver the robot from Player it seems to have quite a bit
> of
> > > inertia. When turning to the left or the right it overshoots the target
> > > quite a bit.  The real robot uses stepper motors so that once you tell
> > > it to stop turning it does.  Is there a way to get Gazebo to better
> > > model a stepper motor?  I am using Player 3.0.1, Gazebo 0.9.0, and ODE
> > > 0.11.1.
> > >
> > > Here is what I have in the model file.
> > >
> > > <body:cylinder name="left_wheel_body">
> > >  <xyz>0.0 0.1325 -0.2032</xyz>
> > >  <rpy>0 90 90</rpy>
> > >  <geom:cylinder name="left_wheel_geom">
> > >    <size>.0635 .032</size>
> > >    <mass>0.5</mass>
> > >    <visual>
> > >      <rpy>0 0 90</rpy>
> > >      <size>0.127 0.127 0.032</size>
> > >      <mesh>drivewheel.mesh</mesh>
> > >      <material>Gazebo/Black</material>
> > >    </visual>
> > >  </geom:cylinder>
> > > </body:cylinder>
> > >
> > > <body:cylinder name="right_wheel_body">
> > >  <xyz>0.0 -0.1325 -0.2032</xyz>
> > >  <rpy>0 90 90</rpy>
> > >  <geom:cylinder name="right_wheel_geom">
> > >    <size>.0635 .032</size>
> > >    <mass>0.5</mass>
> > >   <visual>
> > >      <rpy>0 0 90</rpy>
> > >      <size>0.127 0.127 0.032</size>
> > >      <mesh>drivewheel.mesh</mesh>
> > >      <material>Gazebo/Black</material>
> > >    </visual>
> > >  </geom:cylinder>
> > > </body:cylinder>
> > >
> > > <joint:hinge name="left_wheel_joint">
> > >  <body1>left_wheel_body</body1>
> > >  <body2>chassis_body</body2>
> > >  <anchor>left_wheel_body</anchor>
> > >  <anchorOffset>0 0 0</anchorOffset>
> > >  <axis>0 1 0</axis>
> > >  <erp>0.8</erp>
> > >  <cfm>10e-5</cfm>
> > > </joint:hinge>
> > >
> > > <joint:hinge name="right_wheel_joint">
> > >  <body1>right_wheel_body</body1>
> > >  <body2>chassis_body</body2>
> > >  <anchor>right_wheel_body</anchor>
> > >  <anchorOffset>0 0 0</anchorOffset>
> > >  <axis>0 1 0</axis>
> > >  <erp>0.8</erp>
> > >  <cfm>10e-5</cfm>
> > > </joint:hinge>
> > >
> > > <controller:differential_position2d name="controller1">
> > >  <leftJoint>right_wheel_joint</leftJoint>
> > >  <rightJoint>left_wheel_joint</rightJoint>
> > >  <wheelSeparation>0.265</wheelSeparation>
> > >  <wheelDiameter>0.127</wheelDiameter>
> > >  <torque>1</torque>
> > >  <interface:position name="position_iface_0"/>
> > > </controller:differential_position2d>
> > >
> > >
> > >
> > >
> ------------------------------------------------------------------------------
> > > Download Intel&#174; Parallel Studio Eval
> > > Try the new software tools for yourself. Speed compiling, find bugs
> > > proactively, and fine-tune applications for parallel performance.
> > > See why Intel Parallel Studio got high marks during beta.
> > > http://p.sf.net/sfu/intel-sw-dev
> > > _______________________________________________
> > > Playerstage-gazebo mailing list
> > > [hidden email]
> > > https://lists.sourceforge.net/lists/listinfo/playerstage-gazebo
> > >
> >
> >
> ------------------------------------------------------------------------------
> > Download Intel&#174; Parallel Studio Eval
> > Try the new software tools for yourself. Speed compiling, find bugs
> > proactively, and fine-tune applications for parallel performance.
> > See why Intel Parallel Studio got high marks during beta.
> > http://p.sf.net/sfu/intel-sw-dev
> > _______________________________________________
> > Playerstage-gazebo mailing list
> > [hidden email]
> > https://lists.sourceforge.net/lists/listinfo/playerstage-gazebo
> >
>
>
>
>
> ------------------------------------------------------------------------------
> Download Intel&#174; Parallel Studio Eval
> Try the new software tools for yourself. Speed compiling, find bugs
> proactively, and fine-tune applications for parallel performance.
> See why Intel Parallel Studio got high marks during beta.
> http://p.sf.net/sfu/intel-sw-dev
> _______________________________________________
> Playerstage-gazebo mailing list
> [hidden email]
> https://lists.sourceforge.net/lists/listinfo/playerstage-gazebo
>
------------------------------------------------------------------------------
Download Intel&#174; Parallel Studio Eval
Try the new software tools for yourself. Speed compiling, find bugs
proactively, and fine-tune applications for parallel performance.
See why Intel Parallel Studio got high marks during beta.
http://p.sf.net/sfu/intel-sw-dev
_______________________________________________
Playerstage-gazebo mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/playerstage-gazebo