00001 /********************************************************************** 00002 * 00003 * This source code is part of the Tree-based Network Optimizer (TORO) 00004 * 00005 * TORO Copyright (c) 2007 Giorgio Grisetti, Cyrill Stachniss, 00006 * Slawomir Grzonka, and Wolfram Burgard 00007 * 00008 * TORO is licences under the Common Creative License, 00009 * Attribution-NonCommercial-ShareAlike 3.0 00010 * 00011 * You are free: 00012 * - to Share - to copy, distribute and transmit the work 00013 * - to Remix - to adapt the work 00014 * 00015 * Under the following conditions: 00016 * 00017 * - Attribution. You must attribute the work in the manner specified 00018 * by the author or licensor (but not in any way that suggests that 00019 * they endorse you or your use of the work). 00020 * 00021 * - Noncommercial. You may not use this work for commercial purposes. 00022 * 00023 * - Share Alike. If you alter, transform, or build upon this work, 00024 * you may distribute the resulting work only under the same or 00025 * similar license to this one. 00026 * 00027 * Any of the above conditions can be waived if you get permission 00028 * from the copyright holder. Nothing in this license impairs or 00029 * restricts the author's moral rights. 00030 * 00031 * TORO is distributed in the hope that it will be useful, 00032 * but WITHOUT ANY WARRANTY; without even the implied 00033 * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR 00034 * PURPOSE. 00035 **********************************************************************/ 00036 00044 #ifndef _TREEOPTIMIZER2_HH_ 00045 #define _TREEOPTIMIZER2_HH_ 00046 00047 #include "posegraph2.hh" 00048 00049 namespace AISNavigation { 00050 00052 struct TreeOptimizer2: public TreePoseGraph2{ 00053 typedef std::vector<Pose> PoseVector; 00054 00056 TreeOptimizer2(); 00057 00059 virtual ~TreeOptimizer2(); 00060 00062 void initializeTreeParameters(); 00063 00065 void initializeOptimization(); 00066 00068 void initializeOnlineOptimization(); 00069 00071 void iterate(TreePoseGraph2::EdgeSet* eset=0); 00072 00074 double error() const; 00075 00076 protected: 00078 void computePreconditioner(); 00079 00081 void propagateErrors(); 00082 00085 void updatePoseChain(Vertex* v, Vertex* top); 00086 00089 Pose getPose(Vertex*v, Vertex* top); 00090 00092 double error(const Edge* e) const; 00093 00095 int iteration; 00096 00098 double gamma[3]; 00099 00102 PoseVector M; 00103 00104 }; 00105 00106 }; //namespace AISNavigation 00107 #endif