single_state_hypothesis_laser_scan_grid_world.h
Go to the documentation of this file.
1 #ifndef SLAM_CTOR_CORE_SINGLE_STATE_HYPOTHESIS_LASER_SCAN_GRID_WORLD_H
2 #define SLAM_CTOR_CORE_SINGLE_STATE_HYPOTHESIS_LASER_SCAN_GRID_WORLD_H
3 
4 #include <memory>
5 #include <utility>
6 
7 #include "../maps/grid_map.h"
8 #include "../maps/grid_map_scan_adders.h"
9 
10 #include "laser_scan_grid_world.h"
11 
13 #if __GNUC__ < 5
15 
17  (
19  double raw_scan_quality,
20  std::size_t scan_margin,
21  std::shared_ptr<GridCell> cell_prototype,
22  std::shared_ptr<GridScanMatcher> gsm,
23  std::shared_ptr<GridMapScanAdder> gmsa,
25  )
26  : localized_scan_quality(localized_scan_quality)
27  , raw_scan_quality(raw_scan_quality)
28  , scan_margin(scan_margin)
29  , cell_prototype(cell_prototype)
30  , gsm(gsm), gmsa(gmsa), map_props(map_props) {}
31 #endif
32  double localized_scan_quality = 1.0;
33  double raw_scan_quality = 1.0;
34  std::size_t scan_margin = 0;
35 
36  std::shared_ptr<GridCell> cell_prototype;
37  std::shared_ptr<GridScanMatcher> gsm;
38  std::shared_ptr<GridMapScanAdder> gmsa;
40 };
41 
42 template <typename MapT>
44  : public LaserScanGridWorld<MapT> {
45 public:
48 public:
50  : _props{props}
51  , _map{_props.cell_prototype->clone(), _props.map_props} {}
52 
53  // scan matcher access
54  auto scan_matcher() { return _props.gsm; }
55 
56  void add_sm_observer(std::shared_ptr<GridScanMatcherObserver> obs) {
57  auto sm = scan_matcher();
58  if (sm) { sm->subscribe(obs); }
59  }
60 
61  void remove_sm_observer(std::shared_ptr<GridScanMatcherObserver> obs) {
62  auto sm = scan_matcher();
63  if (sm) { sm->unsubscribe(obs); }
64  }
65 
66  // scan adder access
67  auto scan_adder() { return _props.gmsa; }
68 
69  // state access
70  const MapType& map() const override { return _map; }
71  using LaserScanGridWorld<MapT>::map; // enable non-const map access
72 
73  // TODO: return scan prob
74  virtual void handle_observation(TransformedLaserScan &tr_scan) {
75  auto sm = scan_matcher();
76  sm->reset_state();
77 
78  auto pose_delta = RobotPoseDelta{};
79  sm->process_scan(tr_scan, this->pose(), this->map(), pose_delta);
80  this->update_robot_pose(pose_delta);
81 
82  tr_scan.quality = pose_delta ? _props.localized_scan_quality
83  : _props.raw_scan_quality;
84 
85  scan_adder()->append_scan(_map, this->pose(), tr_scan.scan,
86  tr_scan.quality, _props.scan_margin);
87  }
88 
89 protected:
92 };
93 
94 #endif
void add_sm_observer(std::shared_ptr< GridScanMatcherObserver > obs)
typename World< TransformedLaserScan, UnboundedLazyTiledGridMap >::MapType MapType
virtual void handle_observation(TransformedLaserScan &tr_scan)
void remove_sm_observer(std::shared_ptr< GridScanMatcherObserver > obs)


slam_constructor
Author(s): JetBrains Research, OSLL team
autogenerated on Mon Jun 10 2019 15:08:25