Homepage
Demos
Overview
Downloads
Dev. Resources
Reference
Credits

HeadPointerMC Class Reference

#include <HeadPointerMC.h>

Inheritance diagram for HeadPointerMC:

Inheritance graph
[legend]
List of all members.

Detailed Description

This class gives some quick and easy functions to point the head at things.

Definition at line 11 of file HeadPointerMC.h.

Public Member Functions

 HeadPointerMC ()
 Constructor, defaults to all joints to current value in state.
virtual ~HeadPointerMC ()
 Destructor.
virtual void setHold (bool h=true)
 Sets hold - if this is set to false, it will allow a persistent motion to behave the same as a pruned motion, without being pruned.
virtual bool getHold ()
 return hold
virtual void setTolerance (float t)
 sets tolerance
virtual float getTolerance ()
 returns tolerance
virtual void setTimeout (unsigned int delay)
 sets timeout
virtual unsigned int getTimeout ()
 returns timeout
Speed Control
void noMaxSpeed ()
 Sets maxSpeed to 0 (no maximum).
void defaultMaxSpeed (float x=1)
 Restores maxSpeed to default settings from Config::Motion_Config.
void setMaxSpeed (unsigned int i, float x)
 Sets maxSpeed in rad/sec.
float getMaxSpeed (unsigned int i)
 Returns maxSpeed in rad/sec.
Joint Accessors
void setWeight (float w)
 Sets the weight values for all the neck joints.
void setJoints (float j1, float j2, float j3)
 Directly sets the neck values (all values in radians).
void setJointValue (unsigned int i, float value)
 Directly set a single neck joint value.
float getJointValue (unsigned int i) const
 Returns the target value of joint i. Use this if you want to know the current commanded joint value; To get the current joint position, look in WorldState::outputs.
bool lookAtPoint (float x, float y, float z)
 Centers the camera on a point in space, attempting to keep the camera as far away from the point as possible.
bool lookAtPoint (float x, float y, float z, float d)
 Centers the camera on a point in space, attempting to move the camera d millimeters away from the point.
bool lookInDirection (float x, float y, float z)
 Points the camera in a given direction.
Inherited:
virtual int updateOutputs ()
 Updates where the head is looking.
virtual int isDirty ()
 true if a change has been made since the last updateJointCmds() and we're active
virtual int isAlive ()
 Alive while target is not reached.
virtual void DoStart ()
 marks this as dirty each time it is added

Protected Member Functions

void markDirty ()
 if targetReached, reassigns headCmds from MotionManager::getOutputCmd(), then sets dirty to true and targetReached to false

Static Protected Member Functions

static float normalizeAngle (float x)
 puts x in the range (-pi,pi)
static float clipAngularRange (unsigned int i, float x)
 if x is outside of the range of joint i, it is set to either the min or the max, whichever is closer
static bool ensureValidJoint (unsigned int &i)
 Makes sure i is in the range (0,NumHeadJoints). If it is instead in the range (HeadOffset,HeadOffset+NumHeadJoints), output a warning and reset i to the obviously intended value.

Protected Attributes

bool dirty
 true if a change has been made since last call to updateJointCmds()
bool hold
 if set to true, the posture will be kept active; otherwise joints will be marked unused after each posture is achieved (as if the posture was pruned); set through setHold()
float tolerance
 when autopruning, if the maxdiff() of this posture and the robot's current position is below this value, isAlive() will be false, defaults to 0.01 (5.7 degree error)
bool targetReached
 false if the head is still moving towards its target
unsigned int targetTimestamp
 time at which the targetReached flag was set
unsigned int timeout
 number of milliseconds to wait before giving up on a target that should have already been reached, a value of -1U will try forever
float headTargets [NumHeadJoints]
 stores the target value of each joint
OutputCmd headCmds [NumHeadJoints]
 stores the last values we sent from updateOutputs
float maxSpeed [NumHeadJoints]
 initialized from Config::motion_config, but can be overridden by setMaxSpeed(); rad per frame
ROBOOP::Robot headkin
 provides kinematics computations


Constructor & Destructor Documentation

HeadPointerMC::HeadPointerMC  ) 
 

Constructor, defaults to all joints to current value in state.

Definition at line 9 of file HeadPointerMC.cc.

virtual HeadPointerMC::~HeadPointerMC  )  [inline, virtual]
 

Destructor.

Definition at line 17 of file HeadPointerMC.h.


Member Function Documentation

static float HeadPointerMC::clipAngularRange unsigned int  i,
float  x
[inline, static, protected]
 

if x is outside of the range of joint i, it is set to either the min or the max, whichever is closer

Definition at line 118 of file HeadPointerMC.h.

Referenced by setJoints(), and setJointValue().

void HeadPointerMC::defaultMaxSpeed float  x = 1  ) 
 

Restores maxSpeed to default settings from Config::Motion_Config.

