#1
|
|||
|
|||
writing joystick position to a data file
Hi there,
I'm after creating data files for each of my subjects that gives me the position of the joystick as they are driving down my virtual road. I have the following code: Code:
import viz #Import vizjoy module import vizjoy import time import math viz.go(viz.FULLSCREEN) viz.mouse(viz.OFF) subject = viz.input('What is the participant number?') #define speed MOVE_SPEED = 0.5 #scalar constant for speed gain #Add a joystick joy = vizjoy.add() viz.clearcolor(0.5,0.5,1) viz.MainView.setPosition(0,.5,0) sky = viz.add(viz.ENVIRONMENT_MAP,'sky.jpg') skybox = viz.add('skydome.dlc') skybox.texture(sky) #there are two road textures with different line count in the middle #road = viz.add('road.jpg') road = viz.add('roadld.jpg') #road2 = viz.add('road2.jpg') #add the ground ground = viz.add('tut_ground.wrl') ground.setPosition(0,0,25) #create a texture quad to add the road texture to #and place it over ground quad = viz.addTexQuad() quad.setScale(1,2,1) quad.setPosition(0,.1,0) quad.setEuler(0,90,0) quad.texture(road) road_position = 0 ground_position = 50 #add road and ground if getting near the end of road def addRoad(): global road_position, ground_position viewpoint_pos = viz.MainView.getPosition() #check to see how close the viewpoint is to the end of the road if road_position - viewpoint_pos[2] < 50: #add 50 meters of ground global ground_position groundcopy = ground.copy() groundcopy.setPosition([0,0,ground_position]) ground_position +=50 #add 50 meters of road for i in range(1,50): quadcopy = quad.copy() quadcopy.setPosition([0,.1,road_position]) quadcopy.setEuler(0,90,0) road_position +=1 addRoad() #call a timer every frame to check if road needs to be added vizact.ontimer(0, addRoad) #change the road texture on keypress #vizact.onkeydown('1', quad.texture,road2) #vizact.onkeydown('2', quad.texture,road) vizact.onmousedown(viz.MOUSEBUTTON_LEFT, quad.texture,road) #vizact.onmousedown(viz.MOUSEBUTTON_LEFT, quad.texture,road2) def UpdateJoystick(): #Get the joystick position x,y,z = joy.getPosition() #Get the twist of the joystick twist = joy.getTwist() #Move the viewpoint forward/backward based on y-axis value if abs(y) > 0.001: #Make sure value is above a certain threshold viz.MainView.move(0,0,-y*MOVE_SPEED,viz.BODY_ORI) #Move the viewpoint left/right based on x-axis value if abs(x) > 0.001: #Make sure value is above a certain threshold viz.MainView.move(x*0.1,0,0,viz.BODY_ORI) #Turn the viewpoint left/right based on twist value if abs(twist) > 0.001: #Make sure value is above a certain threshold viz.MainView.rotate(0,1,0,twist,viz.BODY_ORI,viz.RELATIVE_WORLD) #UpdateJoystick every frame vizact.ontimer(0,UpdateJoystick) def mytimer( num ): print joy.getPosition() viz.callback( viz.TIMER_EVENT, mytimer ) viz.starttimer( 0, 0.5, viz.FOREVER ) #write out to a file start_time = time.time() speed_data = open('speed_' + str(subject),'w') # Define a function that saves data # Define a function that saves data def SaveData(currenttime, key): # Create the output string out = str(currenttime) + '\t' + key + '\n' # Write the string to the output file file.write(out) # Makes sure the file data is really written to the harddrive file.flush() print out # Define a function that is called every time a keyboard button is pressed def mykeyboard(key): # Calls the function SaveData and hands it the current time and key SaveData(viz.tick(),key) # Defines a callback for keyboard events viz.callback(viz.KEYBOARD_EVENT, mykeyboard) Any advice is greatly appreciated! |
#2
|
|||
|
|||
You can get the joystick position and convert it to a string and output that to the file
Code:
joy_pos = str(joy.getPosition()) # Create the output string out = str('current position' + '\t' + joy_pos + '\n') # Write the string to the output file file.write(out) # Makes sure the file data is really written to the harddrive file.flush() |
#3
|
|||
|
|||
joystick position
That's brilliant thanks for that Jeff, but when I run it and open the file, there is no output recorded at all. Would I have to incorporate a timer loop/callback event as well?
|
#4
|
|||
|
|||
joystick position
No worries Jeff - I've now worked out how to do it
|
Thread Tools | |
Display Modes | Rate This Thread |
|
|
Similar Threads | ||||
Thread | Thread Starter | Forum | Replies | Last Post |
Crashing when I select Tracker option | GoldenSun | Vizard | 4 | 07-01-2008 12:06 PM |
Flagging the Data | Elittdogg | Vizard | 5 | 04-11-2008 12:40 PM |
Writing text files with executable | adimov | Vizard | 1 | 03-21-2008 04:21 PM |
Get position data in an own little program | Researcher | Precision Position Tracker (PPT) | 2 | 02-01-2006 03:55 AM |
problem with joystick data and input dialog box | baf1 | Vizard | 4 | 03-03-2005 09:00 AM |