Example #1
0
def togRecording():
	recSound.play()
	if(file != None):
		newthread = viz.director(hf_playback.saveUpdateLoop, avatar, file)
		vizact.onkeydown(viz.KEY_ESCAPE, hf_playback.cleanup, file, newthread)
	touchcube.wakeTouchCubes()
	hf_playback.toggleRecording()
Example #2
0
	def loadMeshes(self, meshes = [], animate = False):
		"""Load all of the files from the dataset into puzzle.mesh instances"""
		self.unknownFiles = 0
		model.threads = 0
		self.printNoticeable('start of rendering process')
		for i, fileName in enumerate(meshes):
			# This is the actual mesh we will see
			if not model.ds.getMetaData(file = fileName):
				print "WARNING, UNKNOWN FILE ", fileName
				self.unknownFiles += 1
				continue
				
			#Wait to add thread if threadThrottle conditions are not met
			model.threads += 1 #Add 1 for each new thread added --- new render started
			yield viztask.waitTrue(self.threadThrottle, self._maxThreads)
			yield viz.director(self.renderMeshes, fileName)
			model.menu.updateLoad(len(self._meshes), len(self._meshesToLoad))
			
		self.printNoticeable('end of rendering process')
Example #3
0
	def startCollecting(self, collectRate=.1):
		if self.locked: return
		self.collectRate = collectRate
		viz.director(self._collectPeriodically)
def setKinectAngle(angle):
    viz.director(sensor.setKinectElevation, 0, angle)
    print sensor.getKinectElevation(0)
def check_steps():
	global stp, stp_counter, step_range, Lstp_flag, Rstp_flag, belt, belt_vec, ptb_max, ptb, elapse_time_R, elapse_time_L,start_L, start_R

	FPtemp = qtm_receive()
	GRF = [FPtemp[2], FPtemp[8]]	# ground reaction forces [left, right]
	
	if stp_counter==80:
		check_step_timing(start_L,start_R)
		
	if (stp_counter > stp):	# wait for the desired amount of steps
		
		# LEFT LEG
		if ( GRF[0]<=80 ):	# left swing phase
			if (Lstp_flag == 0):	# toe off event
				Lstp_flag = 1	# swing now
				#print "toe off left"
				
		elif ( 80<GRF[0]<2000 ):	# left stance phase
			Lstp_flag = 0
			if (belt == 'R'):	# accelerate right
					time.sleep(elapse_time)
#					labjack_impulse()					
					viz.director(perturbation)
					
					
			elif (belt == '0' and belt_vec[ptb-1] == 'R'):	# 2nd toe off // decelerate
					viz.director(perturbation)
					
					if (ptb > ptb_max):
						time.sleep(0.2)	# give time to the treadmill to stabilize
						out = serializepacket(0,0,100,100,0)	# stop treadmill
						s.sendall(out)
						print "THE END - STOPPING"
						time.sleep(0.3)	# give time to the treadmill to stabilize
						viz.quit()
					
					else:	# resetting
						belt = belt_vec[ptb-1]	# 0 < ptb <= ptb_max
#						stp = random.randint(step_range[0], step_range[1])
#						stp_counter = 0
						#print "stp", stp
		
		# RIGHT LEG
		if ( GRF[1]<=80 ):	# right swing phase
			if (Rstp_flag == 0):	# toe off event
				Rstp_flag = 1	# swing now
				#print "toe off right"
			
		elif ( 80<GRF[1]<2000 ):	# right stance phase
			Rstp_flag = 0
			if (belt == 'L'):	# accelerate left
					time.sleep(elapse_time-0.02)
					labjack_impulse()
					viz.director(perturbation)
					
					
			elif (belt == '0' and belt_vec[ptb-1] == 'L'):	# 2nd toe off // decelerate
					viz.director(perturbation)
					if (ptb > ptb_max):
						time.sleep(0.2)	# give time to the treadmill to stabilize
						out = serializepacket(0,0,100,100,0)	# stop treadmill
						s.sendall(out)
						print "THE END - STOPPING"
						time.sleep(0.3)	# give time to the treadmill to stabilize
						viz.quit()
					
					else:	# resetting
						belt = belt_vec[ptb-1]	# 0 < ptb <= ptb_max
