From: Bill C. <we...@pr...> - 2012-05-21 18:16:19
|
On 5/21/2012 9:50 AM, James Thomas wrote: > In my experience there is a limitation which prevents summing masses > except at their cg. In general, in order to make a single body with a > complex mass you need to use transform geoms. Unfortunately I'm not > sure whether applying the rotation to the transform geom solves your > problem. Looking at my code I have a comment that I need to use > mass.rotate() but then I don't. I may have just punted and left it as > a loose end. My code is using the Ode implementation in Panda3d which > is based on a different version of ODE and does not use transform > geoms so I can't really help you with code specifics. > > JT > > On Sat, May 19, 2012 at 5:23 PM, Bill Call <we...@pr... > <mailto:we...@pr...>> wrote: > > Hi : > > I'm trying to build a rigid-body simulation using PyODE/PyOpenGL. > Since > I'm just doing rigid-body, it is my understanding that I have no > need > for joints; I just need to add masses to my body at the appropriate > translations/rotations. > > I have a number of cylindrical masses in my body. These cylinders > have > fixed positions and rotations within the body, but are not necessarily > aligned with the X, Y or Z axis. PyODE does not bind the rotateMass() > function from ODE; it only allows me to specify an X, Y or Z > orientation > for cylindrical mass (at creation time). This means that I am > unable to > rotate my cylindrical masses to the correct orientation. > > My guess is that this would not be a problem if each of these > masses had > their own Body; I could just rotate the body after the mass was bound. > Doing doing it that way might work, but it would mean connecting the > cylinders to the main body via joints, and what little documentation > there is seems to contraindicate the use of joints for rigid-body > simulations. > > My questions are as follows: > > 1) Am I correct in my assumption that I must rotate/translate the mass > tensor to reflect the true location/orientation of my cylindrical > masses > within the containing body? It seems (to me) to be intuitively > obvious > that I do, but I don't put much stock in my intuition regarding this > subject. > > 2) If the answer to (1) is "yes", then can anybody point me a rotation > implementation? If "no", then would someone be willing to explain > why not? > > I have already spent a lot of time Googling about for this > information, > but I am not sufficiently grounded in the subject to really understand > the answers I have been able to find on my own; not well enough to > write > a function to rotate inertial tensors, anyway. > > Thanks in Advance, > > > Bill Call > > > > > > ------------------------------------------------------------------------------ > Live Security Virtual Conference > Exclusive live event will cover all the ways today's security and > threat landscape has changed and how IT managers can respond. > Discussions > will include endpoint security, mobile security and the latest in > malware > threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/ > _______________________________________________ > Pyode-user mailing list > Pyo...@li... > <mailto:Pyo...@li...> > https://lists.sourceforge.net/lists/listinfo/pyode-user > > > > > ------------------------------------------------------------------------------ > Live Security Virtual Conference > Exclusive live event will cover all the ways today's security and > threat landscape has changed and how IT managers can respond. Discussions > will include endpoint security, mobile security and the latest in malware > threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/ > > > _______________________________________________ > Pyode-user mailing list > Pyo...@li... > https://lists.sourceforge.net/lists/listinfo/pyode-user James: Thanks for your reply. I am using transform geoms. As you note I have no choice in this matter as PyODE does not support offsets. The transform geoms seem to be working correctly; all my geoms render in the correct location, even when rotation/translation is applied to the parent body. It is also true the ODE requires that a single body with multiple masses have its CoG at (0, 0, 0); this I have also done. In any event, the transform geoms don't help, because mass is bound to bodies, not geoms. I assume that if each of my geoms had its own body, mass rotation wouldn't be an issue. Interestingly, I did try an experiment in which I created a body with a single cylinder geom and cylinder mass, then rotated the body. Examining the inertia tensor before and after the rotation shows that the tensor did not change. This doesn't really surprise me; I assume it means that the tensor is is terms of the bodies coordinate system, which is presumably constant. I don't know about Panda3d, but the PyODE bindings don't support mass.rotate(); perhaps this is also a problem for Panda3d, and this is why you did not implement? In any event, I cannot imagine how this could not be important. If the tensors for the off-axis masses are not rotated/translated correctly, then the summed inertial tensor for the body will be off, which is not a good thing for my application. I am currently attempting to work around the problem by reverse-engineering the orignal ODE roatate mass code from C++ to python. Since I only have to rotate each affected mass once, at the time I construct my body, the fact that performance will be poor is not a factor. This seems to be working, but I am currently setting up a test to compare the output of my Python dMassRotate() function with that of ODE. Regards, Bill C. |