instead of adding a hard constraint you may first want to try a penalty of
cost += 10000* self.routing.solver().Max(used_vehicles)==self.routing.solver().Min(used_vehicles)
to see if the solver can find a feasible solution, or is there a bug in your program. It sometimes helps to relax the problem to help solver find initial feasible solution which might be difficult to reach in a more constrained original problem.