#						stp = random.randint(step_range[0], step_range[1])
#						stp_counter = 0
						#print "stp", stp

	else:	# count steps
		# LEFT LEG
		if ( 80<GRF[0]<2000 ):	# left stance phase
			if (Lstp_flag == 1):	# one more step
				Lstp_flag = 0
				stp_counter += 1
				print stp-stp_counter+1
				#print "L", stp_counter
		elif ( GRF[0]<=80 ):	# left swing phase
			Lstp_flag = 1
		
		
		# RIGHT LEG
		if ( 80<GRF[1]<2000 ):	# right stance phase
			if(Rstp_flag == 1):	# one more step
				Rstp_flag = 0
				stp_counter += 1
				print stp-stp_counter+1
				#print "R", stp_counter
		elif ( GRF[1]<=80 ):	# left swing phase
			Rstp_flag = 1
Example #6
0
__author__ = 'MrLapTop'
import viz

from TestClassEmulateJEvents import EmulateJEvents
import thread
from JasonEventModule import JassonCam
from JasonEventModule import JasonEventRegister
from JasonEventModule import JasonEventSender

if __name__ == "__main__":
    jEventRegister = JasonEventRegister()
    jCam = JassonCam(jEventRegister)
    jEvSen = JasonEventSender()

    #jEventEmulator1 = EmulateJEvents(jEventRegister,{"JASON_KEYDOWN_EVENT":[{"key":"w"},{"key":"a"},{"key":"s"},{"key":"d"}]})
    #jEventEmulator2 = EmulateJEvents(jEventHandler,{"JASON_KEYDOWN_EVENT":{"key":"w"}})

    viz.go()
    viz.addChild('piazza.osgb')
    #vizcam.KeyboardCamera()
    viz.director(jEvSen.run)
    #viz.director(jEventEmulator2.startJEvents,1)



Example #7
0
 def __init__(self, jasonEventRegister):
     self.jEventReg = jasonEventRegister
     self.sender = JasonEventSender()
     viz.director(self.sender.run)
     self.mreDict = self.createDicti()
