Homepage
Demos
Overview
Downloads
Dev. Resources
Reference
Credits

PostureEngine Class Reference

#include <PostureEngine.h>

Inheritance diagram for PostureEngine:

Inheritance graph
[legend]
List of all members.

Detailed Description

A class for storing a set of positions and weights for all the outputs.

Handy for any class which wants to deal with setting joints and postures without writing a custom class

See also:
PostureMC

Definition at line 15 of file PostureEngine.h.

Public Member Functions

Constructors
constructor

 PostureEngine ()
 PostureEngine (const std::string &filename)
 constructor, loads a position from a file
 PostureEngine (const WorldState *st)
 constructor, initializes joint positions to the current state of the outputs as defined by state
virtual ~PostureEngine ()
 destructor
Output Value Access/Control
You should be able to call the non-virtual functions without checking out, just a MotionManager::peekMotion(). Theoretically.

virtual void takeSnapshot ()
 sets the values of cmds to the current state of the outputs (doesn't change the weights)
virtual void takeSnapshot (const WorldState *st)
 sets the values of cmds to the current state of the outputs as defined by state (doesn't change the weights)
virtual void setWeights (float w)
 set the weights of all cmds
virtual void setWeights (float w, unsigned int lowjoint, unsigned int highjoint)
 the the weights of a range of cmds
virtual void clear ()
 sets all joints to unused
PostureEnginesetOutputCmd (unsigned int i, const OutputCmd &c)
 sets output i to OutputCmd c, returns *this so you can chain them; also remember that OutputCmd support implicit conversion from floats (so you can just pass a float)
OutputCmdoperator() (unsigned int i)
 returns output i, returns a reference so you can also set through an assignment to this call, e.g. pose(MouthOffset)=.1; (remember that OutputCmd support implicit conversion from floats)
const OutputCmdoperator() (unsigned int i) const
 returns output i
OutputCmdgetOutputCmd (unsigned int i)
 returns output i, returns a reference so you can also set through an assignment
const OutputCmdgetOutputCmd (unsigned int i) const
 returns output i
LoadSave
Uses LoadSave interface so you can load/save to files, uses a human-readable storage format

virtual unsigned int getBinSize () const
 calculates space needed to save - if you can't precisely add up the size, overestimate and things will still work.
virtual unsigned int LoadBuffer (const char buf[], unsigned int len)
 Load from a saved buffer.
virtual unsigned int SaveBuffer (char buf[], unsigned int len) const
 Save to a given buffer.
virtual unsigned int LoadFile (const char filename[])
virtual unsigned int SaveFile (const char filename[]) const
Kinematics
virtual bool solveLinkPosition (const NEWMAT::ColumnVector &Ptgt, unsigned int link, const NEWMAT::ColumnVector &Peff)
 Performs inverse kinematics to solve for positioning Peff on link j to Ptgt (expects homogenous form); if solution found, stores result in this posture and returns true.
virtual bool solveLinkPosition (float Ptgt_x, float Ptgt_y, float Ptgt_z, unsigned int link, float Peff_x, float Peff_y, float Peff_z)
 Performs inverse kinematics to solve for positioning Peff on link j to Ptgt; if solution found, stores result in this posture and returns true.
virtual bool solveLinkVector (const NEWMAT::ColumnVector &Ptgt, unsigned int link, const NEWMAT::ColumnVector &Peff)
 Performs inverse kinematics to solve for positioning Peff on link j to point at Ptgt (expects homogenous form); if solution found, stores result in this posture and returns true.
virtual bool solveLinkVector (float Ptgt_x, float Ptgt_y, float Ptgt_z, unsigned int link, float Peff_x, float Peff_y, float Peff_z)
 Performs inverse kinematics to solve for positioning Peff on link j to point at Ptgt; if solution found, stores result in this posture and returns true.
Combining Postures
virtual PostureEnginesetOverlay (const PostureEngine &pe)
 sets joints of this to all joints of pe which are not equal to unused (layers pe over this) stores into this
virtual PostureEngine createOverlay (const PostureEngine &pe) const
 sets joints of this to all joints of pe which are not equal to unused (layers pe over this) returns new PostureEngine
virtual PostureEnginesetUnderlay (const PostureEngine &pe)
 sets joints of this which are equal to unused to pe, (layers this over pe) stores into this
virtual PostureEngine createUnderlay (const PostureEngine &pe) const
 sets joints of this which are equal to unused to pe, (layers this over pe) returns new PostureEngine
virtual PostureEnginesetAverage (const PostureEngine &pe, float w=0.5)
 computes a weighted average of this vs. pe, w being the weight towards pe (so w==1 just copies pe)
virtual PostureEngine createAverage (const PostureEngine &pe, float w=0.5) const
 computes a weighted average of this vs. pe, w being the weight towards pe (so w==1 just copies pe)
virtual PostureEnginesetCombine (const PostureEngine &pe)
 computes a weighted average of this vs. pe, using the weight values of the joints, storing the total weight in the result's weight value
virtual PostureEngine createCombine (const PostureEngine &pe) const
 computes a weighted average of this vs. pe, using the weight values of the joints, storing the total weight in the result's weight value
virtual float diff (const PostureEngine &pe) const
 returns the sum squared error between this and pe's output values, but only between outputs which are both not unused
virtual float avgdiff (const PostureEngine &pe) const
 returns the average sum squared error between this and pe's output values for outputs which are both not unused
virtual float maxdiff (const PostureEngine &pe) const
 returns the max error between this and pe's output values for outputs which are both not unused

Protected Member Functions

virtual void update (unsigned int c, unsigned int l)
 Called at the beginning of each function which accesses ROBOOP computations - should make sure the ROBOOP structures are up to date with Tekkotsu structures.

Protected Attributes

OutputCmd cmds [NumOutputs]
 the table of outputs' values and weights, can be accessed through setOutputCmd() and getOutputCmd()


Constructor & Destructor Documentation

PostureEngine::PostureEngine  )  [inline]
 

Definition at line 20 of file PostureEngine.h.

PostureEngine::PostureEngine const std::string &  filename  )  [inline]
 

