[ODE] Still Spheres Vs Trimesh at Triangle Edges
Jaroslav Sinecky
sinecky at telefonica.net
Mon Apr 3 09:53:57 MST 2006
There is really an issue with contact depth in trimesh_sphere. There was a
change in depth calculation couple months ago. I didn't find it very good
because it introduced discontinuities. Now I have tried the svn trunk
version and found there was also a real bug introduced by this change (quite
difficutl to see at first glance but "side" value isn't actually distance of
sphere and triangle plane).
So I changed it to following: depth is calculated as triangle-sphere
penetration depth projected to triangle (=contact) normal. This is still
just aproximation but I find it better than previous two implementations.
Also reorganized a bit the code to pull out duplicate calculations. Checked
in svn trunk.
Still, you will get some oscilations when running over mesh edges (I get
them too, but they don't have noticable negative effect). This is because of
close contacts generated - one from each triangle, so implementing some
contacts postprocessing as suggested by Geoff is a good idea.
Also, if we implement the trimesh preprocessing for sphere collisions, it
could help a lot because all concave edges or edges between co-planar
triangles would be skipped from collisions (so for example rolling over
planar mesh should be as smooth as rolling over plane).
The last thing ... you could also play with #define MERGECONTACTS (at the
beginning of collision_trimesh_sphere.cpp). For me it works better to have
it turned off. In fact I think it could be turned off by default because
both our test cases (test_trimesh and test_moving_trimesh) and most of real
world cases work better like that. With this merge turned on, if you drop
sphere in test_trimesh, it last ages to get still and also a sphere behind
bunny's ears has hard time finding stable position with one contact only.
Hope this helps,
Jaroslav
> -----Original Message-----
> From: ode-bounces at q12.org [mailto:ode-bounces at q12.org]On Behalf
> Of kurimail
> Sent: Saturday, April 01, 2006 12:09 PM
> To: ode at q12.org
> Subject: Re: [ODE] Still Spheres Vs Trimesh at Triangle Edges
>
>
> Mmm, the problem i am having is not about the normals, it looks like a
> problem with depth. Although the normal is always (almost) vertical for
> the wheels, the depth is higher on the triangle edges, so the wheel jumps.
>
> I am going to try to comment the edge detection as suggested...
>
>
> > Hi,
> > I was going to reply with a note about this problem in regard to 1.0, so
> > I'm glad the issue came up. I found this is a terrible problem with ODE
> > and trimeshes, and in fact been a little puzzled why nobody else has
> > ever seemed to complain about it. I haven't had time to make up a
> > simple test showing the problem, but I'm sure a flat trimesh and rolling
> > sphere would clearly show what the poster was talking about. I've found
> > the contact normals vary from the correct 90 degrees to clearly wrong
> > glancing angles that are almost horizontal.
> >
> > In my case, I changed the trimesh collisions to always return the
> > triangle normal, rather than the "near to edge" direction. In the cases
> > where the object should be pushed "out" at a non-normal direction, there
> > is a triangle neighbour which will do exactly that. I didn't try
> > commenting out the edge collisions as suggested below, but that seems an
> > even better way to do it.
> >
> > Ideally it needs a post-process of merging contacts, which I found
> > helped correctness and stability (there is nothing like conflicting
> > contacts to spin an object to infinity). In my case it was done after
> > all object-object collision routines, to deal with the case of merging
> > contacts from different objects, such as from two trimeshes sitting next
> > to each other. The merging in my case was to take all contacts at the
> > same position and lerp the normals. As such, a sphere that hits a
> > trimesh with a box-edge feature would resolve from two contacts at 90
> > degrees into one contact at 45 degrees.
> >
> > Geoff
> >
> >
> > kurimail wrote:
> >> Thanks for your answer!.
> >>
> >> The problem is that spheres rolling over a trimesh jumps on every
> >> triangle
> >> edge. I have a 4-hinged spheres car, and when a sphere rolls over every
> >> triangle edge, a little jump occurs.
> >>
> >> As i sad, decreasing cfm solved a little the problem, but not all.
> >>
> >>
> >>
> >>> If you really think your problem would be solved if there were no
> >>> sphere-edge collisions (I doubt it because then your spheres should
> >>> sink
> >>> on
> >>> trimesh convex edges), you can eighter implement the preprocessed mesh
> >>> for
> >>> sphere collisions and submit it to svn (the more difficult way ;) or
> >>> take
> >>> much easier and faster way: have a look on GetContactData in
> >>> collision_trimesh_sphere.cpp and comment out all edge collisions (all
> >>> branches except region 0 - interior).
> >>>
> >>> Anyway, as I say I doubt this would be a good solution. What
> exactly is
> >>> the
> >>> problem you are experiencing?
> >>>
> >>>
> >>>
> >>>> -----Original Message-----
> >>>> From: ode-bounces at q12.org [mailto:ode-bounces at q12.org]On Behalf
> >>>> Of kurimail
> >>>> Sent: Friday, March 31, 2006 4:01 PM
> >>>> To: ode at q12.org
> >>>> Subject: [ODE] Still Spheres Vs Trimesh at Triangle Edges
> >>>>
> >>>>
> >>>> Hi again. I am still having troubles with spheres colliding at
> >>>> triangle
> >>>> edges. I don't know if the problem is the edge or the change from one
> >>>> triangle to another.
> >>>>
> >>>> I looked at the preproccesing trimesh, but it is only for ccylinders.
> >>>>
> >>>> I tried changing erp and cfm values. This helped, but not too much.
> >>>>
> >>>> I tried different scales, sizes, masses, mass shapes, etc... and
> >>>> nothing
> >>>> helped too much.
> >>>>
> >>>> I can accept any trick to avoid such jumps at triangle edge.
> >>>>
> >>>> Any help, please?
> >>>>
> >>>> Thanks in advance!
> >>>> _______________________________________________
> >>>> ODE mailing list
> >>>> ODE at q12.org
> >>>> http://q12.org/mailman/listinfo/ode
> >>>>
> >>>
> >>
> >> _______________________________________________
> >> ODE mailing list
> >> ODE at q12.org
> >> http://q12.org/mailman/listinfo/ode
> >>
> >>
> >>
> >
>
> _______________________________________________
> ODE mailing list
> ODE at q12.org
> http://q12.org/mailman/listinfo/ode
More information about the ODE
mailing list