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, and 00006 * 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 00050 struct TreeOptimizer2: public TreePoseGraph2{ 00051 typedef std::vector<Pose> PoseVector; 00052 00054 TreeOptimizer2(); 00055 00057 virtual ~TreeOptimizer2(); 00058 00060 void initializeTreeParameters(); 00061 00063 void initializeOptimization(); 00064 00066 void initializeOnlineOptimization(); 00067 00069 void iterate(TreePoseGraph2::EdgeSet* eset=0); 00070 00072 double error() const; 00073 00074 protected: 00076 void computePreconditioner(); 00077 00079 void propagateErrors(); 00080 00083 void updatePoseChain(Vertex* v, Vertex* top); 00084 00087 Pose getPose(Vertex*v, Vertex* top); 00088 00090 double error(const Edge* e) const; 00091 00093 int iteration; 00094 00096 double gamma[3]; 00097 00100 PoseVector M; 00101 00102 }; 00103 00104 #endif
1.5.0