Parameters:
x ratio of the max speed to use; so 0.5 would limit motion to half the recommended upper limit

Definition at line 20 of file HeadPointerMC.cc.

Referenced by HeadPointerMC().

virtual void HeadPointerMC::DoStart  )  [inline, virtual]
 

marks this as dirty each time it is added

Reimplemented from MotionCommand.

Definition at line 110 of file HeadPointerMC.h.

bool HeadPointerMC::ensureValidJoint unsigned int &  i  )  [static, protected]
 

Makes sure i is in the range (0,NumHeadJoints). If it is instead in the range (HeadOffset,HeadOffset+NumHeadJoints), output a warning and reset i to the obviously intended value.

Parameters:
[in] i joint offset relative to either HeadOffset (i.e. one of TPROffset_t) or 0
[out] i joint offset relative to HeadOffset (i.e. one of TPROffset_t)
Returns:
true if the intended joint could be ascertained, false otherwise

Definition at line 149 of file HeadPointerMC.cc.

Referenced by getJointValue(), and setJointValue().

virtual bool HeadPointerMC::getHold  )  [inline, virtual]
 

return hold

Definition at line 21 of file HeadPointerMC.h.

float HeadPointerMC::getJointValue unsigned int  i  )  const [inline]
 

Returns the target value of joint i. Use this if you want to know the current commanded joint value; To get the current joint position, look in WorldState::outputs.

Parameters:
i joint offset relative to HeadOffset (i.e. one of TPROffset_t)

Definition at line 72 of file HeadPointerMC.h.

float HeadPointerMC::getMaxSpeed unsigned int  i  )  [inline]
 

Returns maxSpeed in rad/sec.

Parameters:
i joint offset relative to HeadOffset (i.e. one of TPROffset_t)
Returns:
the maximum speed of joint i in radians per second

Definition at line 45 of file HeadPointerMC.h.

virtual unsigned int HeadPointerMC::getTimeout  )  [inline, virtual]
 

returns timeout

Definition at line 26 of file HeadPointerMC.h.

virtual float HeadPointerMC::getTolerance  )  [inline, virtual]
 

returns tolerance

Definition at line 24 of file HeadPointerMC.h.

int HeadPointerMC::isAlive  )  [virtual]
 

Alive while target is not reached.

Implements MotionCommand.

Definition at line 125 of file HeadPointerMC.cc.

virtual int HeadPointerMC::isDirty  )  [inline, virtual]
 

true if a change has been made since the last updateJointCmds() and we're active

Implements MotionCommand.

Definition at line 108 of file HeadPointerMC.h.

Referenced by updateOutputs().

bool HeadPointerMC::lookAtPoint float  x,
float  y,
float  z,
float  d
 

Centers the camera on a point in space, attempting to move the camera d millimeters away from the point.

Point should be relative to the body reference frame (see BaseFrameOffset)

Parameters:
x location in millimeters
y location in millimeters
z location in millimeters
d target distance from point in millimeters

Definition at line 66 of file HeadPointerMC.cc.

bool HeadPointerMC::lookAtPoint float  x,
float  y,
float  z
 

Centers the camera on a point in space, attempting to keep the camera as far away from the point as possible.

Point should be relative to the body reference frame (see BaseFrameOffset)

Parameters:
x location in millimeters
y location in millimeters
z location in millimeters
Todo:
this method is an approximation, could be more precise, and perhaps faster, although this is pretty good.

Definition at line 39 of file HeadPointerMC.cc.

bool HeadPointerMC::lookInDirection float  x,
float  y,
float  z
 

Points the camera in a given direction.

Vector should be relative to the body reference frame (see BaseFrameOffset)

Parameters:
x component of the direction vector
y component of the direction vector
z component of the direction vector

Definition at line 77 of file HeadPointerMC.cc.

void HeadPointerMC::markDirty  )  [protected]
 

if targetReached, reassigns headCmds from MotionManager::getOutputCmd(), then sets dirty to true and targetReached to false

should be called each time a joint value gets modified in case the head isn't where it's supposed to be, it won't jerk around

MotionManager::getOutputCmd() is called instead of WorldState::outputs[] because if this is being called rapidly (i.e. after every sensor reading) using the sensor values will cause problems with very slow acceleration due to sensor lag continually resetting the current position. Using the last value sent by the MotionManager fixes this.

Definition at line 142 of file HeadPointerMC.cc.

Referenced by DoStart(), setJoints(), setJointValue(), and setWeight().

void HeadPointerMC::noMaxSpeed  )  [inline]
 

Sets maxSpeed to 0 (no maximum).

Definition at line 31 of file HeadPointerMC.h.

static float HeadPointerMC::normalizeAngle float  x  )  [inline, static, protected]
 

puts x in the range (-pi,pi)

Definition at line 115 of file HeadPointerMC.h.

Referenced by clipAngularRange().

virtual void HeadPointerMC::setHold bool  h = true  )  [inline, virtual]
 