constructor, loads a position from a file

Todo:
might want to make a library of common positions so they don't have to be loaded repeatedly from memstick

Definition at line 23 of file PostureEngine.h.

PostureEngine::PostureEngine const WorldState st  )  [inline]
 

constructor, initializes joint positions to the current state of the outputs as defined by state

Definition at line 25 of file PostureEngine.h.

PostureEngine::~PostureEngine  )  [virtual]
 

destructor

Definition at line 7 of file PostureEngine.cc.


Member Function Documentation

float PostureEngine::avgdiff const PostureEngine pe  )  const [virtual]
 

returns the average sum squared error between this and pe's output values for outputs which are both not unused

Todo:
create a version which does weighted summing? This treats weights as all or nothing

Definition at line 107 of file PostureEngine.cc.

void PostureEngine::clear  )  [virtual]
 

sets all joints to unused

Reimplemented in PostureMC.

Definition at line 24 of file PostureEngine.cc.

Referenced by PostureMC::clear(), LoadBuffer(), and WallTestBehavior::processEvent().

PostureEngine PostureEngine::createAverage const PostureEngine pe,
float  w = 0.5
const [virtual]
 

computes a weighted average of this vs. pe, w being the weight towards pe (so w==1 just copies pe)

joints being averaged with weight<=0 have their weights averaged, but not their values (so an output can crossfade properly)

Parameters:
pe the other PostureEngine
w amount to weight towards pe
  • if w < .001, nothing is done
  • if w > .999, a straight copy of pe occurs (sets joints to unused properly at end of fade)
  • .001 and .999 is used instead of 0 and 1 to allow for slight addition errors in a loop (if using repeated additions of a delta value instead of repeated divisions)
Returns:
a new posture containing the results

Definition at line 81 of file PostureEngine.cc.

PostureEngine PostureEngine::createCombine const PostureEngine pe  )  const [virtual]
 

