From: Chris B. <chr...@gm...> - 2005-09-19 16:57:13
|
Hi,=20 Has anyone successfully got AMotors to work with universal or ball joints? According to the 2nd pyode tutorial, they won't work. But according to the ode manual, it should work, and some users of the ode mailing list have claimed to have it working. I notice that the ParamX3 definitions are missing from the pyode wrappers - is this deliberate? From my own tests, in User Mode I can't get the AMotor to do anything. In Euler mode only the 2nd axis control (ParamVel, ParamFMax2) seems to have any effect, the other axis controls don't do anything. Any ideas? Thanks, Chris |
From: Paul K. <pki...@in...> - 2005-09-19 23:39:48
|
I got AMotor limits working in Euler Mode. To do so, I added the following definitions to the pyx file.... ParamLoStop3 = 512+0 ParamHiStop3 = 512+1 Then the following code successfully adds limits to a balljoint.... am = ode.AMotor(self.world) am.attach (body1, body2) am.setMode(ode.AMotorEuler) am.setAxis(0, 1, [1, 0, 0]) # Second parameter must be 1 am.setAxis(2, 2, [0, 0, 1]) # Second parameter must be 2 am.setParam(ode.ParamLoStop, xLo) am.setParam(ode.ParamHiStop, xHi) am.setParam(ode.ParamLoStop2, yLo) am.setParam(ode.ParamHiStop2, yHi) am.setParam(ode.ParamLoStop3, zLo) am.setParam(ode.ParamHiStop3, zHi) Converting this to UserMode resulted in the limits not working at all. I was unable to find the problem. My guess is that there is an issue with PyODE's AMotor.setNumAxes or setAngle, but I couldn't track it down. Using EulerMode rather than UserMode has 2 issues for me. 1) The joint must be creating with the bodies "unbent" (ie. No rotation), since you can't use setAngle, and 2) you can't create a limit between a body and the environment (well I couldn't work out how to do it anyway) since am.setAxis(2, 2, [0, 0, 1]) fails if the second body is the ode.environment. So if anyone works out how to get this working with EulerMode, I'd love to know how they did it. Paul -----Original Message----- From: pyo...@li... [mailto:pyo...@li...] On Behalf Of Chris Bainbridge Sent: Tuesday, 20 September 2005 2:27 AM To: pyo...@li... Subject: [Pyode-user] amotor with ball joint? Hi, Has anyone successfully got AMotors to work with universal or ball joints? According to the 2nd pyode tutorial, they won't work. But according to the ode manual, it should work, and some users of the ode mailing list have claimed to have it working. I notice that the ParamX3 definitions are missing from the pyode wrappers - is this deliberate? From my own tests, in User Mode I can't get the AMotor to do anything. In Euler mode only the 2nd axis control (ParamVel, ParamFMax2) seems to have any effect, the other axis controls don't do anything. Any ideas? Thanks, Chris ------------------------------------------------------- SF.Net email is sponsored by: Tame your development challenges with Apache's Geronimo App Server. Download it for free - -and be entered to win a 42" plasma tv or your very own Sony(tm)PSP. Click here to play: http://sourceforge.net/geronimo.php _______________________________________________ Pyode-user mailing list Pyo...@li... https://lists.sourceforge.net/lists/listinfo/pyode-user |
From: Chris B. <chr...@gm...> - 2005-09-20 09:59:39
|
On 20/09/05, Paul Kinnane <pki...@in...> wrote: > I got AMotor limits working in Euler Mode. Do you know if ParamVel / ParamFMax work on all 3 axes in your setup? |
From: Chris B. <chr...@gm...> - 2005-09-20 17:07:25
|
On 20/09/05, Matthias Baas <ba...@ir...> wrote: > The tutorial is *not* referring to AMotors but to the internal motors of > the joints (which a ball joint doesn't have). Do you mean you can't just set ParamVel and ParamFMax on a ball joint? You have to use an AMotor? I didn't know that.. don't remember seeing it in the manual. On 20/09/05, Paul Kinnane <pki...@in...> wrote: >=20 > Converting this to UserMode resulted in the limits not working at all. > I was unable to find the problem. My guess is that there is an issue > with PyODE's AMotor.setNumAxes or setAngle, but I couldn't track it > down. This post (1) on the ode list has code for user mode ball joints with working limits (though I haven't tested it). (2) says there are some problems though - it sounds like ODE only considers the limit in the direction the joint is moving towards, instead of trying to satisfy both limits at the same time. (1) http://q12.org/pipermail/ode/2005-August/016510.html (2) http://q12.org/pipermail/ode/2005-July/016474.html |
From: Matthias B. <ba...@ir...> - 2005-09-26 14:45:51
|
Chris Bainbridge wrote: >>The tutorial is *not* referring to AMotors but to the internal motors of >>the joints (which a ball joint doesn't have). > > Do you mean you can't just set ParamVel and ParamFMax on a ball joint? > You have to use an AMotor? I didn't know that.. don't remember seeing > it in the manual. See section 7.5.1 "Parameter Functions" in the ODE manual (http://www.ode.org/ode-latest-userguide.html#sec_7_5_1). This sections lists the functions to get/set the limit/motor parameters for each joint type and there is no get/set function for a ball joint. - Matthias - |
From: Matthias B. <ba...@ir...> - 2005-09-20 15:45:14
|
Chris Bainbridge wrote: > Has anyone successfully got AMotors to work with universal or ball > joints? According to the 2nd pyode tutorial, they won't work. The tutorial is *not* referring to AMotors but to the internal motors of the joints (which a ball joint doesn't have). > mailing list have claimed to have it working. I notice that the > ParamX3 definitions are missing from the pyode wrappers - is this > deliberate? No. They're in there now, I've just checked it in. (but as was already mentioned, you can just add 256 to the ParamX2 values to get the ParamX3 values (or add 512 to ParamX)) >>From my own tests, in User Mode I can't get the AMotor to do anything. > In Euler mode only the 2nd axis control (ParamVel, ParamFMax2) seems > to have any effect, the other axis controls don't do anything. > > Any ideas? I have never used AMotors so far, so I'm afraid I can't help you there right now... but it looks as if this is actually an ODE issue and not really limited to PyODE (so asking in the ODE mailing list might a good idea, too). Paul Kinnane wrote: > Converting this to UserMode resulted in the limits not working at all. > I was unable to find the problem. My guess is that there is an issue > with PyODE's AMotor.setNumAxes or setAngle, but I couldn't track it > down. These methods do nothing but call the appropriate ODE C function, so I'd say the problem is already located in ODE itself... > can't use setAngle, and 2) you can't create a limit between a body and > the environment (well I couldn't work out how to do it anyway) since > am.setAxis(2, 2, [0, 0, 1]) fails if the second body is the > ode.environment. ode.environment is not an actual body but is just an alias for None. Connecting to the environment is just like calling the ODE C function with a second body argument of 0. Obviously the AMotor requires a real second body... - Matthias - |