Sets hold - if this is set to false, it will allow a persistent motion to behave the same as a pruned motion, without being pruned.

Definition at line 20 of file HeadPointerMC.h.

void HeadPointerMC::setJoints float  j1,
float  j2,
float  j3
 

Directly sets the neck values (all values in radians).

Parameters:
j1 value for first neck joint (tilt on all ERS models)
j2 value for second neck joint (pan on all ERS models)
j3 value for third neck joint (nod on ERS-7, roll on ERS-2xx)

Definition at line 32 of file HeadPointerMC.cc.

Referenced by StareAtBallBehavior::processEvent(), and ChaseBallBehavior::processEvent().

void HeadPointerMC::setJointValue unsigned int  i,
float  value
[inline]
 

Directly set a single neck joint value.

Parameters:
i joint offset relative to HeadOffset (i.e. one of TPROffset_t)
value the value to be assigned to join i, in radians

Definition at line 63 of file HeadPointerMC.h.

Referenced by lookAtPoint(), and lookInDirection().

void HeadPointerMC::setMaxSpeed unsigned int  i,
float  x
[inline]
 

Sets maxSpeed in rad/sec.

Parameters:
i joint offset relative to HeadOffset (i.e. one of TPROffset_t)
x maximum radians per second to move

Definition at line 40 of file HeadPointerMC.h.

virtual void HeadPointerMC::setTimeout unsigned int  delay  )  [inline, virtual]
 

sets timeout

Definition at line 25 of file HeadPointerMC.h.

virtual void HeadPointerMC::setTolerance float  t  )  [inline, virtual]
 

sets tolerance

Definition at line 23 of file HeadPointerMC.h.

void HeadPointerMC::setWeight float  w  ) 
 

Sets the weight values for all the neck joints.

Definition at line 26 of file HeadPointerMC.cc.

Referenced by HeadPointerMC().

int HeadPointerMC::updateOutputs  )  [virtual]
 

Updates where the head is looking.

Implements MotionCommand.

Definition at line 88 of file HeadPointerMC.cc.


Member Data Documentation

bool HeadPointerMC::dirty [protected]
 

true if a change has been made since last call to updateJointCmds()

Definition at line 149 of file HeadPointerMC.h.

Referenced by isAlive(), isDirty(), markDirty(), and updateOutputs().

OutputCmd HeadPointerMC::headCmds[NumHeadJoints] [protected]
 

stores the last values we sent from updateOutputs

Definition at line 156 of file HeadPointerMC.h.

Referenced by HeadPointerMC(), markDirty(), setWeight(), and updateOutputs().

ROBOOP::Robot HeadPointerMC::headkin [protected]
 

provides kinematics computations

Definition at line 158 of file HeadPointerMC.h.

Referenced by lookAtPoint(), and lookInDirection().

float HeadPointerMC::headTargets[NumHeadJoints] [protected]
 

stores the target value of each joint

Definition at line 155 of file HeadPointerMC.h.

Referenced by getJointValue(), HeadPointerMC(), isAlive(), setJoints(), setJointValue(), and updateOutputs().

bool HeadPointerMC::hold [protected]
 

if set to true, the posture will be kept active; otherwise joints will be marked unused after each posture is achieved (as if the posture was pruned); set through setHold()

Definition at line 150 of file HeadPointerMC.h.

Referenced by getHold(), setHold(), and updateOutputs().

float HeadPointerMC::maxSpeed[NumHeadJoints] [protected]
 

initialized from Config::motion_config, but can be overridden by setMaxSpeed(); rad per frame

Definition at line 157 of file HeadPointerMC.h.

Referenced by defaultMaxSpeed(), getMaxSpeed(), noMaxSpeed(), setMaxSpeed(), and updateOutputs().

bool HeadPointerMC::targetReached [protected]
 

false if the head is still moving towards its target

Definition at line 152 of file HeadPointerMC.h.

Referenced by isAlive(), isDirty(), markDirty(), and updateOutputs().

unsigned int HeadPointerMC::targetTimestamp [protected]
 

time at which the targetReached flag was set

Definition at line 153 of file HeadPointerMC.h.

Referenced by isAlive(), and updateOutputs().

unsigned int HeadPointerMC::timeout [protected]
 

number of milliseconds to wait before giving up on a target that should have already been reached, a value of -1U will try forever

Definition at line 154 of file HeadPointerMC.h.

Referenced by getTimeout(), isAlive(), and setTimeout().

float HeadPointerMC::tolerance [protected]
 

when autopruning, if the maxdiff() of this posture and the robot's current position is below this value, isAlive() will be false, defaults to 0.01 (5.7 degree error)

Definition at line 151 of file HeadPointerMC.h.

Referenced by getTolerance(), isAlive(), and setTolerance().


The documentation for this class was generated from the following files:

Tekkotsu v2.4.1
Generated Tue Aug 16 16:35:02 2005 by Doxygen 1.4.4