computes a weighted average of this vs. pe, using the weight values of the joints, storing the total weight in the result's weight value

Definition at line 92 of file PostureEngine.cc.

PostureEngine PostureEngine::createOverlay const PostureEngine pe  )  const [virtual]
 

sets joints of this to all joints of pe which are not equal to unused (layers pe over this) returns new PostureEngine

Definition at line 35 of file PostureEngine.cc.

PostureEngine PostureEngine::createUnderlay const PostureEngine pe  )  const [virtual]
 

sets joints of this which are equal to unused to pe, (layers this over pe) returns new PostureEngine

Definition at line 45 of file PostureEngine.cc.

float PostureEngine::diff const PostureEngine pe  )  const [virtual]
 

returns the sum squared error between this and pe's output values, but only between outputs which are both not unused

Todo:
create a version which does weighted summing? This treats weights as all or nothing

Definition at line 97 of file PostureEngine.cc.

unsigned int PostureEngine::getBinSize  )  const [virtual]
 

calculates space needed to save - if you can't precisely add up the size, overestimate and things will still work.

Returns:
number of bytes read/written, 0 if error (or empty)

Implements LoadSave.

Definition at line 130 of file PostureEngine.cc.

const OutputCmd& PostureEngine::getOutputCmd unsigned int  i  )  const [inline]
 

returns output i

Definition at line 43 of file PostureEngine.h.

OutputCmd& PostureEngine::getOutputCmd unsigned int  i  )  [inline]
 

returns output i, returns a reference so you can also set through an assignment

Definition at line 42 of file PostureEngine.h.

Referenced by MotionSequenceEngine::overlayPose(), MotionSequenceEngine::setPose(), and update().

unsigned int PostureEngine::LoadBuffer const char  buf[],
unsigned int  len
[virtual]
 

Load from a saved buffer.

Parameters:
buf pointer to the memory where you should begin loading
len length of buf available (this isn't all yours, might be more stuff saved after yours)
Returns:
the number of bytes actually used

Implements LoadSave.

Reimplemented in PostureMC.

Definition at line 139 of file PostureEngine.cc.

Referenced by PostureMC::LoadBuffer(), and MotionSequenceEngine::LoadBuffer().

unsigned int PostureEngine::LoadFile const char  filename[]  )  [virtual]
 

Definition at line 248 of file PostureEngine.cc.

Referenced by MotionSequenceEngine::LoadBuffer(), PostureEngine(), and PostureEditor::refresh().

float PostureEngine::maxdiff const PostureEngine pe  )  const [virtual]
 

returns the max error between this and pe's output values for outputs which are both not unused

Todo:
create a version which does weighted summing? This treats weights as all or nothing

Definition at line 119 of file PostureEngine.cc.

Referenced by PostureMC::isAlive().

const OutputCmd& PostureEngine::operator() unsigned int  i  )  const [inline]
 

returns output i

Definition at line 41 of file PostureEngine.h.

OutputCmd& PostureEngine::operator() unsigned int  i  )  [inline]
 

returns output i, returns a reference so you can also set through an assignment to this call, e.g. pose(MouthOffset)=.1; (remember that OutputCmd support implicit conversion from floats)

Definition at line 40 of file PostureEngine.h.

unsigned int PostureEngine::SaveBuffer char  buf[],
unsigned int  len
const [virtual]
 

Save to a given buffer.

Parameters:
buf pointer to the memory where you should begin writing
len length of buf available. (this isn't all yours, constrain yourself to what you returned in getBinSize() )
Returns:
the number of bytes actually used

Implements LoadSave.

Definition at line 222 of file PostureEngine.cc.

unsigned int PostureEngine::SaveFile const char  filename[]  )  const [virtual]
 

Definition at line 251 of file PostureEngine.cc.

Referenced by PostureEditor::refresh(), and SavePostureControl::takeInput().

PostureEngine & PostureEngine::setAverage const PostureEngine pe,
float  w = 0.5
[virtual]
 

