Homepage | Demos | Overview | Downloads | Tutorials | Reference | Credits |
#include <MotionSequenceMC.h>
Inheritance diagram for MotionSequence:
Outputs are handled independently. It's easy to add keyframes which modify all of the outputs, but since each output is tracked individually, OutputCmd's with 0 weight can be used to not affect other motions. For instance, pan the head left to right while moving the right leg up and down several times, you won't have to specify the position of the head in its motion at each of the leg motion keyframes.
Be aware that the 0 time frame will be replaced on a call to play() with the current body posture. However, this only applies to outputs which have a non-zero weighted frame defined at some point. The weights, of the 0 time frame will remain unchanged. These weights are initially set to 0, so that it's possible to 'fade in' the first frame of the motion sequence from whereever the body happens to be (or already doing)
To fade out at the end, set a frame with 0 weight for everything. Otherwise it will simply die suddenly. (Currently, will still jerk between priority level shifts - can only fade within a priority level)
Currently, MotionSequence's are intended mainly for building, not editing. It's easy to add keyframes, but hard/impossible to delete them.
The MotionSequence base class is an abstract class so that you can create memory efficient motion sequences and simply refer to them by the common base class instead of having to worry about the actual size allocated in the template, MotionSequenceMC.
* First line: #MSq * Zero or more of: delay <time-delta> (moves playhead forward, in milliseconds) * or: settime <time> (sets play time to specified value, in ms) * or: <outputname> <value> [<weight>] (sets the specified output to the value - assumes 1 for weight) * or: load <filename> (file is a posture, sets position) * or: overlay <filename> (file can be a posture or another motion sequence) * or: degrees (following <value>s will be interpreted as degrees [default]) * or: radians (following <value>s will be interpreted as radians) * Last line: #END *
Lines beginning with '#' are ignored. Output names are defined in RobotInfo.h, RobotInfo::outputNames.
Definition at line 62 of file MotionSequenceMC.h.
Public Member Functions | |
MotionSequence () | |
constructor, will start playing immediately | |
virtual | ~MotionSequence () |
destructor | |
Inherited from MotionCommand | |
virtual int | updateOutputs () |
is called once per update cycle, can do any processing you need to change your priorities or set output commands on the MotionManager | |
virtual int | isDirty () |
not used by MotionManager at the moment, but could be used to reduce recomputation, and you may find it useful | |
virtual int | isAlive () |
used to prune "dead" motions from the MotionManager | |
LoadSave related | |
virtual unsigned int | getBinSize () const |
inherited, returns the size used to save the sequence | |
virtual unsigned int | LoadBuffer (const char buf[], unsigned int len) |
inherited, doesn't clear before loading - call clear yourself if you want to reset, otherwise it will overlay. Leaves playtime at end of load. | |
virtual unsigned int | SaveBuffer (char buf[], unsigned int len) const |
inherited, saves the motion sequence - will save a flat file - doesn't remember references to other files which were loaded | |
void | setSaveDegrees () |
will store angles as degrees on future saves | |
bool | isSaveDegrees () const |
returns true if will store angles as degrees on future saves | |
void | setSaveRadians () |
will store angles as radians on future saves | |
bool | isSaveRadians () const |
returns true if will store angles as degrees on future saves | |
Sequence Construction | |
virtual void | clear ()=0 |
empties out the sequence (constant time operation - faster than a series of pops) | |
void | setPlayTime (unsigned int x) |
set the time for both playback and editing (in milliseconds) | |
void | setOutputCmd (unsigned int i, const OutputCmd &cmd) |
will insert a keyframe for the given output, or change an existing one | |
const OutputCmd & | getOutputCmd (unsigned int i) |
gets the value of output i at the playhead | |
void | setPose (const PostureEngine &pose) |
calls setOutputCmd on each of the OutputCmds in pose | |
void | overlayPose (const PostureEngine &pose) |
calls setOutputCmd on non-zero weighted OutputCmds in pose | |
void | compress () |
compresses the sequence by eliminating sequences of moves which are identical | |
virtual unsigned int | getMaxFrames () const =0 |
returns the maximum number of key frames (Move's) which can be stored, determined by the instantiating MotionSequenceMC's template parameter | |
virtual unsigned int | getUsedFrames () const =0 |
returns the number of used key frames (Move's) which have been stored by the instantiation MotionSequence subclass | |
void | makeSafe (const float vels[NumOutputs], float margin) |
will insert time into the motion where needed to keep the joint velocities at or below the speeds given in vels * margin | |
Playback Control | |
bool | isPlaying () |
returns true if currently playing | |
void | play () |
restarts playback from beginning | |
void | pause () |
pauses playback until another call to play() or resume() | |
void | resume () |
begins playback from the current playtime | |
unsigned int | getPlayTime () const |
returns the current position of the playback (in milliseconds), see setPlayTime() | |
unsigned int | getEndTime () const |
returns the length of the motion sequence (in milliseconds) | |
void | setPlaySpeed (float x) |
sets the playback speed (e.g. 1=regular, 0.5=half speed, -1=backwards) | |
float | getPlaySpeed () const |
returns the playback speed | |
Static Public Attributes | |
Template Sizes | |
To avoid code bloat if there are a large number of different sized MotionSequences, use these sizes where possible. | |
const unsigned int | SizeTiny = NumOutputs*2 |
Tiny, but enough to handle a transition into a full-body pose. | |
const unsigned int | SizeSmall = NumOutputs*3 |
Small, but still big enough to handle most of the included MS's (2 full-body frames ~ around 1KB). | |
const unsigned int | SizeMedium = NumOutputs*6 |
Medium (5 full body frames ~ est 4KB). | |
const unsigned int | SizeLarge = NumOutputs*11 |
Large (10 full body frames ~ est 8KB). | |
const unsigned int | SizeXLarge = NumOutputs*26 |
eXtra Large (25 full body frames ~ est 16KB) | |
Protected Types | |
typedef unsigned short | Move_idx_t |
type for indexes to move structures in #moves | |
Protected Member Functions | |
virtual Move & | getKeyFrame (Move_idx_t x)=0 |
returns the Move struct corresponding to x in the subclass's actual data structure | |
virtual const Move & | getKeyFrame (Move_idx_t x) const =0 |
returns the Move struct corresponding to x in the subclass's actual data structure | |
virtual Move_idx_t | newKeyFrame ()=0 |
causes subclass to create a new Move structure, returns its index | |
virtual void | eraseKeyFrame (Move_idx_t x)=0 |
causes subclass to mark the corresponding Move structure as free | |
void | calcOutput (OutputCmd &ans, unsigned int t, const Move &prev, const Move &next) const |
Does the actual calculation of position information. Perhaps replace with a Bezier or spline or something? | |
virtual void | setRange (unsigned int t, Move_idx_t &prev, Move_idx_t &next) const =0 |
Sets prev and next to the appropriate values for the given time and output index. | |
unsigned int | setNextFrameTime (Move_idx_t p[NumOutputs], Move_idx_t n[NumOutputs]) const |
sets playtime to next time for which any output has a keyframe, -1 if none exists | |
Static Protected Member Functions | |
bool | ChkAdvance (int res, const char **buf, unsigned int *len, const char *msg) |
used by LoadBuffer()/SaveBuffer(), checks to see if the amount read/written (res) is nonzero, increments buf, decrements len, or displays msg if is zero | |
bool | ChkAdvance (int res, const char **buf, unsigned int *len, const char *msg, int arg1) |
used by LoadBuffer()/SaveBuffer(), checks to see if the amount read/written (res) is nonzero, increments buf, decrements len, or displays msg with arg1 if is zero | |
unsigned int | readWord (const char buf[], const char *const buflen, char word[], const unsigned int wordlen) |
reads a line from a file, parsing it into variables, returns ending position | |
unsigned int | getOutputIndex (const char name[], unsigned int i) |
returns the index for the output named in the string or NumOutputs if not found, begins search through RobotInfo::outputName's at index i | |
Protected Attributes | |
Move_idx_t | starts [NumOutputs] |
the beginning frame for each output animation | |
Move_idx_t | prevs [NumOutputs] |
the previous frame (the starttime for this frame will always be less than or equal to playtime) | |
Move_idx_t | nexts [NumOutputs] |
the upcoming frame (the starttime for this frame will always be greater than playtime) | |
OutputCmd | curs [NumOutputs] |
merely a cache of current values (if computed, see curstamps) | |
unsigned int | curstamps [NumOutputs] |
timestamp of corresponding value in curs | |
unsigned int | playtime |
the current time of playback, 0 is start of sequence | |
unsigned int | lasttime |
the time of the last update | |
unsigned int | endtime |
max of #moves's Move::starttime's | |
float | playspeed |
multiplies the difference between current time and starttime, negative will cause play backwards | |
bool | playing |
true if playing, false if paused | |
float | loadSaveMode |
1 to use radians, M_PI/180 for degrees during a save | |
Static Protected Attributes | |
Move_idx_t | invalid_move = -1U |
used to mark the ends of the Move linked lists |
|
type for indexes to move structures in #moves
Definition at line 120 of file MotionSequenceMC.h. Referenced by compress(), getBinSize(), makeSafe(), MotionSequenceMC< MAXMOVE >::newKeyFrame(), DynamicMotionSequence::newKeyFrame(), resume(), SaveBuffer(), setNextFrameTime(), setOutputCmd(), MotionSequenceMC< MAXMOVE >::updateOutputs(), and DynamicMotionSequence::updateOutputs(). |
|
constructor, will start playing immediately
Definition at line 65 of file MotionSequenceMC.h. |
|
destructor
Definition at line 67 of file MotionSequenceMC.h. |
|
Does the actual calculation of position information. Perhaps replace with a Bezier or spline or something?
Definition at line 153 of file MotionSequenceMC.h. Referenced by compress(), getOutputCmd(), MotionSequenceMC< MAXMOVE >::updateOutputs(), and DynamicMotionSequence::updateOutputs(). |
|
used by LoadBuffer()/SaveBuffer(), checks to see if the amount read/written (res) is nonzero, increments buf, decrements len, or displays msg with arg1 if is zero
Definition at line 361 of file MotionSequenceMC.cc. |
|
used by LoadBuffer()/SaveBuffer(), checks to see if the amount read/written (res) is nonzero, increments buf, decrements len, or displays msg if is zero
Definition at line 350 of file MotionSequenceMC.cc. Referenced by LoadBuffer(), and SaveBuffer(). |
|
empties out the sequence (constant time operation - faster than a series of pops)
Implemented in DynamicMotionSequence, and MotionSequenceMC< MAXMOVE >. |
|
compresses the sequence by eliminating sequences of moves which are identical
Definition at line 272 of file MotionSequenceMC.cc. |
|
causes subclass to mark the corresponding Move structure as free
Implemented in DynamicMotionSequence, and MotionSequenceMC< MAXMOVE >. Referenced by compress(). |
|
inherited, returns the size used to save the sequence
Implements LoadSave. Definition at line 39 of file MotionSequenceMC.cc. |
|
returns the length of the motion sequence (in milliseconds)
Definition at line 113 of file MotionSequenceMC.h. |
|
returns the Move struct corresponding to x in the subclass's actual data structure
Implemented in DynamicMotionSequence, and MotionSequenceMC< MAXMOVE >. |
|
returns the Move struct corresponding to x in the subclass's actual data structure
Implemented in DynamicMotionSequence, and MotionSequenceMC< MAXMOVE >. Referenced by compress(), getBinSize(), getOutputCmd(), makeSafe(), resume(), SaveBuffer(), setNextFrameTime(), and setOutputCmd(). |
|
returns the maximum number of key frames (Move's) which can be stored, determined by the instantiating MotionSequenceMC's template parameter
Implemented in DynamicMotionSequence, and MotionSequenceMC< MAXMOVE >. |
|
gets the value of output i at the playhead
Definition at line 28 of file MotionSequenceMC.cc. Referenced by MotionSequenceMC< MAXMOVE >::updateOutputs(), and DynamicMotionSequence::updateOutputs(). |
|
returns the index for the output named in the string or NumOutputs if not found, begins search through RobotInfo::outputName's at index i
Definition at line 399 of file MotionSequenceMC.cc. Referenced by LoadBuffer(). |
|
returns the playback speed
Definition at line 115 of file MotionSequenceMC.h. |
|
returns the current position of the playback (in milliseconds), see setPlayTime()
Definition at line 112 of file MotionSequenceMC.h. |
|
returns the number of used key frames (Move's) which have been stored by the instantiation MotionSequence subclass
Implemented in DynamicMotionSequence, and MotionSequenceMC< MAXMOVE >. |
|
used to prune "dead" motions from the MotionManager note that a motion could be "paused" or inactive and therefore not dirty, but still alive, biding its time to "strike" ;)
Implements MotionCommand. Definition at line 81 of file MotionSequenceMC.h. Referenced by isPlaying(). |
|
not used by MotionManager at the moment, but could be used to reduce recomputation, and you may find it useful
Implements MotionCommand. Definition at line 80 of file MotionSequenceMC.h. |
|
returns true if currently playing
Definition at line 108 of file MotionSequenceMC.h. Referenced by isDirty(), MotionSequenceMC< MAXMOVE >::updateOutputs(), updateOutputs(), and DynamicMotionSequence::updateOutputs(). |
|
returns true if will store angles as degrees on future saves
Definition at line 89 of file MotionSequenceMC.h. |
|
returns true if will store angles as degrees on future saves
Definition at line 91 of file MotionSequenceMC.h. Referenced by getBinSize(), and SaveBuffer(). |
|
inherited, doesn't clear before loading - call clear yourself if you want to reset, otherwise it will overlay. Leaves playtime at end of load.
Implements LoadSave. Definition at line 68 of file MotionSequenceMC.cc. |
|
will insert time into the motion where needed to keep the joint velocities at or below the speeds given in vels * margin
Definition at line 299 of file MotionSequenceMC.cc. |
|
causes subclass to create a new Move structure, returns its index
Implemented in DynamicMotionSequence, and MotionSequenceMC< MAXMOVE >. Referenced by setOutputCmd(). |
|
calls setOutputCmd on non-zero weighted OutputCmds in pose
Definition at line 266 of file MotionSequenceMC.cc. Referenced by LoadBuffer(). |
|
pauses playback until another call to play() or resume()
Definition at line 110 of file MotionSequenceMC.h. |
|
restarts playback from beginning
Definition at line 327 of file MotionSequenceMC.cc. Referenced by DriveMeBehavior::processEvent(), and updateOutputs(). |
|
reads a line from a file, parsing it into variables, returns ending position
Definition at line 383 of file MotionSequenceMC.cc. Referenced by LoadBuffer(). |
|
begins playback from the current playtime
Definition at line 335 of file MotionSequenceMC.cc. Referenced by play(). |
|
inherited, saves the motion sequence - will save a flat file - doesn't remember references to other files which were loaded
Implements LoadSave. Definition at line 171 of file MotionSequenceMC.cc. |
|
sets playtime to next time for which any output has a keyframe, -1 if none exists
Definition at line 372 of file MotionSequenceMC.cc. Referenced by getBinSize(), makeSafe(), and SaveBuffer(). |
|
will insert a keyframe for the given output, or change an existing one
Definition at line 237 of file MotionSequenceMC.cc. Referenced by LoadBuffer(), overlayPose(), and setPose(). |
|
sets the playback speed (e.g. 1=regular, 0.5=half speed, -1=backwards)
Definition at line 114 of file MotionSequenceMC.h. |
|
set the time for both playback and editing (in milliseconds)
Definition at line 231 of file MotionSequenceMC.cc. Referenced by MotionSequenceMC< MAXMOVE >::clear(), DynamicMotionSequence::clear(), DynamicMotionSequence::DynamicMotionSequence(), LoadBuffer(), MotionSequenceMC< MAXMOVE >::MotionSequenceMC(), play(), and updateOutputs(). |
|
calls setOutputCmd on each of the OutputCmds in pose
Definition at line 261 of file MotionSequenceMC.cc. Referenced by LoadBuffer(). |
|
Sets prev and next to the appropriate values for the given time and output index.
Implemented in DynamicMotionSequence, and MotionSequenceMC< MAXMOVE >. Referenced by setNextFrameTime(), and setPlayTime(). |
|
will store angles as degrees on future saves
Definition at line 88 of file MotionSequenceMC.h. Referenced by LoadBuffer(). |
|
will store angles as radians on future saves
Definition at line 90 of file MotionSequenceMC.h. Referenced by LoadBuffer(). |
|
is called once per update cycle, can do any processing you need to change your priorities or set output commands on the MotionManager
Implements MotionCommand. Reimplemented in DynamicMotionSequence, and MotionSequenceMC< MAXMOVE >. Definition at line 11 of file MotionSequenceMC.cc. Referenced by MotionSequenceMC< MAXMOVE >::updateOutputs(), and DynamicMotionSequence::updateOutputs(). |
|
merely a cache of current values (if computed, see curstamps)
Definition at line 137 of file MotionSequenceMC.h. Referenced by getOutputCmd(). |
|
timestamp of corresponding value in curs
Definition at line 138 of file MotionSequenceMC.h. Referenced by getOutputCmd(). |
|
max of #moves's Move::starttime's
Definition at line 141 of file MotionSequenceMC.h. Referenced by getEndTime(), MotionSequence(), play(), and setOutputCmd(). |
|
used to mark the ends of the Move linked lists
Definition at line 9 of file MotionSequenceMC.cc. Referenced by MotionSequenceMC< MAXMOVE >::clear(), DynamicMotionSequence::clear(), getOutputCmd(), setNextFrameTime(), setOutputCmd(), MotionSequenceMC< MAXMOVE >::setRange(), DynamicMotionSequence::setRange(), MotionSequenceMC< MAXMOVE >::updateOutputs(), and DynamicMotionSequence::updateOutputs(). |
|
the time of the last update
Definition at line 140 of file MotionSequenceMC.h. Referenced by MotionSequence(), resume(), and updateOutputs(). |
|
1 to use radians, M_PI/180 for degrees during a save
Definition at line 145 of file MotionSequenceMC.h. Referenced by getBinSize(), isSaveDegrees(), isSaveRadians(), LoadBuffer(), MotionSequence(), SaveBuffer(), setSaveDegrees(), and setSaveRadians(). |
|
the upcoming frame (the starttime for this frame will always be greater than playtime)
Definition at line 136 of file MotionSequenceMC.h. Referenced by MotionSequenceMC< MAXMOVE >::clear(), DynamicMotionSequence::clear(), getOutputCmd(), setOutputCmd(), setPlayTime(), MotionSequenceMC< MAXMOVE >::updateOutputs(), and DynamicMotionSequence::updateOutputs(). |
|
true if playing, false if paused
Definition at line 143 of file MotionSequenceMC.h. Referenced by isPlaying(), MotionSequence(), pause(), and resume(). |
|
multiplies the difference between current time and starttime, negative will cause play backwards
Definition at line 142 of file MotionSequenceMC.h. Referenced by getPlaySpeed(), isAlive(), MotionSequence(), play(), setPlaySpeed(), and updateOutputs(). |
|
the current time of playback, 0 is start of sequence
Definition at line 139 of file MotionSequenceMC.h. Referenced by getOutputCmd(), getPlayTime(), LoadBuffer(), MotionSequence(), setOutputCmd(), setPlayTime(), MotionSequenceMC< MAXMOVE >::updateOutputs(), updateOutputs(), and DynamicMotionSequence::updateOutputs(). |
|
the previous frame (the starttime for this frame will always be less than or equal to playtime)
Definition at line 135 of file MotionSequenceMC.h. Referenced by MotionSequenceMC< MAXMOVE >::clear(), DynamicMotionSequence::clear(), getOutputCmd(), setOutputCmd(), setPlayTime(), MotionSequenceMC< MAXMOVE >::updateOutputs(), and DynamicMotionSequence::updateOutputs(). |
|
Large (10 full body frames ~ est 8KB).
Definition at line 74 of file MotionSequenceMC.h. |
|
Medium (5 full body frames ~ est 4KB).
Definition at line 73 of file MotionSequenceMC.h. |
|
Small, but still big enough to handle most of the included MS's (2 full-body frames ~ around 1KB).
Definition at line 72 of file MotionSequenceMC.h. |
|
Tiny, but enough to handle a transition into a full-body pose.
Definition at line 71 of file MotionSequenceMC.h. |
|
eXtra Large (25 full body frames ~ est 16KB)
Definition at line 75 of file MotionSequenceMC.h. |
|
the beginning frame for each output animation
Definition at line 134 of file MotionSequenceMC.h. Referenced by MotionSequenceMC< MAXMOVE >::clear(), DynamicMotionSequence::clear(), compress(), getBinSize(), makeSafe(), resume(), and SaveBuffer(). |
Tekkotsu v2.0 |
Generated Wed Jan 21 03:23:18 2004 by Doxygen 1.3.4 |