Can you verify the update function is only called once per timer period? Just want to make sure multiple timers are not inadvertently created.
You could also try updating the view position each frame instead of using the view.velocity command:
Code:
def UpdateView():
view.setPosition([0, 0, velocity * viz.getFrameElapsed()], viz.REL_LOCAL)
vizact.ontimer(0, UpdateView)