Controlling motors induvidually
This problem looks like an accidental problem, which is better to avoid completely. Unless you are designing some extreme robot rover or super heavy miner's truck with electrical transmission.

This problem can be named "implementing a 2 axis 4 motors gantry". One axis is X linear motion with velocity, torque, acceleration. Another axis is Theta angle of Yaw with position, velocity. The torque conditions are impacted by strong friction noise and semi-rigidness of chassis, wheels, rubber, aerodynamics, pitch, roll, gravity, all 6 axes of kinetic energy. Each axis involves all 4 motors. So there are at least 8-10 control loops for all axis positional data and derivatives.

The arduino will not help if your caret is heavy with high energy high speed motors. This is a very computationally intensive real-time multithreaded something with a timeslice below 1 millisecond. Extra added complexity to motion task comes a kinematics level, because of non-zero size of whole robot (a problem of translation of planned kinematic trajectory into motion trajectory for individual axes). It is possibly more efficient to replace the processing algorythms with a pilot (small person). 

You can start implementation with choosing how your processing board will read Theta angle and balance the torque. Normal approach is looking at prior art. The best practice in this setups is avoiding gantries and avoiding sharing motors between axes and using single torque source with mechanical calculator (gears) for balance (cardan, rod, transmission, single rigid axis for back wheels) for X axis. And separate zero torque Theta axis for turnable front wheels to make turns. The design is known as "Car".