jAER project on SourceForge

ch.unizh.ini.jaer.chip.retina.sensorymotor
Class Batter

java.lang.Object
  extended by net.sf.jaer.eventprocessing.EventFilter
      extended by net.sf.jaer.eventprocessing.EventFilter2D
          extended by ch.unizh.ini.jaer.chip.retina.sensorymotor.Batter
All Implemented Interfaces:
FrameAnnotater

public class Batter
extends EventFilter2D
implements FrameAnnotater

Controls a batting robot that uses two servo motors and two retinas in stereo vision to hit a ball.

Ball tracking uses a modified ClusterTracker to simultaneously track the ball in two retinas. The ball is independently tracked in each retina and the tracking is constrained, or hinted, by the tracking in the other retina. Initially there are no visible clusters in either retina. As soon as there is a visible cluster in one retina the cluster in the other retina is initialized with the first retina's cluster. Then the two clusters have an average x,y location and a disparity that is used to compute the distance to the ball.

Author:
tobi

Field Summary
protected static java.util.logging.Logger log
           
 
Fields inherited from class net.sf.jaer.eventprocessing.EventFilter2D
enclosedFilter, out
 
Fields inherited from class net.sf.jaer.eventprocessing.EventFilter
annotationEnabled, chip, enclosedFilterChain, filterEnabled, perf, propertyTooltipMap, support
 
Constructor Summary
Batter(AEChip chip)
          Creates a new instance of Batter
 
Method Summary
 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.
 EventPacket<?> filterPacket(EventPacket<?> in)
          Subclasses implement this method to define custom processing.
 java.lang.Object getFilterState()
          should return the filter state in some useful form
 float getSwingAngleMax()
           
 float getSwingBallDistance()
           
 float getSwingHeightMax()
           
 float getSwingHeightMin()
           
 void initFilter()
          this should allocate and initialize memory: it may be called when the chip e.g.
 boolean isDynamicSwingHeightEnabled()
           
 boolean isSwapServos()
           
 void resetFilter()
          should reset the filter to initial state
 void setDynamicSwingHeightEnabled(boolean dynamicSwingHeightEnabled)
           
 void setFilterEnabled(boolean yes)
          Resets the filter
 void setSwapServos(boolean swapServos)
           
 void setSwingAngleMax(float swingAngleMax)
          sets max extent of swing
 void setSwingBallDistance(float swingDistance)
           
 void setSwingHeightMax(float swingHeightMax)
           
 void setSwingHeightMin(float swingHeightMin)
           
 
Methods inherited from class net.sf.jaer.eventprocessing.EventFilter2D
checkOutputPacketEventType, checkOutputPacketEventType, getEnclosedFilter, resetOut, setEnclosedFilter
 
Methods inherited from class net.sf.jaer.eventprocessing.EventFilter
getChip, getDescription, 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
 

Field Detail

log

protected static java.util.logging.Logger log
Constructor Detail

Batter

public Batter(AEChip chip)
Creates a new instance of Batter

Method Detail

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

setFilterEnabled

public void setFilterEnabled(boolean yes)
Description copied from class: EventFilter2D
Resets the filter

Overrides:
setFilterEnabled in class EventFilter2D
Parameters:
yes - true to reset
See Also:
EventFilter.setPreferredEnabledState()

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

getSwingBallDistance

public float getSwingBallDistance()

setSwingBallDistance

public void setSwingBallDistance(float swingDistance)

isSwapServos

public boolean isSwapServos()

setSwapServos

public void setSwapServos(boolean swapServos)

getSwingHeightMin

public float getSwingHeightMin()

setSwingHeightMin

public void setSwingHeightMin(float swingHeightMin)

getSwingHeightMax

public float getSwingHeightMax()

setSwingHeightMax

public void setSwingHeightMax(float swingHeightMax)

getSwingAngleMax

public float getSwingAngleMax()

setSwingAngleMax

public void setSwingAngleMax(float swingAngleMax)
sets max extent of swing


isDynamicSwingHeightEnabled

public boolean isDynamicSwingHeightEnabled()

setDynamicSwingHeightEnabled

public void setDynamicSwingHeightEnabled(boolean dynamicSwingHeightEnabled)

jAER project on SourceForge