1.7.0 ODE Internal Error

Hi,

Thanks for Panda3D 1.7.0, it looks great and I hope to use many of it’s fantastic new features :smiley:.

But currently I’ve encountered a problem with ODE on Ubuntu 9.10 32 bit. Namely, I’m getting a lot of “ODE Internal Errors”.

ODE INTERNAL ERROR 1: assertion "skip >= (int)sizeof(dContactGeom)" failed in dCollideCCTL() [collision_trimesh_ccylinder.cpp]

…happens at this code:

def handleCollisions(self, arg, geom1, geom2):
    entry = OdeUtil.collide(geom1, geom2)

This code is executed as callback from self.space.collide("", self.handleCollisions).

One of those geoms is a Capsule (CappedCylinder), the other is Trimesh. I thought the error is related to Trimesh, but I got an almost identical error for Capsule vs. Ray.

Another error is related to setting parameters for a Capsule geom using OdeCappedCylinderGeom.setParams(radius, length) and looks like this:

ODE INTERNAL ERROR 2: Bad argument(s) in dGeomCapsuleSetParams()

Anyone has any idea where those might come from? None of that happened in 1.6.2. Is 1.7.0 built with debugging enabled in ODE?

Thanks in advance for any suggestions.

On a side note - I gotta say that Ode’s internal errors are not the most informative ones I’ve seen in my life ;D.

For the record, 1.7.0 is built with whatever ODE is in the ubuntu repositories. It could very well be a debug build.

@Rdb

Ah, yes, I forgot I saw the ODE as a dependency when I installed 1.7.0.

Also, I’ve checked how ODE works in 1.7.0 with the ODE Collision Detection Sample from the Manual and got another error there as well :confused:

ODE Message 2: mass must be > 0 in dMassCheck() File mass.cpp Line 49

ODE Message 2: mass must be > 0 in dMassCheck() File mass.cpp Line 49

ODE INTERNAL ERROR 1: assertion "dMassCheck(mass)" failed in dBodySetMass() [ode.cpp]

Just a thought, wouldn’t it be a good idea to deal with ODE the same way as in previous versions of Panda?

Well, the issues are really in your code - you have to listen to the error messages.
The fact that you haven’t gotten these errors before doesn’t mean we should disable them. IMHO, I think its best to keep it a debug build.

Guess you’re right, it was just a humble suggestion. It would sure be cool to have a code that doesn’t fail when run under debug build :P.

Still, I don’t really know what to do with those errors. With the collide one - Both geoms are indeed geoms, none of them is empty, I have no idea what’s wrong here. None at all… Same with the setParams one - both arguments are float, which is what they should be if I’m correct. So I’m completely stuck. I’m trying to understand the error messages, but it seems like I can’t. A suggestion as to where the problem might be would be very, very helpful and appreciated.

Hm… sorry, I’m not an ODE expert.

Yeah, now I’m getting hit by this issue. I’ve tried the same example provided in the Manual as well as a thread on the forum that covered a similar ODE collision mechanism, but it seems that no matter what I try it returns this:

The OdeWorld, OdeSimpleSpace and such all set up just fine. It’s only when I create an object with mass that this occurs. Relevant code:

object.odeBody = OdeBody(self.odeWorld)
object.mass = OdeMass()
object.mass.setBox(50, 1, 1, 1)
object.odeBody.setMass(object.mass)

I tried commenting out setMass(), and I got this, which can be expected, but at least shows a different error message:

My estimate (even though I admittedly haven’t looked at the source code of ODE in Panda3D) is that something is acting screwy with either OdeMass or the OdeBody.setMass() procedure. (Of course, I’m probably just stating the obvious.)

Oh, and one final note that may or may not be useful: I use the latest from CVS; not the version that was released with 1.7.0.

Yeah, it is obvious that it is indeed a build issue. I’m looking into it.