How can I add smooth movement to a RigidBody?

I’ve been trying to work on a stealth game where precise, smooth movement is key. For this reason, at first, I decided to use a Character Controller on my FPS Character, however, another key element of my game is a grapple gun, this involves Springjoints, which do not seem to work with Character Controllers.

Here is a quick overview of the problem:

Character Controller:

 - Pro: Movement is precise and smooth, the character only moves while the key is pressed. 
 - Con: Physics and Springjoints do not seem to work.

Rigidbodies:

 - Pro: Physics
 - Con: Movement; The character after the key is pressed. Friction is too sluggish, while  
   Sleep() is very Jolt-like

I’m looking fora way to either apply physics to a Character Controller or implement Character Controller-like movement with a Rigidbody.

Here is a link to the project:
RigidBody: GrapplyGameR

Character Controller: GrapplyGame

Short answer : You can create a target destination using user’s input then you can use the SmoothDamp method to move smoothly towards the target.

Rigidbody rb = GetComponent<Rigidbody>();
Vector3 targetVel = new Vector3();
Vector3 refVel = Vector3.zero;
float smoothVal = .2f; // Higher = 'Smoother'  

rb.velocity = Vector3.SmoothDamp(rb.velocity, targetVel, ref refVel, smoothVal);

If you only want to make the rigidbody look smooth, you can use the interpolation setting in rigidbody components.