tutorials
7_decomposition.cpp
Go to the documentation of this file.
1
//=============================================================================
2
// Copyright (C) 2021-2024 Wageningen University - All Rights Reserved
3
// Author: Gonzalo Mier
4
// BSD-3 License
5
//=============================================================================
6
7
8
#include "
fields2cover.h
"
9
#include <iostream>
10
11
int
main
() {
12
std::cout <<
"####### Tutorial 7.1 Why and when decompose ######"
<< std::endl;
13
14
F2CCells
cells
(
F2CCell
(
F2CLinearRing
({
15
F2CPoint
( 0, 0),
16
F2CPoint
( 90, 0),
17
F2CPoint
( 90, 20),
18
F2CPoint
( 20, 20),
19
F2CPoint
( 20, 90),
20
F2CPoint
( 0, 90),
21
F2CPoint
( 0, 0)})));
22
23
f2c::Visualizer::figure
();
24
f2c::Visualizer::plot
(
cells
);
25
f2c::Visualizer::xlim
(-5,95);
26
f2c::Visualizer::ylim
(-5,95);
27
f2c::Visualizer::save
(
"Tutorial_7_1_field.png"
);
28
29
F2CRobot
robot
(1.0, 1.0);
30
double
r_w
=
robot
.getCovWidth();
31
32
f2c::hg::ConstHL
const_hl
;
33
f2c::sg::BruteForce
bf
;
34
f2c::obj::NSwathModified
obj
;
35
36
F2CCells
no_hl_wo_decomp
=
const_hl
.generateHeadlands(
cells
, 3.0 *
r_w
);
37
F2CSwathsByCells
swaths_wo_decomp
=
bf
.generateBestSwaths(
obj
,
r_w
,
no_hl_wo_decomp
);
38
std::cout <<
"Without decomposition >> "
<<
obj
.computeCost(
swaths_wo_decomp
) << std::endl;
39
40
f2c::decomp::TrapezoidalDecomp
decomp
;
41
decomp
.setSplitAngle(0.5*M_PI);
42
F2CCells
decomp_cell
=
decomp
.decompose(
cells
);
43
44
F2CCells
no_hl_decomp
=
const_hl
.generateHeadlands(
decomp_cell
, 3.0 *
r_w
);
45
F2CSwathsByCells
swaths_decomp
=
bf
.generateBestSwaths(
obj
,
r_w
,
no_hl_decomp
);
46
std::cout <<
"With decomposition >> "
<<
obj
.computeCost(
swaths_decomp
) << std::endl;
47
48
49
f2c::Visualizer::figure
();
50
f2c::Visualizer::plot
(
cells
);
51
f2c::Visualizer::plot
(
no_hl_wo_decomp
);
52
f2c::Visualizer::plot
(
swaths_wo_decomp
);
53
f2c::Visualizer::xlim
(-5,95);
54
f2c::Visualizer::ylim
(-5,95);
55
f2c::Visualizer::save
(
"Tutorial_7_1_without_decomposition.png"
);
56
57
f2c::Visualizer::figure
();
58
f2c::Visualizer::plot
(
decomp_cell
);
59
f2c::Visualizer::plot
(
no_hl_decomp
);
60
f2c::Visualizer::plot
(
swaths_decomp
);
61
f2c::Visualizer::xlim
(-5,95);
62
f2c::Visualizer::ylim
(-5,95);
63
f2c::Visualizer::save
(
"Tutorial_7_1_with_decomposition.png"
);
64
65
std::cout <<
"####### Tutorial 7.2 Decomposition with route planner ######"
<< std::endl;
66
67
68
F2CCells
mid_hl
=
const_hl
.generateHeadlands(
cells
, 1.5 *
r_w
);
69
F2CCells
decomp_mid_hl
=
decomp
.decompose(
mid_hl
);
70
F2CCells
no_hl
=
const_hl
.generateHeadlands(
decomp_mid_hl
, 1.5 *
r_w
);
71
F2CSwathsByCells
swaths
=
bf
.generateBestSwaths(
obj
,
r_w
,
no_hl
);
72
73
f2c::rp::RoutePlannerBase
route_planner
;
74
F2CRoute
route
=
route_planner
.genRoute(
mid_hl
,
swaths
);
75
76
f2c::Visualizer::figure
();
77
f2c::Visualizer::plot
(
cells
);
78
f2c::Visualizer::plot
(
no_hl
);
79
f2c::Visualizer::plot
(
route
);
80
f2c::Visualizer::xlim
(-5,95);
81
f2c::Visualizer::ylim
(-5,95);
82
f2c::Visualizer::save
(
"Tutorial_7_2_route.png"
);
83
84
return
0;
85
}
86
87
f2c::hg::ConstHL
Class to generate headlands with equal width in each border.
Definition:
constant_headland.h:18
7_decomposition.swaths_wo_decomp
swaths_wo_decomp
Definition:
7_decomposition.py:35
5_route_planning.swaths
swaths
Definition:
5_route_planning.py:58
1_basic_types.cells
cells
Definition:
1_basic_types.py:93
f2c::Visualizer::plot
static void plot(double x, double y, const std::vector< double > &color={})
Definition:
visualizer.cpp:23
7_decomposition.no_hl_wo_decomp
no_hl_wo_decomp
Definition:
7_decomposition.py:34
7_decomposition.swaths_decomp
swaths_decomp
Definition:
7_decomposition.py:43
7_decomposition.decomp_cell
decomp_cell
Definition:
7_decomposition.py:40
F2CCell
f2c::types::Cell F2CCell
Definition:
types.h:43
7_decomposition.decomp
decomp
Definition:
7_decomposition.py:38
f2c::Visualizer::xlim
static void xlim(double min, double max)
Definition:
visualizer.cpp:280
7_decomposition.decomp_mid_hl
decomp_mid_hl
Definition:
7_decomposition.py:66
2_objective_functions.robot
robot
Definition:
2_objective_functions.py:76
fields2cover.h
f2c::decomp::TrapezoidalDecomp
Trapezoidal decomposition .
Definition:
trapezoidal_decomp.h:20
5_route_planning.route
route
Definition:
5_route_planning.py:29
3_headland_generator.const_hl
const_hl
Definition:
3_headland_generator.py:17
5_route_planning.route_planner
route_planner
Definition:
5_route_planning.py:28
7_decomposition.obj
obj
Definition:
7_decomposition.py:32
main
int main()
Definition:
7_decomposition.cpp:11
7_decomposition.r_w
r_w
Definition:
7_decomposition.py:28
F2CLinearRing
f2c::types::LinearRing F2CLinearRing
Definition:
types.h:41
f2c::types::Cells
Definition:
Cells.h:21
f2c::types::Route
Definition:
Route.h:23
f2c::types::Robot
Definition:
Robot.h:25
3_headland_generator.no_hl
no_hl
Definition:
3_headland_generator.py:18
f2c::types::SwathsByCells
Definition:
SwathsByCells.h:17
7_decomposition.mid_hl
mid_hl
Definition:
7_decomposition.py:65
f2c::rp::RoutePlannerBase
Definition:
route_planner_base.h:23
f2c::Visualizer::figure
static void figure()
Create figure to plot on.
Definition:
visualizer.cpp:254
f2c::Visualizer::save
static void save(const std::string &file)
Definition:
visualizer.cpp:272
f2c::Visualizer::ylim
static void ylim(double min, double max)
Definition:
visualizer.cpp:284
F2CPoint
f2c::types::Point F2CPoint
Definition:
types.h:38
5_route_planning.bf
bf
Definition:
5_route_planning.py:25
f2c::obj::NSwathModified
SG cost function as the number of swaths .
Definition:
n_swath_modified.h:20
f2c::sg::BruteForce
Definition:
brute_force.h:20
7_decomposition.no_hl_decomp
no_hl_decomp
Definition:
7_decomposition.py:42
fields2cover
Author(s):
autogenerated on Fri Apr 25 2025 02:18:31