Tekkotsu Homepage
Demos
Overview
Downloads
Dev. Resources
Reference
Credits

WalkMC Class Reference

#include <WalkMC.h>

Inheritance diagram for WalkMC:

List of all members.


Detailed Description

A nice walking class from Carnegie Mellon University's 2001 Robosoccer team, modified to fit this framework, see their license.

Moves the feet through a looping path in order to walk - default parameters use a walk low to the ground so you don't walk over the ball.

There are around 50 parameters which control the walk - these are loaded from a file and can modify almost every aspect of the the gait. It's a binary file format, I recommend using our Walk Edit menu to edit the parameters in real time and get immediate feedback. It's a tricky job to find a good set of parameters.

And then, once you have it walking, there's a whole different problem of actually moving at the speed that's requested. That's what the calibration parameters do - map the requested target speed to the command to pass to the engine so the resulting motion will hopefully match what you asked for.

You'll probably want to take a look at the setTargetVelocity() function to control the direction of the walk.

This class is in some dire need of some cleanup - we (Tekkotsu) didn't write it, have none the less hacked around and added stuff on top of it. So pardon the mess, unless you're feeling ambitious to write your own ;)

This portion of the code falls under CMPack's license:

  =========================================================================
    CMPack'02 Source Code Release for OPEN-R SDK v1.0
    Copyright (C) 2002 Multirobot Lab [Project Head: Manuela Veloso]
    School of Computer Science, Carnegie Mellon University
  -------------------------------------------------------------------------
    This software is distributed under the GNU General Public License,
    version 2.  If you do not have a copy of this licence, visit
    www.gnu.org, or write: Free Software Foundation, 59 Temple Place,
    Suite 330 Boston, MA 02111-1307 USA.  This program is distributed
    in the hope that it will be useful, but WITHOUT ANY WARRANTY,
    including MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  -------------------------------------------------------------------------
    Additionally licensed to Sony Corporation under the following terms:

    This software is provided by the copyright holders AS IS and any
    express or implied warranties, including, but not limited to, the
    implied warranties of merchantability and fitness for a particular
    purpose are disclaimed.  In no event shall authors be liable for
    any direct, indirect, incidental, special, exemplary, or consequential
    damages (including, but not limited to, procurement of substitute
    goods or services; loss of use, data, or profits; or business
    interruption) however caused and on any theory of liability, whether
    in contract, strict liability, or tort (including negligence or
    otherwise) arising in any way out of the use of this software, even if
    advised of the possibility of such damage.
  =========================================================================

Definition at line 70 of file WalkMC.h.


Public Types

enum  AccelerationStyle_t { CALIBRATION_ACCEL, INF_ACCEL, DEFAULT_ACCEL }
 used to specify value for acc_style More...
typedef SplinePath< vector3d,
float > 
splinepath
 for convenience
typedef HermiteSplineSegment
< vector3d, float > 
spline
 for convenience

Public Member Functions

 WalkMC (const char *pfile=NULL)
 constructor
virtual void DoStart ()
 sends an activate LocomotionEvent
virtual void DoStop ()
 sends a deactivate LocomotionEvent
virtual int updateOutputs ()
 calculates current positions of the paws
virtual int isDirty ()
 Returns true if we are walking. This modified isDirty allows the AIBO to slow down to a stop rather than stopping immediately.
virtual int isAlive ()
 Will prune if we've taken the requested number of steps.
virtual unsigned int getBinSize () const
 Calculates space needed to save - if you can't precisely add up the size, just make sure to overestimate and things will still work.
virtual unsigned int loadBuffer (const char buf[], unsigned int len)
 Load from a saved buffer in memory.
virtual unsigned int saveBuffer (char buf[], unsigned int len) const
 Save to a given buffer in memory.
virtual unsigned int loadFile (const char *filename)
 initiate opening of the specified file and loading/saving of all appropriate information.
virtual unsigned int saveFile (const char *filename) const
 initiate opening of the specified file and loading/saving of all appropriate information.
void setTargetVelocity (double dx, double dy, double da, int n=-1)
 set the direction to walk
const vector3d & getTargetVelocity ()
 returns current velocity we're trying to go
