Physics - friction (ball + floor)
Hi, I'm now expanding my legged robot simulator: now it plays with a little ball. OK, "plays" may be a bit of an overstatement ;), but I've run into a problem. There seems to be no friction between the ball and the floor.
Basically, once the robot kicks the ball, it goes on forever as if there was no friction between it and the floor. I played with the physics parameters (set-e , set-eT & set-mu) but so far haven't been able to make the ball naturally slow down as it rolls on the floor.
The "Gravity" demo has an example of a ball rolling down stairs, adding a floor object at the bottom shows that the ball doesn't stop due to friction. Is this a bug or is there a specific combination of set-e/set-eT/set-mu that could achieve this effect?
Any help would be highly appreciated.
Note: To test this issue on the Gravity demo, under Demos>Gettting-Started, simply add this to the variables section:
floor (object).
And then after "theBall = new Ball." add:
floor = new Floor.
The ball will move slowly, but at a constant speed, without progressively slowing down.

Physics - friction (ball + floor)
This is a limitation of the physics engine, unfortunately. There is no "rolling friction" in ODE. Some workarounds are described here: http://ode.org/cgi-bin/wiki.pl?action=browse&diff=1&id=RollingFrictionOrAerodynamicDrag, though you'll have to write implement them in breve yourself. If you do come up with a good solution on the breve level, please post it here and I can incorporate it into the class files.
- jon
Physics - friction (ball + floor)
Thanks for the link. The solution suggested is exactly what I'm using, but it felt a bit hackish, so I wanted to be sure I wasn't missing anything. So far I'm doing this with steve code, but if I end up modifying breve's code I'll send you any changes I make.
Physics - friction (ball + floor)
It seems to me that you could have the ball do a collision detection with the platform it is on (or isn't). If the ball is not touching a floor, then it would behave normally. If it is touching the floor, then each platform object could have a friction value assigned to it, and when the ball object is touching one, that friction value is used to slow the ball at a proper rate. This allows different platforms to have different friction values, such as the ball on a carpet versus a flat surface. I don't think this would be all that difficult to implement, either.
Moto