KatanaNativeInterface $VERSION$

CLMBase Class Reference

Linear movement Class. More...

#include <lmBase.h>

Inheritance diagram for CLMBase:
Collaboration diagram for CLMBase:

List of all members.

Public Member Functions

 CLMBase ()
void initLM ()
 Initialize the parameters for the linear movements.
void movLM (double X, double Y, double Z, double Al, double Be, double Ga, bool exactflag, double vmax, bool wait=true, int tolerance=100, long timeout=TM_ENDLESS)
void movLM2PwithL (double X1, double Y1, double Z1, double Al1, double Be1, double Ga1, double X2, double Y2, double Z2, double Al2, double Be2, double Ga2, bool exactflag, double vmax, bool wait=false, int tolerance=100, long timeout=TM_ENDLESS)
 Old version of movLM2P which uses L-Command (only 4 splines)
void movLM2P4D (double X1, double Y1, double Z1, double Al1, double Be1, double Ga1, double X2, double Y2, double Z2, double Al2, double Be2, double Ga2, bool exactflag, double vmax, bool wait=false, int tolerance=100, long timeout=TM_ENDLESS)
void movLM2P (double X1, double Y1, double Z1, double Al1, double Be1, double Ga1, double X2, double Y2, double Z2, double Al2, double Be2, double Ga2, bool exactflag, double vmax, bool wait=true, int tolerance=100, long timeout=TM_ENDLESS)
 New version of movLM2P with multiple splines.
void setMaximumLinearVelocity (double maximumVelocity)
double getMaximumLinearVelocity () const
void setActivatePositionController (bool activate)
 Re-Activate the position controller after the linear movement.
bool getActivatePositionController ()
 Check if the position controller will be activated after the linear movement.
void moveRobotLinearTo (double x, double y, double z, double phi, double theta, double psi, bool waitUntilReached=true, int waitTimeout=TM_ENDLESS)
void moveRobotLinearTo (std::vector< double > coordinates, bool waitUntilReached=true, int waitTimeout=TM_ENDLESS)
 This method does the same as the one above and is mainly provided for convenience.

Private Member Functions

void fillPoints (double vmax)
void polDeviratives ()
void polCoefficients ()
void calcParameters (double *arr_actpos, double *arr_tarpos, double vmax)
double totalTime (double distance, double acc, double dec, double vmax)
 Calculates time needed for movement over a distance.
double relPosition (double reltime, double distance, double acc, double dec, double vmax)
 Calculates the relative position reached after the relative time given.
void splineCoefficients (int steps, double *timearray, double *encoderarray, double *arr_p1, double *arr_p2, double *arr_p3, double *arr_p4)
 Calculates the spline coefficient and stores them in arr_p1 - arr_p4.
bool checkJointSpeed (std::vector< int > lastsolution, std::vector< int > solution, double time)
 Checks if the joint speeds are below speed limit.

Private Attributes

double _maximumVelocity
bool _activatePositionController
bool _isInitialized
TLMtrajectory trajectory
TBLENDtrajectory blendtrajectory

Detailed Description

Linear movement Class.

This class allows to do linear movements with the Katana robot.

Definition at line 153 of file lmBase.h.


Constructor & Destructor Documentation

CLMBase::CLMBase ( ) [inline]

Definition at line 239 of file lmBase.h.


Member Function Documentation

void CLMBase::calcParameters ( double *  arr_actpos,
double *  arr_tarpos,
double  vmax 
) [private]
bool CLMBase::checkJointSpeed ( std::vector< int >  lastsolution,
std::vector< int >  solution,
double  time 
) [private]

Checks if the joint speeds are below speed limit.

Maximum joint speed is 180enc / 10ms.

Author:
Jonas Haller
Parameters:
lastsolutionencoder values of last point
solutionencoder values of current point
timetime difference between the points in s
Returns:
true if joint speeds ok, false if joint speed too high
void CLMBase::fillPoints ( double  vmax) [private]
bool CLMBase::getActivatePositionController ( )

Check if the position controller will be activated after the linear movement.

double CLMBase::getMaximumLinearVelocity ( ) const
void CLMBase::initLM ( )

Initialize the parameters for the linear movements.

This is in the case you want to initialize it manually

Note:
If you do not call it, moveRobotLinearTo() will do it for you automatically
void CLMBase::moveRobotLinearTo ( std::vector< double >  coordinates,
bool  waitUntilReached = true,
int  waitTimeout = TM_ENDLESS 
)

This method does the same as the one above and is mainly provided for convenience.

