From f740fe2336cc81fa31a33b4f5e488e9aaf789231 Mon Sep 17 00:00:00 2001
From: mnaveau <maximilien.naveau@laas.fr>
Date: Mon, 8 Dec 2014 15:25:32 +0100
Subject: [PATCH] use the dynamic filter of kajita on different sampling

---
 .../ZMPVelocityReferencedQP.cpp               |  6 ++--
 .../ZMPVelocityReferencedQP.hh                |  6 ++++
 tests/TestHerdt2010DynamicFilter.cpp          | 31 +++++++++++++------
 3 files changed, 31 insertions(+), 12 deletions(-)

diff --git a/src/ZMPRefTrajectoryGeneration/ZMPVelocityReferencedQP.cpp b/src/ZMPRefTrajectoryGeneration/ZMPVelocityReferencedQP.cpp
index d2108971..5eb23f18 100644
--- a/src/ZMPRefTrajectoryGeneration/ZMPVelocityReferencedQP.cpp
+++ b/src/ZMPRefTrajectoryGeneration/ZMPVelocityReferencedQP.cpp
@@ -79,8 +79,10 @@ Solution_(),OFTG_DF_(0),OFTG_control_(0),dynamicFilter_(0)
   QP_N_ = 16 ;
   m_SamplingPeriod = 0.005 ;
   InterpolationPeriod_ = QP_T_/10;
+  previewDuration_ = QP_N_/2*QP_T_ ;
   NbSampleControl_ = (int)round(QP_T_/m_SamplingPeriod) ;
   NbSampleInterpolation_ = (int)round(QP_T_/InterpolationPeriod_) ;
+  previewSize_ = previewDuration_/NbSampleInterpolation_ ;
   StepPeriod_ = 0.8 ;
   SSPeriod_ = 0.7 ;
   DSPeriod_ = 0.1 ;
@@ -464,7 +466,7 @@ int ZMPVelocityReferencedQP::InitOnLine(deque<ZMPPosition> & FinalZMPTraj_deq,
   FinalCurrentStateOrientPrw_ = OrientPrw_->CurrentTrunkState() ;
 
   dynamicFilter_->init(m_SamplingPeriod,InterpolationPeriod_,
-                       QP_T_, QP_N_*QP_T_/2 - QP_T_/m_SamplingPeriod * InterpolationPeriod_ ,CoMHeight_,InitLeftFootAbsolutePosition,lStartingCOMState);
+                       QP_T_, previewDuration_ - NbSampleControl_*InterpolationPeriod_ ,CoMHeight_,InitLeftFootAbsolutePosition,lStartingCOMState);
   return 0;
 }
 
@@ -572,7 +574,7 @@ void ZMPVelocityReferencedQP::OnLine(double time,
 
     DynamicFilterInterpolation(time);
 
-    unsigned int IndexMax = (int)round(QP_N_*QP_T_*0.5  / InterpolationPeriod_);
+    unsigned int IndexMax = (int)round(previewDuration_  / InterpolationPeriod_);
     ZMPTraj_deq_.resize(IndexMax);
     COMTraj_deq_.resize(IndexMax);
     LeftFootTraj_deq_.resize(IndexMax);
diff --git a/src/ZMPRefTrajectoryGeneration/ZMPVelocityReferencedQP.hh b/src/ZMPRefTrajectoryGeneration/ZMPVelocityReferencedQP.hh
index bfb8484d..de075511 100644
--- a/src/ZMPRefTrajectoryGeneration/ZMPVelocityReferencedQP.hh
+++ b/src/ZMPRefTrajectoryGeneration/ZMPVelocityReferencedQP.hh
@@ -181,6 +181,12 @@ namespace PatternGeneratorJRL
     /// \brief Nb. samplings inside preview window
     int QP_N_;
 
+    /// \brief Size of the preview for filtering
+    double previewDuration_ ;
+
+    /// \brief Duration of the preview for filtering
+    int previewSize_ ;
+
     /// \brief 2D LIPM to simulate the evolution of the robot's CoM.
     LinearizedInvertedPendulum2D LIPM_ ;
     LinearizedInvertedPendulum2D LIPM_subsampled_ ;
diff --git a/tests/TestHerdt2010DynamicFilter.cpp b/tests/TestHerdt2010DynamicFilter.cpp
index 64972c7d..780c2ad1 100644
--- a/tests/TestHerdt2010DynamicFilter.cpp
+++ b/tests/TestHerdt2010DynamicFilter.cpp
@@ -355,9 +355,9 @@ protected:
     aCOMState(0) = m_OneStep.finalCOMPosition.x[0];      aCOMSpeed(0) = m_OneStep.finalCOMPosition.x[1];      aCOMAcc(0) = m_OneStep.finalCOMPosition.x[2];
     aCOMState(1) = m_OneStep.finalCOMPosition.y[0];      aCOMSpeed(1) = m_OneStep.finalCOMPosition.y[1];      aCOMAcc(1) = m_OneStep.finalCOMPosition.y[2];
     aCOMState(2) = m_OneStep.finalCOMPosition.z[0];      aCOMSpeed(2) = m_OneStep.finalCOMPosition.z[1];      aCOMAcc(2) = m_OneStep.finalCOMPosition.z[2];
-    aCOMState(3) = m_OneStep.finalCOMPosition.roll[0];   aCOMSpeed(3) = m_OneStep.finalCOMPosition.roll[1];   aCOMAcc(3) = m_OneStep.finalCOMPosition.roll[2];
-    aCOMState(4) = m_OneStep.finalCOMPosition.pitch[0];  aCOMSpeed(4) = m_OneStep.finalCOMPosition.pitch[1];  aCOMAcc(4) = m_OneStep.finalCOMPosition.pitch[2];
-    aCOMState(5) = m_OneStep.finalCOMPosition.yaw[0];    aCOMSpeed(5) = m_OneStep.finalCOMPosition.yaw[1];    aCOMAcc(5) = m_OneStep.finalCOMPosition.yaw[2];
+    aCOMState(3) = m_OneStep.finalCOMPosition.roll[0]*180/M_PI;   aCOMSpeed(3) = m_OneStep.finalCOMPosition.roll[1]*180/M_PI;   aCOMAcc(3) = m_OneStep.finalCOMPosition.roll[2]*180/M_PI;
+    aCOMState(4) = m_OneStep.finalCOMPosition.pitch[0]*180/M_PI;  aCOMSpeed(4) = m_OneStep.finalCOMPosition.pitch[1]*180/M_PI;  aCOMAcc(4) = m_OneStep.finalCOMPosition.pitch[2]*180/M_PI;
+    aCOMState(5) = m_OneStep.finalCOMPosition.yaw[0]*180/M_PI;    aCOMSpeed(5) = m_OneStep.finalCOMPosition.yaw[1]*180/M_PI;    aCOMAcc(5) = m_OneStep.finalCOMPosition.yaw[2]*180/M_PI;
 
     aLeftFootPosition(0) = m_OneStep.LeftFootPosition.x;      aRightFootPosition(0) = m_OneStep.RightFootPosition.x;
     aLeftFootPosition(1) = m_OneStep.LeftFootPosition.y;      aRightFootPosition(1) = m_OneStep.RightFootPosition.y;
@@ -374,6 +374,9 @@ protected:
                                                                     20,
                                                                     0);
 
