def __init__(self): rospy.init_node('Experiment') # Fill out the data structure that defines the experiment. self.experimentparams = ExperimentParamsChoicesRequest() self.experimentparams.experiment.description = 'Regressive Motion' self.experimentparams.experiment.maxTrials = -1 self.experimentparams.experiment.timeout = -1 self.experimentparams.save.filenamebase = 'regress' self.experimentparams.save.csv = True self.experimentparams.save.bag = False self.experimentparams.save.mov = False self.experimentparams.save.fmf = False self.experimentparams.save.imagetopic_list = ['camera/image_rect'] self.experimentparams.save.onlyWhileTriggered = True self.experimentparams.robotspec.nRobots = 1 self.experimentparams.robotspec.width = 1.5875 self.experimentparams.robotspec.height = 1.5875 self.experimentparams.robotspec.isPresent = True # Set this to False if you remove the robot, but still want the actuation. self.experimentparams.robotspec.description = 'Black oxide magnet' self.experimentparams.flyspec.nFlies = 1 self.experimentparams.flyspec.description = 'unspecified' self.experimentparams.tracking.exclusionzones.enabled = False self.experimentparams.tracking.exclusionzones.point_list = [Point(x=0.0, y=0.0)] self.experimentparams.tracking.exclusionzones.radius_list = [0.0] self.experimentparams.home.enabled = True self.experimentparams.home.x = 0.0 self.experimentparams.home.y = 0.0 self.experimentparams.home.speed = 20 self.experimentparams.home.tolerance = 2 self.experimentparams.pre.robot.enabled = False self.experimentparams.pre.lasergalvos.enabled = False self.experimentparams.pre.ledpanels.enabled = False self.experimentparams.pre.wait1 = 0.0 self.experimentparams.pre.trigger.enabled = True self.experimentparams.pre.trigger.frameidParent = 'Fly01' self.experimentparams.pre.trigger.frameidChild = 'Robot' self.experimentparams.pre.trigger.speedAbsParentMin = 4.0 self.experimentparams.pre.trigger.speedAbsParentMax = 40.0 self.experimentparams.pre.trigger.speedAbsChildMin = 0.0 self.experimentparams.pre.trigger.speedAbsChildMax = 999.0 self.experimentparams.pre.trigger.speedRelMin = 0.0 self.experimentparams.pre.trigger.speedRelMax = 999.0 self.experimentparams.pre.trigger.distanceMin = 5.0 self.experimentparams.pre.trigger.distanceMax = 60.0 self.experimentparams.pre.trigger.angleMin = 85.0 * np.pi / 180.0 self.experimentparams.pre.trigger.angleMax =95.0 * np.pi / 180.0 self.experimentparams.pre.trigger.angleTest = 'inclusive' self.experimentparams.pre.trigger.angleTestBilateral = True self.experimentparams.pre.trigger.timeHold = 0.2 self.experimentparams.pre.trigger.timeout = -1 self.experimentparams.pre.wait2 = 0.0 # .robot, .lasergalvos, .ledpanels, and .post.trigger all run concurrently. # The first one to finish preempts the others. self.experimentparams.trial.robot.enabled = True self.experimentparams.trial.robot.move.mode = 'relative' #self.experimentparams.trial.robot.move.relative.tracking = [False] #self.experimentparams.trial.robot.move.relative.frameidOriginPosition = ['Robot'] #self.experimentparams.trial.robot.move.relative.frameidOriginAngle = ['Fly01'] #self.experimentparams.trial.robot.move.relative.distance = [60] #self.experimentparams.trial.robot.move.relative.angleType = ['constant'] #self.experimentparams.trial.robot.move.relative.angleOffset = [0] #self.experimentparams.trial.robot.move.relative.angleOscMag = [0] # Radians #self.experimentparams.trial.robot.move.relative.angleOscFreq = [0] # Hz #self.experimentparams.trial.robot.move.relative.speed = [30] #self.experimentparams.trial.robot.move.relative.speedType = ['random'] #self.experimentparams.trial.robot.move.relative.tolerance = [2] self.experimentparams.trial.robot.move.relative.tracking = [False] self.experimentparams.trial.robot.move.relative.frameidOrigin = ['Fly01'] self.experimentparams.trial.robot.move.relative.distance = [60] # mm self.experimentparams.trial.robot.move.relative.angleOffset = [0] # Angular offset to target point in given frame (radians). self.experimentparams.trial.robot.move.relative.angleVelocity = [-2*np.pi*1/40, 2*np.pi*1/40] # 2pi*freq # Angular velocity of target point in given frame (radians per sec). self.experimentparams.trial.robot.move.relative.angleOscMag = [0] # Oscillatory addition to angular velocity. self.experimentparams.trial.robot.move.relative.angleOscFreq = [0] # Hz of the added oscillation. self.experimentparams.trial.robot.move.relative.speedMax = [30] # Maximum allowed speed of travel (mm/sec). self.experimentparams.trial.robot.move.relative.tolerance = [2] # mm self.experimentparams.trial.robot.move.relative.typeAngleOffset = ['constant'] # 'constant' or 'random' (on range [0,2pi]) or 'current' (use current angle from frameidOrigin to robot) self.experimentparams.trial.robot.move.relative.typeAngleVelocity = ['constant'] # 'constant' or 'random' (on range [0,angleVelocity]) self.experimentparams.trial.robot.move.relative.typeAngleOscMag = ['constant'] # 'constant' or 'random' (on range [0,angleOscMag]) self.experimentparams.trial.robot.move.relative.typeAngleOscFreq = ['constant'] # 'constant' or 'random' (on range [0,angleOscFreq]) self.experimentparams.trial.robot.move.relative.typeSpeedMax = ['random'] # 'constant' or 'random' (on range [0,speedMax]) self.experimentparams.trial.lasergalvos.enabled = False self.experimentparams.trial.ledpanels.enabled = False self.experimentparams.trial.ledpanels.command = ['fixed'] # 'fixed', 'trackposition' (panel position follows fly position), or 'trackview' (panel position follows fly's viewpoint). self.experimentparams.trial.ledpanels.idPattern = [1] self.experimentparams.trial.ledpanels.frame_id = ['Fly01Forecast'] self.experimentparams.trial.ledpanels.statefilterHi = [''] self.experimentparams.trial.ledpanels.statefilterLo = [''] self.experimentparams.trial.ledpanels.statefilterCriteria = [''] self.experimentparams.post.trigger.enabled = False self.experimentparams.post.trigger.frameidParent = 'Fly01' self.experimentparams.post.trigger.frameidChild = 'Robot' self.experimentparams.post.trigger.distanceMin = 0.0 self.experimentparams.post.trigger.distanceMax = 999.0 self.experimentparams.post.trigger.speedAbsParentMin = 999.0 self.experimentparams.post.trigger.speedAbsParentMax = 111.0 # i.e. NEVER self.experimentparams.post.trigger.speedAbsChildMin = 0.0 self.experimentparams.post.trigger.speedAbsChildMax = 999.0 self.experimentparams.post.trigger.speedRelMin = 0.0 self.experimentparams.post.trigger.speedRelMax = 999.0 self.experimentparams.post.trigger.angleMin = 0.0 * np.pi / 180.0 self.experimentparams.post.trigger.angleMax =180.0 * np.pi / 180.0 self.experimentparams.post.trigger.angleTest = 'inclusive' self.experimentparams.post.trigger.angleTestBilateral = True self.experimentparams.post.trigger.timeHold = 0.0 self.experimentparams.post.trigger.timeout = 3 self.experimentparams.post.wait = 0.0 self.experimentlib = ExperimentLib.ExperimentLib(self.experimentparams, startexperiment_callback = self.StartExperiment_callback, starttrial_callback = self.StartTrial_callback, endtrial_callback = self.EndTrial_callback)
def __init__(self): rospy.init_node('Experiment') # Fill out the data structure that defines the experiment. self.experimentparams = ExperimentParamsChoicesRequest() self.experimentparams.experiment.description = 'Testing Robot Movement' self.experimentparams.experiment.maxTrials = -1 self.experimentparams.experiment.timeout = -1 self.experimentparams.save.filenamebase = 'test' self.experimentparams.save.csv = True self.experimentparams.save.bag = True self.experimentparams.save.mov = True self.experimentparams.save.fmf = False self.experimentparams.save.imagetopic_list = ['camera/image_rect'] self.experimentparams.save.onlyWhileTriggered = True self.experimentparams.robotspec.nRobots = 1 self.experimentparams.robotspec.width = 1.5875 self.experimentparams.robotspec.height = 1.5875 self.experimentparams.robotspec.isPresent = True # Set this to False if you remove the robot, but still want the actuation. self.experimentparams.robotspec.description = 'Black oxide magnet' self.experimentparams.flyspec.nFlies = 0 self.experimentparams.flyspec.description = 'unspecified' self.experimentparams.tracking.exclusionzones.enabled = False self.experimentparams.tracking.exclusionzones.point_list = [ Point(x=50.0, y=68.0) ] self.experimentparams.tracking.exclusionzones.radius_list = [3.0] self.experimentparams.home.enabled = True self.experimentparams.home.x = 0.0 self.experimentparams.home.y = 0.0 self.experimentparams.home.speed = 20 self.experimentparams.home.tolerance = 35 self.experimentparams.pre.robot.enabled = False self.experimentparams.pre.lasergalvos.enabled = False self.experimentparams.pre.ledpanels.enabled = False self.experimentparams.pre.wait1 = 0.0 self.experimentparams.pre.trigger.enabled = False self.experimentparams.pre.wait2 = 0.0 # .robot.move, .lasergalvos, and .triggerExit all run concurrently. # The first one to finish preempts the others. self.experimentparams.trial.robot.enabled = True self.experimentparams.trial.robot.move.mode = 'pattern' self.experimentparams.trial.robot.move.relative.tracking = [False] self.experimentparams.trial.robot.move.relative.frameidOrigin = [ 'Arena' ] self.experimentparams.trial.robot.move.relative.distance = [20] # mm self.experimentparams.trial.robot.move.relative.angleOffset = [ 0 ] # Angular offset to target point in given frame (radians). self.experimentparams.trial.robot.move.relative.angleVelocity = [ 0 ] # 2pi*freq # Angular velocity of target point in given frame (radians per sec). self.experimentparams.trial.robot.move.relative.angleOscMag = [ 0 ] # Oscillatory addition to angular velocity. self.experimentparams.trial.robot.move.relative.angleOscFreq = [ 0 ] # Hz of the added oscillation. self.experimentparams.trial.robot.move.relative.speedMax = [ 20 ] # Maximum allowed speed of travel (mm/sec). self.experimentparams.trial.robot.move.relative.tolerance = [-1] # mm self.experimentparams.trial.robot.move.relative.typeAngleOffset = [ 'constant' ] # 'constant' or 'random' (on range [0,2pi]) or 'current' (use current angle from frameidOrigin to robot) self.experimentparams.trial.robot.move.relative.typeAngleVelocity = [ 'constant' ] # 'constant' or 'random' (on range [0,angleVelocity]) self.experimentparams.trial.robot.move.relative.typeAngleOscMag = [ 'constant' ] # 'constant' or 'random' (on range [0,angleOscMag]) self.experimentparams.trial.robot.move.relative.typeAngleOscFreq = [ 'constant' ] # 'constant' or 'random' (on range [0,angleOscFreq]) self.experimentparams.trial.robot.move.relative.typeSpeedMax = [ 'constant' ] # 'constant' or 'random' (on range [0,speedMax]) if (False): # Four points step response. self.experimentparams.trial.robot.move.pattern.shape = [ 'square' ] # 'constant' or 'circle' or 'square' or 'flylogo' or 'spiral' or 'grid' self.experimentparams.trial.robot.move.pattern.hzPattern = [ 1 / 16 ] # Patterns per second. self.experimentparams.trial.robot.move.pattern.hzPoint = [ 1 / 4 ] # Points per second in the pattern. else: # Smooth circle. self.experimentparams.trial.robot.move.pattern.shape = [ 'circle' ] # 'constant' or 'circle' or 'square' or 'flylogo' or 'spiral' or 'grid' self.experimentparams.trial.robot.move.pattern.hzPattern = [ 1 / 20 ] # Patterns per second. self.experimentparams.trial.robot.move.pattern.hzPoint = [ 50 ] # Points per second in the pattern. self.experimentparams.trial.robot.move.pattern.count = [-1] self.experimentparams.trial.robot.move.pattern.size = [ Point(x=32, y=0) ] self.experimentparams.trial.robot.move.pattern.param = [0] self.experimentparams.trial.robot.move.pattern.direction = [1] self.experimentparams.trial.lasergalvos.enabled = False self.experimentparams.trial.ledpanels.enabled = False self.experimentparams.post.trigger.enabled = True self.experimentparams.post.trigger.frameidParent = 'Arena' self.experimentparams.post.trigger.frameidChild = 'Robot' self.experimentparams.post.trigger.speedAbsParentMin = 999.0 self.experimentparams.post.trigger.speedAbsParentMax = 111.0 # i.e. Never. self.experimentparams.post.trigger.speedAbsChildMin = 0.0 self.experimentparams.post.trigger.speedAbsChildMax = 999.0 self.experimentparams.post.trigger.speedRelMin = 0.0 self.experimentparams.post.trigger.speedRelMax = 999.0 self.experimentparams.post.trigger.distanceMin = 0.0 self.experimentparams.post.trigger.distanceMax = 999.0 self.experimentparams.post.trigger.angleMin = 0.0 * np.pi / 180.0 self.experimentparams.post.trigger.angleMax = 180.0 * np.pi / 180.0 self.experimentparams.post.trigger.angleTest = 'inclusive' self.experimentparams.post.trigger.angleTestBilateral = True self.experimentparams.post.trigger.timeHold = 0.0 self.experimentparams.post.trigger.timeout = -1 self.experimentparams.post.wait = 0.0 self.experimentlib = ExperimentLib.ExperimentLib( self.experimentparams, startexperiment_callback=self.StartExperiment_callback, starttrial_callback=self.StartTrial_callback, endtrial_callback=self.EndTrial_callback)
def __init__(self): rospy.init_node('Experiment') # Fill out the data structure that defines the experiment. self.experimentparams = ExperimentParamsChoicesRequest() self.experimentparams.experiment.description = 'Open Loop Pattern Following' self.experimentparams.experiment.maxTrials = -1 self.experimentparams.experiment.timeout = -1 self.experimentparams.save.filenamebase = 'pattern' self.experimentparams.save.csv = False self.experimentparams.save.bag = False self.experimentparams.save.mov = False self.experimentparams.save.fmf = False self.experimentparams.save.imagetopic_list = ['camera/image_rect'] self.experimentparams.save.onlyWhileTriggered = True self.experimentparams.robotspec.nRobots = 1 self.experimentparams.robotspec.width = 1.5875 self.experimentparams.robotspec.height = 1.5875 self.experimentparams.robotspec.isPresent = True # Set this to False if you remove the robot, but still want the actuation. self.experimentparams.robotspec.description = 'Black oxide magnet' self.experimentparams.flyspec.nFlies = 0 self.experimentparams.flyspec.description = 'unspecified' self.experimentparams.tracking.exclusionzones.enabled = False self.experimentparams.tracking.exclusionzones.point_list = [ Point(x=-75, y=25) ] self.experimentparams.tracking.exclusionzones.radius_list = [3.0] self.experimentparams.pre.robot.enabled = False self.experimentparams.pre.lasergalvos.enabled = False self.experimentparams.pre.ledpanels.enabled = False self.experimentparams.pre.wait1 = 0.0 self.experimentparams.home.enabled = False self.experimentparams.home.x = 0.0 self.experimentparams.home.y = 0.0 self.experimentparams.home.speed = 20 self.experimentparams.home.tolerance = 2 self.experimentparams.pre.trigger.enabled = False self.experimentparams.pre.trigger.frameidParent = 'Fly01' self.experimentparams.pre.trigger.frameidChild = 'Robot' self.experimentparams.pre.trigger.speedAbsParentMin = 0.0 self.experimentparams.pre.trigger.speedAbsParentMax = 999.0 self.experimentparams.pre.trigger.speedAbsChildMin = 0.0 self.experimentparams.pre.trigger.speedAbsChildMax = 999.0 self.experimentparams.pre.trigger.speedRelMin = 0.0 self.experimentparams.pre.trigger.speedRelMax = 999.0 self.experimentparams.pre.trigger.distanceMin = 0.0 self.experimentparams.pre.trigger.distanceMax = 999.0 self.experimentparams.pre.trigger.angleMin = 0.0 * np.pi / 180.0 self.experimentparams.pre.trigger.angleMax = 180.0 * np.pi / 180.0 self.experimentparams.pre.trigger.angleTest = 'inclusive' self.experimentparams.pre.trigger.angleTestBilateral = True self.experimentparams.pre.trigger.timeHold = 0.0 self.experimentparams.pre.trigger.timeout = -1 self.experimentparams.pre.wait2 = 0.0 # .robot, .lasergalvos, .ledpanels, and .post.trigger all run concurrently. # The first one to finish preempts the others. self.experimentparams.trial.robot.enabled = True self.experimentparams.trial.robot.move.mode = 'pattern' # 'pattern' or 'relative' self.experimentparams.trial.robot.move.pattern.frameidPosition = [ 'Arena' ] # self.experimentparams.trial.robot.move.pattern.frameidAngle = [ 'Arena' ] # self.experimentparams.trial.robot.move.pattern.shape = [ 'circle' ] # 'constant' or 'circle' or 'square' or 'flylogo' or 'spiral' or 'grid' self.experimentparams.trial.robot.move.pattern.hzPattern = [ 1 / 20 ] # Patterns per second. nPoints = 400 self.experimentparams.trial.robot.move.pattern.hzPoint = [ nPoints * self.experimentparams.trial.robot.move.pattern.hzPattern ] self.experimentparams.trial.robot.move.pattern.count = [-1] self.experimentparams.trial.robot.move.pattern.size = [ Point(x=32, y=0) ] self.experimentparams.trial.robot.move.pattern.param = [0] self.experimentparams.trial.robot.move.pattern.direction = [1] self.experimentparams.trial.lasergalvos.enabled = False self.experimentparams.trial.ledpanels.enabled = False self.experimentparams.trial.ledpanels.command = [ 'fixed' ] # 'fixed', 'trackposition' (panel position follows fly position), or 'trackview' (panel position follows fly's viewpoint). self.experimentparams.trial.ledpanels.idPattern = [1] self.experimentparams.trial.ledpanels.frame_id = ['Fly01Forecast'] self.experimentparams.trial.ledpanels.statefilterHi = [''] self.experimentparams.trial.ledpanels.statefilterLo = [''] self.experimentparams.trial.ledpanels.statefilterCriteria = [''] self.experimentparams.post.trigger.enabled = False self.experimentparams.post.trigger.frameidParent = 'Fly01' self.experimentparams.post.trigger.frameidChild = 'Robot' self.experimentparams.post.trigger.speedAbsParentMin = 0.0 self.experimentparams.post.trigger.speedAbsParentMax = 999.0 self.experimentparams.post.trigger.speedAbsChildMin = 0.0 self.experimentparams.post.trigger.speedAbsChildMax = 999.0 self.experimentparams.post.trigger.speedRelMin = 0.0 self.experimentparams.post.trigger.speedRelMax = 999.0 self.experimentparams.post.trigger.distanceMin = 0.0 self.experimentparams.post.trigger.distanceMax = 999.0 self.experimentparams.post.trigger.angleMin = 0.0 * np.pi / 180.0 self.experimentparams.post.trigger.angleMax = 180.0 * np.pi / 180.0 self.experimentparams.post.trigger.angleTest = 'inclusive' self.experimentparams.post.trigger.angleTestBilateral = True self.experimentparams.post.trigger.timeHold = 0.0 self.experimentparams.post.trigger.timeout = -1 self.experimentparams.post.wait = 0.0 self.experimentlib = ExperimentLib.ExperimentLib( self.experimentparams, startexperiment_callback=self.StartExperiment_callback, starttrial_callback=self.StartTrial_callback, endtrial_callback=self.EndTrial_callback)
def __init__(self): rospy.init_node('Experiment') # Fill out the data structure that defines the experiment. self.experimentparams = ExperimentParamsChoicesRequest() flies = 'TrpA1_sugar' radius = 50 t0 = 10 # off t1 = 3 # on t2 = 117 # off laserpower = '260mW' self.experimentparams.experiment.description = 'Lasers the fly when within %dmm of center, for %d secs, then off for %d secs.' % ( radius, t1, t2) self.experimentparams.experiment.maxTrials = 10 self.experimentparams.experiment.timeout = -1 #self.experimentparams.save.filenamebase = 'HCS_normal_150mW_' #self.experimentparams.save.filenamebase = 'TrpA1neg_AristaeIntact_150mW_' # #self.experimentparams.save.filenamebase = 'UAS_TrpA1_parentalcontrol_180mW_' #self.experimentparams.save.filenamebase = 'posvel_TrpA1_geosmin_fed_120mW_' #self.experimentparams.save.filenamebase = 'posvel_TrpA1_CVA_260mW_' self.experimentparams.save.filenamebase = 'zapresponsearea_%s_%dmm_%02ds_%02ds_%s_' % ( flies, radius, t1, t2, laserpower) self.experimentparams.save.csv = True self.experimentparams.save.bag = False self.experimentparams.save.mov = False self.experimentparams.save.fmf = False self.experimentparams.save.imagetopic_list = ['camera/image_rect'] self.experimentparams.save.onlyWhileTriggered = False # Saves always. self.experimentparams.robotspec.nRobots = 0 self.experimentparams.robotspec.width = 1.5875 self.experimentparams.robotspec.height = 1.5875 self.experimentparams.robotspec.isPresent = True # Set this to False if you remove the robot, but still want the actuation. self.experimentparams.robotspec.description = 'none' self.experimentparams.flyspec.nFlies = 1 self.experimentparams.flyspec.description = flies self.experimentparams.tracking.exclusionzones.enabled = False self.experimentparams.tracking.exclusionzones.point_list = [ Point(x=45.0, y=48.0) ] self.experimentparams.tracking.exclusionzones.radius_list = [8.0] self.experimentparams.home.enabled = False self.experimentparams.pre.robot.enabled = False self.experimentparams.pre.lasergalvos.enabled = False self.experimentparams.pre.ledpanels.enabled = False self.experimentparams.pre.wait1 = t0 self.experimentparams.pre.trigger.enabled = True self.experimentparams.pre.trigger.frameidParent = 'Arena' self.experimentparams.pre.trigger.frameidChild = 'Fly01' self.experimentparams.pre.trigger.speedAbsParentMin = 0.0 self.experimentparams.pre.trigger.speedAbsParentMax = 999.0 self.experimentparams.pre.trigger.speedAbsChildMin = 0.0 self.experimentparams.pre.trigger.speedAbsChildMax = 999.0 self.experimentparams.pre.trigger.speedRelMin = 0.0 self.experimentparams.pre.trigger.speedRelMax = 999.0 self.experimentparams.pre.trigger.distanceMin = 0.0 self.experimentparams.pre.trigger.distanceMax = radius self.experimentparams.pre.trigger.angleMin = 0.0 * np.pi / 180.0 self.experimentparams.pre.trigger.angleMax = 180.0 * np.pi / 180.0 self.experimentparams.pre.trigger.angleTest = 'inclusive' self.experimentparams.pre.trigger.angleTestBilateral = True self.experimentparams.pre.trigger.timeHold = 0.0 self.experimentparams.pre.trigger.timeout = -1 self.experimentparams.pre.wait2 = 0.0 # .robot, .lasergalvos, .ledpanels, and .post.trigger all run concurrently. # The first one to finish preempts the others. self.experimentparams.trial.robot.enabled = False flies_list = range(1, 1 + self.experimentparams.flyspec.nFlies) self.experimentparams.trial.lasergalvos.enabled = True self.experimentparams.trial.lasergalvos.pattern_list = [] self.experimentparams.trial.lasergalvos.statefilterHi_list = [] self.experimentparams.trial.lasergalvos.statefilterLo_list = [] self.experimentparams.trial.lasergalvos.statefilterCriteria_list = [] for iFly in flies_list: self.experimentparams.trial.lasergalvos.pattern_list.append( MsgPattern( frameidPosition='Fly%02dForecast' % iFly, frameidAngle='Fly%02dForecast' % iFly, shape='grid', hzPattern=40.0, hzPoint=1000.0, count=1, size=Point(x=2, y=2), restart=False, param=3, # Peano curve level. direction=1), ) #self.experimentparams.trial.lasergalvos.statefilterHi_list.append("{'speed':5.0}") #self.experimentparams.trial.lasergalvos.statefilterLo_list.append("{'speed':0.0}") #self.experimentparams.trial.lasergalvos.statefilterHi_list.append("{'velocity':{'linear':{'x':1,'y':9999}}}") #self.experimentparams.trial.lasergalvos.statefilterLo_list.append("{'velocity':{'linear':{'x':-9999,'y':-9999}}}") #self.experimentparams.trial.lasergalvos.statefilterHi_list.append("{'velocity':{'linear':{'x':1,'y':9999}},'pose':{'position':{'x':0, 'y':100}}}") #self.experimentparams.trial.lasergalvos.statefilterLo_list.append("{'velocity':{'linear':{'x':-9999,'y':-9999}},'pose':{'position':{'x':-100, 'y':-100}}}") #self.experimentparams.trial.lasergalvos.statefilterHi_list.append("{'velocity':{'angular':{'z':999}}}") #self.experimentparams.trial.lasergalvos.statefilterLo_list.append("{'velocity':{'angular':{'z':0.5}}}") #self.experimentparams.trial.lasergalvos.statefilterHi_list.append("{'pose':{'position':{'x':40, 'y':40}}}") #self.experimentparams.trial.lasergalvos.statefilterLo_list.append("{'pose':{'position':{'x':-40, 'y':-40}}}") #self.experimentparams.trial.lasergalvos.statefilterCriteria_list.append('inclusive') # 'inclusive'=laserOn if all criteria are satisfied, laserOff if any criteria is violated. self.experimentparams.trial.ledpanels.enabled = True self.experimentparams.trial.ledpanels.command = [ 'fixed' ] # 'fixed', 'trackposition' (panel position follows fly position), or 'trackview' (panel position follows fly's viewpoint). self.experimentparams.trial.ledpanels.idPattern = [3] self.experimentparams.trial.ledpanels.frame_id = ['Fly01Forecast'] self.experimentparams.trial.ledpanels.statefilterHi = [''] self.experimentparams.trial.ledpanels.statefilterLo = [''] self.experimentparams.trial.ledpanels.statefilterCriteria = [''] self.experimentparams.post.trigger.enabled = True self.experimentparams.post.trigger.frameidParent = 'Arena' self.experimentparams.post.trigger.frameidChild = 'Fly01' self.experimentparams.post.trigger.speedAbsParentMin = 0.0 self.experimentparams.post.trigger.speedAbsParentMax = 999.0 self.experimentparams.post.trigger.speedAbsChildMin = 0.0 self.experimentparams.post.trigger.speedAbsChildMax = 999.0 self.experimentparams.post.trigger.speedRelMin = 0.0 self.experimentparams.post.trigger.speedRelMax = 999.0 self.experimentparams.post.trigger.distanceMin = 999.0 self.experimentparams.post.trigger.distanceMax = 111.0 # i.e. never self.experimentparams.post.trigger.angleMin = 0.0000 * np.pi / 180.0 self.experimentparams.post.trigger.angleMax = 359.9999 * np.pi / 180.0 self.experimentparams.post.trigger.angleTest = 'inclusive' self.experimentparams.post.trigger.angleTestBilateral = False self.experimentparams.post.trigger.timeHold = 0.0 self.experimentparams.post.trigger.timeout = t1 self.experimentparams.post.wait = t2 self.experimentlib = ExperimentLib.ExperimentLib( self.experimentparams, startexperiment_callback=self.StartExperiment_callback, starttrial_callback=self.StartTrial_callback, endtrial_callback=self.EndTrial_callback)
def __init__(self): rospy.init_node('Experiment') # Fill out the data structure that defines the experiment. self.experimentparams = ExperimentParamsChoicesRequest() self.experimentparams.experiment.description = 'See how long the fly lives with Laser (200mW)' self.experimentparams.experiment.maxTrials = -1 self.experimentparams.experiment.timeout = -1 self.experimentparams.save.filenamebase = 'HCS_trytokill_' self.experimentparams.save.csv = True self.experimentparams.save.bag = False self.experimentparams.save.mov = False self.experimentparams.save.fmf = False self.experimentparams.save.imagetopic_list = ['camera/image_rect'] self.experimentparams.save.onlyWhileTriggered = False self.experimentparams.robotspec.nRobots = 0 self.experimentparams.robotspec.width = 1.5875 self.experimentparams.robotspec.height = 1.5875 self.experimentparams.robotspec.isPresent = True # Set this to False if you remove the robot, but still want the actuation. self.experimentparams.robotspec.description = 'Black oxide magnet' self.experimentparams.flyspec.nFlies = 1 self.experimentparams.flyspec.description = 'HCS normal' self.experimentparams.tracking.exclusionzones.enabled = False self.experimentparams.tracking.exclusionzones.point_list = [Point(x=0.00304053, y=0.00015492)] self.experimentparams.tracking.exclusionzones.radius_list = [0] self.experimentparams.home.enabled = False self.experimentparams.pre.robot.enabled = False self.experimentparams.pre.lasergalvos.enabled = False self.experimentparams.pre.ledpanels.enabled = False self.experimentparams.pre.wait1 = 0.0 self.experimentparams.pre.trigger.enabled = False self.experimentparams.pre.trigger.frameidParent = 'Arena' self.experimentparams.pre.trigger.frameidChild = 'Fly01' self.experimentparams.pre.trigger.speedAbsParentMin = 0.0 self.experimentparams.pre.trigger.speedAbsParentMax = 999.0 self.experimentparams.pre.trigger.speedAbsChildMin = 0.0 self.experimentparams.pre.trigger.speedAbsChildMax = 999.0 self.experimentparams.pre.trigger.speedRelMin = 0.0 self.experimentparams.pre.trigger.speedRelMax = 999.0 self.experimentparams.pre.trigger.distanceMin = 0.0 self.experimentparams.pre.trigger.distanceMax = 999.0 self.experimentparams.pre.trigger.angleMin = 0.0 * np.pi / 180.0 self.experimentparams.pre.trigger.angleMax =180.0 * np.pi / 180.0 self.experimentparams.pre.trigger.angleTest = 'inclusive' self.experimentparams.pre.trigger.angleTestBilateral = True self.experimentparams.pre.trigger.timeHold = 0.0 self.experimentparams.pre.trigger.timeout = -1 self.experimentparams.pre.wait2 = 0.0 # .robot, .lasergalvos, .ledpanels, and .post.trigger all run concurrently. # The first one to finish preempts the others. self.experimentparams.trial.robot.enabled = False #mode='fixedpointlist' # Laser to specific locations. #mode='fixedcircle' #mode='fixedgrid' mode='trackgrid' # Small grid tracks flies. #mode='tracknumber' # Draw a numeral on flies. #mode='trackflylogo' flies_list = range(1,1+self.experimentparams.flyspec.nFlies) self.experimentparams.trial.lasergalvos.enabled = True self.experimentparams.trial.lasergalvos.pattern_list = [] self.experimentparams.trial.lasergalvos.statefilterLo_list = [] self.experimentparams.trial.lasergalvos.statefilterHi_list = [] self.experimentparams.trial.lasergalvos.statefilterCriteria_list = [] if mode=='fixedpointlist': # Draw a point. self.experimentparams.trial.lasergalvos.pattern_list.append(MsgPattern( frameidPosition = 'Arena', frameidAngle = 'Arena', shape = 'bypoints', hzPattern = 40.0, hzPoint = 1000.0, count = 1, points = [#Point(x=0 ,y=0)], Point(x=34 ,y=34), Point(x=34 ,y=34+6), Point(x=34 ,y=34-6), Point(x=34+6,y=34), Point(x=34-6,y=34)], size = Point(x=0, y=0), restart = False, param = 3, # Peano curve level. direction = 1), ) if mode=='fixedcircle': # Draw a point. self.experimentparams.trial.lasergalvos.pattern_list.append(MsgPattern( frameidPosition = 'Arena', frameidAngle = 'Arena', shape = 'circle', hzPattern = 40.0, hzPoint = 1000.0, count = 1, size = Point(x=80, y= 0), restart = False, param = 3, direction = 1), # Peano curve level. ) if mode=='fixedgrid': # Draw a maze. self.experimentparams.trial.lasergalvos.pattern_list.append(MsgPattern( frameidPosition = 'Arena', frameidAngle = 'Arena', shape = 'grid', hzPattern = 40.0, hzPoint = 1000.0, count = 1, size = Point(x=0, y=0), restart = False, param = 3, # Peano curve level. direction = 1), ) if mode=='trackgrid': for iFly in flies_list: self.experimentparams.trial.lasergalvos.pattern_list.append(MsgPattern( frameidPosition = 'Fly%02dForecast' % iFly, frameidAngle = 'Fly%02dForecast' % iFly, shape = 'grid', hzPattern = 40.0, hzPoint = 1000.0, count = 1, size = Point(x=2, y=2), restart = False, param = 3, # Peano curve level. direction = 1), ) if mode=='tracknumber': for iFly in flies_list: self.experimentparams.trial.lasergalvos.pattern_list.append(MsgPattern( frameidPosition = 'Fly%02dForecast' % iFly, frameidAngle = 'Fly%02dForecast' % iFly, shape = '%s' % iFly, hzPattern = 10.0, hzPoint = 1000.0, count = 1, size = Point(x=8, y=8), restart = False, param = 0, direction = 1), # Peano curve level. ) if mode=='trackflylogo': for iFly in flies_list: self.experimentparams.trial.lasergalvos.pattern_list.append(MsgPattern( frameidPosition = 'Fly%02dForecast' % iFly, frameidAngle = 'Fly%02dForecast' % iFly, shape = 'flylogo', hzPattern = 40.0, hzPoint = 1000.0, count = 1, size = Point(x=6, y=6), restart = False, param = 0, direction = 1), # Peano curve level. ) self.experimentparams.trial.ledpanels.enabled = False self.experimentparams.trial.ledpanels.command = ['fixed'] # 'fixed', 'trackposition' (panel position follows fly position), or 'trackview' (panel position follows fly's viewpoint). self.experimentparams.trial.ledpanels.idPattern = [1] self.experimentparams.trial.ledpanels.frame_id = ['Fly01Forecast'] self.experimentparams.trial.ledpanels.statefilterHi = [''] self.experimentparams.trial.ledpanels.statefilterLo = [''] self.experimentparams.trial.ledpanels.statefilterCriteria = [''] self.experimentparams.post.trigger.enabled = True self.experimentparams.post.trigger.frameidParent = 'Arena' self.experimentparams.post.trigger.frameidChild = 'Fly01' self.experimentparams.post.trigger.speedAbsParentMin = 0.0 self.experimentparams.post.trigger.speedAbsParentMax = 999.0 self.experimentparams.post.trigger.speedAbsChildMin = 0.0 self.experimentparams.post.trigger.speedAbsChildMax = 999.0 self.experimentparams.post.trigger.speedRelMin = 0.0 self.experimentparams.post.trigger.speedRelMax = 999.0 self.experimentparams.post.trigger.distanceMin = 999.0 self.experimentparams.post.trigger.distanceMax = 888.0 # i.e. never self.experimentparams.post.trigger.angleMin = 0.0 * np.pi / 180.0 self.experimentparams.post.trigger.angleMax =180.0 * np.pi / 180.0 self.experimentparams.post.trigger.angleTest = 'inclusive' self.experimentparams.post.trigger.angleTestBilateral = True self.experimentparams.post.trigger.timeHold = 0.0 self.experimentparams.post.trigger.timeout = 1800 self.experimentparams.post.wait = 0.0 self.experimentlib = ExperimentLib.ExperimentLib(self.experimentparams, startexperiment_callback = self.StartExperiment_callback, starttrial_callback = self.StartTrial_callback, endtrial_callback = self.EndTrial_callback)
def __init__(self): rospy.init_node('Experiment') rospy.sleep(1) # Fill out the data structure that defines the experiment. self.experimentparams = ExperimentParamsChoicesRequest() self.experimentparams.experiment.description = 'Dodgeball' self.experimentparams.experiment.maxTrials = -1 self.experimentparams.experiment.timeout = -1 self.experimentparams.save.filenamebase = 'dodgeball' self.experimentparams.save.csv = True self.experimentparams.save.bag = True self.experimentparams.save.mov = True self.experimentparams.save.fmf = False self.experimentparams.save.imagetopic_list = ['camera/image_rect'] self.experimentparams.save.onlyWhileTriggered = True self.experimentparams.robotspec.nRobots = 1 self.experimentparams.robotspec.width = 1.5875 self.experimentparams.robotspec.height = 1.5875 self.experimentparams.robotspec.isPresent = True # Set this to False if you remove the robot, but still want the actuation. self.experimentparams.robotspec.description = 'Black oxide magnet' self.experimentparams.flyspec.nFlies = 1 self.experimentparams.flyspec.description = 'unspecified' self.experimentparams.tracking.exclusionzones.enabled = True self.experimentparams.tracking.exclusionzones.point_list = [ Point(x=45.0, y=70), Point(x=-79, y=28) ] self.experimentparams.tracking.exclusionzones.radius_list = [3.5, 3.0] self.experimentparams.home.enabled = True self.experimentparams.home.x = 10.0 self.experimentparams.home.y = 0.0 self.experimentparams.home.speed = 20 self.experimentparams.home.tolerance = 2 self.experimentparams.pre.robot.enabled = True self.experimentparams.pre.robot.move.mode = 'pattern' # 'relative' or 'pattern'. Move relative to the given frame, or move in a preset pattern. self.experimentparams.pre.robot.move.relative.tracking = [True] self.experimentparams.pre.robot.move.relative.frameidOrigin = [ 'Fly01Forecast' ] self.experimentparams.pre.robot.move.relative.distance = [35] # mm self.experimentparams.pre.robot.move.relative.angleOffset = [ 0 ] # Angular offset to target point in given frame (radians). self.experimentparams.pre.robot.move.relative.angleVelocity = [ 0 ] # 2pi*freq # Angular velocity of target point in given frame (radians per sec). self.experimentparams.pre.robot.move.relative.angleOscMag = [ 0 ] # Oscillatory addition to angular velocity. self.experimentparams.pre.robot.move.relative.angleOscFreq = [ 0 ] # Hz of the added oscillation. self.experimentparams.pre.robot.move.relative.speedMax = [ 20 ] # Maximum allowed speed of travel (mm/sec). self.experimentparams.pre.robot.move.relative.tolerance = [2] # mm self.experimentparams.pre.robot.move.relative.typeAngleOffset = [ 'random' ] # 'constant' or 'random' (on range [0,2pi]) or 'current' (use current angle from frameidOrigin to robot) self.experimentparams.pre.robot.move.relative.typeAngleVelocity = [ 'constant' ] # 'constant' or 'random' (on range [0,angleVelocity]) self.experimentparams.pre.robot.move.relative.typeAngleOscMag = [ 'constant' ] # 'constant' or 'random' (on range [0,angleOscMag]) self.experimentparams.pre.robot.move.relative.typeAngleOscFreq = [ 'constant' ] # 'constant' or 'random' (on range [0,angleOscFreq]) self.experimentparams.pre.robot.move.relative.typeSpeedMax = [ 'constant' ] # 'constant' or 'random' (on range [0,speedMax]) self.experimentparams.pre.robot.move.pattern.frameidPosition = [ 'Arena' ] # self.experimentparams.pre.robot.move.pattern.frameidAngle = ['Arena' ] # self.experimentparams.pre.robot.move.pattern.shape = [ 'circle' ] # 'constant' or 'circle' or 'square' or 'flylogo' or 'spiral' or 'grid' self.experimentparams.pre.robot.move.pattern.hzPattern = [ 1 / 6 ] # Patterns per second. self.experimentparams.pre.robot.move.pattern.hzPoint = [ 20 ] # The update rate for the actuator. self.experimentparams.pre.robot.move.pattern.count = [-1] self.experimentparams.pre.robot.move.pattern.size = [Point(x=10, y=0)] self.experimentparams.pre.robot.move.pattern.param = [0] self.experimentparams.pre.robot.move.pattern.direction = [1] self.experimentparams.pre.lasergalvos.enabled = False self.experimentparams.pre.ledpanels.enabled = True self.experimentparams.pre.ledpanels.command = [ 'fixed' ] # 'fixed', 'trackposition' (panel position follows fly position), or 'trackview' (panel position follows fly's viewpoint). self.experimentparams.pre.ledpanels.idPattern = [1] self.experimentparams.pre.ledpanels.origin = [Point(x=0, y=0)] self.experimentparams.pre.ledpanels.frame_id = ['Fly01'] self.experimentparams.pre.ledpanels.statefilterHi = [''] self.experimentparams.pre.ledpanels.statefilterLo = [''] self.experimentparams.pre.ledpanels.statefilterCriteria = [''] self.experimentparams.pre.wait1 = 0.0 self.experimentparams.pre.trigger.enabled = True self.experimentparams.pre.trigger.frameidParent = 'Fly01' self.experimentparams.pre.trigger.frameidChild = 'Robot' self.experimentparams.pre.trigger.speedAbsParentMin = 10.0 # Absolute speed of the parent in fixed frame. self.experimentparams.pre.trigger.speedAbsParentMax = 60.0 self.experimentparams.pre.trigger.speedAbsChildMin = 0.0 # Absolute speed of the child in fixed frame. self.experimentparams.pre.trigger.speedAbsChildMax = 999.0 self.experimentparams.pre.trigger.speedRelMin = 0.0 # Relative speed of child to parent. self.experimentparams.pre.trigger.speedRelMax = 999.0 self.experimentparams.pre.trigger.distanceMin = 20.0 # Distance between child and parent frames. self.experimentparams.pre.trigger.distanceMax = 40.0 self.experimentparams.pre.trigger.angleMin = 00.0 * np.pi / 180.0 # Angle of the child frame from the perspective of the parent frame. self.experimentparams.pre.trigger.angleMax = 180.0 * np.pi / 180.0 self.experimentparams.pre.trigger.angleTest = 'inclusive' # 'inclusive' or 'exclusive' of the given angle range. self.experimentparams.pre.trigger.angleTestBilateral = True # True=bilateral, False=unilateral. self.experimentparams.pre.trigger.timeHold = 0.1 # How long the conditions must be continually met before the trigger happens. self.experimentparams.pre.trigger.timeout = -1 self.experimentparams.pre.wait2 = 0.0 # .robot, .lasergalvos, .ledpanels, and .post.trigger all run concurrently. # The first one to finish preempts the others. self.experimentparams.trial.robot.enabled = True self.experimentparams.trial.robot.move.mode = 'relative' # 'relative' or 'pattern'. Move relative to the given frame, or move in a preset pattern. self.experimentparams.trial.robot.move.relative.tracking = [True] self.experimentparams.trial.robot.move.relative.frameidOrigin = [ 'Fly01Forecast' ] self.experimentparams.trial.robot.move.relative.distance = [6] # mm self.experimentparams.trial.robot.move.relative.angleOffset = [ 0 ] # Angular offset to target point in given frame (radians). self.experimentparams.trial.robot.move.relative.angleVelocity = [ 0 ] # 2pi*freq # Angular velocity of target point in given frame (radians per sec). self.experimentparams.trial.robot.move.relative.angleOscMag = [ 0 ] # Oscillatory addition to angular velocity. self.experimentparams.trial.robot.move.relative.angleOscFreq = [ 0 ] # Hz of the added oscillation. self.experimentparams.trial.robot.move.relative.speedMax = [ 20 ] # Maximum allowed speed of travel (mm/sec). self.experimentparams.trial.robot.move.relative.tolerance = [2] # mm self.experimentparams.trial.robot.move.relative.typeAngleOffset = [ 'current' ] # 'constant' or 'random' (on range [0,2pi]) or 'current' (use current angle from frameidOrigin to robot) self.experimentparams.trial.robot.move.relative.typeAngleVelocity = [ 'constant' ] # 'constant' or 'random' (on range [0,angleVelocity]) self.experimentparams.trial.robot.move.relative.typeAngleOscMag = [ 'constant' ] # 'constant' or 'random' (on range [0,angleOscMag]) self.experimentparams.trial.robot.move.relative.typeAngleOscFreq = [ 'constant' ] # 'constant' or 'random' (on range [0,angleOscFreq]) self.experimentparams.trial.robot.move.relative.typeSpeedMax = [ 'constant' ] # 'constant' or 'random' (on range [0,speedMax]) self.experimentparams.trial.lasergalvos.enabled = False self.experimentparams.trial.ledpanels.enabled = True self.experimentparams.trial.ledpanels.command = [ 'fixed' ] # 'fixed', 'trackposition' (panel position follows fly position), or 'trackview' (panel position follows fly's viewpoint). self.experimentparams.trial.ledpanels.idPattern = [1] self.experimentparams.trial.ledpanels.origin = [Point(x=0, y=0)] self.experimentparams.trial.ledpanels.frame_id = ['Fly01Forecast'] self.experimentparams.trial.ledpanels.statefilterHi = [''] self.experimentparams.trial.ledpanels.statefilterLo = [''] self.experimentparams.trial.ledpanels.statefilterCriteria = [''] self.experimentparams.post.trigger.enabled = False self.experimentparams.post.trigger.frameidParent = 'Fly01' self.experimentparams.post.trigger.frameidChild = 'Robot' self.experimentparams.post.trigger.speedAbsParentMin = 999.0 self.experimentparams.post.trigger.speedAbsParentMax = 111.0 # i.e. NEVER self.experimentparams.post.trigger.speedAbsChildMin = 0.0 self.experimentparams.post.trigger.speedAbsChildMax = 999.0 self.experimentparams.post.trigger.speedRelMin = 0.0 self.experimentparams.post.trigger.speedRelMax = 999.0 self.experimentparams.post.trigger.distanceMin = 0.0 self.experimentparams.post.trigger.distanceMax = 999.0 self.experimentparams.post.trigger.angleMin = 0.0 * np.pi / 180.0 self.experimentparams.post.trigger.angleMax = 180.0 * np.pi / 180.0 self.experimentparams.post.trigger.angleTest = 'inclusive' self.experimentparams.post.trigger.angleTestBilateral = True self.experimentparams.post.trigger.timeHold = 1.0 self.experimentparams.post.trigger.timeout = 2 self.experimentparams.post.wait = 0.0 self.experimentlib = ExperimentLib.ExperimentLib( self.experimentparams, startexperiment_callback=self.StartExperiment_callback, starttrial_callback=self.StartTrial_callback, endtrial_callback=self.EndTrial_callback)
def __init__(self): rospy.init_node('Experiment') # Fill out the data structure that defines the experiment. self.experimentparams = ExperimentParamsChoicesRequest() #flies = 'HCS' flies = 'TrpA1_sugar' #flies = 'TrpA1_paralysis' #flies = 'TrpA1_wingextender' t0 = 120 # off t1 = 3 # on t2 = 117 # off laserpower = '260mW' self.experimentparams.experiment.description = 'Laser is off for %d secs, on for %d secs, and off for %d secs' % (t0, t1, t2) self.experimentparams.experiment.maxTrials = 100 self.experimentparams.experiment.timeout = -1 self.experimentparams.save.filenamebase = 'zapresponse_%s_%02ds_%02ds_%02ds_%s_' % (flies, t0, t1, t2, laserpower) self.experimentparams.save.csv = True self.experimentparams.save.bag = False self.experimentparams.save.mov = False self.experimentparams.save.fmf = False self.experimentparams.save.imagetopic_list = ['camera/image_rect'] self.experimentparams.save.onlyWhileTriggered = False self.experimentparams.robotspec.nRobots = 0 self.experimentparams.robotspec.width = 1.5875 self.experimentparams.robotspec.height = 1.5875 self.experimentparams.robotspec.isPresent = True # Set this to False if you remove the robot, but still want the actuation. self.experimentparams.robotspec.description = 'Black oxide magnet' self.experimentparams.flyspec.nFlies = 1 self.experimentparams.flyspec.description = flies self.experimentparams.tracking.exclusionzones.enabled = False self.experimentparams.tracking.exclusionzones.point_list = [Point(x=0.0, y=0.0)] self.experimentparams.tracking.exclusionzones.radius_list = [0.0] self.experimentparams.home.enabled = False self.experimentparams.pre.robot.enabled = False self.experimentparams.pre.lasergalvos.enabled = False self.experimentparams.pre.ledpanels.enabled = False self.experimentparams.pre.wait1 = t0 self.experimentparams.pre.trigger.enabled = False self.experimentparams.pre.trigger.frameidParent = 'Arena' self.experimentparams.pre.trigger.frameidChild = 'Fly01' self.experimentparams.pre.trigger.speedAbsParentMin = 0.0 self.experimentparams.pre.trigger.speedAbsParentMax = 999.0 self.experimentparams.pre.trigger.speedAbsChildMin = 0.0 self.experimentparams.pre.trigger.speedAbsChildMax = 999.0 self.experimentparams.pre.trigger.speedRelMin = 0.0 self.experimentparams.pre.trigger.speedRelMax = 999.0 self.experimentparams.pre.trigger.distanceMin = 0.0 self.experimentparams.pre.trigger.distanceMax = 999.0 self.experimentparams.pre.trigger.angleMin = 0.0 * np.pi / 180.0 self.experimentparams.pre.trigger.angleMax =180.0 * np.pi / 180.0 self.experimentparams.pre.trigger.angleTest = 'inclusive' self.experimentparams.pre.trigger.angleTestBilateral = True self.experimentparams.pre.trigger.timeHold = 0.0 self.experimentparams.pre.trigger.timeout = -1 self.experimentparams.pre.wait2 = 0.0 # .robot, .lasergalvos, .ledpanels, and .post.trigger all run concurrently. # The first one to finish preempts the others. self.experimentparams.trial.robot.enabled = False flies_list = range(1,1+self.experimentparams.flyspec.nFlies) self.experimentparams.trial.lasergalvos.enabled = True self.experimentparams.trial.lasergalvos.pattern_list = [] self.experimentparams.trial.lasergalvos.statefilterHi_list = [] self.experimentparams.trial.lasergalvos.statefilterLo_list = [] self.experimentparams.trial.lasergalvos.statefilterCriteria_list = [] for iFly in flies_list: self.experimentparams.trial.lasergalvos.pattern_list.append(MsgPattern( frameidPosition = 'Fly%02dForecast' % iFly, frameidAngle = 'Fly%02dForecast' % iFly, shape = 'grid', hzPattern = 40.0, hzPoint = 1000.0, count = 1, size = Point(x=2, y=2), restart = False, param = 3, # Peano curve level. direction = 1), ) self.experimentparams.trial.ledpanels.enabled = True self.experimentparams.trial.ledpanels.command = ['fixed'] # 'fixed', 'trackposition' (panel position follows fly position), or 'trackview' (panel position follows fly's viewpoint). self.experimentparams.trial.ledpanels.idPattern = [3] self.experimentparams.trial.ledpanels.frame_id = ['Fly01Forecast'] self.experimentparams.trial.ledpanels.statefilterHi = [''] self.experimentparams.trial.ledpanels.statefilterLo = [''] self.experimentparams.trial.ledpanels.statefilterCriteria = [''] self.experimentparams.post.trigger.enabled = True self.experimentparams.post.trigger.frameidParent = 'Arena' self.experimentparams.post.trigger.frameidChild = 'Fly01' self.experimentparams.post.trigger.speedAbsParentMin = 0.0 self.experimentparams.post.trigger.speedAbsParentMax = 999.0 self.experimentparams.post.trigger.speedAbsChildMin = 0.0 self.experimentparams.post.trigger.speedAbsChildMax = 999.0 self.experimentparams.post.trigger.speedRelMin = 0.0 self.experimentparams.post.trigger.speedRelMax = 999.0 self.experimentparams.post.trigger.distanceMin = 999.0 self.experimentparams.post.trigger.distanceMax = 888.0 # i.e. never self.experimentparams.post.trigger.angleMin = 0.0 * np.pi / 180.0 self.experimentparams.post.trigger.angleMax =180.0 * np.pi / 180.0 self.experimentparams.post.trigger.angleTest = 'inclusive' self.experimentparams.post.trigger.angleTestBilateral = True self.experimentparams.post.trigger.timeHold = 0.0 self.experimentparams.post.trigger.timeout = t1 self.experimentparams.post.wait = t2 self.experimentlib = ExperimentLib.ExperimentLib(self.experimentparams, startexperiment_callback = self.StartExperiment_callback, starttrial_callback = self.StartTrial_callback, endtrial_callback = self.EndTrial_callback)
def __init__(self): rospy.init_node('Experiment') # Fill out the data structure that defines the experiment. self.experimentparams = ExperimentParamsChoicesRequest() self.experimentparams.experiment.description = 'Food is in the hot zone.' self.experimentparams.experiment.maxTrials = -1 self.experimentparams.experiment.timeout = -1 self.experimentparams.save.filenamebase = 'zaphotfood' self.experimentparams.save.csv = True self.experimentparams.save.bag = False self.experimentparams.save.mov = False self.experimentparams.save.fmf = False self.experimentparams.save.imagetopic_list = ['camera/image_rect'] self.experimentparams.save.onlyWhileTriggered = False # Saves always. self.experimentparams.robotspec.nRobots = 0 self.experimentparams.robotspec.width = 1.5875 self.experimentparams.robotspec.height = 1.5875 self.experimentparams.robotspec.isPresent = True # Set this to False if you remove the robot, but still want the actuation. self.experimentparams.robotspec.description = 'Black oxide magnet' self.experimentparams.flyspec.nFlies = 1 self.experimentparams.flyspec.description = 'unspecified' self.experimentparams.tracking.exclusionzones.enabled = True self.experimentparams.tracking.exclusionzones.point_list = [ Point(x=52.3, y=-51.0) ] self.experimentparams.tracking.exclusionzones.radius_list = [7.0] self.experimentparams.home.enabled = False self.experimentparams.pre.robot.enabled = False self.experimentparams.pre.lasergalvos.enabled = False self.experimentparams.pre.ledpanels.enabled = False self.experimentparams.pre.wait1 = 0.0 self.experimentparams.pre.trigger.enabled = False self.experimentparams.pre.trigger.frameidParent = 'Arena' self.experimentparams.pre.trigger.frameidChild = 'Fly01' self.experimentparams.pre.trigger.speedAbsParentMin = 0.0 self.experimentparams.pre.trigger.speedAbsParentMax = 999.0 self.experimentparams.pre.trigger.speedAbsChildMin = 0.0 self.experimentparams.pre.trigger.speedAbsChildMax = 999.0 self.experimentparams.pre.trigger.speedRelMin = 0.0 self.experimentparams.pre.trigger.speedRelMax = 999.0 self.experimentparams.pre.trigger.distanceMin = 0.0 self.experimentparams.pre.trigger.distanceMax = 999.0 self.experimentparams.pre.trigger.angleMin = 0.0 * np.pi / 180.0 self.experimentparams.pre.trigger.angleMax = 180.0 * np.pi / 180.0 self.experimentparams.pre.trigger.angleTest = 'inclusive' self.experimentparams.pre.trigger.angleTestBilateral = False self.experimentparams.pre.trigger.timeHold = 0.0 self.experimentparams.pre.trigger.timeout = -1 self.experimentparams.pre.wait2 = 0.0 # .robot, .lasergalvos, .ledpanels, and .post.trigger all run concurrently. # The first one to finish preempts the others. self.experimentparams.trial.robot.enabled = False self.experimentparams.trial.lasergalvos.enabled = True self.experimentparams.trial.lasergalvos.pattern_list = [] self.experimentparams.trial.lasergalvos.statefilterHi_list = [] self.experimentparams.trial.lasergalvos.statefilterLo_list = [] self.experimentparams.trial.lasergalvos.statefilterCriteria_list = [] for iFly in range(self.experimentparams.flyspec.nFlies): #range(3):# self.experimentparams.trial.lasergalvos.pattern_list.append( MsgPattern(frameidPosition='Fly%02dForecast' % (iFly + 1), frameidAngle='Fly%02dForecast' % (iFly + 1), shape='grid', hzPattern=40.0, hzPoint=1000.0, count=1, size=Point(x=2, y=2), restart=False, param=3, direction=1), # Peano curve level. ) #self.experimentparams.trial.lasergalvos.statefilterHi_list.append("{'speed':5.0}") #self.experimentparams.trial.lasergalvos.statefilterLo_list.append("{'speed':0.0}") #self.experimentparams.trial.lasergalvos.statefilterHi_list.append("{'velocity':{'linear':{'x':+6,'y':+6}}}") #self.experimentparams.trial.lasergalvos.statefilterLo_list.append("{'velocity':{'linear':{'x':-6,'y':-6}}}") #self.experimentparams.trial.lasergalvos.statefilterHi_list.append("{'velocity':{'angular':{'z':999}}}") #self.experimentparams.trial.lasergalvos.statefilterLo_list.append("{'velocity':{'angular':{'z':0.5}}}") self.experimentparams.trial.lasergalvos.statefilterHi_list.append( "{'pose':{'position':{'x':-30, 'y':50}}}" ) # This is the cool zone. self.experimentparams.trial.lasergalvos.statefilterLo_list.append( "{'pose':{'position':{'x':-50, 'y':30}}}") self.experimentparams.trial.lasergalvos.statefilterCriteria_list.append( "exclusive") self.experimentparams.trial.ledpanels.enabled = False self.experimentparams.trial.ledpanels.command = [ 'fixed' ] # 'fixed', 'trackposition' (panel position follows fly position), or 'trackview' (panel position follows fly's viewpoint). self.experimentparams.trial.ledpanels.idPattern = [1] self.experimentparams.trial.ledpanels.frame_id = ['Fly01Forecast'] self.experimentparams.trial.ledpanels.statefilterHi = [''] self.experimentparams.trial.ledpanels.statefilterLo = [''] self.experimentparams.trial.ledpanels.statefilterCriteria = [''] self.experimentparams.post.trigger.enabled = True self.experimentparams.post.trigger.frameidParent = 'Arena' self.experimentparams.post.trigger.frameidChild = 'Fly01' self.experimentparams.post.trigger.speedAbsParentMin = 0.0 self.experimentparams.post.trigger.speedAbsParentMax = 999.0 self.experimentparams.post.trigger.speedAbsChildMin = 0.0 self.experimentparams.post.trigger.speedAbsChildMax = 999.0 self.experimentparams.post.trigger.speedRelMin = 0.0 self.experimentparams.post.trigger.speedRelMax = 999.0 self.experimentparams.post.trigger.distanceMin = 999.0 self.experimentparams.post.trigger.distanceMax = 111.0 # i.e. never self.experimentparams.post.trigger.angleMin = 0.0000 * np.pi / 180.0 self.experimentparams.post.trigger.angleMax = 359.9999 * np.pi / 180.0 self.experimentparams.post.trigger.angleTest = 'inclusive' self.experimentparams.post.trigger.angleTestBilateral = False self.experimentparams.post.trigger.timeHold = 0.0 self.experimentparams.post.trigger.timeout = 3600 self.experimentparams.post.wait = 0.0 self.experimentlib = ExperimentLib.ExperimentLib( self.experimentparams, startexperiment_callback=self.StartExperiment_callback, starttrial_callback=self.StartTrial_callback, endtrial_callback=self.EndTrial_callback)
def __init__(self): rospy.init_node('Experiment') # Fill out the data structure that defines the experiment. self.experimentparams = ExperimentParamsChoicesRequest() self.experimentparams.experiment.description = 'Navigation around a food spot' self.experimentparams.experiment.maxTrials = -1 self.experimentparams.experiment.timeout = -1 self.experimentparams.save.filenamebase = 'flydance' self.experimentparams.save.csv = True self.experimentparams.save.bag = False self.experimentparams.save.mov = False self.experimentparams.save.fmf = False self.experimentparams.save.imagetopic_list = ['camera/image_rect'] self.experimentparams.save.onlyWhileTriggered = False self.experimentparams.robotspec.nRobots = 0 self.experimentparams.robotspec.width = 1.5875 self.experimentparams.robotspec.height = 1.5875 self.experimentparams.robotspec.isPresent = True # Set this to False if you remove the robot, but still want the actuation. self.experimentparams.robotspec.description = 'Black oxide magnet' self.experimentparams.flyspec.nFlies = 4 self.experimentparams.flyspec.description = "unspecified" self.experimentparams.tracking.exclusionzones.enabled = False self.experimentparams.tracking.exclusionzones.point_list = [ Point(x=0.00304053, y=0.00015492) ] self.experimentparams.tracking.exclusionzones.radius_list = [0] self.experimentparams.home.enabled = False self.experimentparams.pre.robot.enabled = False self.experimentparams.pre.lasergalvos.enabled = False self.experimentparams.pre.ledpanels.enabled = False self.experimentparams.pre.wait1 = 0.0 self.experimentparams.pre.trigger.enabled = False self.experimentparams.pre.trigger.frameidParent = 'Arena' self.experimentparams.pre.trigger.frameidChild = 'Fly1' self.experimentparams.pre.trigger.speedAbsParentMin = 0.0 self.experimentparams.pre.trigger.speedAbsParentMax = 999.0 self.experimentparams.pre.trigger.speedAbsChildMin = 0.0 self.experimentparams.pre.trigger.speedAbsChildMax = 999.0 self.experimentparams.pre.trigger.speedRelMin = 0.0 self.experimentparams.pre.trigger.speedRelMax = 999.0 self.experimentparams.pre.trigger.distanceMin = 0.0 self.experimentparams.pre.trigger.distanceMax = 999.0 self.experimentparams.pre.trigger.angleMin = 0.0 * np.pi / 180.0 self.experimentparams.pre.trigger.angleMax = 180.0 * np.pi / 180.0 self.experimentparams.pre.trigger.angleTest = 'inclusive' self.experimentparams.pre.trigger.angleTestBilateral = True self.experimentparams.pre.trigger.timeHold = 0.0 self.experimentparams.pre.trigger.timeout = -1 self.experimentparams.pre.wait2 = 0.0 # .robot, .lasergalvos, .ledpanels, and .post.trigger all run concurrently. # The first one to finish preempts the others. self.experimentparams.trial.robot.enabled = False self.experimentparams.trial.lasergalvos.enabled = False self.experimentparams.trial.ledpanels.enabled = False self.experimentparams.trial.ledpanels.command = [ 'fixed' ] # 'fixed', 'trackposition' (panel position follows fly position), or 'trackview' (panel position follows fly's viewpoint). self.experimentparams.trial.ledpanels.idPattern = [1] self.experimentparams.trial.ledpanels.frame_id = ['Fly1Forecast'] self.experimentparams.trial.ledpanels.statefilterHi = [''] self.experimentparams.trial.ledpanels.statefilterLo = [''] self.experimentparams.trial.ledpanels.statefilterCriteria = [''] self.experimentparams.post.trigger.enabled = True self.experimentparams.post.trigger.frameidParent = 'Arena' self.experimentparams.post.trigger.frameidChild = 'Fly1' self.experimentparams.post.trigger.speedAbsParentMin = 0.0 self.experimentparams.post.trigger.speedAbsParentMax = 999.0 self.experimentparams.post.trigger.speedAbsChildMin = 0.0 self.experimentparams.post.trigger.speedAbsChildMax = 999.0 self.experimentparams.post.trigger.speedRelMin = 0.0 self.experimentparams.post.trigger.speedRelMax = 999.0 self.experimentparams.post.trigger.distanceMin = 999.0 self.experimentparams.post.trigger.distanceMax = 888.0 # i.e. never self.experimentparams.post.trigger.angleMin = 0.0 * np.pi / 180.0 self.experimentparams.post.trigger.angleMax = 180.0 * np.pi / 180.0 self.experimentparams.post.trigger.angleTest = 'inclusive' self.experimentparams.post.trigger.angleTestBilateral = True self.experimentparams.post.trigger.timeHold = 0.0 self.experimentparams.post.trigger.timeout = 7200 # 5400 = 1.5 hr self.experimentparams.post.wait = 0.0 self.experimentlib = ExperimentLib.ExperimentLib( self.experimentparams, startexperiment_callback=self.StartExperiment_callback, starttrial_callback=self.StartTrial_callback, endtrial_callback=self.EndTrial_callback)
def __init__(self): rospy.init_node('Experiment') # Fill out the data structure that defines the experiment. self.experimentparams = ExperimentParamsChoicesRequest() self.experimentparams.experiment.description = 'Aim laser at fly' self.experimentparams.experiment.maxTrials = -1 self.experimentparams.experiment.timeout = -1 self.experimentparams.save.filenamebase = 'zap' self.experimentparams.save.csv = True self.experimentparams.save.bag = False self.experimentparams.save.mov = False self.experimentparams.save.fmf = False self.experimentparams.save.imagetopic_list = ['camera/image_rect'] self.experimentparams.save.onlyWhileTriggered = True self.experimentparams.robotspec.nRobots = 0 self.experimentparams.robotspec.width = 1.5875 self.experimentparams.robotspec.height = 1.5875 self.experimentparams.robotspec.isPresent = True # Set this to False if you remove the robot, but still want the actuation. self.experimentparams.robotspec.description = 'Black oxide magnet' self.experimentparams.flyspec.nFlies = 1 self.experimentparams.flyspec.description = 'unspecified' self.experimentparams.tracking.exclusionzones.enabled = False self.experimentparams.tracking.exclusionzones.point_list = [ Point(x=0.0, y=0.0) ] self.experimentparams.tracking.exclusionzones.radius_list = [0.0] self.experimentparams.home.enabled = False self.experimentparams.pre.robot.enabled = False self.experimentparams.pre.lasergalvos.enabled = False self.experimentparams.pre.ledpanels.enabled = False self.experimentparams.pre.wait1 = 0.0 self.experimentparams.pre.trigger.enabled = False self.experimentparams.pre.trigger.frameidParent = 'Arena' self.experimentparams.pre.trigger.frameidChild = 'Fly01' self.experimentparams.pre.trigger.speedAbsParentMin = 0.0 self.experimentparams.pre.trigger.speedAbsParentMax = 999.0 self.experimentparams.pre.trigger.speedAbsChildMin = 0.0 self.experimentparams.pre.trigger.speedAbsChildMax = 999.0 self.experimentparams.pre.trigger.speedRelMin = 0.0 self.experimentparams.pre.trigger.speedRelMax = 999.0 self.experimentparams.pre.trigger.distanceMin = 0.0 self.experimentparams.pre.trigger.distanceMax = 999.0 self.experimentparams.pre.trigger.angleMin = 0.0 * np.pi / 180.0 self.experimentparams.pre.trigger.angleMax = 180.0 * np.pi / 180.0 self.experimentparams.pre.trigger.angleTest = 'inclusive' self.experimentparams.pre.trigger.angleTestBilateral = True self.experimentparams.pre.trigger.timeHold = 0.0 self.experimentparams.pre.trigger.timeout = -1 self.experimentparams.pre.wait2 = 0.0 # .robot, .lasergalvos, .ledpanels, and .post.trigger all run concurrently. # The first one to finish preempts the others. self.experimentparams.trial.robot.enabled = False mode = 'platepoint' # 'platepoint' or 'plategrid' or 'trackgrid1' or 'trackgrid' or 'tracknumber' or 'trackflylogo' or 'fixedmaze' or 'fixedpoint' self.experimentparams.trial.lasergalvos.enabled = True self.experimentparams.trial.lasergalvos.pattern_list = [] if mode == 'platepoint': # Draw a point. self.experimentparams.trial.lasergalvos.pattern_list.append( MsgPattern(frameidPosition='Arena', frameidAngle='Arena', shape='constant', hzPattern=40.0, hzPoint=1000.0, count=1, size=Point(x=0, y=0), restart=False, param=2, direction=1), # Peano curve level. ) if mode == 'plategrid': self.experimentparams.trial.lasergalvos.pattern_list.append( MsgPattern(frameidPosition='Arena', frameidAngle='Arena', shape='grid', hzPattern=40.0, hzPoint=1000.0, count=1, size=Point(x=1, y=1), restart=False, param=3, direction=1), # Peano curve level. ) if mode == 'trackgrid1': self.experimentparams.trial.lasergalvos.pattern_list.append( MsgPattern(frameidPosition='Fly01', frameidAngle='Fly01', shape='grid', hzPattern=40.0, hzPoint=1000.0, count=1, size=Point(x=3, y=3), restart=False, param=2, direction=1), # Peano curve level. ) if mode == 'trackgrid': for iFly in range(self.experimentparams.flyspec.nFlies): self.experimentparams.trial.lasergalvos.pattern_list.append( MsgPattern(frameidPosition='Fly%02dForecast' % (iFly + 1), frameidAngle='Fly%02dForecast' % (iFly + 1), shape='grid', hzPattern=40.0, hzPoint=1000.0, count=1, size=Point(x=3, y=3), restart=False, param=2, direction=1), # Peano curve level. ) if mode == 'tracknumber': for iFly in range(self.experimentparams.flyspec.nFlies): self.experimentparams.trial.lasergalvos.pattern_list.append( MsgPattern(frameidPosition='Fly%02dForecast' % (iFly + 1), frameidAngle='Fly%02dForecast' % (iFly + 1), shape='%s' % (iFly + 1), hzPattern=40.0, hzPoint=1000.0, count=1, size=Point(x=6, y=6), restart=False, param=2, direction=1), # Peano curve level. ) if mode == 'trackflylogo': for iFly in range(self.experimentparams.flyspec.nFlies): self.experimentparams.trial.lasergalvos.pattern_list.append( MsgPattern(frameidPosition='Fly%02dForecast' % (iFly + 1), frameidAngle='Fly%02dForecast' % (iFly + 1), shape='flylogo', hzPattern=40.0, hzPoint=1000.0, count=1, size=Point(x=6, y=6), restart=False, param=2, direction=1), # Peano curve level. ) if mode == 'fixedmaze': # Draw a maze. self.experimentparams.trial.lasergalvos.pattern_list.append( MsgPattern(frameidPosition='Arena', frameidAngle='Arena', shape='grid', hzPattern=40.0, hzPoint=1000.0, count=1, size=Point(x=140, y=140), restart=False, param=2, direction=1), # Peano curve level. ) if mode == 'fixedpoint': # Draw a point. self.experimentparams.trial.lasergalvos.pattern_list.append( MsgPattern(frameidPosition='Arena', frameidAngle='Arena', shape='constant', hzPattern=40.0, hzPoint=1000.0, count=1, size=Point(x=0, y=0), restart=False, param=2, direction=1), # Peano curve level. ) self.experimentparams.trial.ledpanels.enabled = False self.experimentparams.trial.ledpanels.command = [ 'fixed' ] # 'fixed', 'trackposition' (panel position follows fly position), or 'trackview' (panel position follows fly's viewpoint). self.experimentparams.trial.ledpanels.idPattern = [1] self.experimentparams.trial.ledpanels.frame_id = ['Fly01Forecast'] self.experimentparams.trial.ledpanels.statefilterHi = [''] self.experimentparams.trial.ledpanels.statefilterLo = [''] self.experimentparams.trial.ledpanels.statefilterCriteria = [''] self.experimentparams.post.trigger.enabled = True self.experimentparams.post.trigger.distanceMin = 999.0 self.experimentparams.post.trigger.distanceMax = 888.0 # i.e. never self.experimentparams.post.trigger.speedAbsParentMin = 0.0 self.experimentparams.post.trigger.speedAbsParentMax = 999.0 self.experimentparams.post.trigger.speedAbsChildMin = 0.0 self.experimentparams.post.trigger.speedAbsChildMax = 999.0 self.experimentparams.post.trigger.speedRelMin = 0.0 self.experimentparams.post.trigger.speedRelMax = 999.0 self.experimentparams.post.trigger.angleMin = 0.0 * np.pi / 180.0 self.experimentparams.post.trigger.angleMax = 180.0 * np.pi / 180.0 self.experimentparams.post.trigger.angleTest = 'inclusive' self.experimentparams.post.trigger.angleTestBilateral = True self.experimentparams.post.trigger.timeHold = 0.0 self.experimentparams.post.trigger.timeout = 660 self.experimentparams.post.wait = 0.0 self.experimentlib = ExperimentLib.ExperimentLib( self.experimentparams, startexperiment_callback=self.StartExperiment_callback, starttrial_callback=self.StartTrial_callback, endtrial_callback=self.EndTrial_callback)
def __init__(self): rospy.init_node('Experiment') rospy.sleep(1) # Fill out the data structure that defines the experiment. self.experimentparams = ExperimentParamsChoicesRequest() self.experimentparams.experiment.description = 'Retrack a bag file.' self.experimentparams.experiment.maxTrials = 1 self.experimentparams.experiment.timeout = -1 self.experimentparams.save.filenamebase = 'retrack' self.experimentparams.save.csv = False self.experimentparams.save.bag = False self.experimentparams.save.mov = False self.experimentparams.save.fmf = False self.experimentparams.save.imagetopic_list = ['camera/image_rect'] self.experimentparams.save.onlyWhileTriggered = False self.experimentparams.robotspec.nRobots = 0 self.experimentparams.robotspec.width = 1.5875 self.experimentparams.robotspec.height = 1.5875 self.experimentparams.robotspec.isPresent = True # Set this to False if you remove the robot, but still want the actuation. self.experimentparams.robotspec.description = 'Black oxide magnet' self.experimentparams.flyspec.nFlies = 1 self.experimentparams.flyspec.description = 'unspecified' self.experimentparams.tracking.exclusionzones.enabled = False self.experimentparams.tracking.exclusionzones.point_list = [ Point(x=-79, y=28) ] self.experimentparams.tracking.exclusionzones.radius_list = [3.0] self.experimentparams.home.enabled = False self.experimentparams.home.x = 0.0 self.experimentparams.home.y = 0.0 self.experimentparams.home.speed = 20 self.experimentparams.home.tolerance = 2 self.experimentparams.pre.robot.enabled = False self.experimentparams.pre.lasergalvos.enabled = False self.experimentparams.pre.ledpanels.enabled = False self.experimentparams.pre.wait1 = 0.0 self.experimentparams.pre.trigger.enabled = False self.experimentparams.pre.wait2 = 0.0 self.experimentparams.trial.robot.enabled = False self.experimentparams.trial.lasergalvos.enabled = False self.experimentparams.trial.ledpanels.enabled = False self.experimentparams.post.trigger.enabled = True self.experimentparams.post.trigger.enabled = True self.experimentparams.post.trigger.frameidParent = 'Fly1' self.experimentparams.post.trigger.frameidChild = 'Robot' self.experimentparams.post.trigger.speedAbsParentMin = 999.0 self.experimentparams.post.trigger.speedAbsParentMax = 111.0 # i.e. NEVER self.experimentparams.post.trigger.speedAbsChildMin = 0.0 self.experimentparams.post.trigger.speedAbsChildMax = 999.0 self.experimentparams.post.trigger.speedRelMin = 0.0 self.experimentparams.post.trigger.speedRelMax = 999.0 self.experimentparams.post.trigger.distanceMin = 0.0 self.experimentparams.post.trigger.distanceMax = 999.0 self.experimentparams.post.trigger.angleMin = 0.0 * np.pi / 180.0 self.experimentparams.post.trigger.angleMax = 180.0 * np.pi / 180.0 self.experimentparams.post.trigger.angleTest = 'inclusive' self.experimentparams.post.trigger.angleTestBilateral = True self.experimentparams.post.trigger.timeHold = 0.0 self.experimentparams.post.trigger.timeout = -1 self.experimentparams.post.wait = 0.0 self.experimentlib = ExperimentLib.ExperimentLib( self.experimentparams, startexperiment_callback=self.StartExperiment_callback, starttrial_callback=self.StartTrial_callback, endtrial_callback=self.EndTrial_callback)
def __init__(self): rospy.init_node('Experiment') self.pubLEDPanels = rospy.Publisher('ledpanels/command', MsgPanelsCommand, latch=True) self.xPanelPattern = 0 self.yPanelPattern = 0 # Fill out the data structure that defines the experiment. self.experimentparams = ExperimentParamsChoicesRequest() self.experimentparams.experiment.description = 'Rotate Panels to Track a Fly' self.experimentparams.experiment.maxTrials = -1 self.experimentparams.experiment.timeout = -1 self.experimentparams.save.filenamebase = 'paneltracking' self.experimentparams.save.csv = True self.experimentparams.save.bag = False self.experimentparams.save.mov = False self.experimentparams.save.fmf = False self.experimentparams.save.imagetopic_list = ['camera/image_rect'] self.experimentparams.save.onlyWhileTriggered = False # Saves always. self.experimentparams.robotspec.nRobots = 0 self.experimentparams.robotspec.width = 1.5875 self.experimentparams.robotspec.height = 1.5875 self.experimentparams.robotspec.isPresent = True # Set this to False if you remove the robot, but still want the actuation. self.experimentparams.robotspec.description = 'Black oxide magnet' self.experimentparams.flyspec.nFlies = 1 self.experimentparams.flyspec.description = 'unspecified' self.experimentparams.tracking.exclusionzones.enabled = False self.experimentparams.tracking.exclusionzones.point_list = [ Point(x=52.3, y=-51.0) ] self.experimentparams.tracking.exclusionzones.radius_list = [7.0] self.experimentparams.home.enabled = False self.experimentparams.home.x = 0.0 self.experimentparams.home.y = 0.0 self.experimentparams.home.speed = 20 self.experimentparams.home.tolerance = 2 self.experimentparams.pre.robot.enabled = False self.experimentparams.pre.lasergalvos.enabled = False self.experimentparams.pre.ledpanels.enabled = False self.experimentparams.pre.wait1 = 0.5 self.experimentparams.pre.trigger.enabled = False self.experimentparams.pre.trigger.frameidParent = 'Arena' self.experimentparams.pre.trigger.frameidChild = 'Fly01' self.experimentparams.pre.trigger.speedAbsParentMin = 0.0 self.experimentparams.pre.trigger.speedAbsParentMax = 999.0 self.experimentparams.pre.trigger.speedAbsChildMin = 0.0 self.experimentparams.pre.trigger.speedAbsChildMax = 999.0 self.experimentparams.pre.trigger.speedRelMin = 0.0 self.experimentparams.pre.trigger.speedRelMax = 999.0 self.experimentparams.pre.trigger.distanceMin = 0.0 self.experimentparams.pre.trigger.distanceMax = 999.0 self.experimentparams.pre.trigger.angleMin = 0.0 * np.pi / 180.0 self.experimentparams.pre.trigger.angleMax = 180.0 * np.pi / 180.0 self.experimentparams.pre.trigger.angleTest = 'inclusive' self.experimentparams.pre.trigger.angleTestBilateral = False self.experimentparams.pre.trigger.timeHold = 0.0 self.experimentparams.pre.trigger.timeout = -1 self.experimentparams.pre.wait2 = 0.0 # .robot, .lasergalvos, .ledpanels, and .post.trigger all run concurrently. # The first one to finish preempts the others. self.experimentparams.trial.robot.enabled = False self.experimentparams.trial.lasergalvos.enabled = False self.experimentparams.trial.ledpanels.enabled = True self.experimentparams.trial.ledpanels.command = [ 'trackview' ] # 'fixed', 'trackposition' (panel position follows fly position), or 'trackview' (panel position follows fly's viewpoint). self.experimentparams.trial.ledpanels.idPattern = [1] self.experimentparams.trial.ledpanels.origin = [Point(x=10, y=0)] self.experimentparams.trial.ledpanels.frame_id = ['Fly01Forecast'] self.experimentparams.trial.ledpanels.statefilterHi = [''] self.experimentparams.trial.ledpanels.statefilterLo = [''] self.experimentparams.trial.ledpanels.statefilterCriteria = [''] self.experimentparams.post.trigger.enabled = True self.experimentparams.post.trigger.frameidParent = 'Arena' self.experimentparams.post.trigger.frameidChild = 'Fly01' self.experimentparams.post.trigger.speedAbsParentMin = 0.0 self.experimentparams.post.trigger.speedAbsParentMax = 999.0 self.experimentparams.post.trigger.speedAbsChildMin = 0.0 self.experimentparams.post.trigger.speedAbsChildMax = 999.0 self.experimentparams.post.trigger.speedRelMin = 0.0 self.experimentparams.post.trigger.speedRelMax = 999.0 self.experimentparams.post.trigger.distanceMin = 999.0 self.experimentparams.post.trigger.distanceMax = 111.0 # i.e. NEVER self.experimentparams.post.trigger.angleMin = 0.0000 * np.pi / 180.0 self.experimentparams.post.trigger.angleMax = 359.9999 * np.pi / 180.0 self.experimentparams.post.trigger.angleTest = 'inclusive' self.experimentparams.post.trigger.angleTestBilateral = False self.experimentparams.post.trigger.timeHold = 0.0 self.experimentparams.post.trigger.timeout = 300 # 5 minute trials. self.experimentparams.post.wait = 0.0 self.experimentlib = ExperimentLib.ExperimentLib( self.experimentparams, startexperiment_callback=self.StartExperiment_callback, starttrial_callback=self.StartTrial_callback, endtrial_callback=self.EndTrial_callback)
def __init__(self): rospy.init_node('Experiment') # Fill out the data structure that defines the experiment. self.experimentparams = ExperimentParamsChoicesRequest() self.experimentparams.experiment.description = 'Measure the temperature via the laser.' self.experimentparams.experiment.maxTrials = -1 self.experimentparams.experiment.timeout = 600 self.experimentparams.save.filenamebase = 'lasertemp' self.experimentparams.save.csv = False self.experimentparams.save.bag = False self.experimentparams.save.mov = False self.experimentparams.save.imagetopic_list = ['camera/image_rect'] self.experimentparams.save.onlyWhileTriggered = True self.experimentparams.robotspec.nRobots = 0 self.experimentparams.robotspec.width = 1.5875 self.experimentparams.robotspec.height = 1.5875 self.experimentparams.robotspec.isPresent = True # Set this to False if you remove the robot, but still want the actuation. self.experimentparams.robotspec.description = 'Black oxide magnet' self.experimentparams.flyspec.nFlies = 1 self.experimentparams.flyspec.description = 'unspecified' self.experimentparams.tracking.exclusionzones.enabled = True self.experimentparams.tracking.exclusionzones.point_list = [ Point(x=28.0, y=0.0) ] self.experimentparams.tracking.exclusionzones.radius_list = [20.0] self.experimentparams.home.enabled = False self.experimentparams.home.x = rospy.get_param('motorarm/L1', 999) self.experimentparams.home.y = 0.0 self.experimentparams.home.speed = 20 self.experimentparams.home.tolerance = 4 self.experimentparams.pre.robot.enabled = False self.experimentparams.pre.lasergalvos.enabled = False self.experimentparams.pre.ledpanels.enabled = False self.experimentparams.pre.wait1 = 0 self.experimentparams.pre.trigger.enabled = False self.experimentparams.pre.wait2 = 0.0 # .robot, .lasergalvos, .ledpanels, and .post.trigger all run concurrently. # The first one to finish preempts the others. self.experimentparams.trial.robot.enabled = False self.experimentparams.trial.lasergalvos.enabled = True self.experimentparams.trial.lasergalvos.statefilterLo_list = [] self.experimentparams.trial.lasergalvos.statefilterHi_list = [] self.experimentparams.trial.lasergalvos.statefilterCriteria_list = [] iFly = 1 self.experimentparams.trial.lasergalvos.pattern_list = [] self.experimentparams.trial.lasergalvos.pattern_list.append( MsgPattern( frameidPosition='Fly%02d' % iFly, frameidAngle='Fly%02d' % iFly, shape='grid', hzPattern=40.0, hzPoint=1000.0, count=1, points=[], size=Point(x=3, y=3), restart=False, param=3, # Peano curve level. direction=1), ) self.experimentparams.trial.ledpanels.enabled = False self.experimentparams.post.trigger.enabled = True self.experimentparams.post.trigger.frameidParent = 'Fly01' self.experimentparams.post.trigger.frameidChild = 'Robot' self.experimentparams.post.trigger.speedAbsParentMin = 0.0 self.experimentparams.post.trigger.speedAbsParentMax = 999.0 self.experimentparams.post.trigger.speedAbsChildMin = 0.0 self.experimentparams.post.trigger.speedAbsChildMax = 999.0 self.experimentparams.post.trigger.speedRelMin = 0.0 self.experimentparams.post.trigger.speedRelMax = 999.0 self.experimentparams.post.trigger.distanceMin = 999.0 self.experimentparams.post.trigger.distanceMax = 111.0 # Never self.experimentparams.post.trigger.angleMin = 0.0 * np.pi / 180.0 self.experimentparams.post.trigger.angleMax = 180.0 * np.pi / 180.0 self.experimentparams.post.trigger.angleTest = 'inclusive' self.experimentparams.post.trigger.angleTestBilateral = True self.experimentparams.post.trigger.timeHold = 0.0 self.experimentparams.post.trigger.timeout = 600 self.experimentparams.post.wait = 0.0 self.experimentlib = ExperimentLib.ExperimentLib( self.experimentparams, startexperiment_callback=self.StartExperiment_callback, starttrial_callback=self.StartTrial_callback, endtrial_callback=self.EndTrial_callback)
def __init__(self): rospy.init_node('Experiment') # Fill out the data structure that defines the experiment. self.experimentparams = ExperimentParamsChoicesRequest() self.experimentparams.experiment.description = 'Fly Chases Robot Moving in Circle, with laser activation.' self.experimentparams.experiment.maxTrials = -1 self.experimentparams.experiment.timeout = 600 self.experimentparams.save.filenamebase = 'lasertag' self.experimentparams.save.csv = True self.experimentparams.save.bag = True self.experimentparams.save.mov = False self.experimentparams.save.imagetopic_list = ['camera/image_rect'] self.experimentparams.save.onlyWhileTriggered = True self.experimentparams.robotspec.nRobots = 1 self.experimentparams.robotspec.width = 1.5875 self.experimentparams.robotspec.height = 1.5875 self.experimentparams.robotspec.isPresent = True # Set this to False if you remove the robot, but still want the actuation. self.experimentparams.robotspec.description = 'Black oxide magnet' self.experimentparams.flyspec.nFlies = 1 self.experimentparams.flyspec.description = 'unspecified' self.experimentparams.tracking.exclusionzones.enabled = False self.experimentparams.tracking.exclusionzones.point_list = [Point(x=0.0, y=0.0)] self.experimentparams.tracking.exclusionzones.radius_list = [0.0] self.experimentparams.home.enabled = False self.experimentparams.home.x = rospy.get_param('motorarm/L1', 999) self.experimentparams.home.y = 0.0 self.experimentparams.home.speed = 20 self.experimentparams.home.tolerance = 4 self.experimentparams.pre.robot.enabled = True self.experimentparams.pre.robot.move.mode = 'pattern' # 'pattern' or 'relative' self.experimentparams.pre.robot.move.pattern.frameidPosition = ['Arena'] self.experimentparams.pre.robot.move.pattern.frameidAngle = ['Arena'] self.experimentparams.pre.robot.move.pattern.shape = ['circle'] # 'constant' or 'circle' or 'square' or 'flylogo' or 'spiral' or 'ramp' self.experimentparams.pre.robot.move.pattern.hzPattern = [1/40] self.experimentparams.pre.robot.move.pattern.hzPoint = [100] self.experimentparams.pre.robot.move.pattern.count = [-1] self.experimentparams.pre.robot.move.pattern.size = [Point(x=rospy.get_param('motorarm/L1', 999), y=0)] self.experimentparams.pre.robot.move.pattern.param = [0] self.experimentparams.pre.robot.move.pattern.direction = [1] self.experimentparams.pre.robot.move.pattern.restart = [False] self.experimentparams.pre.lasergalvos.enabled = True self.experimentparams.pre.lasergalvos.statefilterLo_list = [] self.experimentparams.pre.lasergalvos.statefilterHi_list = [] self.experimentparams.pre.lasergalvos.statefilterCriteria_list = [] iFly = 1 self.experimentparams.pre.lasergalvos.pattern_list = [] self.experimentparams.pre.lasergalvos.pattern_list.append(MsgPattern( frameidPosition = 'Fly%02dForecast' % iFly, frameidAngle = 'Fly%02dForecast' % iFly, shape = 'grid', hzPattern = 40.0, hzPoint = 1000.0, count = 1, size = Point(x=2, y=2), restart = False, param = 3, # Peano curve level. direction = 1), ) self.experimentparams.pre.ledpanels.enabled = False self.experimentparams.pre.wait1 = 0#150.0 self.experimentparams.pre.trigger.enabled = True self.experimentparams.pre.trigger.frameidParent = 'Fly01' self.experimentparams.pre.trigger.frameidChild = 'Robot' self.experimentparams.pre.trigger.speedAbsParentMin = 4.0 self.experimentparams.pre.trigger.speedAbsParentMax = 999.0 self.experimentparams.pre.trigger.speedAbsChildMin = 0.0 self.experimentparams.pre.trigger.speedAbsChildMax = 999.0 self.experimentparams.pre.trigger.speedRelMin = 0.0 self.experimentparams.pre.trigger.speedRelMax = 999.0 self.experimentparams.pre.trigger.distanceMin = 0.0 self.experimentparams.pre.trigger.distanceMax = 7.0 self.experimentparams.pre.trigger.angleMin = 0.0 * np.pi / 180.0 self.experimentparams.pre.trigger.angleMax = 60.0 * np.pi / 180.0 self.experimentparams.pre.trigger.angleTest = 'inclusive' self.experimentparams.pre.trigger.angleTestBilateral = True self.experimentparams.pre.trigger.timeHold = 0.0 self.experimentparams.pre.trigger.timeout = -1 self.experimentparams.pre.wait2 = 0.0 # .robot, .lasergalvos, .ledpanels, and .post.trigger all run concurrently. # The first one to finish preempts the others. self.experimentparams.trial.robot.enabled = True self.experimentparams.trial.robot.move.mode = 'pattern' # 'pattern' or 'relative' self.experimentparams.trial.robot.move.pattern.frameidPosition = ['Arena'] # self.experimentparams.trial.robot.move.pattern.frameidAngle = ['Arena'] # self.experimentparams.trial.robot.move.pattern.shape = ['circle'] # 'constant' or 'circle' or 'square' or 'flylogo' or 'spiral' or 'ramp' self.experimentparams.trial.robot.move.pattern.hzPattern = [1/40] self.experimentparams.trial.robot.move.pattern.hzPoint = [100] self.experimentparams.trial.robot.move.pattern.count = [-1] self.experimentparams.trial.robot.move.pattern.size = [Point(x=rospy.get_param('motorarm/L1', 999), y=0)] self.experimentparams.trial.robot.move.pattern.param = [0] self.experimentparams.trial.robot.move.pattern.direction = [1] self.experimentparams.trial.lasergalvos.enabled = False self.experimentparams.trial.lasergalvos.statefilterLo_list = [] self.experimentparams.trial.lasergalvos.statefilterHi_list = [] self.experimentparams.trial.lasergalvos.statefilterCriteria_list = [] iFly = 1 self.experimentparams.trial.lasergalvos.pattern_list = [] self.experimentparams.trial.lasergalvos.pattern_list.append(MsgPattern( frameidPosition = 'Fly%02dForecast' % iFly, frameidAngle = 'Fly%02dForecast' % iFly, shape = 'grid', hzPattern = 40.0, hzPoint = 1000.0, count = 1, size = Point(x=2, y=2), restart = False, param = 3, # Peano curve level. direction = 1), ) self.experimentparams.trial.ledpanels.enabled = True self.experimentparams.trial.ledpanels.command = ['fixed'] # 'fixed', 'trackposition' (panel position follows fly position), or 'trackview' (panel position follows fly's viewpoint). self.experimentparams.trial.ledpanels.idPattern = [1] self.experimentparams.trial.ledpanels.origin = [Point(x=0, y=0)] self.experimentparams.trial.ledpanels.frame_id = ['Fly01Forecast'] self.experimentparams.trial.ledpanels.statefilterHi = [''] self.experimentparams.trial.ledpanels.statefilterLo = [''] self.experimentparams.trial.ledpanels.statefilterCriteria = [''] self.experimentparams.post.trigger.enabled = True self.experimentparams.post.trigger.frameidParent = 'Fly01' self.experimentparams.post.trigger.frameidChild = 'Robot' self.experimentparams.post.trigger.speedAbsParentMin = 0.0 self.experimentparams.post.trigger.speedAbsParentMax = 999.0 self.experimentparams.post.trigger.speedAbsChildMin = 0.0 self.experimentparams.post.trigger.speedAbsChildMax = 999.0 self.experimentparams.post.trigger.speedRelMin = 0.0 self.experimentparams.post.trigger.speedRelMax = 999.0 self.experimentparams.post.trigger.distanceMin = 15.0 self.experimentparams.post.trigger.distanceMax = 999.0 self.experimentparams.post.trigger.angleMin = 0.0 * np.pi / 180.0 self.experimentparams.post.trigger.angleMax =180.0 * np.pi / 180.0 self.experimentparams.post.trigger.angleTest = 'inclusive' self.experimentparams.post.trigger.angleTestBilateral = True self.experimentparams.post.trigger.timeHold = 0.0 self.experimentparams.post.trigger.timeout = 600 self.experimentparams.post.wait = 0.0 self.experimentlib = ExperimentLib.ExperimentLib(self.experimentparams, startexperiment_callback = self.StartExperiment_callback, starttrial_callback = self.StartTrial_callback, endtrial_callback = self.EndTrial_callback)