- changed status to open
Inconsistent angular motor API behavior in dAMotorEuler mode
It seems that the axis setup in dAMotorEuler
mode doesn't take automatically into consideration if the joint bodies have been switched (dJOINT_REVERSE
flag set) when computing the global axis:
https://bitbucket.org/odedevs/ode/src/4aaba9085576c48d1a6747a9df4aab25c74a8387/ode/src/joints/amotor.cpp?at=default&fileviewer=file-view-default#amotor.cpp-59
Thus to get the correct behavior the rel
value passed in the dJointSetAMotorAxis
function has to be manually switched, whereas in dAMotorUser
mode everything is handled automatically and internally.
normal case (dJOINT_REVERSE
flag node set):
dJointSetAMotorAxis(0, 1, a0.x, a0.y, a0.z);
dJointSetAMotorAxis(2, 2, a2.x, a2.y, a2.z);
In dJOINT_REVERSE
you have to use:
dJointSetAMotorAxis(0, 2, a0.x, a0.y, a0.z);
dJointSetAMotorAxis(2, 1, a2.x, a2.y, a2.z);
It seems that the computeGlobalAxis
function should check if the bodies were switched and automatically adapt the computations.
Otherwise if the user has to manually handle the case where the first body is NULL, then there is no advantage in allowing the user to create a joint with the first body NULL and using the dJOINT_REVERSE
flag.
Comments (4)
-
Account Deactivated -
Account Deactivated - changed status to resolved
-
reporter Hi Oleh,
thank you. I will test as soon as possible and let you know.
-
Account Deactivated The commit has been pushed to BitBucket the previous day
- Log in to comment