rigid-body-system.hh
Go to the documentation of this file.
1 /*
2  * Copyright 2011
3  *
4  * Andrei Herdt
5  *
6  * JRL, CNRS/AIST, INRIA Grenoble-Rhone-Alpes
7  *
8  * This file is part of walkGenJrl.
9  * walkGenJrl is free software: you can redistribute it and/or modify
10  * it under the terms of the GNU Lesser General Public License as published by
11  * the Free Software Foundation, either version 3 of the License, or
12  * (at your option) any later version.
13  *
14  * walkGenJrl is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17  * GNU General Lesser Public License for more details.
18  * You should have received a copy of the GNU Lesser General Public License
19  * along with walkGenJrl. If not, see <http://www.gnu.org/licenses/>.
20  *
21  */
22 
24 
25 #ifndef _RIGID_BODY_SYSTEM_
26 #define _RIGID_BODY_SYSTEM_
27 
28 #include <FootTrajectoryGeneration/OnLineFootTrajectoryGeneration.h>
29 
33 #include <privatepgtypes.hh>
34 
35 namespace PatternGeneratorJRL {
37  //
38  // Public methods
39  //
40  public:
41  RigidBodySystem(SimplePluginManager *SPM, PinocchioRobot *aPR,
42  SupportFSM *FSM);
43 
45 
47  void initialize();
48 
58  int interpolate(solution_t Result, std::deque<ZMPPosition> &FinalZMPTraj_deq,
59  std::deque<COMState> &FinalCOMTraj_deq,
60  std::deque<FootAbsolutePosition> &FinalLeftFootTraj_deq,
61  std::deque<FootAbsolutePosition> &FinalRightFootTraj_deq);
62 
70  int update(const std::deque<support_state_t> &SupportStates_deq,
71  const std::deque<FootAbsolutePosition> &LeftFootTraj_deq,
72  const std::deque<FootAbsolutePosition> &RightFootTraj_deq);
73 
78  int compute_dyn_cjerk();
79 
92  double time, const solution_t &Result,
93  const std::deque<support_state_t> &SupportStates_deq,
94  const std::deque<double> &PreviewedSupportAngles_deq,
95  std::deque<FootAbsolutePosition> &LeftFootTraj_deq,
96  std::deque<FootAbsolutePosition> &RightFootTraj_deq);
97 
100  linear_dynamics_t const &DynamicsCoPJerk() const { return CoPDynamicsJerk_; }
101  linear_dynamics_t &DynamicsCoPJerk() { return CoPDynamicsJerk_; }
102 
103  inline RigidBody const &CoM() const { return CoM_; };
104  inline void CoM(const RigidBody &CoM) { CoM_ = CoM; };
105 
106  inline RigidBody const &LeftFoot() const { return LeftFoot_; };
107  inline RigidBody &LeftFoot() { return LeftFoot_; };
108  inline void LeftFoot(const RigidBody &LeftFoot) { LeftFoot_ = LeftFoot; };
109 
110  inline RigidBody const &RightFoot() const { return RightFoot_; };
111  inline RigidBody &RightFoot() { return RightFoot_; };
112  inline void RightFoot(const RigidBody &RightFoot) { RightFoot_ = RightFoot; };
113 
114  inline double SamplingPeriodSim() const { return T_; }
115  inline void SamplingPeriodSim(double T) { T_ = T; }
116 
117  inline double SamplingPeriodAct() const { return Ta_; }
118  inline void SamplingPeriodAct(double Ta) { Ta_ = Ta; }
119 
120  inline unsigned NbSamplingsPreviewed() const { return N_; }
121  inline void NbSamplingsPreviewed(unsigned N) { N_ = N; }
122 
123  inline double Mass() const { return mass_; }
124  inline void Mass(double Mass) { mass_ = Mass; }
125 
126  inline double CoMHeight() const { return CoMHeight_; }
127  inline void CoMHeight(double Height) { CoMHeight_ = Height; }
128 
129  inline bool multiBody() const { return multiBody_; }
130  inline void multiBody(bool multiBody) { multiBody_ = multiBody; }
131 
132  std::deque<support_state_t> &SupportTrajectory() {
133  return SupportTrajectory_deq_;
134  }
136 
137  //
138  // Private methods
139  //
140  private:
146  int compute_dyn_cop(unsigned nbSteps);
147 
153  int compute_dyn_cjerk(linear_dynamics_t &Dynamics);
154 
162  int compute_foot_zero_dynamics(
163  const std::deque<support_state_t> &SupportStates_deq,
164  linear_dynamics_t &LeftFootDynamics,
165  linear_dynamics_t &RightFootDynamics);
166 
174  int compute_foot_pol_dynamics(
175  const std::deque<support_state_t> &SupportStates_deq,
176  linear_dynamics_t &LeftFootDynamics,
177  linear_dynamics_t &RightFootDynamics);
178 
186  int compute_foot_cjerk_dynamics(
187  const std::deque<support_state_t> &SupportStates_deq,
188  linear_dynamics_t &LeftFootDynamics,
189  linear_dynamics_t &RightFootDynamics);
190 
192  int initialize_trajectories();
193 
196  int precompute_trajectories(
197  const std::deque<support_state_t> &SupportStates_deq);
198 
206  int compute_sbar(double *Spbar, double *Sabar, double T, double Td);
207 
215  int compute_ubar(double *Upbar, double *Uabar, double T, double Td);
216 
217  //
218  // Private members
219  //
220  private:
222  RigidBody CoM_, LeftFoot_, RightFoot_, LeftWrist_, RightWrist_;
223 
227  linear_dynamics_t CoPDynamicsJerk_;
228 
232  std::deque<rigid_body_state_t> FlyingFootTrajectory_deq_;
233 
235  std::deque<support_state_t> SupportTrajectory_deq_;
236  // \}
237 
239  std::deque<double> GRF_deq_;
240 
242  double mass_;
243 
245  double CoMHeight_;
246 
248  double T_;
249 
252  double Tr_;
253 
255  double Ta_;
256 
258  unsigned int N_;
259 
261  bool multiBody_;
262 
264  OnLineFootTrajectoryGeneration *OFTG_;
265 
267  SupportFSM *FSM_;
268 
269  PinocchioRobot *PR_;
270 };
271 } // namespace PatternGeneratorJRL
272 #endif /* _RIGID_BODY_SYSTEM_ */
PatternGeneratorJRL::SupportFSM
Finite state machine to determine the support parameters.
Definition: SupportFSM.hh:35
PatternGeneratorJRL::RigidBodySystem::SamplingPeriodSim
void SamplingPeriodSim(double T)
Definition: rigid-body-system.hh:115
PatternGeneratorJRL::linear_dynamics_s
Definition: rigid-body.hh:59
PatternGeneratorJRL::RigidBodySystem::DynamicsCoPJerk
const linear_dynamics_t & DynamicsCoPJerk() const
Definition: rigid-body-system.hh:100
PatternGeneratorJRL::RigidBodySystem::RightFoot
const RigidBody & RightFoot() const
Definition: rigid-body-system.hh:110
PatternGeneratorJRL::RigidBodySystem::SamplingPeriodAct
double SamplingPeriodAct() const
Definition: rigid-body-system.hh:117
PatternGeneratorJRL::RigidBodySystem::initialize
void initialize()
Initialize.
Definition: rigid-body-system.cpp:50
PatternGeneratorJRL::RigidBodySystem::CoM
const RigidBody & CoM() const
Definition: rigid-body-system.hh:103
PatternGeneratorJRL::RigidBodySystem::Mass
void Mass(double Mass)
Definition: rigid-body-system.hh:124
SupportFSM.hh
PatternGeneratorJRL::RigidBodySystem::CoMHeight
double CoMHeight() const
Definition: rigid-body-system.hh:126
PatternGeneratorJRL::RigidBodySystem::CoMHeight
void CoMHeight(double Height)
Definition: rigid-body-system.hh:127
PatternGeneratorJRL::RigidBodySystem::CoM
void CoM(const RigidBody &CoM)
Definition: rigid-body-system.hh:104
PatternGeneratorJRL::RigidBodySystem::~RigidBodySystem
~RigidBodySystem()
Definition: rigid-body-system.cpp:46
PatternGeneratorJRL::RigidBodySystem::SamplingPeriodSim
double SamplingPeriodSim() const
Definition: rigid-body-system.hh:114
PatternGeneratorJRL::RigidBody
Definition: rigid-body.hh:83
PatternGeneratorJRL::RigidBodySystem::generate_trajectories
int generate_trajectories(double time, const solution_t &Result, const std::deque< support_state_t > &SupportStates_deq, const std::deque< double > &PreviewedSupportAngles_deq, std::deque< FootAbsolutePosition > &LeftFootTraj_deq, std::deque< FootAbsolutePosition > &RightFootTraj_deq)
Generate final trajectories.
Definition: rigid-body-system.cpp:731
PatternGeneratorJRL::RigidBodySystem::DynamicsCoPJerk
linear_dynamics_t & DynamicsCoPJerk()
Definition: rigid-body-system.hh:101
PatternGeneratorJRL::RigidBodySystem::interpolate
int interpolate(solution_t Result, std::deque< ZMPPosition > &FinalZMPTraj_deq, std::deque< COMState > &FinalCOMTraj_deq, std::deque< FootAbsolutePosition > &FinalLeftFootTraj_deq, std::deque< FootAbsolutePosition > &FinalRightFootTraj_deq)
Interpolate.
PatternGeneratorJRL::RigidBodySystem::RigidBodySystem
RigidBodySystem(SimplePluginManager *SPM, PinocchioRobot *aPR, SupportFSM *FSM)
Definition: rigid-body-system.cpp:30
PatternGeneratorJRL::RigidBodySystem::multiBody
void multiBody(bool multiBody)
Definition: rigid-body-system.hh:130
PatternGeneratorJRL::RigidBodySystem::SamplingPeriodAct
void SamplingPeriodAct(double Ta)
Definition: rigid-body-system.hh:118
PatternGeneratorJRL::RigidBodySystem::LeftFoot
RigidBody & LeftFoot()
Definition: rigid-body-system.hh:107
PatternGeneratorJRL::RigidBodySystem::LeftFoot
void LeftFoot(const RigidBody &LeftFoot)
Definition: rigid-body-system.hh:108
PatternGeneratorJRL::RigidBodySystem
Definition: rigid-body-system.hh:36
PatternGeneratorJRL::PinocchioRobot
Definition: pinocchiorobot.hh:60
rigid-body.hh
PatternGeneratorJRL::RigidBodySystem::update
int update(const std::deque< support_state_t > &SupportStates_deq, const std::deque< FootAbsolutePosition > &LeftFootTraj_deq, const std::deque< FootAbsolutePosition > &RightFootTraj_deq)
Update feet matrices.
Definition: rigid-body-system.cpp:218
PatternGeneratorJRL::RigidBodySystem::RightFoot
void RightFoot(const RigidBody &RightFoot)
Definition: rigid-body-system.hh:112
pinocchiorobot.hh
PatternGeneratorJRL
\doc Simulate a rigid body
Definition: patterngeneratorinterface.hh:41
PatternGeneratorJRL::RigidBodySystem::Mass
double Mass() const
Definition: rigid-body-system.hh:123
PatternGeneratorJRL::RigidBodySystem::SupportTrajectory
std::deque< support_state_t > & SupportTrajectory()
Definition: rigid-body-system.hh:132
PatternGeneratorJRL::RigidBodySystem::multiBody
bool multiBody() const
Definition: rigid-body-system.hh:129
PatternGeneratorJRL::RigidBodySystem::NbSamplingsPreviewed
unsigned NbSamplingsPreviewed() const
Definition: rigid-body-system.hh:120
PatternGeneratorJRL::RigidBodySystem::RightFoot
RigidBody & RightFoot()
Definition: rigid-body-system.hh:111
PatternGeneratorJRL::RigidBodySystem::NbSamplingsPreviewed
void NbSamplingsPreviewed(unsigned N)
Definition: rigid-body-system.hh:121
PatternGeneratorJRL::RigidBodySystem::LeftFoot
const RigidBody & LeftFoot() const
Definition: rigid-body-system.hh:106
PatternGeneratorJRL::RigidBodySystem::compute_dyn_cjerk
int compute_dyn_cjerk()
Initialize dynamics of the body center Suppose a piecewise constant jerk.
Definition: rigid-body-system.cpp:379