AnalyticalZMPCOGTrajectory.hh
Go to the documentation of this file.
1 /*
2  * Copyright 2008, 2009, 2010,
3  *
4  * Alireza Nakhaei
5  * Olivier Stasse
6  *
7  * JRL, CNRS/AIST
8  *
9  * This file is part of walkGenJrl.
10  * walkGenJrl is free software: you can redistribute it and/or modify
11  * it under the terms of the GNU Lesser General Public License as published by
12  * the Free Software Foundation, either version 3 of the License, or
13  * (at your option) any later version.
14  *
15  * walkGenJrl is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18  * GNU General Lesser Public License for more details.
19  * You should have received a copy of the GNU Lesser General Public License
20  * along with walkGenJrl. If not, see <http://www.gnu.org/licenses/>.
21  *
22  * Research carried out within the scope of the
23  * Joint Japanese-French Robotics Laboratory (JRL)
24  */
28 #ifndef _ANALYTICAL_COG_H_
29 #define _ANALYTICAL_COG_H_
30 
31 #include <Mathematics/Polynome.hh>
32 #include <iostream>
33 #include <vector>
34 
35 namespace PatternGeneratorJRL {
36 
42  public:
44  AnalyticalZMPCOGTrajectory(int lNbOfIntervals = 0);
45 
48 
56  bool ComputeCOM(double t, double &r);
57 
65  bool ComputeCOMSpeed(double t, double &r);
66 
77  bool ComputeCOM(double t, double &r, int i);
78 
89  bool ComputeCOMSpeed(double t, double &r, int i);
90 
101  bool ComputeCOMAcceleration(double t, double &r, int j);
102 
110  bool ComputeZMP(double t, double &r);
111 
119  bool ComputeZMPSpeed(double t, double &r);
120 
129  bool ComputeZMP(double t, double &r, int i);
130 
135  void SetNumberOfIntervals(unsigned int lNbOfIntervals);
136 
139  void SetCoGHyperbolicCoefficients(std::vector<double> &lV,
140  std::vector<double> &lW);
141 
143  void SetStartingTimeIntervalsAndHeightVariation(std::vector<double> &lDeltaTj,
144  std::vector<double> &lomegaj);
145 
150  void SetPolynomialDegrees(std::vector<unsigned int> &lPolynomialDegree);
151 
154  void GetPolynomialDegrees(std::vector<unsigned int> &lPolynomialDegree) const;
155 
158  void GetNumberOfIntervals(unsigned int &lNbOfIntervals) const;
159 
162  void GetHyperbolicCoefficients(std::vector<double> &lV,
163  std::vector<double> &lW) const;
164 
166  void GetStartingPointAndHeightVariation(std::vector<double> &lTj,
167  std::vector<double> &lomegaj);
168 
174  bool GetFromListOfCOGPolynomials(unsigned int j, Polynome *&aPoly) const;
175 
180  bool GetFromListOfZMPPolynomials(unsigned int j, Polynome *&aPoly) const;
181 
188  std::vector<double> &lCOMZ, std::vector<double> &lZMPZ);
189 
196  unsigned int IntervalIndex, double &lCOMZ, double &lZMPZ);
197 
201  void Building3rdOrderPolynomial(unsigned int anIntervalj, double pjTjm1,
202  double pjTj);
203 
208  double FluctuationMaximal();
209 
210  friend std::ostream &operator<<(std::ostream &os,
211  const AnalyticalZMPCOGTrajectory &obj);
212 
215 
217  void SetAbsoluteTimeReference(double anAbsoluteTimeReference) {
218  m_AbsoluteTimeReference = anAbsoluteTimeReference;
219  }
220 
222  bool GetIntervalIndexFromTime(double t, unsigned int &j);
223 
226  bool GetIntervalIndexFromTime(double t, unsigned int &j,
227  unsigned int &prev_j);
228 
229  protected:
232 
235  std::vector<double> m_V;
236 
239  std::vector<double> m_W;
240 
242  std::vector<double> m_DeltaTj;
243 
246  std::vector<double> m_omegaj;
247 
249  std::vector<double> m_RefTime;
250 
252  std::vector<unsigned int> m_PolynomialDegree;
253 
255  std::vector<Polynome *> m_ListOfCOGPolynomials;
256 
258  std::vector<Polynome *> m_ListOfZMPPolynomials;
259 
261  void FreePolynomes();
262 
265 
266  /* \brien Sensitivity to numerical noise. */
268 };
269 
270 std::ostream &operator<<(std::ostream &os,
271  const AnalyticalZMPCOGTrajectory &obj);
272 } // namespace PatternGeneratorJRL
273 #endif /* _ANALYTICAL_COG_H_ */
PatternGeneratorJRL::Polynome
Definition: Polynome.hh:42
PatternGeneratorJRL::AnalyticalZMPCOGTrajectory::m_RefTime
std::vector< double > m_RefTime
Definition: AnalyticalZMPCOGTrajectory.hh:249
PatternGeneratorJRL::AnalyticalZMPCOGTrajectory::SetStartingTimeIntervalsAndHeightVariation
void SetStartingTimeIntervalsAndHeightVariation(std::vector< double > &lDeltaTj, std::vector< double > &lomegaj)
Set the starting point and the height variation.
Definition: AnalyticalZMPCOGTrajectory.cpp:265
PatternGeneratorJRL::AnalyticalZMPCOGTrajectory::ComputeCOM
bool ComputeCOM(double t, double &r)
Definition: AnalyticalZMPCOGTrajectory.cpp:77
PatternGeneratorJRL::AnalyticalZMPCOGTrajectory::m_W
std::vector< double > m_W
Definition: AnalyticalZMPCOGTrajectory.hh:239
PatternGeneratorJRL::AnalyticalZMPCOGTrajectory::TransfertOneIntervalCoefficientsFromCOGTrajectoryToZMPOne
void TransfertOneIntervalCoefficientsFromCOGTrajectoryToZMPOne(unsigned int IntervalIndex, double &lCOMZ, double &lZMPZ)
Transfert the coefficients from the COG trajectory to the ZMP.
Definition: AnalyticalZMPCOGTrajectory.cpp:346
PatternGeneratorJRL::AnalyticalZMPCOGTrajectory::m_AbsoluteTimeReference
double m_AbsoluteTimeReference
Definition: AnalyticalZMPCOGTrajectory.hh:264
PatternGeneratorJRL::AnalyticalZMPCOGTrajectory::m_DeltaTj
std::vector< double > m_DeltaTj
Definition: AnalyticalZMPCOGTrajectory.hh:242
PatternGeneratorJRL::AnalyticalZMPCOGTrajectory::GetAbsoluteTimeReference
double GetAbsoluteTimeReference() const
Absolute Time reference of this trajectory.
Definition: AnalyticalZMPCOGTrajectory.hh:214
PatternGeneratorJRL::AnalyticalZMPCOGTrajectory::GetFromListOfZMPPolynomials
bool GetFromListOfZMPPolynomials(unsigned int j, Polynome *&aPoly) const
Definition: AnalyticalZMPCOGTrajectory.cpp:334
PatternGeneratorJRL::AnalyticalZMPCOGTrajectory::SetNumberOfIntervals
void SetNumberOfIntervals(unsigned int lNbOfIntervals)
Set the number of Intervals for this trajectory.
Definition: AnalyticalZMPCOGTrajectory.cpp:58
PatternGeneratorJRL::AnalyticalZMPCOGTrajectory::m_PolynomialDegree
std::vector< unsigned int > m_PolynomialDegree
Definition: AnalyticalZMPCOGTrajectory.hh:252
PatternGeneratorJRL::AnalyticalZMPCOGTrajectory::GetNumberOfIntervals
void GetNumberOfIntervals(unsigned int &lNbOfIntervals) const
Set the number of Intervals for this trajectory.
Definition: AnalyticalZMPCOGTrajectory.cpp:306
PatternGeneratorJRL::AnalyticalZMPCOGTrajectory::m_ListOfCOGPolynomials
std::vector< Polynome * > m_ListOfCOGPolynomials
Definition: AnalyticalZMPCOGTrajectory.hh:255
PatternGeneratorJRL::AnalyticalZMPCOGTrajectory::GetPolynomialDegrees
void GetPolynomialDegrees(std::vector< unsigned int > &lPolynomialDegree) const
Get the degree of each polynomials for the CoG.
Definition: AnalyticalZMPCOGTrajectory.cpp:301
PatternGeneratorJRL::operator<<
std::ostream & operator<<(std::ostream &os, const COMPosition_s &aCp)
Definition: pgtypes.hh:62
PatternGeneratorJRL::AnalyticalZMPCOGTrajectory::AnalyticalZMPCOGTrajectory
AnalyticalZMPCOGTrajectory(int lNbOfIntervals=0)
Definition: AnalyticalZMPCOGTrajectory.cpp:37
PatternGeneratorJRL::AnalyticalZMPCOGTrajectory::SetCoGHyperbolicCoefficients
void SetCoGHyperbolicCoefficients(std::vector< double > &lV, std::vector< double > &lW)
Set the coefficients for the sinuse and cosinues function.
Definition: AnalyticalZMPCOGTrajectory.cpp:259
PatternGeneratorJRL::AnalyticalZMPCOGTrajectory::ComputeZMP
bool ComputeZMP(double t, double &r)
Definition: AnalyticalZMPCOGTrajectory.cpp:183
PatternGeneratorJRL::AnalyticalZMPCOGTrajectory::operator<<
friend std::ostream & operator<<(std::ostream &os, const AnalyticalZMPCOGTrajectory &obj)
PatternGeneratorJRL::AnalyticalZMPCOGTrajectory::m_V
std::vector< double > m_V
Definition: AnalyticalZMPCOGTrajectory.hh:235
PatternGeneratorJRL::AnalyticalZMPCOGTrajectory::GetStartingPointAndHeightVariation
void GetStartingPointAndHeightVariation(std::vector< double > &lTj, std::vector< double > &lomegaj)
Get the starting point and the height variation.
Definition: AnalyticalZMPCOGTrajectory.cpp:317
PatternGeneratorJRL::AnalyticalZMPCOGTrajectory::m_omegaj
std::vector< double > m_omegaj
Definition: AnalyticalZMPCOGTrajectory.hh:246
PatternGeneratorJRL::AnalyticalZMPCOGTrajectory::m_ListOfZMPPolynomials
std::vector< Polynome * > m_ListOfZMPPolynomials
Definition: AnalyticalZMPCOGTrajectory.hh:258
PatternGeneratorJRL::AnalyticalZMPCOGTrajectory::ComputeZMPSpeed
bool ComputeZMPSpeed(double t, double &r)
Definition: AnalyticalZMPCOGTrajectory.cpp:216
PatternGeneratorJRL::AnalyticalZMPCOGTrajectory::TransfertCoefficientsFromCOGTrajectoryToZMPOne
void TransfertCoefficientsFromCOGTrajectoryToZMPOne(std::vector< double > &lCOMZ, std::vector< double > &lZMPZ)
Transfert the coefficients from the COG trajectory to the ZMP for all intervals.
Definition: AnalyticalZMPCOGTrajectory.cpp:369
PatternGeneratorJRL::AnalyticalZMPCOGTrajectory::SetPolynomialDegrees
void SetPolynomialDegrees(std::vector< unsigned int > &lPolynomialDegree)
Set the degree of each polynomials for the CoG Remark: the size of the vector of degrees should match...
Definition: AnalyticalZMPCOGTrajectory.cpp:284
PatternGeneratorJRL::AnalyticalZMPCOGTrajectory::m_NbOfIntervals
int m_NbOfIntervals
Definition: AnalyticalZMPCOGTrajectory.hh:231
PatternGeneratorJRL::AnalyticalZMPCOGTrajectory::SetAbsoluteTimeReference
void SetAbsoluteTimeReference(double anAbsoluteTimeReference)
Set Absolute time reference of this trajectory.
Definition: AnalyticalZMPCOGTrajectory.hh:217
Polynome.hh
PatternGeneratorJRL::AnalyticalZMPCOGTrajectory::m_Sensitivity
double m_Sensitivity
Definition: AnalyticalZMPCOGTrajectory.hh:267
PatternGeneratorJRL::AnalyticalZMPCOGTrajectory::GetHyperbolicCoefficients
void GetHyperbolicCoefficients(std::vector< double > &lV, std::vector< double > &lW) const
Get the coefficients for the sinuse and cosinues function.
Definition: AnalyticalZMPCOGTrajectory.cpp:311
PatternGeneratorJRL::AnalyticalZMPCOGTrajectory::GetFromListOfCOGPolynomials
bool GetFromListOfCOGPolynomials(unsigned int j, Polynome *&aPoly) const
Get the polynomial at interval j for the CoG Remark: The call to this function assume that the method...
Definition: AnalyticalZMPCOGTrajectory.cpp:323
PatternGeneratorJRL::AnalyticalZMPCOGTrajectory::ComputeCOMSpeed
bool ComputeCOMSpeed(double t, double &r)
Definition: AnalyticalZMPCOGTrajectory.cpp:115
PatternGeneratorJRL
\doc Simulate a rigid body
Definition: patterngeneratorinterface.hh:41
PatternGeneratorJRL::AnalyticalZMPCOGTrajectory::ComputeCOMAcceleration
bool ComputeCOMAcceleration(double t, double &r, int j)
Definition: AnalyticalZMPCOGTrajectory.cpp:171
PatternGeneratorJRL::AnalyticalZMPCOGTrajectory
Definition: AnalyticalZMPCOGTrajectory.hh:41
PatternGeneratorJRL::AnalyticalZMPCOGTrajectory::FreePolynomes
void FreePolynomes()
Definition: AnalyticalZMPCOGTrajectory.cpp:45
PatternGeneratorJRL::AnalyticalZMPCOGTrajectory::~AnalyticalZMPCOGTrajectory
~AnalyticalZMPCOGTrajectory()
Definition: AnalyticalZMPCOGTrajectory.cpp:43
PatternGeneratorJRL::AnalyticalZMPCOGTrajectory::GetIntervalIndexFromTime
bool GetIntervalIndexFromTime(double t, unsigned int &j)
Get the index of the interval according to the time.
Definition: AnalyticalZMPCOGTrajectory.cpp:420
PatternGeneratorJRL::AnalyticalZMPCOGTrajectory::Building3rdOrderPolynomial
void Building3rdOrderPolynomial(unsigned int anIntervalj, double pjTjm1, double pjTj)
Definition: AnalyticalZMPCOGTrajectory.cpp:379
PatternGeneratorJRL::AnalyticalZMPCOGTrajectory::FluctuationMaximal
double FluctuationMaximal()
Returns the maximal fluctuation for the first segment of this trajectory.
Definition: AnalyticalZMPCOGTrajectory.cpp:408