[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