Hi I would like to use the touch controller to control the movement of a scooter.
The ideal scene would be each time I load a road scene and the rider starts accelerating then rides the scooter to the end point at a constant speed. However, I am currently encountering two problems:
1) When I start running the script, only part of the scene can be loaded;
2) It seems the touch button events can not be detected as the text 'done' I inserted can not be printed out.
Can someone help me out with this pls?????
Code:
###### Import packages
import viz
import sys
import vizconnect
import vizconfig
import vizact
import vizshape
import viztask
import vizinput
import vizinfo
import time
import random
import oculus
import numpy
import steamvr
import math
from numpy import *
hmd = oculus.Rift()
touch = hmd.getRightTouchController()
viz.go()
##### Parameters
viz.setMultiSample(4)
viz.fov(60)
viz.go()
ini_x =6
ini_y = -4.2
ini_z = -145
os_x = 0
os_y = 0
os_z = -5
ground_x =6
ground_y = -4.2
ground_z = -145
v = [15,25,35]
a = 4.1667
con = 3
trialNo = 15
trial = v * trialNo
##### Set up mainview
viz.MainView.move([ini_x + os_x, ini_y + os_y, ini_z + os_z])
view = viz.MainView
# Setup navigation node and link to main view
navigationNode = viz.addGroup()
viewLink = viz.link(navigationNode, view)
viewLink.preMultLinkable(hmd.getSensor())
# Apply user profile eye height to view
profile = hmd.getProfile()
if profile:
navigationNode.setPosition([ground_x,ground_y+profile.eyeHeight,ground_z])
else:
navigationNode.setPosition([ground_x,ground_y+1.8,ground_z])
##### Create skylight
viz.MainView.getHeadLight().disable()
sky_light = viz.addLight(euler=(0,90,0))
sky_light.position(0,0,-1,0)
sky_light.color(viz.WHITE)
sky_light.ambient([0.9,0.9,1])
##### Create sky
sky = viz.add(viz.ENVIRONMENT_MAP,'sky.jpg')
skybox = viz.add('skydome.dlc')
skybox.texture(sky)
# Setup Oculus Rift HMD
if not hmd.getSensor():
sys.exit('Oculus Rift not detected')
# Check if HMD supports position tracking
supportPositionTracking = hmd.getSensor().getSrcMask() & viz.LINK_POS
if supportPositionTracking:
# Add camera bounds model
camera_bounds = hmd.addCameraBounds()
camera_bounds.visible(False)
# Change color of bounds to reflect whether position was tracked
def CheckPositionTracked():
if hmd.getSensor().getStatus() & oculus.STATUS_POSITION_TRACKED:
camera_bounds.color(viz.GREEN)
else:
camera_bounds.color(viz.RED)
vizact.onupdate(0, CheckPositionTracked)
#viz.setMultiSample(8)
### Import the Scooter model
scooter = viz.add('G:/ScooterProject/ChengZM/ChengZM_res/scooter.dae')
scooter.setPosition([ground_x-0.25,ground_y,ground_z+2.15])
scooter.setEuler([90,0,0])
def UpdateView(m_s,a, up_lim):
yaw,pitch,roll = viewLink.getEuler()
m = viz.Matrix.euler(yaw,0,0)
p = viz.MainView.getPosition()
dm = m_s + viz.getFrameElapsed() * a
print('m0', m)
if dm <= up_lim: ### accelerating
if p[0] < (ground_x-0.25)+1.5 and p[0] > (ground_x-0.25)-1.5:
print('InIf')
if touch.isButtonDown(oculus.BUTTON_INDEX):
m.preTrans([0,0,dm])
print('done')
if touch.isButtonDown(oculus.BUTTON_HAND):
m.preTrans([0,0,-dm])
elif p[0] >= (ground_x-0.25)+1.5 or p[0] <= (ground_x-0.25)-1.5:
if touch.isButtonDown(oculus.BUTTON_INDEX):
m.preTrans([0,0,dm])
if touch.isButtonDown(oculus.BUTTON_HAND):
m.preTrans([0,0,-dm])
else: ### constant speed movement
if p[0] < (ground_x-0.25)+1.5 and p[0] > (ground_x-0.25)-1.5:
if touch.isButtonDown(oculus.BUTTON_INDEX):
m.preTrans([0,0,up_lim])
if touch.isButtonDown(oculus.BUTTON_HAND):
m.preTrans([0,0,-up_lim])
elif p[0] >= (ground_x-0.25)+1.5 or p[0] <= (ground_x-0.25)-1.5:
if touch.isButtonDown(oculus.BUTTON_INDEX):
m.preTrans([0,0,up_lim])
if touch.isButtonDown(oculus.BUTTON_HAND):
m.preTrans([0,0,-up_lim])
navigationNode.setPosition(m.getPosition(), viz.REL_PARENT)
scooter.setPosition(m.getPosition(), viz.REL_PARENT)
return p, dm
def sta_timer():
for i in range(3):
timer_3D = viz.addText3D(str(i),pos=[ground_x,ground_y+profile.eyeHeight,ground_z+20])
timer_3D.fontSize(10)
timer_3D.resolution(1)
yield viztask.waitTime(1)
timer_3D.visible(viz.OFF)
def Sct_dis():
#viz.collision(viz.ON)
##### Experiment starts
##### Randomize trials
random.shuffle(trial)
for i in range(len(trial)):
for j in range(2):
yield viz.waitTime(1)
### Import the road model
if j == 0: ### the first part in this trial
road_model = viz.add('G:/ScooterProject/ChengZM/ChengZM_res/RoadTY-only.dae') ########## should be the reference road
road_model.setEuler([90,0,0])
road_model.setPosition([0,-5,-5])
elif j == 1: ### the second part in this trial
road_model = viz.add('G:/ScooterProject/ChengZM/ChengZM_res/RoadTY-only.dae') ########## should be the free road
road_model.setEuler([90,0,0])
road_model.setPosition([0,-5,-5])
yield viz.waitTime(2)
### Setup arrow key navigation
up_lim = trial[i]
m_s = 0.01
### Exp starts
sta_timer()
final_p = 0
timer1 = vizact.ontimer(0,UpdateView(m_s, a, up_lim))
vizact.ontimer(0,UpdateView(m_s, a, up_lim))
while final_p < 30:
startTime = viz.tick()
timer1.setEnabled(viz.ON)
pp, ss = UpdateView(m_s, a, up_lim)
final_p = pp[2]
final_s = ss
timer1.setEnabled(viz.OFF)
yield viz.waitTime(3)
### data record
#viz.OFF()
viz.quit()
viztask.schedule(Sct_dis())