Skip to content

Commit 8cd308d

Browse files
author
Tim Seyde
committed
Switched ICP Planner from global time to local time - stair climbing passes (sketchy)
1 parent 8e9b2c8 commit 8cd308d

File tree

3 files changed

+23
-13
lines changed

3 files changed

+23
-13
lines changed

CommonWalkingControlModules/src/us/ihmc/commonWalkingControlModules/instantaneousCapturePoint/smoothCMP/ReferenceCoPTrajectoryGenerator.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1227,4 +1227,9 @@ public boolean isOnExitCoP()
12271227
{
12281228
return (activeTrajectory.getTrajectoryType() == WalkingTrajectoryType.SWING && activeTrajectory.getCurrentSegmentIndex() == activeTrajectory.getNumberOfSegments() - 1);
12291229
}
1230+
1231+
public double getCurrentStateFinalTime()
1232+
{
1233+
return activeTrajectory.getNodeTimes()[activeTrajectory.getNumberOfSegments()];
1234+
}
12301235
}

CommonWalkingControlModules/src/us/ihmc/commonWalkingControlModules/instantaneousCapturePoint/smoothCMP/SmoothCMPBasedICPPlanner.java

Lines changed: 17 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@
3030
public 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);

IHMCRoboticsToolkit/src/us/ihmc/robotics/math/trajectories/YoSegmentedFrameTrajectory3D.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,7 @@ public double[] getNodeTimes()
142142
int i;
143143
for (i = 0; i < getNumberOfSegments(); i++)
144144
nodeTime[i + 1] = segments.get(i).getFinalTime();
145-
for (; i < maxNumberOfSegments + 1; i++)
145+
for (; i < maxNumberOfSegments; i++)
146146
nodeTime[i + 1] = Double.NaN;
147147
return nodeTime;
148148
}

0 commit comments

Comments
 (0)