costmap_bbf.cpp
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2019, the neonavigation authors
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 copyright holder 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 <cmath>
31 
32 #include <planner_cspace/bbf.h>
35 
36 namespace planner_cspace
37 {
38 namespace planner_3d
39 {
41 {
42  cm_hist_.clear(0);
43  for (VecInternal p(0, 0); p[1] < size_[1]; p[1]++)
44  {
45  for (p[0] = 0; p[0] < size_[0]; p[0]++)
46  {
47  cm_hist_[p] = std::lround(cm_hist_bbf_[p].getNormalizedProbability() * 100.0);
48  }
49  }
50 }
52  const BlockMemGridmapBase<char, 3, 2>* costmap,
53  const Vec& center,
54  const float remember_hit_odds, const float remember_miss_odds,
55  const int range_min, const int range_max)
56 {
57  const size_t width = size_[0];
58  const size_t height = size_[1];
59  const int range_min_sq = range_min * range_min;
60  const int range_max_sq = range_max * range_max;
61  for (VecInternal p(-range_max, 0); p[0] <= range_max; p[0]++)
62  {
63  for (p[1] = -range_max; p[1] <= range_max; p[1]++)
64  {
65  const VecInternal gp = VecInternal(center[0], center[1]) + p;
66  if (static_cast<size_t>(gp[0]) >= width ||
67  static_cast<size_t>(gp[1]) >= height)
68  continue;
69 
70  const float r_sq = p.sqlen();
71  if (r_sq > range_max_sq)
72  continue;
73 
74  const int c = (*costmap)[Vec(gp[0], gp[1], 0)];
75 
76  if (c < 0)
77  continue;
78 
79  if (c == 100)
80  {
81  if (r_sq >= range_min_sq)
82  {
83  cm_hist_bbf_[gp].update(remember_hit_odds);
84  }
85  }
86  else
87  {
88  cm_hist_bbf_[gp].update(remember_miss_odds);
89  }
90  }
91  }
92 }
93 void CostmapBBF::forEach(const std::function<void(const Vec&, bbf::BinaryBayesFilter&)> cb)
94 {
95  for (Vec p(0, 0, 0); p[1] < size_[1]; p[1]++)
96  {
97  for (p[0] = 0; p[0] < size_[0]; p[0]++)
98  {
99  cb(p, cm_hist_bbf_[VecInternal(p[0], p[1])]);
100  }
101  }
102 }
103 } // namespace planner_3d
104 } // namespace planner_cspace
void remember(const BlockMemGridmapBase< char, 3, 2 > *const costmap, const Vec &center, const float remember_hit_odds, const float remember_miss_odds, const int range_min, const int range_max)
Definition: costmap_bbf.cpp:51
BlockMemGridmap< bbf::BinaryBayesFilter, 2, 2, 0x20 > cm_hist_bbf_
Definition: costmap_bbf.h:49
BlockMemGridmap< char, 2, 2, 0x80 > cm_hist_
Definition: costmap_bbf.h:50
void forEach(const std::function< void(const Vec &, bbf::BinaryBayesFilter &)> cb)
Definition: costmap_bbf.cpp:93


planner_cspace
Author(s): Atsushi Watanabe
autogenerated on Wed May 12 2021 02:20:42