You don't need a navigation devices to move a viewpoint. Vizard has a host of commands that either discretely or fluidly reposition or rotate viewpoints. Note: when you're applying these transforms to the viewpoint, you can apply them to either the head or body of the viewpoint.
Translate or rotate the viewpoint relative to a specified frame of reference using <viewpoint>.setPosition(<x,y,z>), <viewpoint>.setAxisAngle(<axis angle>), <viewpoint>.setEuler(<yaw, pitch and roll>), or <viewpoint>.setQuat(<quaternions>). You can also set the viewpoint's transform matrix with <viewpoint>.setMatrix(<matrix>). The <viewpoint>.move(<direction>) command moves the viewpoint in the given <direction> relative to the viewpoint's current position and orientation. The <viewpoint>.lookAt(<x,y,z>) command orients the viewpoint to face a given point (<x,y,z>) in space.
To fluidly move your viewpoint in a given direction at a specified speed, use <viewpoint>.velocity (<vector coordinates>).
To fluidly move your viewpoint to a specific location or set of locations, use <vizact>.goto(<point>). When using vizact.goto, you can optionally specify a pivot point using the pivot keyword argument. To use the pivot point, set the vizact.goto rotation mode using the rotate_mode option and specify how the rotations about the pivot point should be applied-- you can either set the mode so that the viewpoint immediately rotates to face the pivot point when vizact.goto is called (viz.PIVOT_ROTATE), or you can set it to smoothly blend from its current orientation to the orientation that faces the pivot point (viz.BLEND_ROTATE).
To fluidly rotate your viewpoint independently of a vizact.goto command, use vizact.spinTo.
Viewpoint collision and gravity