diff --git a/gtsam_unstable/slam/SmartFactorBase.h b/gtsam_unstable/slam/SmartFactorBase.h index ebef221bb..973341477 100644 --- a/gtsam_unstable/slam/SmartFactorBase.h +++ b/gtsam_unstable/slam/SmartFactorBase.h @@ -417,7 +417,7 @@ public: } // **************************************************************************************************** - boost::shared_ptr > updateAugmentedHessian( + void updateAugmentedHessian( const Cameras& cameras, const Point3& point, const double lambda, bool diagonalDamping, SymmetricBlockMatrix& augmentedHessian) const { @@ -435,8 +435,8 @@ public: dims.back() = 1; updateSparseSchurComplement(Fblocks, E, PointCov, b, augmentedHessian); // augmentedHessian.matrix().block (i1,i2) = ... - std::cout << "f "<< f <keys_.size(); // cameras observing current point - size_t aug_numKeys = augmentedHessian.rows() - 1; // all cameras in the group + size_t aug_numKeys = (augmentedHessian.rows() - 1)/D; // all cameras in the group + +// MatrixDD delta = eye(D); +// size_t n1 = numKeys+1; +// for (size_t i1=0; i1 < n1-1; i1++){ +// MatrixDD Z1 = augmentedHessian(i1,i1).selfadjointView(); +// std::cout << i1 << " " << "\n" << Z1 << std::endl; +// augmentedHessian(i1,i1) = Z1 + delta; +// MatrixDD Z2 = augmentedHessian(i1,i1).selfadjointView(); +// std::cout << i1 << " " << "\n" << Z2 << std::endl; +//// for (size_t i2=i1+1; i2 < n1-1; i2++){ +//// Z = augmentedHessian(i1,i2).knownOffDiagonal(); // + delta; +//// std::cout << i1 << " " << i2 << "\n" << Z << std::endl; +//// } +// } + + MatrixDD matrixBlock; + VectorD vectorBlock; // Blockwise Schur complement for (size_t i1 = 0; i1 < numKeys; i1++) { // for each camera @@ -497,27 +514,26 @@ public: // D = (Dx2) * (2) // (augmentedHessian.matrix()).block (i1,numKeys+1) = Fi1.transpose() * b.segment < 2 > (2 * i1); // F' * b size_t aug_i1 = this->keys_[i1]; - std::cout << "i1 "<< i1 < (2 * i1) // F' * b - Fi1.transpose() * (Ei1_P * (E.transpose() * b)); // D = (Dx2) * (2x3) * (3*2m) * (2m x 1) // (DxD) = (Dx2) * ( (2xD) - (2x3) * (3x2) * (2xD) ) - std::cout << "filled 1 " <(2 * i1, 0).transpose() * Fi1); // upper triangular part of the hessian for (size_t i2 = i1+1; i2 < numKeys; i2++) { // for each camera const Matrix2D& Fi2 = Fblocks.at(i2).second; size_t aug_i2 = this->keys_[i2]; - std::cout << "i2 "<< i2 <(2 * i2, 0).transpose() * Fi2); } } // end of for over cameras