From 7bcf3578137a29282e3a88aa9a39d620bdbb3d80 Mon Sep 17 00:00:00 2001 From: mnaveau <maximilien.naveau@laas.fr> Date: Mon, 24 Mar 2014 19:31:41 +0100 Subject: [PATCH] Usage of the interpolation function --- .../ZMPVelocityReferencedQP.cpp | 73 ++++--------------- .../ZMPVelocityReferencedQP.hh | 6 +- 2 files changed, 19 insertions(+), 60 deletions(-) diff --git a/src/ZMPRefTrajectoryGeneration/ZMPVelocityReferencedQP.cpp b/src/ZMPRefTrajectoryGeneration/ZMPVelocityReferencedQP.cpp index 24bab1ca..f3924593 100644 --- a/src/ZMPRefTrajectoryGeneration/ZMPVelocityReferencedQP.cpp +++ b/src/ZMPRefTrajectoryGeneration/ZMPVelocityReferencedQP.cpp @@ -322,7 +322,6 @@ ZMPVelocityReferencedQP::InitOnLine(deque<ZMPPosition> & FinalZMPTraj_deq, COMState & lStartingCOMState, MAL_S3_VECTOR_TYPE(double) & lStartingZMPPosition) { - //m_SamplingPeriod = 0.05 ; UpperTimeLimitToUpdate_ = 0.0; FootAbsolutePosition CurrentLeftFootAbsPos, CurrentRightFootAbsPos; @@ -436,7 +435,6 @@ ZMPVelocityReferencedQP::OnLine(double time, deque<FootAbsolutePosition> & FinalRightFootTraj_deq) { - //m_SamplingPeriod = 0.05 ; // If on-line mode not activated we go out. if (!m_OnLineMode) { @@ -523,66 +521,26 @@ ZMPVelocityReferencedQP::OnLine(double time, LeftFootTraj_deq_ = FinalLeftFootTraj_deq ; RightFootTraj_deq_ = FinalRightFootTraj_deq ; -// // INTERPOLATE THE COMPUTED FOOT POSITIONS: -// // ---------------------------------------- -// OFTG_->interpolate_feet_positions(time + i * QP_T_, -// solution.SupportStates_deq, solution, -// solution.SupportOrientations_deq, -// m_LeftFootTraj_deq, m_RightFootTraj_deq); - - for ( int i = 0 ; i < QP_N_ ; i++ ) - { - if(solution_.SupportStates_deq.size() && solution_.SupportStates_deq[i].NbStepsLeft == 0) - { - double jx = (FinalLeftFootTraj_deq[0].x + FinalRightFootTraj_deq[0].x)/2 - FinalCOMTraj_deq[0].x[0]; - double jy = (FinalLeftFootTraj_deq[0].y + FinalRightFootTraj_deq[0].y)/2 - FinalCOMTraj_deq[0].y[0]; - if(fabs(jx) < 1e-3 && fabs(jy) < 1e-3) { Running_ = false; } - const double tf = 0.75; - jx = 6/(tf*tf*tf)*(jx - tf*FinalCOMTraj_deq[0].x[1] - (tf*tf/2)*FinalCOMTraj_deq[0].x[2]); - jy = 6/(tf*tf*tf)*(jy - tf*FinalCOMTraj_deq[0].y[1] - (tf*tf/2)*FinalCOMTraj_deq[0].y[2]); - if(i == 0) - { - CoM2_.setState(CoM_()); - } - CoM2_.Interpolation( COMTraj_deq_, ZMPTraj_deq_, CurrentIndex_ + i * NumberOfSample_, - jx, jy); - CoM2_.OneIteration( jx, jy ); - } - else - { - Running_ = true; - if(i == 0) - { - CoM2_.setState(CoM_()); - } - CoM2_.Interpolation( COMTraj_deq_, ZMPTraj_deq_, CurrentIndex_ + i * NumberOfSample_, - solution_.Solution_vec[i], solution_.Solution_vec[QP_N_+i] ); - CoM2_.OneIteration( solution_.Solution_vec[i], solution_.Solution_vec[QP_N_+i] ); - } - } - // INTERPOLATE TRUNK ORIENTATION AND THE COMPUTED FOOT POSITIONS : // --------------------------------------------------------------- - OrientPrw_->interpolate_trunk_orientation( time, CurrentIndex_, - m_SamplingPeriod, solution_.SupportStates_deq, - COMTraj_deq_ ); + CoM2_.setState(CoM_()); + Interpolation(ZMPTraj_deq_, COMTraj_deq_ , + LeftFootTraj_deq_, RightFootTraj_deq_, + &solution_, &CoM2_, OrientPrw_, OFTG_, + CurrentIndex_, time, 0 ) ; COMState aCoMState = OrientPrw_->CurrentTrunkState(); - OFTG_->interpolate_feet_positions(time, - solution_.SupportStates_deq, solution_, - solution_.SupportOrientations_deq, - LeftFootTraj_deq_, RightFootTraj_deq_); solution_.SupportStates_deq.pop_front(); + for ( int i = 1 ; i < QP_N_ ; i++ ){ - OrientPrw_->interpolate_trunk_orientation( time + i * QP_T_, CurrentIndex_ + i * NumberOfSample_, - m_SamplingPeriod, solution_.SupportStates_deq, - COMTraj_deq_ ); - OFTG_->interpolate_feet_positions(time + i * QP_T_, - solution_.SupportStates_deq, solution_, - solution_.SupportOrientations_deq, - LeftFootTraj_deq_, RightFootTraj_deq_); - solution_.SupportStates_deq.pop_front(); + Interpolation(ZMPTraj_deq_, COMTraj_deq_ , + LeftFootTraj_deq_, RightFootTraj_deq_, + &solution_, &CoM2_, OrientPrw_, OFTG_, + CurrentIndex_, time, i ) ; + solution_.SupportStates_deq.pop_front(); } + // RECOPIE DES BUFFER + // ----------------- FinalZMPTraj_deq.resize( QP_T_/ControlPeriod_ + CurrentIndex_ ); FinalLeftFootTraj_deq.resize( QP_T_/ControlPeriod_ + CurrentIndex_ ); FinalRightFootTraj_deq.resize( QP_T_/ControlPeriod_ + CurrentIndex_ ); @@ -592,6 +550,7 @@ ZMPVelocityReferencedQP::OnLine(double time, FinalLeftFootTraj_deq[i] = LeftFootTraj_deq_[i] ; FinalRightFootTraj_deq[i] = RightFootTraj_deq_[i] ; } + // DYNAMIC FILTER // -------------- DynamicFilter( ZMPTraj_deq_, COMTraj_deq_, LeftFootTraj_deq_, RightFootTraj_deq_, CurrentIndex_, time ); @@ -907,7 +866,7 @@ void ZMPVelocityReferencedQP::Interpolation(std::deque<ZMPPosition> & ZMPPositio OnLineFootTrajectoryGeneration * OFTG, unsigned currentIndex, double time, - unsigned IterationNumber + int IterationNumber ) { if(Solution->SupportStates_deq.size() && Solution->SupportStates_deq[0].NbStepsLeft == 0) @@ -932,7 +891,7 @@ void ZMPVelocityReferencedQP::Interpolation(std::deque<ZMPPosition> & ZMPPositio // INTERPOLATE TRUNK ORIENTATION: // ------------------------------ - OrientPrw->interpolate_trunk_orientation( time + IterationNumber * QP_T_, currentIndex, + OrientPrw->interpolate_trunk_orientation( time + IterationNumber * QP_T_, currentIndex + IterationNumber * NumberOfSample_, m_SamplingPeriod, Solution->SupportStates_deq, COMTraj_deq_ ); diff --git a/src/ZMPRefTrajectoryGeneration/ZMPVelocityReferencedQP.hh b/src/ZMPRefTrajectoryGeneration/ZMPVelocityReferencedQP.hh index 53ad79c5..ca5c33be 100644 --- a/src/ZMPRefTrajectoryGeneration/ZMPVelocityReferencedQP.hh +++ b/src/ZMPRefTrajectoryGeneration/ZMPVelocityReferencedQP.hh @@ -194,8 +194,8 @@ namespace PatternGeneratorJRL int QP_N_; /// \brief 2D LIPM to simulate the evolution of the robot's CoM. - LinearizedInvertedPendulum2D CoM_ ; - LinearizedInvertedPendulum2D CoM2_ ; + LinearizedInvertedPendulum2D LIPM_control_ ; + LinearizedInvertedPendulum2D LIPM_ ; /// \brief Simplified robot model RigidBodySystem * Robot_ ; @@ -353,7 +353,7 @@ namespace PatternGeneratorJRL OnLineFootTrajectoryGeneration * OFTG, unsigned currentIndex, double time, - unsigned IterationNumber + int IterationNumber ); }; } -- GitLab