Main Page
Namespaces
Classes
Files
File List
File Members
src
quadratic_calculator.cpp
Go to the documentation of this file.
1
/*
2
* Copyright (c) 2013, Willow Garage, Inc.
3
* All rights reserved.
4
*
5
* Redistribution and use in source and binary forms, with or without
6
* modification, are permitted provided that the following conditions are met:
7
*
8
* * Redistributions of source code must retain the above copyright
9
* notice, this list of conditions and the following disclaimer.
10
* * Redistributions in binary form must reproduce the above copyright
11
* notice, this list of conditions and the following disclaimer in the
12
* documentation and/or other materials provided with the distribution.
13
* * Neither the name of the Willow Garage, Inc. nor the names of its
14
* contributors may be used to endorse or promote products derived from
15
* this software without specific prior written permission.
16
*
17
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
18
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
21
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
22
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
23
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
24
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
25
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
26
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27
* POSSIBILITY OF SUCH DAMAGE.
28
*/
29
30
#include <
global_planner/quadratic_calculator.h
>
31
32
namespace
global_planner
{
33
float
QuadraticCalculator::calculatePotential
(
float
* potential,
unsigned
char
cost,
int
n,
float
prev_potential) {
34
// get neighbors
35
float
u,
d
, l, r;
36
l = potential[n - 1];
37
r = potential[n + 1];
38
u = potential[n -
nx_
];
39
d = potential[n +
nx_
];
40
// ROS_INFO("[Update] c: %f l: %f r: %f u: %f d: %f\n",
41
// potential[n], l, r, u, d);
42
// ROS_INFO("[Update] cost: %d\n", costs[n]);
43
44
// find lowest, and its lowest neighbor
45
float
ta, tc;
46
if
(l < r)
47
tc = l;
48
else
49
tc = r;
50
if
(u < d)
51
ta = u;
52
else
53
ta = d;
54
55
float
hf = cost;
// traversability factor
56
float
dc = tc - ta;
// relative cost between ta,tc
57
if
(dc < 0)
// tc is lowest
58
{
59
dc = -dc;
60
ta = tc;
61
}
62
63
// calculate new potential
64
if
(dc >= hf)
// if too large, use ta-only update
65
return
ta + hf;
66
else
// two-neighbor interpolation update
67
{
68
// use quadratic approximation
69
// might speed this up through table lookup, but still have to
70
// do the divide
71
float
d = dc / hf;
72
float
v = -0.2301 * d * d + 0.5307 * d + 0.7040;
73
return
ta + hf * v;
74
}
75
}
76
}
77
d
d
quadratic_calculator.h
global_planner
Definition:
astar.h:46
global_planner::QuadraticCalculator::calculatePotential
float calculatePotential(float *potential, unsigned char cost, int n, float prev_potential)
Definition:
quadratic_calculator.cpp:33
global_planner::PotentialCalculator::nx_
int nx_
Definition:
potential_calculator.h:75
global_planner
Author(s): David Lu!!
autogenerated on Sun Mar 3 2019 03:44:42