Cesium Copy Camera scene

I am trying to copy Camera (Where I'm looking in cesium globe) & trying to capture those values (Lat, Lon, Heading, Pitch, Roll etc). IF I try to use these values again & do a flyTo, it shows me different scene. Slightly off than original.

Below code I used to capture values of current scene. I doubt its not capturing camera, but its capturing where mouse is clicked in scene.
Any code which copies, scene & lookAt parameters?

  handler.setInputAction(function(movement) {
    var ray = viewer.camera.getPickRay(movement.endPosition);
        var position = viewer.scene.globe.pick(ray, viewer.scene);
        if (cartesian) {
      var cartographic = ellipsoid.cartesianToCartographic(cartesian);
      longitudeString = Cesium.Math.toDegrees(cartographic.longitude);
      latitudeString = Cesium.Math.toDegrees(cartographic.latitude);
      var cartographicAlt = ellipsoid.cartesianToCartographic(viewer.scene.camera.position).height;
      altitudeString = cartographicAlt;
      pitchString = Cesium.Math.toDegrees(viewer.scene.camera.pitch);
      rollString = Cesium.Math.toDegrees(viewer.scene.camera.roll);
      headingString = Cesium.Math.toDegrees(viewer.scene.camera.heading);
      tiltString = pitchString + 90;


I don’t understand why you are use getPickRay.

Regardless, use viewer.scene.camera.positionWC to get the camera’s current position. Everything else you are doing looks fine.

Any differences you see when you are trying to reset the camera may be because you are converting the position to a cartographic and back.