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 <algorithm>
31 #include <cmath>
32 
33 #include <planner_cspace/bbf.h>
36 
37 namespace planner_cspace
38 {
39 namespace planner_3d
40 {
42 {
43  for (VecInternal p = updated_min_; p[1] <= updated_max_[1]; p[1]++)
44  {
45  for (p[0] = updated_min_[0]; p[0] <= updated_max_[0]; p[0]++)
46  {
47  cm_hist_[p] = std::lround(cm_hist_bbf_[p].getNormalizedProbability() * 100.0);
48  }
49  }
51  updated_max_ = VecInternal(-1, -1);
52 }
54  const BlockMemGridmapBase<char, 3, 2>* costmap,
55  const Vec& center,
56  const float remember_hit_odds, const float remember_miss_odds,
57  const int range_min, const int range_max)
58 {
60  std::min(updated_min_[0], std::max(0, center[0] - range_max)),
61  std::min(updated_min_[1], std::max(0, center[1] - range_max)));
63  std::max(updated_max_[0], std::min(size_[0] - 1, center[0] + range_max)),
64  std::max(updated_max_[1], std::min(size_[1] - 1, center[1] + range_max)));
65 
66  const size_t width = size_[0];
67  const size_t height = size_[1];
68  const int range_min_sq = range_min * range_min;
69  const int range_max_sq = range_max * range_max;
70  for (VecInternal p(-range_max, 0); p[0] <= range_max; p[0]++)
71  {
72  for (p[1] = -range_max; p[1] <= range_max; p[1]++)
73  {
74  const VecInternal gp = VecInternal(center[0], center[1]) + p;
75  if (static_cast<size_t>(gp[0]) >= width ||
76  static_cast<size_t>(gp[1]) >= height)
77  continue;
78 
79  const float r_sq = p.sqlen();
80  if (r_sq > range_max_sq)
81  continue;
82 
83  const int c = (*costmap)[Vec(gp[0], gp[1], 0)];
84 
85  if (c < 0)
86  continue;
87 
88  if (c == 100)
89  {
90  if (r_sq >= range_min_sq)
91  {
92  cm_hist_bbf_[gp].update(remember_hit_odds);
93  }
94  }
95  else
96  {
97  cm_hist_bbf_[gp].update(remember_miss_odds);
98  }
99  }
100  }
101 }
102 void CostmapBBFImpl::forEach(const std::function<void(const Vec&, bbf::BinaryBayesFilter&)> cb)
103 {
104  for (Vec p(0, 0, 0); p[1] < size_[1]; p[1]++)
105  {
106  for (p[0] = 0; p[0] < size_[0]; p[0]++)
107  {
108  cb(p, cm_hist_bbf_[VecInternal(p[0], p[1])]);
109  }
110  }
111 }
112 } // namespace planner_3d
113 } // namespace planner_cspace
planner_cspace::planner_3d::CostmapBBFImpl::remember
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:53
planner_cspace
Definition: bbf.h:33
planner_cspace::planner_3d::CostmapBBFImpl::updateCostmap
void updateCostmap()
Definition: costmap_bbf.cpp:41
planner_cspace::planner_3d::CostmapBBF::Vec
CyclicVecInt< 3, 2 > Vec
Definition: costmap_bbf.h:46
bbf.h
planner_cspace::planner_3d::CostmapBBFImpl::VecInternal
CyclicVecInt< 2, 2 > VecInternal
Definition: costmap_bbf.h:65
planner_cspace::planner_3d::CostmapBBFImpl::updated_max_
VecInternal updated_max_
Definition: costmap_bbf.h:70
planner_cspace::planner_3d::CostmapBBFImpl::cm_hist_
BlockMemGridmap< char, 2, 2, 0x80 > cm_hist_
Definition: costmap_bbf.h:67
costmap_bbf.h
planner_cspace::BlockMemGridmapBase< char, 3, 2 >
planner_cspace::planner_3d::CostmapBBFImpl::forEach
void forEach(const std::function< void(const Vec &, bbf::BinaryBayesFilter &)> cb)
Definition: costmap_bbf.cpp:102
planner_cspace::bbf::BinaryBayesFilter
Definition: bbf.h:52
planner_cspace::planner_3d::CostmapBBFImpl::updated_min_
VecInternal updated_min_
Definition: costmap_bbf.h:69
planner_cspace::planner_3d::CostmapBBFImpl::size_
Vec size_
Definition: costmap_bbf.h:68
blockmem_gridmap.h
planner_cspace::planner_3d::CostmapBBFImpl::cm_hist_bbf_
BlockMemGridmap< bbf::BinaryBayesFilter, 2, 2, 0x20 > cm_hist_bbf_
Definition: costmap_bbf.h:66
planner_cspace::CyclicVecBase
Definition: cyclic_vec.h:78


planner_cspace
Author(s): Atsushi Watanabe
autogenerated on Fri May 16 2025 02:15:22