velocity_iterator.h
Go to the documentation of this file.
1 /*********************************************************************
2 *
3 * Software License Agreement (BSD License)
4 *
5 * Copyright (c) 2009, Willow Garage, Inc.
6 * All rights reserved.
7 *
8 * Redistribution and use in source and binary forms, with or without
9 * modification, are permitted provided that the following conditions
10 * are met:
11 *
12 * * Redistributions of source code must retain the above copyright
13 * notice, this list of conditions and the following disclaimer.
14 * * Redistributions in binary form must reproduce the above
15 * copyright notice, this list of conditions and the following
16 * disclaimer in the documentation and/or other materials provided
17 * with the distribution.
18 * * Neither the name of Willow Garage, Inc. nor the names of its
19 * contributors may be used to endorse or promote products derived
20 * from this software without specific prior written permission.
21 *
22 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
23 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
24 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
25 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
26 * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
27 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
28 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
29 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
30 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
31 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
32 * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
33 * POSSIBILITY OF SUCH DAMAGE.
34 *
35 * Author: Eitan Marder-Eppstein
36 *********************************************************************/
37 #ifndef DWA_LOCAL_PLANNER_VELOCITY_ITERATOR_H_
38 #define DWA_LOCAL_PLANNER_VELOCITY_ITERATOR_H_
39 #include <algorithm>
40 #include <cmath>
41 
42 namespace base_local_planner {
43 
48  public:
49  VelocityIterator(double min, double max, int num_samples):
50  current_index(0)
51  {
52  if (min == max) {
53  samples_.push_back(min);
54  } else {
55  num_samples = std::max(2, num_samples);
56 
57  // e.g. for 4 samples, split distance in 3 even parts
58  double step_size = (max - min) / double(std::max(1, (num_samples - 1)));
59 
60  // we make sure to avoid rounding errors around min and max.
61  double current;
62  double next = min;
63  for (int j = 0; j < num_samples - 1; ++j) {
64  current = next;
65  next += step_size;
66  samples_.push_back(current);
67  // if 0 is among samples, this is never true. Else it inserts a 0 between the positive and negative samples
68  if ((current < 0) && (next > 0)) {
69  samples_.push_back(0.0);
70  }
71  }
72  samples_.push_back(max);
73  }
74  }
75 
76  double getVelocity(){
77  return samples_.at(current_index);
78  }
79 
81  current_index++;
82  return *this;
83  }
84 
85  void reset(){
86  current_index = 0;
87  }
88 
89  bool isFinished(){
90  return current_index >= samples_.size();
91  }
92 
93  private:
94  std::vector<double> samples_;
95  unsigned int current_index;
96  };
97 };
98 #endif
VelocityIterator(double min, double max, int num_samples)


base_local_planner
Author(s): Eitan Marder-Eppstein, Eric Perko, contradict@gmail.com
autogenerated on Thu Jan 21 2021 04:05:49