private void updateXGaitSettings() {
    xGaitSettingsProvider.getSettings(xGaitSettings);

    // increase stance dimensions as a function of velocity to prevent self collisions
    double strideRotation = planarVelocityProvider.get().getZ() * xGaitSettings.getStepDuration();
    double strideLength =
        Math.abs(2 * planarVelocityProvider.get().getX() * xGaitSettings.getStepDuration());
    double strideWidth =
        Math.abs(2 * planarVelocityProvider.get().getY() * xGaitSettings.getStepDuration());
    strideLength += Math.abs(xGaitSettings.getStanceWidth() / 2 * Math.sin(2 * strideRotation));
    strideWidth += Math.abs(xGaitSettings.getStanceLength() / 2 * Math.sin(2 * strideRotation));
    xGaitSettings.setStanceLength(
        Math.max(
            xGaitSettings.getStanceLength(),
            strideLength / 2 + minimumStepClearanceParameter.get()));
    xGaitSettings.setStanceWidth(
        Math.max(
            xGaitSettings.getStanceWidth(), strideWidth / 2 + minimumStepClearanceParameter.get()));
  }