+    m_CurrentConfiguration(28)= 0.174532925 ;     // RARM_JOINT6
+    m_CurrentConfiguration(35)= 0.174532925 ;     // LARM_JOINT6
+
     /// \brief Create file .hip .pos .zmp
     /// --------------------
     ofstream aof ;
@@ -572,7 +575,6 @@ protected:
     }
   }
 
-
   void stop(PatternGeneratorInterface &aPGI)
   {
     {
@@ -583,14 +585,22 @@ protected:
   void walkForward(PatternGeneratorInterface &aPGI)
   {
     {
-      istringstream strm2(":setVelReference  0.2 0.0 0.0");
+      istringstream strm2(":setVelReference  0.3 0.0 0.0");
       aPGI.ParseCmd(strm2);
     }
   }
   void walkSidewards(PatternGeneratorInterface &aPGI)
   {
     {
-      istringstream strm2(":setVelReference  0.0 0.2 0.0");
+      istringstream strm2(":setVelReference  0.0 -0.3 0.0");
+      aPGI.ParseCmd(strm2);
+    }
+  }
+
+  void startWalkInDiagonal(PatternGeneratorInterface &aPGI)
+  {
+    {
+      istringstream strm2(":setVelReference  0.2 0.2 0.0");
       aPGI.ParseCmd(strm2);
     }
   }
@@ -633,8 +643,9 @@ protected:
     };
 #define localNbOfEvents 12
     struct localEvent events [localNbOfEvents] =
-    { { 5*200,&TestHerdt2010::walkForward},
-    {10*200,&TestHerdt2010::startTurningRightOnSpot},
+    { { 5*200,&TestHerdt2010::startWalkInDiagonal},
+      {10*200,&TestHerdt2010::walkSidewards},
+      {15*200,&TestHerdt2010::startTurningRightOnSpot},
 /*    {25*200,&TestHerdt2010::startTurningRightOnSpot},
     {35*200,&TestHerdt2010::walkForward},
     {45*200,&TestHerdt2010::startTurningLeftOnSpot},*//*
@@ -645,8 +656,8 @@ protected:
     {95*200,&TestHerdt2010::startTurningRight},*/
 //    {105*200,&TestHerdt2010::stop},
 //    {110*200,&TestHerdt2010::stopOnLineWalking}};
-    {15*200,&TestHerdt2010::stop},
-    {20*200,&TestHerdt2010::stopOnLineWalking}};
+    {20*200,&TestHerdt2010::stop},
+    {25*200,&TestHerdt2010::stopOnLineWalking}};
     // Test when triggering event.
     for(unsigned int i=0;i<localNbOfEvents;i++)
       {
-- 
GitLab