computes a weighted average of this vs. pe, w being the weight towards pe (so w==1 just copies pe)

joints being averaged with unused joints have their weights averaged, but not their values (so an output can crossfade properly)

Parameters:
pe the other PostureEngine
w amount to weight towards pe
  • if w < .001, nothing is done
  • if w > .999, a straight copy of pe occurs (sets joints to unused properly at end of fade)
  • .001 and .999 is used instead of 0 and 1 to allow for slight addition errors in a loop (if using repeated additions of a delta value instead of repeated divisions)
Returns:
*this, stores results into this

Reimplemented in PostureMC.

Definition at line 57 of file PostureEngine.cc.

Referenced by createAverage(), and PostureMC::setAverage().

PostureEngine & PostureEngine::setCombine const PostureEngine pe  )  [virtual]
 

computes a weighted average of this vs. pe, using the weight values of the joints, storing the total weight in the result's weight value

Reimplemented in PostureMC.

Definition at line 85 of file PostureEngine.cc.

Referenced by createCombine(), and PostureMC::setCombine().

PostureEngine& PostureEngine::setOutputCmd unsigned int  i,
const OutputCmd c
[inline]
 

sets output i to OutputCmd c, returns *this so you can chain them; also remember that OutputCmd support implicit conversion from floats (so you can just pass a float)

Reimplemented in PostureMC.

Definition at line 39 of file PostureEngine.h.

Referenced by MotionSequenceEngine::getPose(), PostureMC::setOutputCmd(), and solveLinkPosition().

PostureEngine & PostureEngine::setOverlay const PostureEngine pe  )  [virtual]
 

sets joints of this to all joints of pe which are not equal to unused (layers pe over this) stores into this

Reimplemented in PostureMC.

Definition at line 29 of file PostureEngine.cc.

Referenced by createOverlay(), and PostureMC::setOverlay().

PostureEngine & PostureEngine::setUnderlay const PostureEngine pe  )  [virtual]
 

sets joints of this which are equal to unused to pe, (layers this over pe) stores into this

Reimplemented in PostureMC.

Definition at line 39 of file PostureEngine.cc.

Referenced by createUnderlay(), and PostureMC::setUnderlay().

void PostureEngine::setWeights float  w,
unsigned int  lowjoint,
unsigned int  highjoint
[virtual]
 

the the weights of a range of cmds

Reimplemented in PostureMC.

Definition at line 19 of file PostureEngine.cc.

virtual void PostureEngine::setWeights float  w  )  [inline, virtual]
 

set the weights of all cmds

Reimplemented in PostureMC.

Definition at line 36 of file PostureEngine.h.

Referenced by PostureMC::setWeights(), and SavePostureControl::takeInput().

virtual bool PostureEngine::solveLinkPosition float  Ptgt_x,
float  Ptgt_y,
float  Ptgt_z,
unsigned int  link,
float  Peff_x,
float  Peff_y,
float  Peff_z
[inline, virtual]
 

Performs inverse kinematics to solve for positioning Peff on link j to Ptgt; if solution found, stores result in this posture and returns true.

