base_vertex.hpp
Go to the documentation of this file.
00001 // g2o - General Graph Optimization
00002 // Copyright (C) 2011 R. Kuemmerle, G. Grisetti, W. Burgard
00003 //
00004 // g2o is free software: you can redistribute it and/or modify
00005 // it under the terms of the GNU Lesser General Public License as published
00006 // by the Free Software Foundation, either version 3 of the License, or
00007 // (at your option) any later version.
00008 //
00009 // g2o is distributed in the hope that it will be useful,
00010 // but WITHOUT ANY WARRANTY; without even the implied warranty of
00011 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00012 // GNU Lesser General Public License for more details.
00013 //
00014 // You should have received a copy of the GNU Lesser General Public License
00015 // along with this program.  If not, see <http://www.gnu.org/licenses/>.
00016 
00017 
00018 template <int D, typename T>
00019 BaseVertex<D, T>::BaseVertex() :
00020   OptimizableGraph::Vertex(),  _hessian(0, D, D)
00021 {
00022   _dimension = D;
00023 }
00024 
00025 /******************************************************************************/
00026 
00027 template <int D, typename T>
00028 void BaseVertex<D, T>::setUncertainty(double* d)
00029 {
00030   Eigen::Map < Matrix<double, D, D> > m(d);
00031   _uncertainty = m;
00032 }
00033 
00034 /******************************************************************************/
00035 
00036 template <int D, typename T>
00037 double BaseVertex<D, T>::solveDirect(double lambda)
00038 {
00039   Matrix <double, D, D> tempA = 
00040      _hessian + Matrix <double, D, D>::Identity()*lambda;
00041   double det=tempA.determinant();
00042   if (g2o_isnan(det) || det < std::numeric_limits<double>::epsilon())
00043     return det;
00044   Matrix <double, D, 1> dx=tempA.llt().solve(_b);
00045   oplus(&dx[0]);
00046   return det;
00047 }
00048 
00049 /******************************************************************************/
00050 
00051 template <int D, typename T>
00052 void BaseVertex<D, T>::clearQuadraticForm() {_b.setZero();}
00053 
00054 /******************************************************************************/
00055 
00056 // Mapea el vector de doubles d en _hessian, siendo _hessian una matriz DxD
00057 template <int D, typename T>
00058 void BaseVertex<D, T>::mapHessianMemory(double* d)
00059 {
00060   new (&_hessian) HessianBlockType(d, D, D);
00061 }
00062 


re_vision
Author(s): Dorian Galvez-Lopez
autogenerated on Sun Jan 5 2014 11:30:47