When a contact between two active robots (or when the only active robot is the second robot in a contact) is added, the X_b1_b2 transformation is encoded into the transformation for b2 to the contact frame (X_b2_cf).
However, when we allow the frames to move relatively to each other (using a DoF matrix), we implicitly allow this X_b1_b2 transformation to change over time.
We should account for the change in the X_b1_b2 transformation that is allowed by this DoF. Otherwise, the DoF allows seemingly arbitrary motions of the two contact frames.
When a contact between two active robots (or when the only active robot is the second robot in a contact) is added, the X_b1_b2 transformation is encoded into the transformation for b2 to the contact frame (X_b2_cf).
However, when we allow the frames to move relatively to each other (using a DoF matrix), we implicitly allow this X_b1_b2 transformation to change over time.
We should account for the change in the X_b1_b2 transformation that is allowed by this DoF. Otherwise, the DoF allows seemingly arbitrary motions of the two contact frames.