velocity_iterator.h
Go to the documentation of this file.
00001 /*********************************************************************
00002 *
00003 * Software License Agreement (BSD License)
00004 *
00005 *  Copyright (c) 2009, Willow Garage, Inc.
00006 *  All rights reserved.
00007 *
00008 *  Redistribution and use in source and binary forms, with or without
00009 *  modification, are permitted provided that the following conditions
00010 *  are met:
00011 *
00012 *   * Redistributions of source code must retain the above copyright
00013 *     notice, this list of conditions and the following disclaimer.
00014 *   * Redistributions in binary form must reproduce the above
00015 *     copyright notice, this list of conditions and the following
00016 *     disclaimer in the documentation and/or other materials provided
00017 *     with the distribution.
00018 *   * Neither the name of Willow Garage, Inc. nor the names of its
00019 *     contributors may be used to endorse or promote products derived
00020 *     from this software without specific prior written permission.
00021 *
00022 *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
00023 *  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
00024 *  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
00025 *  FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
00026 *  COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
00027 *  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
00028 *  BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
00029 *  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
00030 *  CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
00031 *  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
00032 *  ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
00033 *  POSSIBILITY OF SUCH DAMAGE.
00034 *
00035 * Author: Eitan Marder-Eppstein
00036 *********************************************************************/
00037 #ifndef DWA_LOCAL_PLANNER_VELOCITY_ITERATOR_H_
00038 #define DWA_LOCAL_PLANNER_VELOCITY_ITERATOR_H_
00039 #include <algorithm>
00040 #include <cmath>
00041 
00042 namespace base_local_planner {
00043 
00047   class VelocityIterator {
00048     public:
00049       VelocityIterator(double min, double max, int num_samples):
00050         current_index(0)
00051       {
00052         if (min == max) {
00053           samples_.push_back(min);
00054         } else {
00055           num_samples = std::max(2, num_samples);
00056 
00057           // e.g. for 4 samples, split distance in 3 even parts
00058           double step_size = (max - min) / double(std::max(1, (num_samples - 1)));
00059 
00060           // we make sure to avoid rounding errors around min and max.
00061           double current;
00062           double next = min;
00063           for (int j = 0; j < num_samples - 1; ++j) {
00064             current = next;
00065             next += step_size;
00066             samples_.push_back(current);
00067             // if 0 is among samples, this is never true. Else it inserts a 0 between the positive and negative samples
00068             if ((current < 0) && (next > 0)) {
00069               samples_.push_back(0.0);
00070             }
00071           }
00072           samples_.push_back(max);
00073         }
00074       }
00075 
00076       double getVelocity(){
00077         return samples_.at(current_index);
00078       }
00079 
00080       VelocityIterator& operator++(int){
00081         current_index++;
00082         return *this;
00083       }
00084 
00085       void reset(){
00086         current_index = 0;
00087       }
00088 
00089       bool isFinished(){
00090         return current_index >= samples_.size();
00091       }
00092 
00093     private:
00094       std::vector<double> samples_;
00095       unsigned int current_index;
00096   };
00097 };
00098 #endif


base_local_planner
Author(s): Eitan Marder-Eppstein, Eric Perko
autogenerated on Mon Oct 6 2014 02:45:34