const vector3d & getCurVelocity () const
 returns the velocity we're actually moving (subject to clipping at max_accel_xya), doesn't reflect value of getPaused()...
unsigned int getStartTravelTime ()
 returns the time at which we started traveling along the current vector
unsigned int getTravelTime ()
 returns the amount of time we've been traveling along the current vector
void setTargetDisplacement (double dx, double dy, double da, unsigned int n)
 recalculates the target velocity so steps are of a given length to achieve the specified displacement in n steps
int getRemainingSteps () const
 returns remaining steps (step_count) (negative means infinite)
float getStepThreshold () const
 returns the step threshold -- see step_threshold
void setStepThreshold (float st)
 sets the step threshold -- see step_threshold
void setPaused (bool p)
 if set to true, will stop moving
bool getPaused () const
 if is true, we aren't moving
void setHeight (double h)
 sets WalkParam::body_height of wp
double getHeight ()
 gets WalkParam::body_height of wp
void setAngle (double a)
 sets WalkParam::body_angle of wp
double getAngle ()
 gets WalkParam::body_angle of wp
void setHop (double h)
 sets WalkParam::hop of wp
double getHop ()
 gets WalkParam::hop of wp
void setSway (double h)
 sets WalkParam::sway of wp
double getSway ()
 gets WalkParam::sway of wp
void setPeriod (long p)
 sets WalkParam::period of wp
long getPeriod ()
 gets WalkParam::period of wp
void setSlowMo (float p)
 sets slowmo
float * getSlowMo ()
 gets slowmo
virtual void setAccelerationStyle (AccelerationStyle_t acc)
 sets acc_style
virtual AccelerationStyle_t getAccelerationStyle () const
 returns acc_style
struct WalkParamgetWP ()
struct CalibrationParamgetCP ()
 returns the current walk parameter structure
void resetLegPos ()
 returns the current walk calibration parameter

Static Public Attributes

static const float MAX_DX = 180
 ==180 mm/sec
static const float MAX_DY = 140
 ==140 mm/sec
static const float MAX_DA = 1.8
 ==1.8 rad/sec
static const vector3d max_accel_xya
 maximum acceleration of x, y, and a velocity

Protected Member Functions

void init (const char *pfile)
 does some setup stuff, calls loadFile(pfile)

Static Protected Member Functions

static void applyCalibration (const float mat[3][11], const vector3d &in, vector3d &out)
 converts in to calibration parameters and multiplies through the calibration matrix

Protected Attributes

OutputCmd cmds [NumOutputs][NumFrames]
 holds current joint commands
bool isPaused
 true if we are paused