Example #8
0
    def runtrials(self):
        """Loops through the trial sequence"""

        viz.MainScene.visible(viz.ON, viz.WORLD)
        viz.mouse.setVisible(viz.OFF)  #switch mouse off
        viz.clearcolor(
            viz.SKYBLUE)  #HACK, since eyetracker background is white.
        if self.EYETRACKING:
            #pass it the filename, and also the timestamp.
            et_file = str(self.EXP_ID) + '_' + str(
                self.PP_id)  #one file for the whole task.
            self.comms.start_trial(fname=et_file, timestamp=viz.tick())

        if self.EYETRACKING:
            #viz.MainScene.visible(viz.OFF,viz.WORLD)

            #remove straight
            self.Straight.ToggleVisibility(0)
            filename = str(self.EXP_ID) + "_Calibration_" + str(
                self.PP_id
            )  #+ str(demographics[0]) + "_" + str(demographics[2]) #add experimental block to filename
            print(filename)

            # Start logging the pupil data
            pupilfile = gzip.open(
                os.path.join("Data", filename + ".pupil.jsons.gz"), 'a')

            closer = pupil_logger.start_logging(pupilfile,
                                                timestamper=viz.tick)

            def stop_pupil_logging():
                closer()
                pupilfile.close()

            EXIT_CALLBACKS.insert(0, stop_pupil_logging)

            yield run_calibration(self.comms, filename)
            yield run_accuracy(self.comms, filename)

            #put straight visible
            self.Straight.ToggleVisibility(1)
            #add message after calibration to give the experimenter and participant time to prepare for the simulation.

            self.markers = Markers()

            #set up distractor task
        if self.DISTRACTOR_TYPE is not None:
            distractorfilename = str(self.EXP_ID) + '_' + str(
                self.PP_id) + '_distractor_'
            Distractor = Count_Adjustable.Distractor(
                distractorfilename,
                self.targetnumber,
                ppid=1,
                startscreentime=self.StartScreenTime,
                triallength=np.inf,
                ntrials=len(self.TRIALSEQ_df.index))
        else:
            Distractor = None

        #set up scene before eyetracking
        self.driver = vizdriver.Driver(self.caveview, Distractor)

        viz.message(
            '\t\tYou will now begin the experiment \n\n The automated vehicle will attempt to navigate a series of bends. \nYour task as the supervisory driver is to make sure the vehicle stays within the road edges. \nDuring automation please keep your hands loosely on the wheel. \nYou may take control by pressing the gear pads. \nOnce pressed, you will immediately be in control of the vehicle \n\n Please fixate the centre of the calibration point in between trials'
        )
        self.ToggleTextVisibility(viz.ON)

        for i, trial in self.TRIALSEQ_df.iterrows():

            #if half-way through do accuracy test.
            #Trial loop has finished.
            if i == int(np.round(self.total_trials / 2, 0)):
                if self.EYETRACKING:
                    self.markers.markers_visibility(
                        0)  #remove markers for calibration
                    self.Straight.ToggleVisibility(0)

                    accuracy_filename = filename + '_middle'
                    yield run_accuracy(self.comms, accuracy_filename)
                    yield viztask.waitTime(
                        1)  #a second pause before going into

                    self.markers.markers_visibility(
                        1)  #remove markersthe next trial
                    self.Straight.ToggleVisibility(1)

            #import vizjoy

            print("Trialn: ", str(i))

            print("current trial:", trial)

            #trial is now a row from a dataframe
            print("current trial radius:", trial["radius"])
            trial_radii = trial['radius']
            trial_yawrate_offset = trial['sab']
            trial_dir = trial['bend']

            print(str([trial_radii, trial_yawrate_offset]))

            txtDir = ""

            #print ("Length of bend array:", len(self.rightbends))

            self.driver.setAutomation(True)
            self.AUTOMATION = True
            self.txtMode.message('A')
            if self.AUTOWHEEL:
                self.Wheel.control_on()

            if self.DISTRACTOR_TYPE is not None:
                if i == 0:  #the first trial.

                    #annotate eyetracking
                    if self.EYETRACKING:
                        self.comms.annotate("DistractorScreen")

                    #switch texts off for the first trial.

                    self.ToggleTextVisibility(viz.OFF)

                    Distractor.StartTrial(self.targetoccurence_prob,
                                          self.targetnumber,
                                          trialn=i,
                                          displayscreen=True)  #starts trial
                    yield viztask.waitTrue(Distractor.getPlaySoundFlag)

                    self.ToggleTextVisibility(viz.ON)

                else:
                    Distractor.StartTrial(self.targetoccurence_prob,
                                          self.targetnumber,
                                          trialn=i,
                                          displayscreen=False)  #starts trial

            radius_index = self.FACTOR_radiiPool.index(trial_radii)

            #choose correct road object.

            if trial_dir > 0:  #right bend
                trialbend = self.rightbends[radius_index]
                txtDir = "R"
            else:
                trialbend = self.leftbends[radius_index]
                txtDir = "L"
                #trialbend = self.rightbends[radius_index]
                #txtDir = "R"

            trialbend.ToggleVisibility(viz.ON)

            if trial_radii > 0:  #if trial_radii is above zero it is a bend, not a straight
                msg = "Radius: " + str(trial_radii) + txtDir + '_' + str(
                    trial_yawrate_offset)
            else:
                msg = "Radius: Straight" + txtDir + '_' + str(
                    trial_yawrate_offset)


#			txtCondt.message(msg)

