jAER project on SourceForge

ch.unizh.ini.jaer.hardware.pantilt
Class CalibratedPanTilt

java.lang.Object
  extended by net.sf.jaer.eventprocessing.EventFilter
      extended by net.sf.jaer.eventprocessing.EventFilter2D
          extended by ch.unizh.ini.jaer.hardware.pantilt.CalibratedPanTilt
All Implemented Interfaces:
LaserOnOffControl, PanTiltInterface, FrameAnnotater

public class CalibratedPanTilt
extends EventFilter2D
implements FrameAnnotater, PanTiltInterface, LaserOnOffControl

This filter enables calibrated control of a pan tilt laser pointer. CalibratedPanTilt has a method to set the pan tilt to aim at an x,y point in the retinal view. CalibratedPanTilt only processes incoming events during calibration, when it uses its own RectangularClusterTracker to track the jittering laser point spot for aiming calibration.

Author:
Tobi Delbruck

Field Summary
 
Fields inherited from class net.sf.jaer.eventprocessing.EventFilter2D
enclosedFilter, out
 
Fields inherited from class net.sf.jaer.eventprocessing.EventFilter
annotationEnabled, chip, enclosedFilterChain, filterEnabled, log, perf, propertyTooltipMap, support
 
Constructor Summary
CalibratedPanTilt(AEChip chip)
          Constructs instance of the new 'filter' CalibratedPanTilt.
 
