Question
Assembly-to-subassembly constraints behaving inconsistently when several sub-assemblies deep
- January 27, 2022
- 2 replies
- 4821 views
Edit: We managed to reduce our problem to the simplest case and have attached an example of it below. I removed the original less-informed message and replaced it with a better-informed explanation, which is why the first reply now sounds completely unrelated.
I'm mentoring a FIRST Robotics team, and we think we've found a bug, but we're not 100% certain. We spent a lot of time designing a robot (which works great), but when we try to place our robot as a sub-assembly inside another assembly which contains the playing field, the robot stops working properly when we use the grab tool. (Sometimes the parts come off the robot, sometimes mechanisms freeze.)
We reduced the problem to a simple two-body test case, attached below.
Here's how to recreate the issue:
- First, place a part called BLUE in an assembly with a default constraint.
- Create a second assembly, and place the first assembly in it via a csys-to-csys constraint.
- Create a third assembly, and place a second part in it called BROWN with a default constraint. Add the second assembly via a part-to-part constraint.
- Create a fourth assembly. Place the third assembly in it with a default constraint.
CAN_PULL_BLUE_FROM_BROWN_HERE
\ default
CANNOT_PULL_BLUE_FROM_BROWN
| default
BROWN
\ blue-to-brown
CONSTRAINED_BY_BLUE_TO_BROWN
\ csys-to-csys
CONSTRAINED_TO_PARENT_VIA_CSYS
| default
BLUE
Start by opening the CAN_PULL_BLUE_FROM_BROWN_HERE assembly. If you grab the blue block, you can pull it away from the brown block. You shouldn't be able to. Press regenerate, and the block jumps back.
Notice that the only thing inside CAN_PULL_BLUE_FROM_BROWN_HERE is the subassembly CANNOT_PULL_BLUE_FROM_BROWN which is simply attached with a default constraint. If you now open that subassembly in a separate window, notice you now CANNOT pull the blue block away from the brown block --- exactly as expected!
Now go back to CAN_PULL_BLUE_FROM_BROWN_HERE (because it's the only way you can see the problem.) Inside CANNOT_PULL_BLUE_FROM_BROWN is a brown cube representing the ground body. Attached to the ground body is an assembly called CONSTRAINED_BY_BLUE_TO_BROWN, which is constrained via a blue-to-brown connection.
Inside CONSTRAINED_BY_BLUE_TO_BROWN is CONSTRAINED_TO_PARENT_VIA_CSYS, which is constrained csys-to-csys. It also contains the blue block.
If you move the blue block from CONSTRAINED_TO_PARENT_VIA_CSYS to CONSTRAINED_BY_BLUE_TO_BROWN, everything works properly. If you change the constraint of CONSTRAINED_TO_PARENT_VIA_CSYS to default, everything works properly. If you don't have this system embedded in so many layers, everything works properly.
Is this a bug, or did we do something we weren't supposed to do?