Parameters:
Ptgt_x the target x position (relative to base frame)
Ptgt_y the target y position (relative to base frame)
Ptgt_z the target z position (relative to base frame)
link the output offset of the joint to move
Peff_x the x position (relative to link) which you desire to have moved to Ptgt (it's the desired "effector")
Peff_y the y position (relative to link) which you desire to have moved to Ptgt (it's the desired "effector")
Peff_z the z position (relative to link) which you desire to have moved to Ptgt (it's the desired "effector")

Reimplemented in PostureMC.

Definition at line 75 of file PostureEngine.h.

bool PostureEngine::solveLinkPosition const NEWMAT::ColumnVector Ptgt,
unsigned int  link,
const NEWMAT::ColumnVector Peff
[virtual]
 

Performs inverse kinematics to solve for positioning Peff on link j to Ptgt (expects homogenous form); if solution found, stores result in this posture and returns true.

Parameters:
Ptgt the target point, in base coordinates
link the output offset of the joint to move
Peff the point (relative to link) which you desire to have moved to Ptgt (it's the desired "effector")

Reimplemented in PostureMC.

Definition at line 288 of file PostureEngine.cc.

Referenced by PostureMC::solveLinkPosition(), solveLinkPosition(), and solveLinkVector().

virtual bool PostureEngine::solveLinkVector float  Ptgt_x,
float  Ptgt_y,
float  Ptgt_z,
unsigned int  link,
float  Peff_x,
float  Peff_y,
float  Peff_z
[inline, virtual]
 

Performs inverse kinematics to solve for positioning Peff on link j to point at Ptgt; if solution found, stores result in this posture and returns true.

Parameters:
Ptgt_x the target x position (relative to base frame)
Ptgt_y the target y position (relative to base frame)
Ptgt_z the target z position (relative to base frame)
link the output offset of the joint to move
Peff_x the x position (relative to link) which you desire to have moved to Ptgt (it's the desired "effector")
Peff_y the y position (relative to link) which you desire to have moved to Ptgt (it's the desired "effector")
Peff_z the z position (relative to link) which you desire to have moved to Ptgt (it's the desired "effector")
Todo:
this method is an approximation, could be more precise, and perhaps faster, although this is pretty good.

Reimplemented in PostureMC.

Definition at line 94 of file PostureEngine.h.

bool PostureEngine::solveLinkVector const NEWMAT::ColumnVector Ptgt,
unsigned int  link,
const NEWMAT::ColumnVector Peff
[virtual]
 

Performs inverse kinematics to solve for positioning Peff on link j to point at Ptgt (expects homogenous form); if solution found, stores result in this posture and returns true.

Parameters:
Ptgt the target point, in base coordinates
link the output offset of the joint to move
Peff the point (relative to link) which you desire to have moved to Ptgt (it's the desired "effector")

Reimplemented in PostureMC.

Definition at line 302 of file PostureEngine.cc.

Referenced by PostureMC::solveLinkVector(), and solveLinkVector().

void PostureEngine::takeSnapshot const WorldState st  )  [virtual]
 

sets the values of cmds to the current state of the outputs as defined by state (doesn't change the weights)

Reimplemented in PostureMC.

Definition at line 14 of file PostureEngine.cc.

void PostureEngine::takeSnapshot  )  [virtual]
 

sets the values of cmds to the current state of the outputs (doesn't change the weights)

Reimplemented in PostureMC.

Definition at line 9 of file PostureEngine.cc.

Referenced by PostureMC::isAlive(), PostureEngine(), SavePostureControl::takeInput(), and PostureMC::takeSnapshot().

void PostureEngine::update unsigned int  c,
unsigned int  l
[protected, virtual]
 

Called at the beginning of each function which accesses ROBOOP computations - should make sure the ROBOOP structures are up to date with Tekkotsu structures.

This class will pull current values from WorldState, but it is expected that subclasses (i.e. PostureEngine) will want to provide their own joint values. Updates from link 1 through link l.

Parameters:
[in] c the chain to update
[in] l the last link to update (later links in the chain are left untouched)

Reimplemented from Kinematics.

Definition at line 329 of file PostureEngine.cc.

Referenced by solveLinkPosition().


Member Data Documentation

OutputCmd PostureEngine::cmds[NumOutputs] [protected]
 

the table of outputs' values and weights, can be accessed through setOutputCmd() and getOutputCmd()

Definition at line 142 of file PostureEngine.h.

Referenced by avgdiff(), clear(), diff(), EmergencyStopMC::freezeJoints(), getBinSize(), getOutputCmd(), LoadBuffer(), maxdiff(), operator()(), EmergencyStopMC::releaseJoints(), SaveBuffer(), setAverage(), setCombine(), setOutputCmd(), setOverlay(), setUnderlay(), setWeights(), takeSnapshot(), PostureMC::updateOutputs(), and EmergencyStopMC::updateOutputs().


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

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