octomap 1.5.0
|
00001 #ifndef OCTOMAP_MAP_COLLECTION_H 00002 #define OCTOMAP_MAP_COLLECTION_H 00003 00004 // $Id: MapCollection.h 402 2012-08-06 13:39:42Z ahornung $ 00005 00014 /* 00015 * Copyright (c) 2009-2011, K. M. Wurm, A. Hornung, University of Freiburg 00016 * All rights reserved. 00017 * 00018 * Redistribution and use in source and binary forms, with or without 00019 * modification, are permitted provided that the following conditions are met: 00020 * 00021 * * Redistributions of source code must retain the above copyright 00022 * notice, this list of conditions and the following disclaimer. 00023 * * Redistributions in binary form must reproduce the above copyright 00024 * notice, this list of conditions and the following disclaimer in the 00025 * documentation and/or other materials provided with the distribution. 00026 * * Neither the name of the University of Freiburg nor the names of its 00027 * contributors may be used to endorse or promote products derived from 00028 * this software without specific prior written permission. 00029 * 00030 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 00031 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 00032 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 00033 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 00034 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 00035 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 00036 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 00037 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 00038 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 00039 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 00040 * POSSIBILITY OF SUCH DAMAGE. 00041 */ 00042 00043 #include <vector> 00044 #include <octomap/MapNode.h> 00045 00046 namespace octomap { 00047 00048 00049 template <class MAPNODE> 00050 class MapCollection { 00051 public: 00052 MapCollection(); 00053 MapCollection(std::string filename); 00054 ~MapCollection(); 00055 00056 void addNode( MAPNODE* node); 00057 MAPNODE* addNode(const Pointcloud& cloud, point3d sensor_origin); 00058 bool removeNode(const MAPNODE* n); 00059 MAPNODE* queryNode(const point3d& p); 00060 00061 bool isOccupied(const point3d& p) const; 00062 bool isOccupied(float x, float y, float z) const; 00063 00064 float getOccupancy(const point3d& p); 00065 00066 bool castRay(const point3d& origin, const point3d& direction, point3d& end, 00067 bool ignoreUnknownCells=false, double maxRange=-1.0) const; 00068 00069 bool writePointcloud(std::string filename); 00070 bool write(std::string filename); 00071 00072 // TODO 00073 void insertScan(const Pointcloud& scan, const octomap::point3d& sensor_origin, 00074 double maxrange=-1., bool pruning=true, bool lazy_eval = false); 00075 // TODO 00076 MAPNODE* queryNode(std::string id); 00077 00078 typedef typename std::vector<MAPNODE*>::iterator iterator; 00079 typedef typename std::vector<MAPNODE*>::const_iterator const_iterator; 00080 iterator begin() { return nodes.begin(); } 00081 iterator end() { return nodes.end(); } 00082 const_iterator begin() const { return nodes.begin(); } 00083 const_iterator end() const { return nodes.end(); } 00084 size_t size() const { return nodes.size(); } 00085 00086 protected: 00087 void clear(); 00088 bool read(std::string filename); 00089 00090 // TODO 00091 std::vector<Pointcloud*> segment(const Pointcloud& scan) const; 00092 // TODO 00093 MAPNODE* associate(const Pointcloud& scan); 00094 00095 static void splitPathAndFilename(std::string &filenamefullpath, std::string* path, std::string *filename); 00096 static std::string combinePathAndFilename(std::string path, std::string filename); 00097 static bool readTagValue(std::string tag, std::ifstream &infile, std::string* value); 00098 00099 protected: 00100 00101 std::vector<MAPNODE*> nodes; 00102 }; 00103 00104 } // end namespace 00105 00106 #include "octomap/MapCollection.hxx" 00107 00108 #endif