Can i control this all with one arduino uno i have?
because i think i need 4 external interrupts. 1 for each encoder channel. and i only have 2 on the Uno. or should i use only channel per encoder? but then i don't know the rotation direction i think...?
You've set the motor spinning in one direction, haven't you? You should be able to read just one channel, to get the number of pulses. The direction is implied by the direction the motor is going.
for the position control i need to make a PID control per motor
Why? PID is used when there is not a direct, immediate relationship between an action and a reaction. For instance, if you set the PWM out to 150, and an LED is attached, the LED will nearly instantaneously reach the specified brightness. So, PID is not needed.
On the other hand, if you apply PWM to a motor, it can take a measurable amount of time for the motor to get to speed (especially if you are measuring the speed of a robot rather than the motor), so, you'd apply a higher than necessary PWM value, and then ramp that down as the robot came up to speed. PID measures the input (speed), and computes an output (PWM value) based on the difference between the input and a set point (desired speed).
As the robot goes over varying terrain, and wheel slippage occurs, the PWM value is increased to maintain a constant forward speed. If the wheel slippage is reduced (off the ice onto pavement), PWM can be reduced to maintain a constant speed.
So, what is it that PID will do for your situation?