Skip to content

Foot Tracking

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Ā 

transportNode = vizconnect.getTransport('main_transport').getNode3d()

transportNode.setPosition([x,y,z])

This can be added to any script using the following code:

import sightlab_utils.sightlab as sl
from sightlab_utils.settings import *

USE_HANDS = False
VIVE_TRACKERS = False
USE_COLLISION = True
# Setup SightLab Options
sightlab = sl.SightLab(gui=False)
env = vizfx.addChild("sightlab_resources/example_resources/pit_raised.osgb")
sightlab.setEnvironment(env)
env.visible(viz.OFF)
# set number of trials
sightlab.setTrialCount(1)
sightlab.setAvatarLeftHand(
    leftHand=vizfx.addChild(
        os.path.join(
            viz.res.getVizardPath(),
            "bin/lib/site-packages/sightlab_utils/resources/avatar/hands/empty.osgb",
        )
    )
)
sightlab.setAvatarRightHand(
    rightHand=vizfx.addChild(
        os.path.join(
            viz.res.getVizardPath(),
            "bin/lib/site-packages/sightlab_utils/resources/avatar/hands/empty.osgb",
        )
    )
)
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)

if VIVE_TRACKERS:
    import steamvr

    tracker = 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 gravity

if USE_COLLISION:
    from sightlab_utils import collision

    c = collision.Collision()
    rightFoot.disable(viz.INTERSECTION)
    leftFoot.disable(viz.INTERSECTION)

if USE_HANDS:
    from sightlab_utils import handTrackingOpenXR



def sightLabExperiment():
    while True:
        yield viztask.waitKeyDown(" ")
        env.visible(viz.ON)
        yield sightlab.startTrial()


        def printFeetPosition():
            print("RFoot", leftFoot.getPosition())
            print("LFoot", rightFoot.getPosition())

        vizact.onkeydown("t", printFeetPosition)
        yield viztask.waitKeyDown(" ")
        yield sightlab.endTrial()


viztask.schedule(sightlab.runExperiment)
viztask.schedule(sightLabExperiment)
viz.callback(viz.getEventID("ResetPosition"), sightlab.resetViewPoint)