Tekkotsu 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 (i.e. calls takeSnapshot() automatically).
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
virtual void freezeMotion ()
 sets the target to last sent commands, and dirty to false; essentially freezes motion in place
virtual void takeSnapshot ()
 sets the target joint positions to current sensor values
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

bool isReachable (const NEWMAT::ColumnVector &Pobj)
 checks if target point or direction is actually reachable
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, there's a small leak and safety issue here because ROBOOP::Robot contains pointers, and those pointers typically aren't freed because MotionCommand destructor isn't called when detaching shared region


Member Function Documentation

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 33 of file HeadPointerMC.cc.

Referenced by HeadPointerMC().

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 177 of file HeadPointerMC.cc.

Referenced by getJointValue(), and setJointValue().

void HeadPointerMC::freezeMotion (  )  [virtual]

sets the target to last sent commands, and dirty to false; essentially freezes motion in place

This is very similar to takeSnapshot(), but will do the "right thing" (retain current position) when motion blending is involved. A status event will be generated if/when the joints reach the currently commanded position. Probably should use freezeMotion() if you want to stop a motion underway, but takeSnapshot() if you want to reset/intialize to the current joint positions.

Definition at line 21 of file HeadPointerMC.cc.

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 83 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 56 of file HeadPointerMC.h.

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). Returns true if the target is reachable.

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

Definition at line 91 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). Returns true if the target is reachable.

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 58 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). Returns true if the target is reachable.

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

Definition at line 103 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 170 of file HeadPointerMC.cc.

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

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 48 of file HeadPointerMC.cc.

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 74 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 51 of file HeadPointerMC.h.

void HeadPointerMC::takeSnapshot (  )  [virtual]

sets the target joint positions to current sensor values

Similar to freezeMotion() when a motion is underway, but only if no other MotionCommands are using neck joints. A status event will not be generated unless a motion was already underway. Probably should use freezeMotion() if you want to stop a motion underway, but takeSnapshot() if you want to reset/intialize to the current joint positions.

Definition at line 27 of file HeadPointerMC.cc.

Referenced by HeadPointerMC().


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

Tekkotsu v3.0
Generated Fri May 11 20:08:12 2007 by Doxygen 1.4.7