You will need to account for any origin and heading offset between the PPT and Vive. It maybe easiest to calibrate the Vive trackers to PPT coordinates since the PPT origin and orientation is clearly defined. You can place a Vive controller at the PPT origin and get an idea of the position offset.
Here's some example code to perform the alignment. Orient the HMD and Vive controller so they're facing PPT north and apply the resets:
Code:
import viz
import vizact
import vizshape
import steamvr
viz.go()
# Offset when placing Vive tracker at PPT Origin
OFFSET = [0,0,0]
hmd = steamvr.HMD()
headTracker = hmd.getSensor()
viewLink = viz.link(headTracker, viz.MainView)
viveHandControllerList = steamvr.getControllerList()
viveController = viveHandControllerList[0]
vrpn = viz.add('vrpn7.dle')
pptMarker = vrpn.addTracker('PPT0@localhost',1)
pptSphere = vizshape.addSphere(radius=0.02)
pptSphere.color(viz.RED)
viveSphere = vizshape.addSphere(radius=0.02)
viveSphere.color(viz.CYAN)
pptLink = viz.link(pptMarker, pptSphere)
viveLink = viz.link(viveController, viveSphere)
# Orient both HMD and controller to PPT North before calling reset function
def resetVive():
viewLink.reset(viz.RESET_ORI_HEADING)
viveLink.reset(viz.RESET_ORI_HEADING)
viewLink.setOffset(OFFSET)
viveLink.setOffset(OFFSET)
vizact.onkeydown('r',resetVive)
This can also be done with vizconnect. Get a handle to the tracker links and define the resetVive funtion within the postInit section of the config file. Attached is an example config.