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 #include "edge_se2_prior.h" 00018 00019 namespace g2o { 00020 00021 EdgeSE2Prior::EdgeSE2Prior() : BaseUnaryEdge<3, SE2, VertexSE2>() 00022 { 00023 } 00024 00025 void EdgeSE2Prior::initialEstimate(const OptimizableGraph::VertexSet& from, OptimizableGraph::Vertex* to) 00026 { 00027 assert(from.size() == 0); (void) from; (void) to; 00028 VertexSE2* v1 = static_cast<VertexSE2*>(_vertices[0]); 00029 v1->estimate() = _measurement; 00030 } 00031 00032 bool EdgeSE2Prior::read(std::istream& is) 00033 { 00034 Vector3d p; 00035 is >> p[0] >> p[1] >> p[2]; 00036 measurement().fromVector(p); 00037 inverseMeasurement() = measurement().inverse(); 00038 for (int i = 0; i < 3; ++i) 00039 for (int j = i; j < 3; ++j) { 00040 is >> information()(i, j); 00041 if (i != j) 00042 information()(j, i) = information()(i, j); 00043 } 00044 return true; 00045 } 00046 00047 bool EdgeSE2Prior::write(std::ostream& os) const 00048 { 00049 Vector3d p = measurement().toVector(); 00050 os << p.x() << " " << p.y() << " " << p.z(); 00051 for (int i = 0; i < 3; ++i) 00052 for (int j = i; j < 3; ++j) 00053 os << " " << information()(i, j); 00054 return os.good(); 00055 } 00056 00057 } // end namespace