Note:
You can call this function in python using tuples: Example: katana.moveRobotLinearTo( (x,y,z,phi,theta,psi) )
If the size of the container is smaller than 6, it will throw an exception!
void CLMBase::moveRobotLinearTo ( double  x,
double  y,
double  z,
double  phi,
double  theta,
double  psi,
bool  waitUntilReached = true,
int  waitTimeout = TM_ENDLESS 
)
Parameters:
waitUntilReachedhas to be true with new implementation of movLM2P
void CLMBase::movLM ( double  X,
double  Y,
double  Z,
double  Al,
double  Be,
double  Ga,
bool  exactflag,
double  vmax,
bool  wait = true,
int  tolerance = 100,
long  timeout = TM_ENDLESS 
)
Parameters:
waithas to be true with new implementation of movLM2P
void CLMBase::movLM2P ( double  X1,
double  Y1,
double  Z1,
double  Al1,
double  Be1,
double  Ga1,
double  X2,
double  Y2,
double  Z2,
double  Al2,
double  Be2,
double  Ga2,
bool  exactflag,
double  vmax,
bool  wait = true,
int  tolerance = 100,
long  timeout = TM_ENDLESS 
)

New version of movLM2P with multiple splines.

Author:
Jonas Haller
Parameters:
X1X coordinate of actual position
Y1Y coordinate of actual position
Z1Z coordinate of actual position
Ph1Phi angle of actual position
Th1Theta angle of actual position
Ps1Psi angle of actual position
X2X coordinate of target position
Y2Y coordinate of target position
Z2Z coordinate of target position
Ph2Phi angle of target position
Th2Theta angle of target position
Ps2Psi angle of target position
exactflagactivate the position controller after the movement
vmaxmaximum velocity of the movement in mm/s
waitparam for legacy reasons only, has to be true
tolerancetolerance for all motor encoders
timeouttimeout for linear movement in ms
Exceptions:
NoSolutionExceptionif no solution found for IK
JointSpeedExceptionif joint speed too high
WaitParameterExceptionif wait set to false
Returns:
void
void CLMBase::movLM2P4D ( double  X1,
double  Y1,
double  Z1,
double  Al1,
double  Be1,
double  Ga1,
double  X2,
double  Y2,
double  Z2,
double  Al2,
double  Be2,
double  Ga2,
bool  exactflag,
double  vmax,
bool  wait = false,
int  tolerance = 100,
long  timeout = TM_ENDLESS 
)
void CLMBase::movLM2PwithL ( double  X1,
double  Y1,
double  Z1,
double  Al1,
double  Be1,
double  Ga1,
double  X2,
double  Y2,
double  Z2,
double  Al2,
double  Be2,
double  Ga2,
bool  exactflag,
double  vmax,
bool  wait = false,
int  tolerance = 100,
long  timeout = TM_ENDLESS 
)

Old version of movLM2P which uses L-Command (only 4 splines)

void CLMBase::polCoefficients ( ) [private]
void CLMBase::polDeviratives ( ) [private]
double CLMBase::relPosition ( double  reltime,
double  distance,
double  acc,
double  dec,
double  vmax 
) [private]

Calculates the relative position reached after the relative time given.

Author:
Jonas Haller
Parameters:
reltimerelative time (fraction of totaltime)
distancedistance of the movement in mm
accacceleration at the beginning in mm/s^2
decdeceleration at the end in mm/s^2
vmaxmaximum velocity of the movement in mm/s
Returns:
relative distance (fraction of distance)
void CLMBase::setActivatePositionController ( bool  activate)

Re-Activate the position controller after the linear movement.

Note:
This can result in a small movement after the movement
void CLMBase::setMaximumLinearVelocity ( double  maximumVelocity)
void CLMBase::splineCoefficients ( int  steps,
double *  timearray,
double *  encoderarray,
double *  arr_p1,
double *  arr_p2,
double *  arr_p3,
double *  arr_p4 
) [private]

Calculates the spline coefficient and stores them in arr_p1 - arr_p4.

Boundary conditions are that f_1'=0 and f_n'=0 (zero velocity at beginning and end of the movement) and f_i''=P_(i+1)''.

Author:
Jonas Haller
Parameters:
stepsnumber of splines to calculate
timearraytimes of the points (length = steps + 1)
encoderarrayencoder values of the points (length = steps + 1)
arr_p1to return parameters 1 (length = steps)
arr_p2to return parameters 2 (length = steps)
arr_p3to return parameters 3 (length = steps)
arr_p4to return parameters 4 (length = steps)
Returns:
void
double CLMBase::totalTime ( double  distance,
double  acc,
double  dec,
double  vmax 
) [private]

Calculates time needed for movement over a distance.

Author:
Jonas Haller
Parameters:
distancedistance of the movement in mm
accacceleration at the beginning in mm/s^2
decdeceleration at the end in mm/s^2
vmaxmaximum velocity of the movement in mm/s
Returns:
time needed for the movement in s

Member Data Documentation

Definition at line 157 of file lmBase.h.

bool CLMBase::_isInitialized [private]

Definition at line 158 of file lmBase.h.

double CLMBase::_maximumVelocity [private]

Definition at line 156 of file lmBase.h.

Definition at line 162 of file lmBase.h.

Definition at line 161 of file lmBase.h.


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