Method Summary
 void acquire()
          A method can set this flag to tell other objects that the servo is "owned"
 void annotate(float[][][] frame)
          annotate the RGB frame somehow by color pixels in the rendered pixel frame data.
 void annotate(javax.media.opengl.GLAutoDrawable drawable)
          Each annotator enters annotate with graphics context current, in coordinates with pixel 0,0 in LL corner (note opposite from Java2D) and pixel spacing 1 unit after the scaling transform (which is already active).
 void annotate(java.awt.Graphics2D g)
          each annotator is called by the relevant class (e.g.
 void doCalibrate()
          Invokes the calibration GUI.
 EventPacket<?> filterPacket(EventPacket<?> in)
          Subclasses implement this method to define custom processing.
 PanTiltCalibrator getCalibrator()
           
static java.lang.String getDescription()
           
 java.lang.Object getFilterState()
          should return the filter state in some useful form
 float getJitterAmplitude()
          Returns the jitter amplitude
 float getJitterFreqHz()
          Returns the jitter frequency in Hz
 PanTilt getPanTiltHardware()
           
 float[] getPanTiltValues()
          Returns the last value set, even if the servo interface is not functional.
 ServoInterface getServoInterface()
           
 void initFilter()
          this should allocate and initialize memory: it may be called when the chip e.g.
 boolean isLockOwned()
          A method can check this to see if it can use the servo
 void release()
          Releases the "acquired" flag
 void resetFilter()
          should reset the filter to initial state
 void setJitterAmplitude(float jitterAmplitude)
          Sets the amplitude (1/2 of peak to peak) of circular jitter of pan tilt during jittering
 void setJitterFreqHz(float jitterFreqHz)
          The frequency of the jitter
 void setLaserEnabled(boolean yes)
           
 void setPanTiltHardware(PanTilt panTilt)
           
 void setPanTiltValues(float pan, float tilt)
          Sets the pan and tilt servo values
 void setPanTiltVisualAim(float x, float y)
          Sets the pan and tilt to aim at a particular calibrated x,y visual direction
 void setServoInterface(ServoInterface servo)
          Sets the ServoInterface
 void startJitter()
          Starts the servo jittering around its set position at a frequency of 50 Hz with an amplitude of 0.02f
 void stopJitter()
          Stops the jittering
 
Methods inherited from class net.sf.jaer.eventprocessing.EventFilter2D
checkOutputPacketEventType, checkOutputPacketEventType, getEnclosedFilter, resetOut, setEnclosedFilter, setFilterEnabled
 
Methods inherited from class net.sf.jaer.eventprocessing.EventFilter
getChip, getEnclosedFilterChain, getEnclosingFilter, getPrefs, getPropertyChangeSupport, getPropertyTooltip, isAnnotationEnabled, isEnclosed, isFilterEnabled, prefsEnabledKey, setAnnotationEnabled, setChip, setEnclosed, setEnclosedFilter, setEnclosedFilterChain, setEnclosingFilter, setPreferredEnabledState, setPrefs, setPropertyTooltip
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 
Methods inherited from interface net.sf.jaer.graphics.FrameAnnotater
isAnnotationEnabled, setAnnotationEnabled
 

Constructor Detail

CalibratedPanTilt

public CalibratedPanTilt(AEChip chip)
Constructs instance of the new 'filter' CalibratedPanTilt. The only time events are actually used is during calibration. The PanTilt hardware interface is also constructed.

Parameters:
chip -
Method Detail

setPanTiltVisualAim

public void setPanTiltVisualAim(float x,
                                float y)
                         throws HardwareInterfaceException
Sets the pan and tilt to aim at a particular calibrated x,y visual direction

Parameters:
x - the x pixel
y - the y pixel
Throws:
HardwareInterfaceException

getDescription

public static java.lang.String getDescription()

filterPacket

public EventPacket<?> filterPacket(EventPacket<?> in)
Description copied from class: EventFilter2D
Subclasses implement this method to define custom processing.

Specified by:
filterPacket in class EventFilter2D
Parameters:
in - the input packet
Returns:
the output packet

getFilterState

public java.lang.Object getFilterState()
Description copied from class: EventFilter
should return the filter state in some useful form

Specified by:
getFilterState in class EventFilter

resetFilter

public void resetFilter()
Description copied from class: EventFilter
should reset the filter to initial state

Specified by:
resetFilter in class EventFilter

initFilter

public void initFilter()
Description copied from class: EventFilter
this should allocate and initialize memory: it may be called when the chip e.g. size parameters are changed after creation of the filter

Specified by:
initFilter in class EventFilter

annotate

public void annotate(float[][][] frame)
Description copied from interface: FrameAnnotater
annotate the RGB frame somehow by color pixels in the rendered pixel frame data.

Specified by:
annotate in interface FrameAnnotater
Parameters:
frame - the RGB pixel information. First dimension is Y, second is X, third is RGB

annotate

public void annotate(java.awt.Graphics2D g)
Description copied from interface: FrameAnnotater
each annotator is called by the relevant class (e.g. EyeTracker) and enters annotate with graphics context current, in coordinates with pixel 0,0 in UL corner and pixel spacing 1 unit before scaling transform (which is already active).

Specified by:
annotate in interface FrameAnnotater
Parameters:
g - the Graphics2D context

annotate

public void annotate(javax.media.opengl.GLAutoDrawable drawable)
Description copied from interface: FrameAnnotater
Each annotator enters annotate with graphics context current, in coordinates with pixel 0,0 in LL corner (note opposite from Java2D) and pixel spacing 1 unit after the scaling transform (which is already active). The FrameAnnotater then can use JOGL calls to render to the screen by getting the GL context, e.g. the following code, used in the context of an AEChip object, draws a golden lines from LL to UR of the pixel array.
        GL gl = drawable.getGL();
        gl.glBegin(GL.GL_LINES);
        gl.glColor3f(.5f, .5f, 0);
        gl.glVertex2f(0, 0);
        gl.glVertex2f(getSizeX() - 1, getSizeY() - 1);
        gl.glEnd();
 

Specified by:
annotate in interface FrameAnnotater
Parameters:
drawable - the OpenGL drawable components, e.g., GLCanvas

doCalibrate

public void doCalibrate()
Invokes the calibration GUI. Calibration values are stored persistently as preferences. Built automatically into filter parameter panel as an action.


getPanTiltHardware

public PanTilt getPanTiltHardware()

setPanTiltHardware

public void setPanTiltHardware(PanTilt panTilt)

getJitterAmplitude

public float getJitterAmplitude()
Description copied from interface: PanTiltInterface
Returns the jitter amplitude

Specified by:
getJitterAmplitude in interface PanTiltInterface

setJitterAmplitude

public void setJitterAmplitude(float jitterAmplitude)
Sets the amplitude (1/2 of peak to peak) of circular jitter of pan tilt during jittering

Specified by:
setJitterAmplitude in interface PanTiltInterface
Parameters:
jitterAmplitude - the amplitude

getJitterFreqHz

public float getJitterFreqHz()
Description copied from interface: PanTiltInterface
Returns the jitter frequency in Hz

Specified by:
getJitterFreqHz in interface PanTiltInterface

setJitterFreqHz

public void setJitterFreqHz(float jitterFreqHz)
The frequency of the jitter

Specified by:
setJitterFreqHz in interface PanTiltInterface
Parameters:
jitterFreqHz - in Hz

acquire

public void acquire()
Description copied from interface: PanTiltInterface
A method can set this flag to tell other objects that the servo is "owned"

Specified by:
acquire in interface PanTiltInterface

getPanTiltValues

public float[] getPanTiltValues()
Description copied from interface: PanTiltInterface
Returns the last value set, even if the servo interface is not functional. The servo could still be moving to this location.

Specified by:
getPanTiltValues in interface PanTiltInterface
Returns:
a float[] array with the 0 component being the pan value, and the 1 component being the tilt

isLockOwned

public boolean isLockOwned()
Description copied from interface: PanTiltInterface
A method can check this to see if it can use the servo

Specified by:
isLockOwned in interface PanTiltInterface

release

public void release()
Description copied from interface: PanTiltInterface
Releases the "acquired" flag

Specified by:
release in interface PanTiltInterface

startJitter

public void startJitter()
Description copied from interface: PanTiltInterface
Starts the servo jittering around its set position at a frequency of 50 Hz with an amplitude of 0.02f

Specified by:
startJitter in interface PanTiltInterface
See Also:
PanTiltInterface.setJitterAmplitude(float)

stopJitter

public void stopJitter()
Description copied from interface: PanTiltInterface
Stops the jittering

Specified by:
stopJitter in interface PanTiltInterface

setPanTiltValues

public void setPanTiltValues(float pan,
                             float tilt)
                      throws HardwareInterfaceException
Sets the pan and tilt servo values

Specified by:
setPanTiltValues in interface PanTiltInterface
Parameters:
pan - 0 to 1 value
tilt - 0 to 1 value
Throws:
HardwareInterfaceException

setServoInterface

public void setServoInterface(ServoInterface servo)
Description copied from interface: PanTiltInterface
Sets the ServoInterface

Specified by:
setServoInterface in interface PanTiltInterface
Parameters:
servo - the interface

getServoInterface

public ServoInterface getServoInterface()
Specified by:
getServoInterface in interface PanTiltInterface

setLaserEnabled

public void setLaserEnabled(boolean yes)
Specified by:
setLaserEnabled in interface LaserOnOffControl

getCalibrator

public PanTiltCalibrator getCalibrator()

jAER project on SourceForge