Program Listing for File GridMap.hpp

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

/*
 * GridMap.hpp
 *
 *  Created on: Jul 14, 2014
 *      Author: Péter Fankhauser
 *   Institute: ETH Zurich, ANYbotics
 */

#ifndef GRID_MAP_CORE__GRIDMAP_HPP_
#define GRID_MAP_CORE__GRIDMAP_HPP_

// Eigen
#include <Eigen/Core>
#include <Eigen/Geometry>

// STL
#include <vector>
#include <string>
#include <utility>
#include <unordered_map>

#include "grid_map_core/TypeDefs.hpp"
#include "grid_map_core/SubmapGeometry.hpp"
#include "grid_map_core/BufferRegion.hpp"

namespace grid_map
{

class SubmapGeometry;

class GridMap
{
public:
  // Type traits for use with template methods/classes using GridMap as a template parameter.
  typedef grid_map::DataType DataType;
  typedef grid_map::Matrix Matrix;

  explicit GridMap(const std::vector<std::string> & layers);

  GridMap();

  GridMap(const GridMap &) = default;
  GridMap & operator=(const GridMap &) = default;
  GridMap(GridMap &&) = default;
  GridMap & operator=(GridMap &&) = default;

  virtual ~GridMap() = default;

  void setGeometry(
    const Length & length, const double resolution,
    const Position & position = Position::Zero());

  void setGeometry(const SubmapGeometry & geometry);

  void add(const std::string & layer, const double value = NAN);

  void add(const std::string & layer, const Matrix & data);

  bool exists(const std::string & layer) const;

  const Matrix & get(const std::string & layer) const;

  Matrix & get(const std::string & layer);

  const Matrix & operator[](const std::string & layer) const;

  Matrix & operator[](const std::string & layer);

  bool erase(const std::string & layer);

  const std::vector<std::string> & getLayers() const;

  void setBasicLayers(const std::vector<std::string> & basicLayers);

  const std::vector<std::string> & getBasicLayers() const;

  bool hasBasicLayers() const;

  bool hasSameLayers(const grid_map::GridMap & other) const;

  float & atPosition(const std::string & layer, const Position & position);

  float atPosition(
    const std::string & layer, const Position & position,
    InterpolationMethods interpolationMethod = InterpolationMethods::INTER_NEAREST) const;

  float & at(const std::string & layer, const Index & index);

  float at(const std::string & layer, const Index & index) const;

  bool getIndex(const Position & position, Index & index) const;

  bool getPosition(const Index & index, Position & position) const;

  bool isInside(const Position & position) const;

  bool isValid(const Index & index) const;

  bool isValid(const Index & index, const std::string & layer) const;

  bool isValid(const Index & index, const std::vector<std::string> & layers) const;

  bool getPosition3(const std::string & layer, const Index & index, Position3 & position) const;

  bool getVector(
    const std::string & layerPrefix, const Index & index,
    Eigen::Vector3d & vector) const;

  GridMap getSubmap(const Position & position, const Length & length, bool & isSuccess) const;

  GridMap getTransformedMap(
    const Eigen::Isometry3d & transform, const std::string & heightLayerName,
    const std::string & newFrameId,
    const double sampleRatio = 0.0) const;

  void setPosition(const Position & position);

  bool move(const Position & position, std::vector<BufferRegion> & newRegions);

  bool move(const Position & position);

  bool addDataFrom(
    const GridMap & other, bool extendMap,
    bool overwriteData, bool copyAllLayers,
    std::vector<std::string> layers = std::vector<std::string>());

  bool extendToInclude(const GridMap & other);

  void clear(const std::string & layer);

  void clearBasic();

  void clearAll();

  void setTimestamp(const Time timestamp);

  Time getTimestamp() const;

  void resetTimestamp();

  void setFrameId(const std::string & frameId);

  const std::string & getFrameId() const;

  const Length & getLength() const;

  const Position & getPosition() const;

  double getResolution() const;

  const Size & getSize() const;

  void setStartIndex(const Index & startIndex);

  const Index & getStartIndex() const;

  bool isDefaultStartIndex() const;

  void convertToDefaultStartIndex();

  Position getClosestPositionInMap(const Position & position) const;

private:
  bool isValid(DataType value) const;

  void clearCols(unsigned int index, unsigned int nCols);

  void clearRows(unsigned int index, unsigned int nRows);

  bool atPositionLinearInterpolated(
    const std::string & layer, const Position & position,
    float & value) const;


  bool atPositionBicubicConvolutionInterpolated(
    const std::string & layer, const Position & position,
    float & value) const;

  bool atPositionBicubicInterpolated(
    const std::string & layer, const Position & position,
    float & value) const;


  void resize(const Index & bufferSize);

  std::string frameId_;

  Time timestamp_;

  std::unordered_map<std::string, Matrix> data_;

  std::vector<std::string> layers_;

  std::vector<std::string> basicLayers_;

  Length length_;

  double resolution_;

  Position position_;

  Size size_;

  Index startIndex_;

public:
  EIGEN_MAKE_ALIGNED_OPERATOR_NEW
};

}  // namespace grid_map
#endif  // GRID_MAP_CORE__GRIDMAP_HPP_