3030public class SmoothCMPBasedICPPlanner extends AbstractICPPlanner
3131{
3232 private static final boolean VISUALIZE = true ;
33+
34+ private static final double ZERO_TIME = 0.0 ;
3335
3436 private final ReferenceCoPTrajectoryGenerator referenceCoPGenerator ;
3537 private final ReferenceCMPTrajectoryGenerator referenceCMPGenerator ;
@@ -243,19 +245,19 @@ protected void updateTransferPlan(boolean computeUpcomingFootstep)
243245 referenceCMPGenerator .setNumberOfRegisteredSteps (referenceCoPGenerator .getNumberOfFootstepsRegistered ());
244246 referenceICPGenerator .setNumberOfRegisteredSteps (referenceCoPGenerator .getNumberOfFootstepsRegistered ());
245247
246- referenceCoPGenerator .initializeForTransfer (this . initialTime . getDoubleValue () );
248+ referenceCoPGenerator .initializeForTransfer (ZERO_TIME );
247249 referenceICPGenerator .initializeForTransferFromCoPs (referenceCoPGenerator .getTransferCoPTrajectories (), referenceCoPGenerator .getSwingCoPTrajectories ());
248250
249251 referenceICPGenerator .adjustDesiredTrajectoriesForInitialSmoothing ();
250252
251253 angularMomentumGenerator .addFootstepCoPsToPlan (referenceCoPGenerator .getWaypoints (), referenceCoPGenerator .getNumberOfFootstepsRegistered ()); //TODO: update CoP waypoints after adjustment
252254 angularMomentumGenerator .computeReferenceAngularMomentumStartingFromDoubleSupport (isInitialTransfer .getBooleanValue ());
253- angularMomentumGenerator .initializeForTransfer (this . initialTime . getDoubleValue () );
255+ angularMomentumGenerator .initializeForTransfer (ZERO_TIME );
254256
255- referenceCMPGenerator .initializeForTransfer (this . initialTime . getDoubleValue () , referenceCoPGenerator .getTransferCoPTrajectories (),
257+ referenceCMPGenerator .initializeForTransfer (ZERO_TIME , referenceCoPGenerator .getTransferCoPTrajectories (),
256258 referenceCoPGenerator .getSwingCoPTrajectories (), angularMomentumGenerator .getTransferAngularMomentumTrajectories (),
257259 angularMomentumGenerator .getSwingAngularMomentumTrajectories ());
258- referenceICPGenerator .initializeForTransfer (this . initialTime . getDoubleValue () , referenceCMPGenerator .getTransferCMPTrajectories (),
260+ referenceICPGenerator .initializeForTransfer (ZERO_TIME , referenceCMPGenerator .getTransferCMPTrajectories (),
259261 referenceCMPGenerator .getSwingCMPTrajectories ());
260262
261263 referenceICPGenerator .initializeCenterOfMass ();
@@ -274,17 +276,17 @@ protected void updateSingleSupportPlan(boolean computeUpcomingFootstep)
274276 referenceCMPGenerator .setNumberOfRegisteredSteps (referenceCoPGenerator .getNumberOfFootstepsRegistered ());
275277 referenceICPGenerator .setNumberOfRegisteredSteps (referenceCoPGenerator .getNumberOfFootstepsRegistered ());
276278
277- referenceCoPGenerator .initializeForSwing (this . initialTime . getDoubleValue () );
279+ referenceCoPGenerator .initializeForSwing (ZERO_TIME );
278280 referenceICPGenerator .initializeForSwingFromCoPs (referenceCoPGenerator .getTransferCoPTrajectories (), referenceCoPGenerator .getSwingCoPTrajectories ());
279281
280282 angularMomentumGenerator .addFootstepCoPsToPlan (referenceCoPGenerator .getWaypoints (), referenceCoPGenerator .getNumberOfFootstepsRegistered ()); //TODO: update CoP waypoints after adjustment
281283 angularMomentumGenerator .computeReferenceAngularMomentumStartingFromSingleSupport ();
282- angularMomentumGenerator .initializeForSwing (this . initialTime . getDoubleValue () );
284+ angularMomentumGenerator .initializeForSwing (ZERO_TIME );
283285
284- referenceCMPGenerator .initializeForSwing (this . initialTime . getDoubleValue () , referenceCoPGenerator .getTransferCoPTrajectories (),
286+ referenceCMPGenerator .initializeForSwing (ZERO_TIME , referenceCoPGenerator .getTransferCoPTrajectories (),
285287 referenceCoPGenerator .getSwingCoPTrajectories (), angularMomentumGenerator .getTransferAngularMomentumTrajectories (),
286288 angularMomentumGenerator .getSwingAngularMomentumTrajectories ());
287- referenceICPGenerator .initializeForSwing (this . initialTime . getDoubleValue () , referenceCMPGenerator .getTransferCMPTrajectories (),
289+ referenceICPGenerator .initializeForSwing (ZERO_TIME , referenceCMPGenerator .getTransferCMPTrajectories (),
288290 referenceCMPGenerator .getSwingCMPTrajectories ());
289291
290292 referenceICPGenerator .initializeCenterOfMass ();
@@ -295,13 +297,16 @@ protected void updateSingleSupportPlan(boolean computeUpcomingFootstep)
295297 public void compute (double time )
296298 {
297299 timeInCurrentState .set (time - initialTime .getDoubleValue ());
300+ if (timeInCurrentState .getDoubleValue () > referenceCoPGenerator .getCurrentStateFinalTime ())
301+ timeInCurrentState .set (referenceCoPGenerator .getCurrentStateFinalTime ());
298302 timeInCurrentStateRemaining .set (getCurrentStateDuration () - timeInCurrentState .getDoubleValue ());
303+
299304 if (!isInStanding ())
300305 {
301- referenceICPGenerator .compute (time );
302- referenceCoPGenerator .update (time );
303- referenceCMPGenerator .update (time );
304- angularMomentumGenerator .update (time );
306+ referenceICPGenerator .compute (timeInCurrentState . getDoubleValue () );
307+ referenceCoPGenerator .update (timeInCurrentState . getDoubleValue () );
308+ referenceCMPGenerator .update (timeInCurrentState . getDoubleValue () );
309+ angularMomentumGenerator .update (timeInCurrentState . getDoubleValue () );
305310
306311 referenceCoPGenerator .getDesiredCenterOfPressure (desiredCoPPosition , desiredCoPVelocity );
307312 referenceCMPGenerator .getLinearData (desiredCMPPosition , desiredCMPVelocity );
0 commit comments