Find Example in ExampleScripts- Foot_Tracking and also as an option in the Walk the Plank demo. For most setups this would involve strapping the hand controllers to your feet using something like these straps, but can also use vive trackers. To adjust the position of the feet more precisely, can modify the leftFoot and rightFoot.osgb models in sightlab_resources/objects. If head height is off may need to re-do your room setup, or could also adjust height optionally in the code using
This can be added to any script using the following code:
importsightlab_utils.sightlabasslfromsightlab_utils.settingsimport*USE_HANDS=FalseVIVE_TRACKERS=FalseUSE_COLLISION=True# Setup SightLab Optionssightlab=sl.SightLab(gui=False)env=vizfx.addChild("sightlab_resources/example_resources/pit_raised.osgb")sightlab.setEnvironment(env)env.visible(viz.OFF)# set number of trialssightlab.setTrialCount(1)rightFoot=vizfx.addChild("sightlab_resources/objects/rightShoe.osgb")leftFoot=vizfx.addChild("sightlab_resources/objects/leftShoe.osgb")transportNode=vizconnect.getTransport("main_transport").getNode3d()# print('Head Pos',transportNode.getPosition())rightFoot.setParent(transportNode)leftFoot.setParent(transportNode)ifVIVE_TRACKERS:importsteamvrtracker=steamvr.getTrackerList()[0]tracker2=steamvr.getTrackerList()[1]else:tracker=vizconnect.getTracker("r_hand_tracker").getNode3d()tracker2=vizconnect.getTracker("l_hand_tracker").getNode3d()trackerLink=viz.link(tracker,rightFoot)trackerLink2=viz.link(tracker2,leftFoot)# If wanting to be able to use gravityifUSE_COLLISION:fromsightlab_utilsimportcollisionc=collision.Collision()rightFoot.disable(viz.INTERSECTION)leftFoot.disable(viz.INTERSECTION)ifUSE_HANDS:fromsightlab_utilsimporthandTrackingOpenXRdefsightLabExperiment():whileTrue:yieldviztask.waitKeyDown(" ")env.visible(viz.ON)yieldsightlab.startTrial()sightlab.setAvatarLeftHand(leftHand=vizfx.addChild(AVATAR_HANDS_RESOURCE_PATH+"/empty.osgb"))sightlab.setAvatarRightHand(rightHand=vizfx.addChild(AVATAR_HANDS_RESOURCE_PATH+"/empty.osgb"))defprintFeetPosition():print("RFoot",leftFoot.getPosition())print("LFoot",rightFoot.getPosition())vizact.onkeydown("t",printFeetPosition)yieldviztask.waitKeyDown(" ")yieldsightlab.endTrial()viztask.schedule(sightlab.runExperiment)viztask.schedule(sightLabExperiment)viz.callback(viz.getEventID("ResetPosition"),sightlab.resetViewPoint)