[ODE] can"t get friction to lift an object with a robot arm

Jon Watte (ODE) hplus-ode at mindcontrol.org
Sun Sep 2 12:03:07 MST 2007


You need to turn on the better friction model, and set a sufficiently 
high "mu".

Btw: you're not supposed to move the geoms themselves; you're supposed 
to move the body (typically through applying forces), and the geom will 
follow.

Cheers,

          / h+


pastor wrote:
> hey there,
>
> I am currently working on making a robot arm grasp an object and place it
> somewhere. I calculate the arm configuration externally and in order to get
> some interaction between the robot and the boxes (modeled as bodies) I set
> some geoms (dCappedCylinder) around the fingers and update their position
> and orientation according to the current robot configuration. During
> grasping everything seems to work.. the finger collide with the object an
> pushes it into the right directions... after closing the gripper the
> collision remains but I cannot lift this stupid box. I played with all the
> parameters... what am I doing wrong ? Waht needs to be done to the amount of
> force which allows me to lift an objet... the pase some code (which shows
> the current set of parameters... I had a lot of different setttings...) so
> that you have some idea what I really do... I hope this helps. I also
> include a little movie which shows this behaviour...
>
> http://manet.usc.edu/~pastor/miss_placing.avi miss_placing.avi 
>
> hope you understand my problem... 
>
> I really need some advice ! so... thanks for any help
>
> peter.pastor at gmail.com
>
> ---------------------------- code
> --------------------------------------------------------------
> static void nearCallback (void *data, dGeomID o1, dGeomID o2) {
>   dBodyID b1 = dGeomGetBody(o1);
>   dBodyID b2 = dGeomGetBody(o2);
>
>   dContact contact[MAX_CONTACTS];
>
>   int i;
>   for(i=0; i<MAX_CONTACTS; i++)
>     {
>       /*       contact[i].fdir1[0] = 0.3; */
>       /*       contact[i].fdir1[1] = 0.3; */
>       /*       contact[i].fdir1[2] = 1.0; */
>       /*       normalize3DArray(contact[i].fdir1); */
>       /*       // contact[i].fdir1[3] = 0; */
>       contact[i].surface.mode = /* dContactMotion1 | *//*  dContactApprox1 |
> */ dContactSoftERP /*| dContactSlip1 | dContactSlip2 */ /* |dContactFDir1 */
> |/* dContactBounce | */ dContactSoftCFM  | dContactMu2;
>       contact[i].surface.mu = dInfinity;
>       //contact[i].surface.mu = 1;
>       contact[i].surface.mu2 = dInfinity;
>       // contact[i].surface.bounce = 0.005;
>       // contact[i].surface.bounce = 0;
>       // contact[i].surface.bounce_vel = 0.8;
>       // contact[i].surface.soft_cfm = 1e-04;
>       contact[i].surface.soft_cfm = 1e-05;
>       contact[i].surface.soft_erp = 2; 
>    }
>
>   int numc = dCollide(o1, o2, MAX_CONTACTS, &contact[0].geom,
> sizeof(dContact));
>   if(numc) {
>     for(i=0; i<numc; i++) {
>       dJointID c = dJointCreateContact(World, contactgroup, contact + i);
>       dJointAttach(c, b1, b2);
>     }
>   }
> }
>
>
>   


More information about the ODE mailing list