#pick radius
            self.Trial_radius = trial_radii

            #pick file. Put this in dedicated function. TODO: Should open all of these at the start of the file to save on processing.

            self.Trial_autofile_i = int(trial['autofile_i'])

            self.Trial_YR_readout = self.YR_readouts_80[self.Trial_autofile_i]
            self.Trial_SWA_readout = self.SWA_readouts_80[
                self.Trial_autofile_i]
            self.Trial_playbackfilename = self.PlaybackPool80[
                self.Trial_autofile_i]
            """
			if self.Trial_radius == 40:
				i = random.choice(range(len(self.YR_readouts_40)))
				self.Trial_YR_readout = self.YR_readouts_40[i]
				self.Trial_SWA_readout = self.SWA_readouts_40[i]
				self.Trial_playbackfilename = self.PlaybackPool40[i]
				

			elif self.Trial_radius == 80:
				i = random.choice(range(len(self.YR_readouts_80)))
				self.Trial_YR_readout = self.YR_readouts_80[i]
				self.Trial_SWA_readout = self.SWA_readouts_80[i]
				self.Trial_playbackfilename = self.PlaybackPool80[i]

			else:
				raise Exception("Something bad happened")

			"""

            #update class#
            self.Trial_simulatedttlc = trial['simulated_ttlc']
            self.Trial_design = trial['design']
            self.Trial_dir = trial_dir
            self.Trial_N = i
            self.Trial_YawRate_Offset = trial_yawrate_offset
            self.Trial_BendObject = trialbend
            self.Trial_trialtype_signed = trial_dir
            self.Trial_playbacklength = len(self.Trial_YR_readout)
            self.Trial_midline = np.vstack(
                (self.Straight.midline, self.Trial_BendObject.midline))
            self.Trial_OnsetTime = trial['onsettime']
            #self.Trial_OnsetTime = np.random.choice(self.OnsetTimePool, size=1)[0]
            self.Trial_SaveName = str(self.EXP_ID) + '_' + str(
                self.PP_id) + '_' + str(self.Trial_N)

            #renew data frame.
            #self.OutputWriter = pd.DataFrame(index = range(self.TrialLength*60), columns=self.datacolumns) #make new empty EndofTrial data

            #renew csv writer
            self.OutputFile = io.BytesIO()
            self.OutputWriter = csv.writer(self.OutputFile)
            self.OutputWriter.writerow(self.datacolumns)  #write headers.

            #annotate eyetracking
            if self.EYETRACKING:
                self.comms.annotate('Start_' + self.Trial_SaveName)

            yield viztask.waitTime(.5)  #pause at beginning of trial

            #annotate eyetracking
            if self.EYETRACKING:
                #remove calib_pt and wait a further .5 s
                #TODO: add 1 s calibration dot.
                self.calib_pt.visible(1)
                yield viztask.waitTime(1.5)  #pause at beginning of trial
                self.calib_pt.visible(0)
                yield viztask.waitTime(.5)  #pause at beginning of trial

            if self.DEBUG:
                conditionmessage = 'SAB: ' + str(self.Trial_YawRate_Offset) + \
                '\nRadius: ' +str(self.Trial_radius) + \
                '\nOnsetTime: ' + str(self.Trial_OnsetTime) + \
                '\nAutoFile: ' + str(self.Trial_autofile_i) + \
                '\nsim TTLC: ' + str(self.Trial_simulatedttlc) + \
                '\nDesign: ' + str(self.Trial_design) + \
                '\nTask: ' + str(self.DISTRACTOR_TYPE)
                self.txtTrial.message(conditionmessage)

                if self.DEBUG_PLOT:
                    #realtime plot.
                    self.line_midline.set_data(self.Trial_midline[:, 0],
                                               self.Trial_midline[:, 1])
                    self.dot_origin.set_data(
                        self.Trial_BendObject.CurveOrigin[0],
                        self.Trial_BendObject.CurveOrigin[1])
                    self.plot_ax.axis([
                        min(self.Trial_midline[:, 0]) - 10,
                        max(self.Trial_midline[:, 0]) + 10,
                        min(self.Trial_midline[:, 1]) - 10,
                        max(self.Trial_midline[:, 1]) + 10
                    ])  #set axis limits

                    self.plot_positionarray_x, self.plot_positionarray_z, self.plot_closestpt_x,  self.plot_closestpt_z = [], [], [], [] #arrays to store plot data in

            self.UPDATELOOP = True  #

            def PlaybackReached():
                """checks for playback limit or whether automation has been disengaged"""

                end = False

                #check whether automation has been switched off.
                if self.Current_playbackindex >= self.Trial_playbacklength:
                    end = True

                return (end)

            def CheckDisengage():
                """checks automation status of driver class """

                end = False
                auto = self.driver.getAutomation()
                if auto == False:

                    self.AUTOMATION = auto
                    self.txtMode.message('M')
                    #switch wheel control off, because user has disengaged
                    #begin = timer()
                    if self.AUTOWHEEL:
                        self.Wheel.control_off()

                    if self.EYETRACKING:
                        self.comms.annotate('Disengage_' + self.Trial_SaveName)
                        #pass
                    #print ("WheelControlOff", timer() - begin)
                    end = True

                return (end)

            #create viztask functions.
            waitPlayback = viztask.waitTrue(PlaybackReached)
            waitDisengage = viztask.waitTrue(CheckDisengage)

            d = yield viztask.waitAny([waitPlayback, waitDisengage])

            if d.condition is waitPlayback:
                print('Playback Limit Reached')
            elif d.condition is waitDisengage:
                print('Automation Disengaged')

                self.SingleBeep()

                def RoadRunout():
                    """temporary HACK function to check whether the participant has ran out of road"""

                    end = False
                    if self.Trial_Timer > self.TrialLength:
                        end = True

                    return (end)

                #waitRoad = viztask.waitTrue (RoadRunout)
                #waitManual = viztask.waitTime(5)

                #d = yield viztask.waitAny( [ waitRoad, waitManual ] )

                yield viztask.waitTrue(RoadRunout)
                print("Run out of Road")
                #if d.condition is waitRoad:
                #	print ('Run out of Road')
                #elif d.condition is waitManual:
                #	print ('Manual Time Elapsed')

            ##### END STEERING TASK ######

            self.UPDATELOOP = False

            self.Trial_BendObject.ToggleVisibility(viz.OFF)

            ##reset trial. Also need to annotate each eyetracking trial.
            viz.director(self.SaveData, self.OutputFile, self.Trial_SaveName)

            self.ResetTrialAndDriver(
            )  #reset parameters for beginning of trial

            ##### INITIALISE END OF TRIAL SCREEN FOR DISTRACTOR TASK #######
            if self.DISTRACTOR_TYPE is not None:

                #annotate eyetracking
                if self.EYETRACKING:
                    self.comms.annotate('Distractor_' + self.Trial_SaveName)

                if self.AUTOWHEEL:
                    self.Wheel.control_off()

                #switch text off
                self.ToggleTextVisibility(viz.OFF)

                Distractor.EndofTrial()  #throw up the screen to record counts.

                # Pause before the query screen to avoid
                # spurious presses carrying over from the
                # task.
                # Hack the screen to be blank
                Distractor.EoTScreen.visible(viz.ON)
                Distractor.Question.visible(viz.OFF)
                Distractor.lblscore.visible(viz.OFF)
                yield viztask.waitTime(1.0)
                Distractor.EoTScreen_Visibility(viz.ON)

                ###interface with End of Trial Screen
                pressed = 0
                while pressed < self.targetnumber:

                    #keep looking for gearpad presses until pressed reaches trial_targetnumber
                    print("waiting for gear press")
                    yield viztask.waitTrue(self.driver.getGearPressed)
                    pressed += 1
                    print('pressed ' + str(pressed))

                    Distractor.gearpaddown()

                    self.driver.setGearPressed(False)

                    yield viztask.waitTime(.5)
                    #Distractor.EoTScreen_Visibility(viz.OFF)
                Distractor.RecordCounts()

                self.ToggleTextVisibility(viz.ON)

            #annotate eyetracking
            if self.EYETRACKING:
                self.comms.annotate('End_' + self.Trial_SaveName)

        #Trial loop has finished.
        if self.EYETRACKING:
            self.markers.remove_markers()  #remove markers
            self.Straight.ToggleVisibility(0)
            accuracy_filename = filename + '_end'
            yield run_accuracy(self.comms, accuracy_filename)
        self.CloseConnections()
