How to fix jumpy stuttering while picking up Rigidbody objects?

How do I get rid of the stuttering? This is very apparent when the mouse is moving slowly. I also know players who are used to seeing 60FPS gameplay will get headaches because of this.

Full code:

Child class. This class is placed on the tiny little sphere, which acts like a cursor. This is the main component that’s driving the pick-up game mechanic:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class FixedImpulseCursor : FixedCursor {
    public Camera mainCamera;
    public float intensity;

    public override void Start() {
        base.Start();
        this.intensity = 1000f;
    }

    public override void Update() {
        if (Input.GetMouseButton(0)) {
            this.isPicking = true;
            if (this.detectedObjects.Count > 0) {
                this.pickedObject = this.detectedObjects[0].gameObject;
            }
        }
        else {
            this.isPicking = false;
            if (this.pickedObject != null)
                this.pickedObject = null;
        }

        if (this.isPicking) {
            if (this.pickedObject != null) {
                if (this.cursor.GetComponent<FixedJoint>() == null) {
                    this.joint = this.cursor.gameObject.AddComponent<FixedJoint>();
                    this.joint.connectedBody = this.pickedObject.GetComponent<Rigidbody>();
                    if (joint.connectedBody == null) {
                        Object.Destroy(joint);
                    }
                    this.joint.connectedAnchor = this.pickedObject.transform.position;
                    this.joint.enableCollision = false;
                    this.joint.anchor = this.cursor.transform.position;
                }
                if (Input.GetKey(KeyCode.E)) {
                    this.LetGo();
                    this.isPicking = false;
                    Rigidbody body = this.pickedObject.GetComponent<Rigidbody>();
                    if (body != null) {
                        body.AddForce(this.mainCamera.transform.forward * this.intensity);
                    }
                    this.pickedObject = null;
                }
            }
        }
        else {
            this.LetGo();
        }
    }
}

Parent class:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class FixedCursor : MonoBehaviour {
    public SphereCollider cursor;
    public bool isPicking;
    public List<Transform> detectedObjects = new List<Transform>();

    protected GameObject pickedObject;
    protected FixedJoint joint;

    protected void LetGo() {
        FixedJoint joint = this.cursor.gameObject.GetComponent<FixedJoint>();
        if (joint != null) {
            this.joint.connectedBody.drag = 0f;
            this.joint.connectedBody.angularDrag = 0.05f;
            Object.Destroy(joint);
        }
    }

    public virtual void Start() {
        this.isPicking = false;
    }

    public virtual void Update() {
        if (Input.GetMouseButton(0)) {
            this.isPicking = true;
            if (this.detectedObjects.Count > 0) {
                this.pickedObject = this.detectedObjects[0].gameObject;
            }
        }
        else {
            this.isPicking = false;
            if (this.pickedObject != null)
                //this.pickedObject.transform.parent = null;
                this.pickedObject = null;
        }

        if (this.isPicking) {
            if (this.pickedObject != null) {
                if (this.cursor.GetComponent<FixedJoint>() == null) {
                    this.joint = this.cursor.gameObject.AddComponent<FixedJoint>();
                    this.joint.connectedBody = this.pickedObject.GetComponent<Rigidbody>();
                    if (joint.connectedBody == null) {
                        Object.Destroy(joint);
                    }
                    this.joint.connectedAnchor = this.pickedObject.transform.position;
                    this.joint.enableCollision = false;
                    this.joint.anchor = this.cursor.transform.position;
                }
            }
        }
        else {
            this.LetGo();
        }
    }

    public void OnTriggerEnter(Collider other) {
        if (!this.detectedObjects.Contains(other.transform) && other.transform.tag.Equals("Object"))
            this.detectedObjects.Add(other.transform);
    }

    public void OnTriggerExit(Collider other) {
        if (this.detectedObjects.Contains(other.transform) && other.transform.tag.Equals("Object"))
            this.detectedObjects.Remove(other.transform);
    }
}

Toggle interpolation on for the picked up object and turn it back off after releasing.

It somewhat reduces the stuttering, but not a whole lot. If I pick up the object and look up into the sky, then spin around and around, the stuttering is still there, like really apparent.

I’m still investigating this problem. If you have any other suggestions, please feel free to post them.