base_local_planner
include
base_local_planner
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
#include <
vector
>
42
43
namespace
base_local_planner
{
44
48
class
VelocityIterator {
49
public
:
50
VelocityIterator
(
double
min,
double
max,
int
num_samples):
51
current_index
(0)
52
{
53
if
(min == max) {
54
samples_
.
push_back
(min);
55
}
else
{
56
num_samples =
std::max
(2, num_samples);
57
58
// e.g. for 4 samples, split distance in 3 even parts
59
double
step_size = (
max
-
min
) /
double
(
std::max
(1, (num_samples - 1)));
60
61
// we make sure to avoid rounding errors around min and max.
62
double
current;
63
double
next
=
min
;
64
for
(
int
j = 0; j < num_samples - 1; ++j) {
65
current =
next
;
66
next
+= step_size;
67
samples_
.
push_back
(current);
68
// if 0 is among samples, this is never true. Else it inserts a 0 between the positive and negative samples
69
if
((current < 0) && (
next
> 0)) {
70
samples_
.
push_back
(0.0);
71
}
72
}
73
samples_
.
push_back
(max);
74
}
75
}
76
77
double
getVelocity
(){
78
return
samples_
.
at
(
current_index
);
79
}
80
81
VelocityIterator
&
operator++
(
int
){
82
current_index
++;
83
return
*
this
;
84
}
85
86
void
reset
(){
87
current_index
= 0;
88
}
89
90
bool
isFinished
(){
91
return
current_index
>=
samples_
.
size
();
92
}
93
94
private
:
95
std::vector<double>
samples_
;
96
unsigned
int
current_index
;
97
};
98
};
99
#endif
vector
std::vector::size
T size(T... args)
base_local_planner::VelocityIterator::getVelocity
double getVelocity()
Definition:
velocity_iterator.h:147
base_local_planner::VelocityIterator::reset
void reset()
Definition:
velocity_iterator.h:156
cmath
algorithm
std::vector::push_back
T push_back(T... args)
base_local_planner::VelocityIterator::current_index
unsigned int current_index
Definition:
velocity_iterator.h:166
std::vector::at
T at(T... args)
base_local_planner::VelocityIterator::samples_
std::vector< double > samples_
Definition:
velocity_iterator.h:165
std::min
T min(T... args)
base_local_planner::VelocityIterator::isFinished
bool isFinished()
Definition:
velocity_iterator.h:160
base_local_planner::VelocityIterator::VelocityIterator
VelocityIterator(double min, double max, int num_samples)
Definition:
velocity_iterator.h:120
base_local_planner::VelocityIterator::operator++
VelocityIterator & operator++(int)
Definition:
velocity_iterator.h:151
std::max
T max(T... args)
base_local_planner
Definition:
alignment_cost_function.h:7
std::next
T next(T... args)
Generated on Mon Feb 24 2025 04:34:28 for base_local_planner by
1.8.17