Example #9
0
        # if viewport yaw between 160-180
        if viz.MainView.getEuler() >= [
                170.0, -0.0, 0.0
        ] and viz.MainView.getEuler() <= [180.0, -0.0, 0.0]:
            vizfx.postprocess.removeEffect(effect)
        # if viewport yaw between 160-180
        elif viz.MainView.getEuler() >= [
                -180.0, -0.0, 0.0
        ] and viz.MainView.getEuler() <= [-170.0, -0.0, 0.0]:
            vizfx.postprocess.removeEffect(effect)
        else:
            vizfx.postprocess.addEffect(effect)


# puts the function on a different thread to allow the while loop to run as the scene keeps going
viz.director(pause)

# load and play the binaural recording
sound = viz.addAudio('resources/barber.mp3')
sound.play()

# load guitar model
guitar = viz.addChild('resources/guitar.osgb')

# load the avatars and set starting position
manuel = viz.addAvatar('vcc_male.cfg')
manuel.setPosition(-0.3, 0, -2.82)

luigi = viz.addChild('vcc_male2.cfg')
luigi.setPosition([-2, 0, 6])
Example #10
0
class MainThread():
    def __init__(self):
        viz.go()
        vizcam.AUTO_REGISTER = 0

        self.court = viz.addChild('piazza.osgb')

    def stopThread(self,thread):
        viz.waitTime(10)
        thread.stop()
        return

    def manageThread(self,thread):
        lsAll =[["a","b","c"],[1,2,3],[4,5,6],[]]
        for ls in lsAll:
            thread.changeData(ls)
            viz.waitTime(5)
        thread.stop()



if __name__ == "__main__":
    wtf = MainThread()
    subThread = SubThread()


    viz.director(subThread.run)
    viz.director(wtf.manageThread,subThread)