hmi.environment.bridge.emitters
Class GazeEmitter

java.lang.Object
  extended by java.lang.Thread
      extended by hmi.environment.bridge.emitters.GazeEmitter
All Implemented Interfaces:
Runnable

public class GazeEmitter
extends Thread

This controller emits BML blocks with gaze behavior, to control where the VH is looking. Strategies: - look at user - don't look - look randomly around To implement these strategies, there area number of VJoints/WorldObjects: -vjRandomTarget -vjXuukTarget (moves around with user) -vjUserTarget (nonmoving version of vjXuuk -- allows us to statically gaze at the user without tracking when the user is moving around) The xuukTarget moves around all the time to reflect the position of the user's face in the camera view. while running:

Author:
Dennis Reidsma

Nested Class Summary
static class GazeEmitter.GazePattern
           
 
Nested classes/interfaces inherited from class java.lang.Thread
Thread.State, Thread.UncaughtExceptionHandler
 
Field Summary
private  GazeEmitter.GazePattern activeGazeBehavior
          Which automatic gaze behavior is activated?
private static HashMap<String,GazeEmitter> allGazeEmitters
           
private  double averagewaitingtime
           
private  double currentwaitingtime
           
private  int lastgazeblock
           
private  long lastmove
           
private  org.slf4j.Logger logger
           
private  float maxX
           
private  float maxY
           
private  float minX
           
private  float minY
           
private  boolean parameterschanged
           
protected  String randomTargetName
          The VJoint that is moved around
private  double range
           
(package private)  RealizerBridge realizerBridge
           
(package private)  boolean running
           
private  float trackingDistanceLimit
          between 0..1: maximum delta before switch to non-dynamic gaze
(package private)  boolean userGazeDynamic
           
protected  String userTargetName
           
protected  VJoint vjRandomTarget
           
protected  VJoint vjUserTarget
           
protected  VJoint vjXuukTarget
           
private  float z
           
 
Fields inherited from class java.lang.Thread
MAX_PRIORITY, MIN_PRIORITY, NORM_PRIORITY
 
Constructor Summary
GazeEmitter(RealizerBridge rb, String id)
           
 
Method Summary
protected  void emitGaze()
          if gazing at user, and dynamic gaze is active, then this method only updates the target position but does not emit new BML
static GazeEmitter getGazeEmitter(String id)
           
 void randomSetAvg(double w)
           
 void randomSetRange(double r)
           
 void run()
           
 void setGazeBehavior(GazeEmitter.GazePattern gazeBehavior)
           
 void setRandomTarget(VJoint rj, String targetName)
           
 void setUserTarget(VJoint uj, String targetName)
           
protected  void setWaitForNextEmitGaze()
          waitingtime is dependent on current gaze behavior method...
 void setXuukTarget(VJoint xj)
           
 void stopRunning()
           
 
Methods inherited from class java.lang.Thread
activeCount, checkAccess, countStackFrames, currentThread, destroy, dumpStack, enumerate, getAllStackTraces, getContextClassLoader, getDefaultUncaughtExceptionHandler, getId, getName, getPriority, getStackTrace, getState, getThreadGroup, getUncaughtExceptionHandler, holdsLock, interrupt, interrupted, isAlive, isDaemon, isInterrupted, join, join, join, resume, setContextClassLoader, setDaemon, setDefaultUncaughtExceptionHandler, setName, setPriority, setUncaughtExceptionHandler, sleep, sleep, start, stop, stop, suspend, toString, yield
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

logger

private org.slf4j.Logger logger

activeGazeBehavior

private GazeEmitter.GazePattern activeGazeBehavior
Which automatic gaze behavior is activated?


realizerBridge

RealizerBridge realizerBridge

randomTargetName

protected String randomTargetName
The VJoint that is moved around


vjRandomTarget

protected VJoint vjRandomTarget

userTargetName

protected String userTargetName

vjUserTarget

protected VJoint vjUserTarget

vjXuukTarget

protected VJoint vjXuukTarget

lastmove

private long lastmove

currentwaitingtime

private double currentwaitingtime

parameterschanged

private boolean parameterschanged

userGazeDynamic

boolean userGazeDynamic

running

boolean running

averagewaitingtime

private double averagewaitingtime

range

private double range

trackingDistanceLimit

private float trackingDistanceLimit
between 0..1: maximum delta before switch to non-dynamic gaze


z

private float z

minX

private float minX

maxX

private float maxX

minY

private float minY

maxY

private float maxY

lastgazeblock

private int lastgazeblock

allGazeEmitters

private static HashMap<String,GazeEmitter> allGazeEmitters
Constructor Detail

GazeEmitter

public GazeEmitter(RealizerBridge rb,
                   String id)
Method Detail

getGazeEmitter

public static GazeEmitter getGazeEmitter(String id)

setXuukTarget

public void setXuukTarget(VJoint xj)

setRandomTarget

public void setRandomTarget(VJoint rj,
                            String targetName)

setUserTarget

public void setUserTarget(VJoint uj,
                          String targetName)

run

public void run()
Specified by:
run in interface Runnable
Overrides:
run in class Thread

stopRunning

public void stopRunning()

emitGaze

protected void emitGaze()
if gazing at user, and dynamic gaze is active, then this method only updates the target position but does not emit new BML


setWaitForNextEmitGaze

protected void setWaitForNextEmitGaze()
waitingtime is dependent on current gaze behavior method...


randomSetAvg

public void randomSetAvg(double w)

randomSetRange

public void randomSetRange(double r)

setGazeBehavior

public void setGazeBehavior(GazeEmitter.GazePattern gazeBehavior)