Commit 8777573f authored by Olivier Stasse's avatar Olivier Stasse
Browse files

Fixed 80 cols.

parent 0b665a37
......@@ -23,7 +23,8 @@
*/
/*!\file FootTrajectoryGenerationAbstract.h
\brief This class determinate how it s generate all the values for the foot trajectories.
\brief This class determinate how it s generate all the values for the foot
trajectories.
@ingroup foottrajectorygeneration
*/
......@@ -48,7 +49,8 @@ namespace PatternGeneratorJRL
{
/** @ingroup foottrajectorygeneration
This class defines the abstract interface to interact with foot generation object.
This class defines the abstract interface to interact with
foot generation object.
Two parameters \f$ T_{DS} \f$ and \f$ T_{SS} \f$ defines respectively
the double support time and the single support time.
......@@ -67,8 +69,8 @@ namespace PatternGeneratorJRL
should call InitializeInternalDataStructures() once all the internal
parameters of the object are set.
The virtual function FreeInternalDataStructures() is used when changing some
parameters and by the destructor.
The virtual function FreeInternalDataStructures() is used when changing
some parameters and by the destructor.
The most important function is UpdateFootPosition() which populates a
queue of foot absolute positions data structure.
......@@ -90,36 +92,44 @@ namespace PatternGeneratorJRL
/*! Default destructor. */
virtual ~FootTrajectoryGenerationAbstract() {};
/*! This method computes the position of the swinging foot during single support phase,
and maintian a constant position for the support foot.
@param SupportFootAbsolutePositions: Queue of absolute position for the support foot.
This method will set the foot position at index CurrentAbsoluteIndex of the queue.
/*! This method computes the position of the swinging foot during
single support phase, and maintian a constant position
for the support foot.
@param SupportFootAbsolutePositions: Queue of absolute position for the
support foot.
This method will set the foot position at index CurrentAbsoluteIndex
of the queue.
This position is supposed to be constant.
@param NoneSupportFootAbsolutePositions: Queue of absolute position for the swinging
foot. This method will set the foot position at index NoneSupportFootAbsolutePositions
@param NoneSupportFootAbsolutePositions: Queue of absolute position
for the swinging
foot. This method will set the foot position at index
NoneSupportFootAbsolutePositions
of the queue.
@param CurrentAbsoluteIndex: Index in the queues of the foot position to be set.
@param IndexInitial: Index in the queues which correspond to the starting point
of the current single support phase.
@param CurrentAbsoluteIndex: Index in the queues of the foot position to
be set.
@param IndexInitial: Index in the queues which correspond to the
starting point of the current single support phase.
@param ModulatedSingleSupportTime: Amount of time where the foot is flat.
@param StepType: Type of steps (for book-keeping).
@param LeftOrRight: Specify if it is left (1) or right (-1).
*/
virtual void UpdateFootPosition(std::deque<FootAbsolutePosition>
&SupportFootAbsolutePositions,
std::deque<FootAbsolutePosition> &NoneSupportFootAbsolutePositions,
int CurrentAbsoluteIndex,
int IndexInitial,
double ModulatedSingleSupportTime,
int StepType, int LeftOrRight);
virtual void UpdateFootPosition(std::deque<FootAbsolutePosition>
&SupportFootAbsolutePositions,
std::deque<FootAbsolutePosition> &NoneSupportFootAbsolutePositions,
int StartIndex, int k,
double LocalInterpolationStartTime,
double ModulatedSingleSupportTime,
int StepType, int LeftOrRight);
virtual void UpdateFootPosition
(std::deque<FootAbsolutePosition>
&SupportFootAbsolutePositions,
std::deque<FootAbsolutePosition> &NoneSupportFootAbsolutePositions,
int CurrentAbsoluteIndex,
int IndexInitial,
double ModulatedSingleSupportTime,
int StepType, int LeftOrRight);
virtual void UpdateFootPosition
(std::deque<FootAbsolutePosition>
&SupportFootAbsolutePositions,
std::deque<FootAbsolutePosition> &NoneSupportFootAbsolutePositions,
int StartIndex, int k,
double LocalInterpolationStartTime,
double ModulatedSingleSupportTime,
int StepType, int LeftOrRight);
/*! Initialize internal data structures. */
virtual void InitializeInternalDataStructures()=0;
......
......@@ -67,9 +67,11 @@ namespace PatternGeneratorJRL
/*! \name Single support foot subcategories
@{ */
/*! \brief The robot is in single support and the foot considered is the support foot */
/*! \brief The robot is in single support and the foot
considered is the support foot */
const static int SINGLE_SUPPORT_SUPPORT=1;
/*! \brief The robot is in single support and the foot considered is flying. */
/*! \brief The robot is in single support and
the foot considered is flying. */
const static int SINGLE_SUPPORT_FLYING=2;
/*! @} */
......@@ -130,15 +132,18 @@ namespace PatternGeneratorJRL
/*! \brief Compute the value asked for according to :
@param[in] t: the time,
@param[in] IndexInterval: Index of the interval to be used for the computation.
@param[in] IndexInterval: Index of the interval to be used
for the computation.
@param[out] aFootAbsolutePosition: a foot absolute position.
*/
bool Compute(double t, FootAbsolutePosition & aFootAbsolutePosition,
unsigned int IndexInterval);
/*! This method specifies the parameters for each of the polynome used by this
object. In this case, as it is used for the 3rd order polynome. The polynome to
which those parameters are set is specified with PolynomeIndex.
/*! This method specifies the parameters for each of the polynome
used by this
object. In this case, as it is used for the 3rd order polynome.
The polynome to which those parameters are set is specified
with PolynomeIndex.
@param PolynomeIndex: Set to which axis the parameters will be applied.
@param TimeInterval: Set the time base of the polynome.
@param Position: Set the final position of the polynome at TimeInterval.
......@@ -148,53 +153,68 @@ namespace PatternGeneratorJRL
double TimeInterval,
double FinalPosition);
/*! This method specifies the parameters for each of the polynome used by this
object. In this case, as it is used for the 3rd order polynome. The polynome to
/*! This method specifies the parameters for each of the polynome used
by this object.
In this case, as it is used for the 3rd order polynome. The polynome to
which those parameters are set is specified with PolynomeIndex.
@param PolynomeIndex: Set to which axis the parameters will be applied.
@param AxisReference: Index to the axis to be used.
@param TimeInterval: Set the time base of the polynome.
@param FinalPosition: Set the final position of the polynome at TimeInterval.
@param InitPosition: Initial position when computing the polynome at t= m_AbsoluteTimeReference.
@param InitSpeed: Initial speed when computing the polynome at t=m_AbsoluteTimeReference.
@param FinalPosition: Set the final position of the polynome at
TimeInterval.
@param InitPosition: Initial position when computing the polynome at
t= m_AbsoluteTimeReference.
@param InitSpeed: Initial speed when computing the polynome at
t=m_AbsoluteTimeReference.
*/
int SetParametersWithInitPosInitSpeed(unsigned int PolynomeIndex,
int AxisReference,
double TimeInterval,
double FinalPosition,
double InitPosition,
double InitSpeed,
vector<double> MiddlePos=vector<double>(3,-1));
/*! This method specifies the parameters for each of the polynome used by this
object. In this case, as it is used for the 3rd order polynome. The polynome to
int SetParametersWithInitPosInitSpeed
(unsigned int PolynomeIndex,
int AxisReference,
double TimeInterval,
double FinalPosition,
double InitPosition,
double InitSpeed,
vector<double> MiddlePos=vector<double>(3,-1));
/*! This method specifies the parameters for each of the polynome used by
this object.
In this case, as it is used for the 3rd order polynome. The polynome to
which those parameters are set is specified with PolynomeIndex.
@param PolynomeIndex: Set to which axis the parameters will be applied.
@param AxisReference: Index to the axis to be used.
@param TimeInterval: Set the time base of the polynome.
@param FinalPosition: Set the final position of the polynome at TimeInterval.
@param InitPosition: Initial position when computing the polynome at t= m_AbsoluteTimeReference.
@param InitSpeed: Initial speed when computing the polynome at t=m_AbsoluteTimeReference.
@param InitAcc: Initial speed when computing the polynome at t=m_AbsoluteTimeReference.
@param FinalPosition: Set the final position of the polynome at
TimeInterval.
@param InitPosition: Initial position when computing the polynome at
t= m_AbsoluteTimeReference.
@param InitSpeed: Initial speed when computing the polynome at
t=m_AbsoluteTimeReference.
@param InitAcc: Initial speed when computing the polynome at
t=m_AbsoluteTimeReference.
*/
int SetParametersWithInitPosInitSpeedInitAcc(unsigned int PolynomeIndex,
int AxisReference,
double TimeInterval,
double FinalPosition,
double InitPosition,
double InitSpeed,
double InitAcc,
vector<double> middlePos = vector<double>(3,-1));
int SetParametersWithInitPosInitSpeedInitAcc
(unsigned int PolynomeIndex,
int AxisReference,
double TimeInterval,
double FinalPosition,
double InitPosition,
double InitSpeed,
double InitAcc,
vector<double> middlePos = vector<double>(3,-1));
/*! This method gets the parameters for each of the polynome used by this
object. In this case, as it is used for the 3rd order polynome. The polynome to
which those parameters are set is specified with PolynomeIndex.
object. In this case, as it is used for the 3rd order polynome.
The polynome to which those parameters are set is specified with
PolynomeIndex.
@param PolynomeIndex: Set to which axis the parameters will be applied.
@param AxisReference: Index to the axis to be used.
@param TimeInterval: Set the time base of the polynome.
@param FinalPosition: Set the final position of the polynome at TimeInterval.
@param InitPosition: Initial position when computing the polynome at t= m_AbsoluteTimeReference.
@param InitSpeed: Initial speed when computing the polynome at t=m_AbsoluteTimeReference.
@param FinalPosition: Set the final position of the polynome at
TimeInterval.
@param InitPosition: Initial position when computing the polynome at
t= m_AbsoluteTimeReference.
@param InitSpeed: Initial speed when computing the polynome at
t=m_AbsoluteTimeReference.
*/
int GetParametersWithInitPosInitSpeed(unsigned int PolynomeIndex,
int AxisReference,
......@@ -215,12 +235,13 @@ namespace PatternGeneratorJRL
/*! @} */
FootTrajectoryGenerationMultiple & operator=(const
FootTrajectoryGenerationMultiple & aFTGM);
FootTrajectoryGenerationMultiple & operator=
(const FootTrajectoryGenerationMultiple & aFTGM);
protected:
/*! \brief Handle a set of object allowing the generation of the foot trajectory.*/
/*! \brief Handle a set of object allowing the generation of the foot
trajectory.*/
std::vector<FootTrajectoryGenerationStandard *>
m_SetOfFootTrajectoryGenerationObjects;
......
......@@ -39,17 +39,22 @@ namespace PatternGeneratorJRL
{
/** @ingroup foottrajectorygeneration
This class generates a trajectory for the swinging foot during single support phase.
It uses a classical approach relying in polynome of 3rd orders for the position in the
orthogonal plan as well as the direction.For the height modification a 4th order polynome
is used. Finally a landing and take off phase using an angular value (\f$\omega\f$).
This class generates a trajectory for the swinging foot during single
support phase.
It uses a classical approach relying in polynome of 3rd orders for the
position in the
orthogonal plan as well as the direction.For the height modification
a 4th order polynome
is used. Finally a landing and take off phase using an angular value
(\f$\omega\f$).
*/
class FootTrajectoryGenerationStandard : public
FootTrajectoryGenerationAbstract
{
public:
/*!\name Constants related to the direction for the generation of the polynomes.
/*!\name Constants related to the direction for the generation of the
polynomes.
@{ */
/*! \brief along the frontal direction */
......@@ -74,82 +79,103 @@ namespace PatternGeneratorJRL
/*! Default destructor. */
virtual ~FootTrajectoryGenerationStandard();
/*! This method computes the position of the swinging foot during single support phase,
/*! This method computes the position of the swinging foot during
single support phase,
and maintain a constant position for the support foot.
It uses polynomial of 3rd order for the X-axis, Y-axis,
orientation in the X-Z axis, and orientation in the X-Y axis,
and finally it uses a 4th order polynome for the Z-axis.
@param SupportFootAbsolutePositions: Queue of absolute position for the support foot.
This method will set the foot position at index CurrentAbsoluteIndex of the queue.
@param SupportFootAbsolutePositions: Queue of absolute position for
the support foot.
This method will set the foot position at index CurrentAbsoluteIndex
of the queue.
This position is supposed to be constant.
@param NoneSupportFootAbsolutePositions: Queue of absolute position for the swinging
foot. This method will set the foot position at index NoneSupportFootAbsolutePositions
@param NoneSupportFootAbsolutePositions: Queue of absolute position
for the swinging
foot. This method will set the foot position at index
NoneSupportFootAbsolutePositions
of the queue.
@param CurrentAbsoluteIndex: Index in the queues of the foot position to be set.
@param IndexInitial: Index in the queues which correspond to the starting point
of the current single support phase.
@param CurrentAbsoluteIndex: Index in the queues of the foot
position to be set.
@param IndexInitial: Index in the queues which correspond to the
starting point of the current single support phase.
@param ModulatedSingleSupportTime: Amount of time where the foot is flat.
@param StepType: Type of steps (for book-keeping).
@param LeftOrRight: Specify if it is left (1) or right (-1).
*/
virtual void UpdateFootPosition(deque<FootAbsolutePosition>
&SupportFootAbsolutePositions,
deque<FootAbsolutePosition> &NoneSupportFootAbsolutePositions,
virtual void UpdateFootPosition
(deque<FootAbsolutePosition>
&SupportFootAbsolutePositions,
deque<FootAbsolutePosition> &NoneSupportFootAbsolutePositions,
int CurrentAbsoluteIndex,
int IndexInitial,
double ModulatedSingleSupportTime,
int StepType,int LeftOrRight);
virtual void UpdateFootPosition(deque<FootAbsolutePosition>
&SupportFootAbsolutePositions,
deque<FootAbsolutePosition> &NoneSupportFootAbsolutePositions,
int StartIndex, int k,
double LocalInterpolationStartTime,
double ModulatedSingleSupportTime,
int StepType, int LeftOrRight);
virtual void UpdateFootPosition
(deque<FootAbsolutePosition>
&SupportFootAbsolutePositions,
deque<FootAbsolutePosition> &NoneSupportFootAbsolutePositions,
int StartIndex, int k,
double LocalInterpolationStartTime,
double ModulatedSingleSupportTime,
int StepType, int LeftOrRight);
/*! Initialize internal data structures.
In this specific case, it is in charge of creating the polynomial structures.
In this specific case, it is in charge of
creating the polynomial structures.
*/
virtual void InitializeInternalDataStructures();
/*! Free internal data structures.
In this specific case, it is in charge of freeing the polynomial data structures.
In this specific case, it is in charge of freeing
the polynomial data structures.
*/
virtual void FreeInternalDataStructures();
/*! This method specifies the parameters for each of the polynome used by this
object. In this case, as it is used for the 3rd order polynome. The polynome to
/*! This method specifies the parameters for each of the polynome
used by this
object. In this case, as it is used for the 3rd order polynome.
The polynome to
which those parameters are set is specified with PolynomeIndex.
It assumes an initial position and an initial speed set to zero.
@param[in] AxisReference: Set to which axis the parameters will be applied.
@param[in] AxisReference: Set to which axis the parameters will
be applied.
@param[in] TimeInterval: Set the time base of the polynome.
@param[in] Position: Set the final position of the polynome at TimeInterval.
@param[in] Position: Set the final position of the polynome at
TimeInterval.
*/
int SetParameters(int AxisReference,
double TimeInterval,
double Position);
/*! This method specifies the parameters for each of the polynome used by this
object. In this case, as it is used for the 3rd order polynome. The polynome to
/*! This method specifies the parameters for each of the polynome
used by this
object. In this case, as it is used for the 3rd order polynome.
The polynome to
which those parameters are set is specified with PolynomeIndex.
@param[in] AxisReference: Set to which axis the parameters will be applied.
@param[in] AxisReference: Set to which axis the parameters
will be applied.
@param[in] TimeInterval: Set the time base of the polynome.
@param[in] FinalPosition: Set the final position of the polynome at TimeInterval.
@param[in] InitPosition: Initial position when computing the polynome at t=0.0.
@param[in] FinalPosition: Set the final position of the polynome at
TimeInterval.
@param[in] InitPosition: Initial position when computing the polynome at
t=0.0.
@param[in] InitSpeed: Initial speed when computing the polynome at t=0.0.
*/
int SetParametersWithInitPosInitSpeed(int AxisReference,
double TimeInterval,
double FinalPosition,
double InitPosition,
double InitSpeed,
vector<double> MiddlePos=vector<double>(3,-1));
int SetParametersWithInitPosInitSpeed
(int AxisReference,
double TimeInterval,
double FinalPosition,
double InitPosition,
double InitSpeed,
vector<double> MiddlePos=vector<double>(3,-1));
/*! Overloading -- BSPlines Init Function
This method specifies the parameters for each of the Bsplines used by this object
This method specifies the parameters for each of the Bsplines used by
this object.
@param PolynomeIndex: Set to which axis the parameters will be applied.
@param AxisReference: Index to the axis to be used.
@param TimeInterval: Set the time base of the polynome.
......@@ -169,12 +195,16 @@ namespace PatternGeneratorJRL
double InitPosition);
/*! This method get the parameters for each of the polynome used by this
object. In this case, as it is used for the 3rd order polynome. The polynome to
object. In this case, as it is used for the 3rd order polynome.
The polynome to
which those parameters are set is specified with PolynomeIndex.
@param[in] AxisReference: Set to which axis the parameters will be applied.
@param[in] AxisReference: Set to which axis the parameters
will be applied.
@param[in] TimeInterval: Set the time base of the polynome.
@param[in] FinalPosition: Set the final position of the polynome at TimeInterval.
@param[in] InitPosition: Initial position when computing the polynome at t=0.0.
@param[in] FinalPosition: Set the final position of the polynome
at TimeInterval.
@param[in] InitPosition: Initial position when computing the polynome at
t=0.0.
@param[in] InitSpeed: Initial speed when computing the polynome at t=0.0.
*/
int GetParametersWithInitPosInitSpeed(int AxisReference,
......@@ -209,7 +239,8 @@ namespace PatternGeneratorJRL
/// \param[in] InitSpeed
/// \param[in] InitAcc
int SetParameters(int PolynomeIndex, double TimeInterval,
double FinalPosition, double InitPosition, double InitSpeed, double InitAcc,
double FinalPosition, double InitPosition,
double InitSpeed, double InitAcc,
std::vector<double> MiddlePos=vector<double>(3,-1) );
/*! Fill an absolute foot position structure for a given time. */
......@@ -230,12 +261,13 @@ namespace PatternGeneratorJRL
/*! Compute the absolute foot position from the queue of relative positions.
There is not direct dependency with time.
*/
void ComputingAbsFootPosFromQueueOfRelPos(deque<RelativeFootPosition>
&RelativeFootPositions,
deque<FootAbsolutePosition> &AbsoluteFootPositions);
void ComputingAbsFootPosFromQueueOfRelPos
(deque<RelativeFootPosition>
&RelativeFootPositions,
deque<FootAbsolutePosition> &AbsoluteFootPositions);
/*! Methods to compute a set of positions for the feet according to the discrete time given in parameters
and the phase of walking.
/*! Methods to compute a set of positions for the feet according to the
discrete time given in parameters and the phase of walking.
@{
*/
......
......@@ -630,8 +630,10 @@ InitializeFromRelativeSteps
<< LeftFootTmpFinalPos.dy << " , "
<< LeftFootTmpFinalPos.dz << " ) " );
ODEBUG("RightFootTmpInitPos.stepType="<<RightFootTmpInitPos.stepType);
ODEBUG("RightFootTmpFinalPos.stepType="<<RightFootTmpFinalPos.stepType);
ODEBUG("RightFootTmpInitPos.stepType=" <<
RightFootTmpInitPos.stepType);
ODEBUG("RightFootTmpFinalPos.stepType=" <<
RightFootTmpFinalPos.stepType);
ODEBUG("End of Single support phase");
SetAnInterval(IntervalIndex,m_RightFootTrajectory,
RightFootTmpInitPos,
......@@ -663,7 +665,8 @@ InitializeFromRelativeSteps
/*! At this stage the phase of double support is dealt with */
unsigned int limitk=1;
/*! If we are at the end a second double support phase has to be added. */
/*! If we are at the end a second double support phase
has to be added. */
if (i==RelativeFootPositions.size()-1)
limitk=2;
......
......@@ -47,12 +47,12 @@ namespace PatternGeneratorJRL
foot trajectories.
It acts as a container for two FootTrajectoryGenerationMultiple objects
which handle several polynomials trajectory generation for the right and left
feet.
which handle several polynomials trajectory generation for the right
and left feet.
It provides an initialization of the underlying objects assuming that
some basic informations have been provided: single support time, double support
time, omega, step height.
some basic informations have been provided: single support time,
double support time, omega, step height.
The information used follow the previously defined script like language,
but it could be extended for a clear separation between the two feet.
......@@ -62,13 +62,14 @@ namespace PatternGeneratorJRL
{
public:
/*! \brief The constructor initialize the plugin part, and the data related to the humanoid. */
/*! \brief The constructor initialize the plugin part,
and the data related to the humanoid. */
LeftAndRightFootTrajectoryGenerationMultiple(SimplePluginManager * lSPM,
PRFoot * inFoot);
/*! \brief Copy constructor. */
LeftAndRightFootTrajectoryGenerationMultiple(const
LeftAndRightFootTrajectoryGenerationMultiple &);
LeftAndRightFootTrajectoryGenerationMultiple
(const LeftAndRightFootTrajectoryGenerationMultiple &);
/*! \brief Memory release. */
~LeftAndRightFootTrajectoryGenerationMultiple();
......@@ -79,47 +80,63 @@ namespace PatternGeneratorJRL
*/
virtual void CallMethod(std::string &Method, std::istringstream &strm);
/*! \brief Initialize the analytical feet trajectories from a set of relative step.
It is based on the parameters given through the interface. All the settings are done internally.
/*! \brief Initialize the analytical feet trajectories
from a set of relative step.
It is based on the parameters given through the interface.
All the settings are done internally.
The only output is the set of absolute positions for the support foot.
@param[in] RelativeFootPositions: The set of relative positions for the support foot.
@param[in] RelativeFootPositions: The set of relative positions
for the support foot.
@param[in] LeftFootInitialPosition: The initial position of the left foot.
@param[in] RightFootInitialPosition: the initial position of the right foot.
@param[out] SupportFootAbsoluteFootPositions: The set of absolute foot positions
corresponding to the set of relative foot positions (i.e given step by step
and not every sampled control time).
@param[in] IgnoreFirst: Ignore the first double support phase, should be true at beginning of stepping.
@param[in] Continuity: Should be true if more steps should be added, false to stop stepping.
@param[in] RightFootInitialPosition: the initial position of the right
foot.
@param[out] SupportFootAbsoluteFootPositions: The set of absolute foot
positions
corresponding to the set of relative foot positions
(i.e given step by step and not every sampled control time).
@param[in] IgnoreFirst: Ignore the first double support phase,
should be true at beginning of stepping.
@param[in] Continuity: Should be true if more steps should be added,
false to stop stepping.
*/
void InitializeFromRelativeSteps(deque<RelativeFootPosition>
&RelativeFootPositions,
FootAbsolutePosition &LeftFootInitialPosition,
FootAbsolutePosition &RightFootInitialPosition,
deque<FootAbsolutePosition> &SupportFootAbsoluteFootPositions,
bool IgnoreFirst, bool Continuity);
void InitializeFromRelativeSteps
(deque<RelativeFootPosition>
&RelativeFootPositions,
FootAbsolutePosition &LeftFootInitialPosition,
FootAbsolutePosition &RightFootInitialPosition,
deque<FootAbsolutePosition> &SupportFootAbsoluteFootPositions,
bool IgnoreFirst, bool Continuity);
/*! \brief Method to compute the absolute position of the foot.
@param[in] LeftOrRight: -1 indicates the right foot, 1 indicates the left foot.
@param[in] time: The absolute time to be compared with the absolute reference defining the start
@param[in] LeftOrRight: -1 indicates the right foot,
1 indicates the left foot.
@param[in] time: The absolute time to be compared
with the absolute reference defining the start
of the trajectory.
@param[out] aFootAbsolutePosition: The data structure to be filled with the information
@param[out] aFootAbsolutePosition:
The data structure to be filled with the information
\f$ (x,y,z,\omega, \omega_2, \theta) \f$.
*/
bool ComputeAnAbsoluteFootPosition(int LeftOrRight, double time,
FootAbsolutePosition & aFootAbsolutePosition);
bool ComputeAnAbsoluteFootPosition
(int LeftOrRight, double time,
FootAbsolutePosition & aFootAbsolutePosition);
/*! \brief Method to compute the absolute position of the foot.
@param[in] LeftOrRight: -1 indicates the right foot, 1 indicates the left foot.