AddForce and come to a smooth stop

After I attach a (hand) rigidbody to another rigidbody with a FixedJoint, how can I use AddForce() to move the whole thing to a target location, and have it stop on the target?

When not attached, I use the following to move an RB to a target:

        Vector3 dist = MoveToTarget.transform.position - Hand.transform.position;
        // calc a target vel proportional to distance (clamped to maxVel)
        Vector3 tgtVel = Vector3.ClampMagnitude(toVel * dist, maxVel);
        // calculate the velocity error
        Vector3 error = tgtVel - HandRb.velocity;
        // calc a force proportional to the error (clamped to maxForce)
        Vector3 force = Vector3.ClampMagnitude(gain * error, maxForce);
        HandRb.AddForce(force);
        PlayerRb.AddForceAtPosition(-1*force, transform.position);

This works quite well, for very specific values of toVel, gain, and mass.
However, as soon as I attach the hand to something else, the algorithm above produces highly erratic motion. I think I can control it somewhat better if I tweak the toVel, maxForce and gain to suit, but I need to calculate this mathematically, not through trial and error.
Does the ratio of mass between hand and attached object matter? Is there a better algorithm which I can use which is not so sensitive to the involved masses?

As long as nothing is rotating and you start with identical velocities for both bodies, you’d need the accelerations of the two bodies to be the same, not the force. Are both masses the same? If not, try setting them the same and see if that works. If it does, then compute a different force for each body proportional to their masses so the accelerations (and therefore velocities) will match.

Its in zero-g, everything is free to rotate. The initial velocities are arbitrary (though are not extremely different). If I match the accelerations, this does not mean they are at the same place, just that they hold a fixed distance between them. .