00001 /****************************************************************************** 00002 * * 00003 * octree_stamped_pa_ros.cpp * 00004 * ========================= * 00005 * * 00006 ******************************************************************************* 00007 * * 00008 * github repository * 00009 * https://github.com/TUC-ProAut/ros_octomap * 00010 * * 00011 * Chair of Automation Technology, Technische Universität Chemnitz * 00012 * https://www.tu-chemnitz.de/etit/proaut * 00013 * * 00014 ******************************************************************************* 00015 * * 00016 * New BSD License * 00017 * * 00018 * Copyright (c) 2015-2018, Peter Weissig, Technische Universität Chemnitz * 00019 * All rights reserved. * 00020 * * 00021 * Redistribution and use in source and binary forms, with or without * 00022 * modification, are permitted provided that the following conditions are met: * 00023 * * Redistributions of source code must retain the above copyright * 00024 * notice, this list of conditions and the following disclaimer. * 00025 * * Redistributions in binary form must reproduce the above copyright * 00026 * notice, this list of conditions and the following disclaimer in the * 00027 * documentation and/or other materials provided with the distribution. * 00028 * * Neither the name of the Technische Universität Chemnitz nor the * 00029 * names of its contributors may be used to endorse or promote products * 00030 * derived from this software without specific prior written permission. * 00031 * * 00032 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * 00033 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * 00034 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * 00035 * ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY * 00036 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * 00037 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR * 00038 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER * 00039 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * 00040 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * 00041 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH * 00042 * DAMAGE. * 00043 * * 00044 ******************************************************************************/ 00045 00046 // local headers 00047 #include "octomap_pa/octree_stamped_pa_ros.h" 00048 00049 // standard headers 00050 #include <string> 00051 #include <sstream> 00052 #include <vector> 00053 00054 //**************************[cOctreeStampedPaRos]****************************** 00055 cOctreeStampedPaRos::cOctreeStampedPaRos(const double resolution) : 00056 TreeTypeBase(resolution) { 00057 00058 } 00059 00060 //**************************[~cOctreeStampedPaRos]***************************** 00061 cOctreeStampedPaRos::~cOctreeStampedPaRos() { 00062 } 00063 00064 //**************************[degradeOutdatedNodes]***************************** 00065 void cOctreeStampedPaRos::degradeOutdatedNodes() { 00066 00067 cOcTreeStampedBasePa::degradeOutdatedNodes( 00068 cTimePa(rosparams_.degrading_time_)); 00069 } 00070 00071 //**************************[getLastInsertionTime]***************************** 00072 ros::Time cOctreeStampedPaRos::getLastInsertionTime(void) const { 00073 00074 return timeToRos(getTimestamp()); 00075 } 00076 00077 //**************************[setLastInsertionTime]***************************** 00078 void cOctreeStampedPaRos::setLastInsertionTime(const ros::Time &time) { 00079 00080 setTimestamp(timeFromRos(time)); 00081 } 00082 00083 //**************************[timeToRos]**************************************** 00084 ros::Time cOctreeStampedPaRos::timeToRos(const cTimePa &time) const { 00085 00086 return ros::Time(time.seconds, time.nanoseconds); 00087 } 00088 00089 //**************************[timeFromRos]************************************** 00090 cTimePa cOctreeStampedPaRos::timeFromRos(const ros::Time &time) const { 00091 00092 return cTimePa(time.sec, time.nsec); 00093 } 00094 00095 //**************************[checkDegrading]*********************************** 00096 void cOctreeStampedPaRos::checkDegrading() { 00097 00098 if (!rosparams_.auto_degrading_) { 00099 return; 00100 } 00101 00102 // check if interval is reached 00103 if (getOutputTime() - last_degrading_time_ > 00104 ros::Duration(rosparams_.auto_degrading_intervall_)) { 00105 last_degrading_time_ = getOutputTime(); 00106 00107 degradeOutdatedNodes(); 00108 } 00109 }