WalkParam wp
 current walking parameters (note that it's not static - different WalkMC's can have different setting, handy...
CalibrationParam cp
 calibration parameters for current walk.
LegWalkState legw [NumLegs]
 current state of each leg
vector3d legpos [NumLegs]
 current position of each leg
splinepath body_loc
 the path the body goes through while walking (?)
splinepath body_angle
 the path the body goes through while walking (?)
vector3d liftPos [NumLegs]
 position each of the feet was last lifted
vector3d downPos [NumLegs]
 position each of the feet is next going to be set down
AccelerationStyle_t acc_style
 lets you switch between finite or infinite acceleration models
int step_count
 number of steps to take before stopping; if negative, walk forever.
float step_threshold
 point in a leg's cycle where the step counter should be decremented; 0 - leg lift, .25 - mid-air, .5 - leg down, .75 - mid-ground
double last_cycle
 where the walk is in it its cycle, updated at the end of each call to updateOutputs()
vector3d pos_delta
 how much we've moved
float angle_delta
 how much we've turned
unsigned int travelTime
 the time of the last call to setTargetVelocity - handy to check the time we've been traveling current vector
int time
 time of last call to updateOutputs() (scaled by slowmo)
int TimeStep
 time to pretend passes between each call to updateOutputs() - usually RobotInfo::FrameTime
float slowmo
 scales time values to make the walk move in slow motion for analysis (or fast forward)
int CycleOffset
int TimeOffset
bool NewCycleOffset
vector3d vel_xya
 the current velocity we're moving
vector3d target_vel_xya
 the velocity that was requested
vector3d last_target_vel_xya
 the velocity that was last sent to motion

Classes

struct  CalibrationParam
 holds information to correct for slippage, non-idealities More...
struct  LegParam
 holds parameters about how to move each leg More...
struct  LegWalkState
 holds state about each leg's path More...
struct  WalkParam
 holds more general parameters about the walk More...

Member Typedef Documentation

typedef SplinePath<vector3d,float> WalkMC::splinepath

for convenience

Definition at line 72 of file WalkMC.h.

typedef HermiteSplineSegment<vector3d,float> WalkMC::spline

for convenience

Definition at line 73 of file WalkMC.h.


Member Enumeration Documentation

used to specify value for acc_style

Enumerator:
CALIBRATION_ACCEL  use the acceleration specified by the calibration parameters
INF_ACCEL  ignore calibration acceleration (attempt infinite acceleration)
DEFAULT_ACCEL  reference the value of Config::motion_config::walk_acceleration

Definition at line 199 of file WalkMC.h.


Constructor & Destructor Documentation

WalkMC::WalkMC ( const char *  pfile = NULL  ) 

constructor

Definition at line 61 of file WalkMC.cc.


Member Function Documentation

void WalkMC::DoStart (  )  [virtual]

sends an activate LocomotionEvent

Reimplemented from MotionCommand.

Definition at line 86 of file WalkMC.cc.

void WalkMC::DoStop (  )  [virtual]

sends a deactivate LocomotionEvent

Reimplemented from MotionCommand.

Definition at line 94 of file WalkMC.cc.

int WalkMC::updateOutputs (  )  [virtual]

calculates current positions of the paws

Implements MotionCommand.

Reimplemented in WaypointWalk< MAX_WAY >.

Definition at line 311 of file WalkMC.cc.

Referenced by WaypointWalk< MAX_WAY >::updateOutputs().

int WalkMC::isDirty (  )  [virtual]

Returns true if we are walking. This modified isDirty allows the AIBO to slow down to a stop rather than stopping immediately.

Implements MotionCommand.

Definition at line 127 of file WalkMC.cc.

Referenced by updateOutputs().

virtual int WalkMC::isAlive (  )  [inline, virtual]

Will prune if we've taken the requested number of steps.

Implements MotionCommand.

Definition at line 139 of file WalkMC.h.

unsigned int WalkMC::getBinSize (  )  const [virtual]

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

getBinSize is used for reserving buffers during serialization, but does not necessarily determine the actual size of what is written -- the return value of saveBuffer() specifies that after the data actually has been written. If getBinSize overestimates, the extra memory allocation is only temporary, no extra filler bytes are actually stored.

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

Implements LoadSave.

Definition at line 149 of file WalkMC.cc.

unsigned int WalkMC::loadBuffer ( const char  buf[],
unsigned int  len 
) [virtual]

Load from a saved buffer in memory.

Parameters:
buf pointer to the memory where you should begin loading
len length of buf available (this isn't necessarily all yours, there might be other things following your data)
Returns:
the number of bytes actually used

Implements LoadSave.

Definition at line 157 of file WalkMC.cc.

unsigned int WalkMC::saveBuffer ( char  buf[],
unsigned int  len 
) const [virtual]

Save to a given buffer in memory.

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

Implements LoadSave.

Definition at line 217 of file WalkMC.cc.

unsigned int WalkMC::loadFile ( const char *  filename  )  [virtual]

initiate opening of the specified file and loading/saving of all appropriate information.

Parameters:
filename the file to load/save
Returns:
number of bytes read/written, 0 if error (or empty)

Reimplemented from LoadSave.

Definition at line 257 of file WalkMC.cc.

Referenced by init(), WaypointWalk< MAX_WAY >::LoadWalkMCFile(), and LoadWalkControl::selectedFile().

unsigned int WalkMC::saveFile ( const char *  filename  )  const [virtual]

initiate opening of the specified file and loading/saving of all appropriate information.

Parameters:
filename the file to load/save
Returns:
number of bytes read/written, 0 if error (or empty)

Reimplemented from LoadSave.

Definition at line 260 of file WalkMC.cc.

Referenced by WaypointWalk< MAX_WAY >::SaveWalkMCFile(), and SaveWalkControl::takeInput().

void WalkMC::setTargetVelocity ( double  dx,
double  dy,
double  da,
int  n = -1 
)

set the direction to walk

Parameters:
dx forward velocity (millimeters per second)
dy left velocity (millimeters per second)
da counterclockwise velocity (radians per second)
n steps to take (if unspecified or negative, walk forever) Using a non-negative step count disables software acceleration of velocities
See also:
setTargetDisplacement()

Definition at line 264 of file WalkMC.cc.

Referenced by setTargetDisplacement(), and WaypointWalk< MAX_WAY >::updateOutputs().

const vector3d& WalkMC::getTargetVelocity (  )  [inline]

returns current velocity we're trying to go

Definition at line 156 of file WalkMC.h.

const vector3d& WalkMC::getCurVelocity (  )  const [inline]

returns the velocity we're actually moving (subject to clipping at max_accel_xya), doesn't reflect value of getPaused()...

Definition at line 158 of file WalkMC.h.

unsigned int WalkMC::getStartTravelTime (  )  [inline]

returns the time at which we started traveling along the current vector

Definition at line 160 of file WalkMC.h.

Referenced by getTravelTime().

unsigned int WalkMC::getTravelTime (  )  [inline]

returns the amount of time we've been traveling along the current vector

Definition at line 162 of file WalkMC.h.

Referenced by updateOutputs().

void WalkMC::setTargetDisplacement ( double  dx,
double  dy,
double  da,
unsigned int  n 
)

recalculates the target velocity so steps are of a given length to achieve the specified displacement in n steps

Parameters:
dx length of displacement in millimeters along body's x axis
dy length of displacement in millimeters along body's y axis
da amount to turn in radians, counter-clockwise viewed from above
n number of steps to take step_count will be set to n, so if the required velocity is beyond the abilities of the robot, it will stop on the n'th step, regardless of distance remaining.
See also:
setTargetVelocity()

Definition at line 286 of file WalkMC.cc.

int WalkMC::getRemainingSteps (  )  const [inline]

returns remaining steps (step_count) (negative means infinite)

Definition at line 177 of file WalkMC.h.

float WalkMC::getStepThreshold (  )  const [inline]

returns the step threshold -- see step_threshold

Definition at line 180 of file WalkMC.h.

void WalkMC::setStepThreshold ( float  st  )  [inline]

sets the step threshold -- see step_threshold

Definition at line 181 of file WalkMC.h.

void WalkMC::setPaused ( bool  p  )  [inline]

if set to true, will stop moving

Definition at line 183 of file WalkMC.h.

bool WalkMC::getPaused (  )  const [inline]

if is true, we aren't moving

Definition at line 184 of file WalkMC.h.

void WalkMC::setHeight ( double  h  )  [inline]

sets WalkParam::body_height of wp

Definition at line 185 of file WalkMC.h.

double WalkMC::getHeight (  )  [inline]

gets WalkParam::body_height of wp

Definition at line 186 of file WalkMC.h.

void WalkMC::setAngle ( double  a  )  [inline]

sets WalkParam::body_angle of wp

Definition at line 187 of file WalkMC.h.

double WalkMC::getAngle (  )  [inline]

gets WalkParam::body_angle of wp

Definition at line 188 of file WalkMC.h.

void WalkMC::setHop ( double  h  )  [inline]

sets WalkParam::hop of wp

Definition at line 189 of file WalkMC.h.

double WalkMC::getHop (  )  [inline]

gets WalkParam::hop of wp

Definition at line 190 of file WalkMC.h.

void WalkMC::setSway ( double  h  )  [inline]

sets WalkParam::sway of wp

Definition at line 191 of file WalkMC.h.

double WalkMC::getSway (  )  [inline]

gets WalkParam::sway of wp

Definition at line 192 of file WalkMC.h.

void WalkMC::setPeriod ( long  p  )  [inline]

sets WalkParam::period of wp

Definition at line 193 of file WalkMC.h.

long WalkMC::getPeriod (  )  [inline]

gets WalkParam::period of wp

Definition at line 194 of file WalkMC.h.

void WalkMC::setSlowMo ( float  p  )  [inline]

sets slowmo

Definition at line 195 of file WalkMC.h.

float* WalkMC::getSlowMo (  )  [inline]

gets slowmo

Definition at line 196 of file WalkMC.h.

virtual void WalkMC::setAccelerationStyle ( AccelerationStyle_t  acc  )  [inline, virtual]

sets acc_style

Definition at line 204 of file WalkMC.h.

virtual AccelerationStyle_t WalkMC::getAccelerationStyle (  )  const [inline, virtual]

returns acc_style

Definition at line 205 of file WalkMC.h.

struct WalkParam& WalkMC::getWP (  )  [inline, read]

Definition at line 212 of file WalkMC.h.

struct CalibrationParam& WalkMC::getCP (  )  [inline, read]

returns the current walk parameter structure

Definition at line 213 of file WalkMC.h.

void WalkMC::resetLegPos (  ) 

returns the current walk calibration parameter

takes current leg positions from WorldState and tries to match the point in the cycle most like it

Definition at line 603 of file WalkMC.cc.

Referenced by init(), and updateOutputs().

void WalkMC::applyCalibration ( const float  mat[3][11],
const vector3d &  in,
vector3d &  out 
) [static, protected]

converts in to calibration parameters and multiplies through the calibration matrix

Definition at line 637 of file WalkMC.cc.

Referenced by updateOutputs().

void WalkMC::init ( const char *  pfile  )  [protected]

does some setup stuff, calls loadFile(pfile)

Definition at line 104 of file WalkMC.cc.

Referenced by WalkMC().


Member Data Documentation

const float WalkMC::MAX_DX = 180 [static]

==180 mm/sec

Definition at line 218 of file WalkMC.h.

Referenced by WalkMC::CalibrationParam::CalibrationParam(), and updateOutputs().

const float WalkMC::MAX_DY = 140 [static]

==140 mm/sec

Definition at line 219 of file WalkMC.h.

Referenced by WalkMC::CalibrationParam::CalibrationParam(), and updateOutputs().

const float WalkMC::MAX_DA = 1.8 [static]

==1.8 rad/sec

Definition at line 220 of file WalkMC.h.

Referenced by WalkMC::CalibrationParam::CalibrationParam(), and updateOutputs().

const vector3d WalkMC::max_accel_xya [static]

maximum acceleration of x, y, and a velocity

Definition at line 222 of file WalkMC.h.

Referenced by updateOutputs().

OutputCmd WalkMC::cmds[NumOutputs][NumFrames] [protected]

holds current joint commands

Definition at line 226 of file WalkMC.h.

Referenced by updateOutputs().

bool WalkMC::isPaused [protected]

true if we are paused

Definition at line 235 of file WalkMC.h.

Referenced by getPaused(), isDirty(), and setPaused().

WalkParam WalkMC::wp [protected]

current walking parameters (note that it's not static - different WalkMC's can have different setting, handy...

Definition at line 237 of file WalkMC.h.

Referenced by getAngle(), getBinSize(), getHeight(), getHop(), getPeriod(), getSway(), getWP(), init(), loadBuffer(), resetLegPos(), saveBuffer(), setAngle(), setHeight(), setHop(), setPeriod(), setSway(), setTargetDisplacement(), and updateOutputs().

calibration parameters for current walk.

Definition at line 238 of file WalkMC.h.

Referenced by getBinSize(), getCP(), loadBuffer(), saveBuffer(), setTargetVelocity(), and updateOutputs().

LegWalkState WalkMC::legw[NumLegs] [protected]

current state of each leg

Definition at line 239 of file WalkMC.h.

Referenced by init(), and updateOutputs().

vector3d WalkMC::legpos[NumLegs] [protected]

current position of each leg

Definition at line 240 of file WalkMC.h.

Referenced by resetLegPos(), and updateOutputs().

the path the body goes through while walking (?)

Definition at line 241 of file WalkMC.h.

Referenced by init().

the path the body goes through while walking (?)

Definition at line 242 of file WalkMC.h.

Referenced by init().

vector3d WalkMC::liftPos[NumLegs] [protected]

position each of the feet was last lifted

Definition at line 243 of file WalkMC.h.

Referenced by updateOutputs().

vector3d WalkMC::downPos[NumLegs] [protected]

position each of the feet is next going to be set down

Definition at line 244 of file WalkMC.h.

Referenced by updateOutputs().

lets you switch between finite or infinite acceleration models

Definition at line 246 of file WalkMC.h.

Referenced by getAccelerationStyle(), setAccelerationStyle(), and updateOutputs().

int WalkMC::step_count [protected]

number of steps to take before stopping; if negative, walk forever.

Definition at line 248 of file WalkMC.h.

Referenced by getRemainingSteps(), isAlive(), isDirty(), setTargetVelocity(), and updateOutputs().

float WalkMC::step_threshold [protected]

point in a leg's cycle where the step counter should be decremented; 0 - leg lift, .25 - mid-air, .5 - leg down, .75 - mid-ground

Definition at line 249 of file WalkMC.h.

Referenced by getStepThreshold(), setStepThreshold(), and updateOutputs().

double WalkMC::last_cycle [protected]

where the walk is in it its cycle, updated at the end of each call to updateOutputs()

Definition at line 251 of file WalkMC.h.

Referenced by updateOutputs().

vector3d WalkMC::pos_delta [protected]

how much we've moved

Definition at line 253 of file WalkMC.h.

Referenced by updateOutputs().

float WalkMC::angle_delta [protected]

how much we've turned

Definition at line 254 of file WalkMC.h.

Referenced by updateOutputs().

unsigned int WalkMC::travelTime [protected]

the time of the last call to setTargetVelocity - handy to check the time we've been traveling current vector

Definition at line 256 of file WalkMC.h.

Referenced by DoStart(), DoStop(), getStartTravelTime(), and updateOutputs().

int WalkMC::time [protected]

time of last call to updateOutputs() (scaled by slowmo)

Definition at line 257 of file WalkMC.h.

Referenced by updateOutputs().

int WalkMC::TimeStep [protected]

time to pretend passes between each call to updateOutputs() - usually RobotInfo::FrameTime

Definition at line 258 of file WalkMC.h.

Referenced by updateOutputs().

float WalkMC::slowmo [protected]

scales time values to make the walk move in slow motion for analysis (or fast forward)

Definition at line 259 of file WalkMC.h.

Referenced by getSlowMo(), setSlowMo(), and updateOutputs().

int WalkMC::CycleOffset [protected]

The CycleOffset variable is used to ensure that each time the AIBO starts walking, it starts at the same point in the walk cycle as where it stopped. This measure is intended to decrease the amount of jerking (and hence deviation) that occurs when the AIBO starts walking forward and then suddenly stops.

Definition at line 267 of file WalkMC.h.

Referenced by updateOutputs().

int WalkMC::TimeOffset [protected]

Each CycleOffset corresponds to a different TimeOffset once the robot starts walking again. Consider this example: the robot stops 2/3 of the way through the cycle, then starts again 1/3 of the way through the cycle on the absolute clock. The time offset to advance the clock to the right part of the cycle is 1/3 of a cycle, so we set TimeOffset to 1/3 cycle and add that to every clock value used in the walk code.

Definition at line 275 of file WalkMC.h.

Referenced by updateOutputs().

bool WalkMC::NewCycleOffset [protected]

Every time we stop, we know we'll have a new CycleOffset, and we'll need to compute a new TimeOffset. This boolean says as much.

Definition at line 278 of file WalkMC.h.

Referenced by updateOutputs().

vector3d WalkMC::vel_xya [protected]

the current velocity we're moving

Definition at line 281 of file WalkMC.h.

Referenced by getCurVelocity(), isDirty(), and updateOutputs().

vector3d WalkMC::target_vel_xya [protected]

the velocity that was requested

Definition at line 282 of file WalkMC.h.

Referenced by DoStart(), getTargetVelocity(), isDirty(), setTargetVelocity(), and updateOutputs().

vector3d WalkMC::last_target_vel_xya [protected]

the velocity that was last sent to motion

Definition at line 283 of file WalkMC.h.

Referenced by updateOutputs().


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

Tekkotsu v4.0
Generated Thu Nov 22 00:58:47 2007 by Doxygen 1.5.4