I've done something similar for a sentry enemy that chases players that it sees. From what I can see, the main problem is that the enemies aren't keeping track of the player.
onready var end_pos = $Player/Position2D.position
Instead you should do:
onready var player = $Player/Position2D
var e = enem.instance()
e.position = pos2
e.kinematic_goal = player
e.nav = navv
And then in the enemy:
path = nav.get_simple_path(position, kinematic_goal.position, false) # Note use of kinematic_goal node to get up-to-date position of player
if path.size() > 1:
var d = position.distance_to(path)
if d > 2:
position = position.linear_interpolate(path, (WALK_SPEED * delta)/d)
update_path() # IMPORTANT BIT
Technically, you could just call updatepath() only when path.size == 0, but I've found that it makes the enemies feel more responsive when they recalculate their direction more consistently (you could also add a counter to updatepath every couple of frames).