Program Listing for File SlidingWindowIterator.hpp

Return to documentation for file (/tmp/ws/src/grid_map/grid_map_core/include/grid_map_core/iterators/SlidingWindowIterator.hpp)

/*
 * SlidingWindowIterator.hpp
 *
 *  Created on: Aug 17, 2017
 *      Author: Péter Fankhauser
 *   Institute: ETH Zurich, ANYbotics
 */

#ifndef GRID_MAP_CORE__ITERATORS__SLIDINGWINDOWITERATOR_HPP_
#define GRID_MAP_CORE__ITERATORS__SLIDINGWINDOWITERATOR_HPP_

#include <Eigen/Core>
#include <string>

#include "grid_map_core/GridMap.hpp"
#include "grid_map_core/iterators/GridMapIterator.hpp"

namespace grid_map
{

class SlidingWindowIterator : public GridMapIterator
{
public:
  enum class EdgeHandling
  {
    INSIDE,  // Only visit indices that are surrounded by a full window.
    CROP,  // Crop data matrix with missing cells at edges.
    EMPTY,  // Fill in missing edges with empty cells (NAN-value).
    MEAN  // Fill in missing edges with MEAN of valid values.
  };

  SlidingWindowIterator(
    const GridMap & gridMap, const std::string & layer,
    const EdgeHandling & edgeHandling = EdgeHandling::CROP,
    const size_t windowSize = 3);

  explicit SlidingWindowIterator(const SlidingWindowIterator * other);

  void setWindowLength(const GridMap & gridMap, const double windowLength);

  SlidingWindowIterator & operator++();

  const Matrix getData() const;

private:
  void setup(const GridMap & gridMap);

  bool dataInsideMap() const;

  const EdgeHandling edgeHandling_;

  const Matrix & data_;

  size_t windowSize_;

  size_t windowMargin_;

public:
  EIGEN_MAKE_ALIGNED_OPERATOR_NEW
};

}  // namespace grid_map

#endif  // GRID_MAP_CORE__ITERATORS__SLIDINGWINDOWITERATOR_HPP_