Program Listing for File fields2cover.h

Return to documentation for file (fields2cover.h)

//=============================================================================
//    Copyright (C) 2021-2024 Wageningen University - All Rights Reserved
//                     Author: Gonzalo Mier
//                        BSD-3 License
//=============================================================================

#pragma once
#ifndef FIELDS2COVER_H_
#define FIELDS2COVER_H_

#include "fields2cover/types.h"


#include "fields2cover/utils/random.h"
#include "fields2cover/utils/spline.h"
#include "fields2cover/utils/transformation.h"
#include "fields2cover/utils/parser.h"
#include "fields2cover/utils/visualizer.h"


#include "fields2cover/objectives/base_objective.h"

#include "fields2cover/objectives/hg_obj/hg_objective.h"
#include "fields2cover/objectives/hg_obj/rem_area.h"

#include "fields2cover/objectives/sg_obj/sg_objective.h"
#include "fields2cover/objectives/sg_obj/n_swath.h"
#include "fields2cover/objectives/sg_obj/n_swath_modified.h"
#include "fields2cover/objectives/sg_obj/field_coverage.h"
#include "fields2cover/objectives/sg_obj/overlaps.h"
#include "fields2cover/objectives/sg_obj/swath_length.h"

#include "fields2cover/objectives/rp_obj/rp_objective.h"
#include "fields2cover/objectives/rp_obj/direct_dist_path_obj.h"
#include "fields2cover/objectives/rp_obj/complete_turn_path_obj.h"

#include "fields2cover/objectives/pp_obj/pp_objective.h"
#include "fields2cover/objectives/pp_obj/path_length.h"

#include "fields2cover/objectives/decomp_obj/decomp_objective.h"


#include "fields2cover/decomposition/decomposition_base.h"
#include "fields2cover/decomposition/trapezoidal_decomp.h"
#include "fields2cover/decomposition/boustrophedon_decomp.h"

#include "fields2cover/headland_generator/headland_generator_base.h"
#include "fields2cover/headland_generator/constant_headland.h"

#include "fields2cover/swath_generator/swath_generator_base.h"
#include "fields2cover/swath_generator/brute_force.h"


#include "fields2cover/route_planning/single_cell_swaths_order_base.h"
#include "fields2cover/route_planning/boustrophedon_order.h"
#include "fields2cover/route_planning/snake_order.h"
#include "fields2cover/route_planning/spiral_order.h"
#include "fields2cover/route_planning/custom_order.h"

#include "fields2cover/route_planning/route_planner_base.h"

#include "fields2cover/path_planning/turning_base.h"
#include "fields2cover/path_planning/dubins_curves.h"
#include "fields2cover/path_planning/dubins_curves_cc.h"
#include "fields2cover/path_planning/reeds_shepp_curves.h"
#include "fields2cover/path_planning/reeds_shepp_curves_hc.h"
#include "fields2cover/path_planning/path_planning.h"


namespace f2c {


namespace types {}

namespace obj {}

namespace sg {}

enum class SGAlg {
  BRUTE_FORCE = 0,  //Default
  GIVEN_ANGLE = 1,
};

enum class SGObjFunc {
  N_SWATH_MOD = 0,  // Default
  N_SWATH = 1,
  SWATH_LENGTH = 2,
  FIELD_COV = 3,
  OVERLAPS = 4,
};

namespace rp {}

enum class RPAlg {
  SHORTEST_ROUTE = 0,  // Default
  //BOUSTROPHEDON = 1,
  //SNAKE = 2,
  //SPIRAL = 3,
  //CUSTOM = 4,
};

namespace pp {}

enum class PPAlg {
  DUBINS = 0,  // Default
  DUBINS_CC = 1,
  REEDS_SHEPP = 2,
  REEDS_SHEPP_HC = 3,
};


namespace hg {}

enum class HGAlg {
  NONE = 0,
  CONST = 1,  // Default
};


namespace decomp {}

enum class DecompAlg {
  NONE = 0,  // Default
  // TRAPEZOIDAL = 1,
  // BOUSTROPHEDON = 2,
};

struct Options {
  DecompAlg decomp_alg {DecompAlg::NONE};
  double decomp_angle {0.0};

  HGAlg hg_alg {HGAlg::CONST};
  int hg_swaths {3};

  SGAlg sg_alg {SGAlg::BRUTE_FORCE};
  SGObjFunc sg_obj {SGObjFunc::N_SWATH_MOD};
  double sg_angle {0.0};

  RPAlg rp_alg {RPAlg::SHORTEST_ROUTE};

  PPAlg pp_alg {PPAlg::DUBINS};
};

F2CRoute planCovRoute(const F2CRobot& robot, const F2CCell& cell,
    const Options& opt = Options());
F2CRoute planCovRoute(const F2CRobot& robot, const F2CCells& cells,
    const Options& opt = Options());
F2CRoute planCovRoute(const F2CRobot& robot, const F2CField& field,
    bool local_crs);
F2CRoute planCovRoute(const F2CRobot& robot, const F2CField& field,
    const Options& opt = Options(), bool local_crs = true);
F2CPath planCovPath(const F2CRobot& robot, const F2CCell& cell,
    const Options& opt = Options());
F2CPath planCovPath(const F2CRobot& robot, const F2CCells& cells,
    const Options& opt = Options());
F2CPath planCovPath(const F2CRobot& robot, const F2CField& field,
    bool local_crs);
F2CPath planCovPath(const F2CRobot& robot, const F2CField& field,
    const Options& opt = Options(), bool local_crs = true);

}  // namespace f2c

#endif  // FIELDS2COVER_H_