@Override public void initialize() { timeIntoStep.set(0.0); isDone.set(false); initialPosition.changeFrame(worldFrame); finalPosition.changeFrame(worldFrame); double maxStepZ = Math.max(initialPosition.getZ(), finalPosition.getZ()); switch (trajectoryType.getEnumValue()) { case OBSTACLE_CLEARANCE: for (int i = 0; i < numberWaypoints; i++) { waypointPositions .get(i) .interpolate(initialPosition, finalPosition, waypointProportions[i]); waypointPositions.get(i).setZ(maxStepZ + swingHeight.getDoubleValue()); } break; case PUSH_RECOVERY: case BASIC: case DEFAULT: for (int i = 0; i < numberWaypoints; i++) { waypointPositions .get(i) .interpolate(initialPosition, finalPosition, waypointProportions[i]); waypointPositions.get(i).add(0.0, 0.0, swingHeight.getDoubleValue()); } break; default: throw new RuntimeException("Trajectory type not implemented"); } stanceFootPosition.changeFrame(worldFrame); double maxWaypointZ = Math.max( stanceFootPosition.getZ() + maxSwingHeight.getDoubleValue(), maxStepZ + defaultSwingHeight); for (int i = 0; i < numberWaypoints; i++) { waypointPositions.get(i).setZ(Math.min(waypointPositions.get(i).getZ(), maxWaypointZ)); } trajectory.setEndpointConditions( initialPosition, initialVelocity, finalPosition, finalVelocity); trajectory.setWaypoints(waypointPositions); trajectory.initialize(); visualize(); }