Problem with Joint Interaction
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report
I have some Joints and some Motion Links between SOME of the Joints.
One of the Joints I explicitly set to a 45 degree angle, via a C++ script.
In particular, note that there is NO MOTION LINK between the right-most Joint on the left plate and the left-most Joint on the right plate. The Joint that I set to 45 degrees as well as the other two Joints on that plate are all referenced to the plate. If I move that plate I EXPECT all of those Joints to stay exactly as they are, their positions being defined RELATIVE to that plate. In particular, I EXPECT that 45 degree angle of the left-most Joint to remain as a 45 degree angle no matter how I might subsequently manipulate the orientation of that plate. That's how it would work in the real world and (I had hoped) that's how it's supposed to work in this simulation.
However, ...
The left-most gear on the right plate is rigidly bound to the left plate. That means that rotating the Joint that's attached to the gear not only rotates the gear but also rotates the left plate. if I set the angle of the Left-most Joint on the right plate to -90 degrees it does indeed cause that left plate to get set to a -90 degree angle BUT, have a look at what happens to the angle of the left-most Joint...
That Joint, which HAD been explicitly set to 45 degrees is now at 85 degrees. I had expected it to REMAIN at 45 degrees, that angle being relative to the plate to which it's attached. But it doesn't stay put. Angling the plate causes the Joint to get further angled as well.
Am I doing something wrong here? Is the Revolute angle of a Component indeed NOT relative to the Component that it's Revolute-ly joined to?
My "fudged" solution is to explicitly set that angle to 45 degrees each and every time I manipulate that OTHER angle, the one which results in the left plate moving. But, man, that's a horrible "solution". Imagine if there were dozens of various joints, each supposedly independent of one another, but each of which had to be explicitly set whenever any one of them got changed.