Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
G
gnss
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Deploy
Releases
Model registry
Monitor
Incidents
Service Desk
Analyze
Value stream analytics
Contributor analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
mobile_robotics
wolf_projects
wolf_lib
plugins
gnss
Commits
dface027
Commit
dface027
authored
5 years ago
by
Joan Vallvé Navarro
Browse files
Options
Downloads
Patches
Plain Diff
gtest for tdcp working
parent
bf0a0df1
No related branches found
No related tags found
2 merge requests
!28
release after RAL
,
!27
After 2nd RAL submission
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
test/gtest_factor_gnss_tdcp.cpp
+169
-57
169 additions, 57 deletions
test/gtest_factor_gnss_tdcp.cpp
with
169 additions
and
57 deletions
test/gtest_factor_gnss_tdcp.cpp
+
169
−
57
View file @
dface027
...
...
@@ -18,7 +18,7 @@ Vector3d rpy_enu_map;
Matrix3d
R_ecef_enu
,
R_enu_map
;
Quaterniond
q_map_base_r
,
q_map_base_k
;
Vector3d
t_ecef_sat1_r
,
t_ecef_sat2_r
,
t_ecef_sat3_r
,
t_ecef_sat4_r
,
t_ecef_sat1_k
,
t_ecef_sat2_k
,
t_ecef_sat3_k
,
t_ecef_sat4_k
;
double
prange1_r
,
prange
_
2_r
,
prange
_
3_r
,
prange
_
4_r
,
prange1_k
,
prange
_
2_k
,
prange
_
3_k
,
prange
_
4_k
;
double
prange1_r
,
prange2_r
,
prange3_r
,
prange4_r
,
prange1_k
,
prange2_k
,
prange3_k
,
prange4_k
;
Vector1d
clock_drift_r
,
clock_drift_k
;
// WOLF
...
...
@@ -74,14 +74,14 @@ void randomGroundtruth()
clock_drift_k
=
Vector1d
::
Random
()
*
1e2
;
// pseudo ranges
prange
_
1_r
=
(
t_ecef_sat1_r
-
t_ecef_antena_r
).
norm
()
+
clock_drift_r
(
0
);
prange
_
2_r
=
(
t_ecef_sat2_r
-
t_ecef_antena_r
).
norm
()
+
clock_drift_r
(
0
);
prange
_
3_r
=
(
t_ecef_sat3_r
-
t_ecef_antena_r
).
norm
()
+
clock_drift_r
(
0
);
prange
_
4_r
=
(
t_ecef_sat4_r
-
t_ecef_antena_r
).
norm
()
+
clock_drift_r
(
0
);
prange
_
1_k
=
(
t_ecef_sat1_k
-
t_ecef_antena_k
).
norm
()
+
clock_drift_k
(
0
);
prange
_
2_k
=
(
t_ecef_sat2_k
-
t_ecef_antena_k
).
norm
()
+
clock_drift_k
(
0
);
prange
_
3_k
=
(
t_ecef_sat3_k
-
t_ecef_antena_k
).
norm
()
+
clock_drift_k
(
0
);
prange
_
4_k
=
(
t_ecef_sat4_k
-
t_ecef_antena_k
).
norm
()
+
clock_drift_k
(
0
);
prange1_r
=
(
t_ecef_sat1_r
-
t_ecef_antena_r
).
norm
()
+
clock_drift_r
(
0
);
prange2_r
=
(
t_ecef_sat2_r
-
t_ecef_antena_r
).
norm
()
+
clock_drift_r
(
0
);
prange3_r
=
(
t_ecef_sat3_r
-
t_ecef_antena_r
).
norm
()
+
clock_drift_r
(
0
);
prange4_r
=
(
t_ecef_sat4_r
-
t_ecef_antena_r
).
norm
()
+
clock_drift_r
(
0
);
prange1_k
=
(
t_ecef_sat1_k
-
t_ecef_antena_k
).
norm
()
+
clock_drift_k
(
0
);
prange2_k
=
(
t_ecef_sat2_k
-
t_ecef_antena_k
).
norm
()
+
clock_drift_k
(
0
);
prange3_k
=
(
t_ecef_sat3_k
-
t_ecef_antena_k
).
norm
()
+
clock_drift_k
(
0
);
prange4_k
=
(
t_ecef_sat4_k
-
t_ecef_antena_k
).
norm
()
+
clock_drift_k
(
0
);
}
void
setUpProblem
()
...
...
@@ -109,31 +109,55 @@ void setUpProblem()
Vector7d
frm_r_state
;
frm_r_state
.
head
<
3
>
()
=
t_map_base_r
;
frm_r_state
.
tail
<
4
>
()
=
q_map_base_r
.
coeffs
();
frm_r
=
prb
->
emplaceFrame
(
KEY
,
frm_state
,
TimeStamp
(
0
));
// capture
cap
=
CaptureBase
::
emplace
<
CaptureGnss
>
(
frm
,
TimeStamp
(
0
),
gnss_sensor
,
nullptr
);
cap
->
addStateBlock
(
"T"
,
std
::
make_shared
<
StateBlock
>
(
clock_drift
,
false
),
prb
);
// features
obsd_t
obs1
{
0
};
obs1
.
P
[
0
]
=
prange_1
;
ftr1
=
FeatureBase
::
emplace
<
FeatureGnssSatellite
>
(
cap
,
obs1
,
t_ecef_sat1
);
obsd_t
obs2
{
0
};
obs2
.
P
[
0
]
=
prange_2
;
ftr2
=
FeatureBase
::
emplace
<
FeatureGnssSatellite
>
(
cap
,
obs2
,
t_ecef_sat2
);
obsd_t
obs3
{
0
};
obs3
.
P
[
0
]
=
prange_3
;
ftr3
=
FeatureBase
::
emplace
<
FeatureGnssSatellite
>
(
cap
,
obs3
,
t_ecef_sat3
);
obsd_t
obs4
{
0
};
obs4
.
P
[
0
]
=
prange_4
;
ftr4
=
FeatureBase
::
emplace
<
FeatureGnssSatellite
>
(
cap
,
obs4
,
t_ecef_sat4
);
frm_r
=
prb
->
emplaceFrame
(
KEY
,
frm_r_state
,
TimeStamp
(
0
));
// Frame k
Vector7d
frm_k_state
;
frm_k_state
.
head
<
3
>
()
=
t_map_base_k
;
frm_k_state
.
tail
<
4
>
()
=
q_map_base_k
.
coeffs
();
frm_k
=
prb
->
emplaceFrame
(
KEY
,
frm_k_state
,
TimeStamp
(
1
));
// capture r
cap_r
=
CaptureBase
::
emplace
<
CaptureGnss
>
(
frm_r
,
TimeStamp
(
0
),
gnss_sensor
,
nullptr
);
cap_r
->
addStateBlock
(
"T"
,
std
::
make_shared
<
StateBlock
>
(
clock_drift_r
,
false
),
prb
);
// capture k
cap_k
=
CaptureBase
::
emplace
<
CaptureGnss
>
(
frm_k
,
TimeStamp
(
1
),
gnss_sensor
,
nullptr
);
cap_k
->
addStateBlock
(
"T"
,
std
::
make_shared
<
StateBlock
>
(
clock_drift_k
,
false
),
prb
);
// features r
obsd_t
obs1_r
{
0
};
obs1_r
.
L
[
0
]
=
prange1_r
;
ftr1_r
=
FeatureBase
::
emplace
<
FeatureGnssSatellite
>
(
cap_r
,
obs1_r
,
t_ecef_sat1_r
);
obsd_t
obs2_r
{
0
};
obs2_r
.
L
[
0
]
=
prange2_r
;
ftr2_r
=
FeatureBase
::
emplace
<
FeatureGnssSatellite
>
(
cap_r
,
obs2_r
,
t_ecef_sat2_r
);
obsd_t
obs3_r
{
0
};
obs3_r
.
L
[
0
]
=
prange3_r
;
ftr3_r
=
FeatureBase
::
emplace
<
FeatureGnssSatellite
>
(
cap_r
,
obs3_r
,
t_ecef_sat3_r
);
obsd_t
obs4_r
{
0
};
obs4_r
.
L
[
0
]
=
prange4_r
;
ftr4_r
=
FeatureBase
::
emplace
<
FeatureGnssSatellite
>
(
cap_r
,
obs4_r
,
t_ecef_sat4_r
);
// features k
obsd_t
obs1_k
{
0
};
obs1_k
.
L
[
0
]
=
prange1_k
;
ftr1_k
=
FeatureBase
::
emplace
<
FeatureGnssSatellite
>
(
cap_k
,
obs1_k
,
t_ecef_sat1_k
);
obsd_t
obs2_k
{
0
};
obs2_k
.
L
[
0
]
=
prange2_k
;
ftr2_k
=
FeatureBase
::
emplace
<
FeatureGnssSatellite
>
(
cap_k
,
obs2_k
,
t_ecef_sat2_k
);
obsd_t
obs3_k
{
0
};
obs3_k
.
L
[
0
]
=
prange3_k
;
ftr3_k
=
FeatureBase
::
emplace
<
FeatureGnssSatellite
>
(
cap_k
,
obs3_k
,
t_ecef_sat3_k
);
obsd_t
obs4_k
{
0
};
obs4_k
.
L
[
0
]
=
prange4_k
;
ftr4_k
=
FeatureBase
::
emplace
<
FeatureGnssSatellite
>
(
cap_k
,
obs4_k
,
t_ecef_sat4_k
);
// factors
fac1
=
FactorBase
::
emplace
<
FactorGnss
PseudoRange
>
(
ftr1
,
Combination
::
C
ODE
_L1
,
0.1
,
ftr1
,
gnss_sensor
,
nullptr
,
false
);
fac2
=
FactorBase
::
emplace
<
FactorGnss
PseudoRange
>
(
ftr2
,
Combination
::
C
ODE
_L1
,
0.1
,
ftr2
,
gnss_sensor
,
nullptr
,
false
);
fac3
=
FactorBase
::
emplace
<
FactorGnss
PseudoRange
>
(
ftr3
,
Combination
::
C
ODE
_L1
,
0.1
,
ftr3
,
gnss_sensor
,
nullptr
,
false
);
fac4
=
FactorBase
::
emplace
<
FactorGnss
PseudoRange
>
(
ftr4
,
Combination
::
C
ODE
_L1
,
0.1
,
ftr4
,
gnss_sensor
,
nullptr
,
false
);
fac1
=
FactorBase
::
emplace
<
FactorGnss
Tdcp
>
(
ftr1
_r
,
Combination
::
C
ARRIER
_L1
,
0.1
,
ftr1
_r
,
ftr1_k
,
gnss_sensor
,
nullptr
,
false
);
fac2
=
FactorBase
::
emplace
<
FactorGnss
Tdcp
>
(
ftr2
_r
,
Combination
::
C
ARRIER
_L1
,
0.1
,
ftr2
_r
,
ftr2_k
,
gnss_sensor
,
nullptr
,
false
);
fac3
=
FactorBase
::
emplace
<
FactorGnss
Tdcp
>
(
ftr3
_r
,
Combination
::
C
ARRIER
_L1
,
0.1
,
ftr3
_r
,
ftr3_k
,
gnss_sensor
,
nullptr
,
false
);
fac4
=
FactorBase
::
emplace
<
FactorGnss
Tdcp
>
(
ftr4
_r
,
Combination
::
C
ARRIER
_L1
,
0.1
,
ftr4
_r
,
ftr4_k
,
gnss_sensor
,
nullptr
,
false
);
// ASSERTS
// ENU-MAP
...
...
@@ -143,11 +167,15 @@ void setUpProblem()
ASSERT_MATRIX_APPROX
(
gnss_sensor
->
getEnuMapTranslation
()
->
getState
(),
t_enu_map
,
1e-4
);
// Antena
ASSERT_MATRIX_APPROX
(
gnss_sensor
->
getP
()
->
getState
(),
t_base_antena
,
1e-4
);
// Frame
ASSERT_MATRIX_APPROX
(
frm
->
getP
()
->
getState
(),
t_map_base
,
1e-4
);
ASSERT_MATRIX_APPROX
(
frm
->
getO
()
->
getState
(),
q_map_base
.
coeffs
(),
1e-4
);
// clock drift
ASSERT_MATRIX_APPROX
(
clock_drift
,
cap
->
getStateBlock
(
"T"
)
->
getState
(),
1e-4
);
// Frame r
ASSERT_MATRIX_APPROX
(
frm_r
->
getP
()
->
getState
(),
t_map_base_r
,
1e-4
);
ASSERT_MATRIX_APPROX
(
frm_r
->
getO
()
->
getState
(),
q_map_base_r
.
coeffs
(),
1e-4
);
// Frame k
ASSERT_MATRIX_APPROX
(
frm_k
->
getP
()
->
getState
(),
t_map_base_k
,
1e-4
);
ASSERT_MATRIX_APPROX
(
frm_k
->
getO
()
->
getState
(),
q_map_base_k
.
coeffs
(),
1e-4
);
// clock drift
ASSERT_MATRIX_APPROX
(
clock_drift_r
,
cap_r
->
getStateBlock
(
"T"
)
->
getState
(),
1e-4
);
ASSERT_MATRIX_APPROX
(
clock_drift_k
,
cap_k
->
getStateBlock
(
"T"
)
->
getState
(),
1e-4
);
}
void
fixAllStates
()
...
...
@@ -159,14 +187,16 @@ void fixAllStates()
gnss_sensor
->
getEnuMapTranslation
()
->
fix
();
// Antena
gnss_sensor
->
getP
()
->
fix
();
// Frame
frm
->
fix
();
// Frames
frm_r
->
fix
();
frm_k
->
fix
();
// clock drift
cap
->
fix
();
cap_r
->
fix
();
cap_k
->
fix
();
}
////////////////////////////////////////////////////////
TEST
(
FactorGnss
PreusoRange
Test
,
observe_clock_drift
)
TEST
(
FactorGnss
Tdcp
Test
,
observe_clock_drift
_r
)
{
for
(
auto
i
=
0
;
i
<
100
;
i
++
)
{
...
...
@@ -176,10 +206,10 @@ TEST(FactorGnssPreusoRangeTest, observe_clock_drift)
// fix/unfix
fixAllStates
();
cap
->
getStateBlock
(
"T"
)
->
unfix
();
cap
_r
->
getStateBlock
(
"T"
)
->
unfix
();
// perturb
cap
->
getStateBlock
(
"T"
)
->
perturb
(
1e2
);
cap
_r
->
getStateBlock
(
"T"
)
->
perturb
(
1e2
);
// Only 1 factor
fac2
->
setStatus
(
FAC_INACTIVE
);
...
...
@@ -190,11 +220,11 @@ TEST(FactorGnssPreusoRangeTest, observe_clock_drift)
std
::
string
report
=
solver
->
solve
(
SolverManager
::
ReportVerbosity
::
FULL
);
//std::cout << report << std::endl;
ASSERT_MATRIX_APPROX
(
clock_drift
,
cap
->
getStateBlock
(
"T"
)
->
getState
(),
1e-4
);
ASSERT_MATRIX_APPROX
(
clock_drift
_r
,
cap
_r
->
getStateBlock
(
"T"
)
->
getState
(),
1e-4
);
}
}
TEST
(
FactorGnss
PreusoRange
Test
,
observe_
frame_p
)
TEST
(
FactorGnss
Tdcp
Test
,
observe_
clock_drift_k
)
{
for
(
auto
i
=
0
;
i
<
100
;
i
++
)
{
...
...
@@ -204,10 +234,38 @@ TEST(FactorGnssPreusoRangeTest, observe_frame_p)
// fix/unfix
fixAllStates
();
frm
->
getP
(
)
->
unfix
();
cap_k
->
getStateBlock
(
"T"
)
->
unfix
();
// perturb
frm
->
getP
()
->
perturb
(
1
);
cap_k
->
getStateBlock
(
"T"
)
->
perturb
(
1e2
);
// Only 1 factor
fac2
->
setStatus
(
FAC_INACTIVE
);
fac3
->
setStatus
(
FAC_INACTIVE
);
fac4
->
setStatus
(
FAC_INACTIVE
);
// solve
std
::
string
report
=
solver
->
solve
(
SolverManager
::
ReportVerbosity
::
FULL
);
//std::cout << report << std::endl;
ASSERT_MATRIX_APPROX
(
clock_drift_k
,
cap_k
->
getStateBlock
(
"T"
)
->
getState
(),
1e-4
);
}
}
TEST
(
FactorGnssTdcpTest
,
observe_frame_p_r
)
{
for
(
auto
i
=
0
;
i
<
100
;
i
++
)
{
// setup random problem
randomGroundtruth
();
setUpProblem
();
// fix/unfix
fixAllStates
();
frm_r
->
getP
()
->
unfix
();
// perturb
frm_r
->
getP
()
->
perturb
(
1
);
// Only 3 factors
fac4
->
setStatus
(
FAC_INACTIVE
);
...
...
@@ -216,11 +274,65 @@ TEST(FactorGnssPreusoRangeTest, observe_frame_p)
std
::
string
report
=
solver
->
solve
(
SolverManager
::
ReportVerbosity
::
FULL
);
//std::cout << report << std::endl;
ASSERT_MATRIX_APPROX
(
frm
->
getP
()
->
getState
(),
t_map_base
,
1e-4
);
ASSERT_MATRIX_APPROX
(
frm_r
->
getP
()
->
getState
(),
t_map_base_r
,
1e-4
);
}
}
TEST
(
FactorGnssTdcpTest
,
observe_frame_p_k
)
{
for
(
auto
i
=
0
;
i
<
100
;
i
++
)
{
// setup random problem
randomGroundtruth
();
setUpProblem
();
// fix/unfix
fixAllStates
();
frm_k
->
getP
()
->
unfix
();
// perturb
frm_k
->
getP
()
->
perturb
(
1
);
// Only 3 factors
fac4
->
setStatus
(
FAC_INACTIVE
);
// solve
std
::
string
report
=
solver
->
solve
(
SolverManager
::
ReportVerbosity
::
FULL
);
//std::cout << report << std::endl;
ASSERT_MATRIX_APPROX
(
frm_k
->
getP
()
->
getState
(),
t_map_base_k
,
1e-4
);
}
}
TEST
(
FactorGnssTdcpTest
,
observe_frame_p_clock_k
)
{
for
(
auto
i
=
0
;
i
<
100
;
i
++
)
{
// setup random problem
randomGroundtruth
();
setUpProblem
();
// fix/unfix
fixAllStates
();
frm_k
->
getP
()
->
unfix
();
cap_k
->
getStateBlock
(
"T"
)
->
unfix
();
// perturb
frm_k
->
getP
()
->
perturb
(
1
);
cap_k
->
getStateBlock
(
"T"
)
->
perturb
(
1e2
);
// all 4 factors
// solve
std
::
string
report
=
solver
->
solve
(
SolverManager
::
ReportVerbosity
::
FULL
);
//std::cout << report << std::endl;
ASSERT_MATRIX_APPROX
(
frm_k
->
getP
()
->
getState
(),
t_map_base_k
,
1e-4
);
ASSERT_MATRIX_APPROX
(
clock_drift_k
,
cap_k
->
getStateBlock
(
"T"
)
->
getState
(),
1e-4
);
}
}
TEST
(
FactorGnss
PreusoRange
Test
,
observe_frame_p_clock
)
TEST
(
FactorGnss
Tdcp
Test
,
observe_frame_p_clock
_r
)
{
for
(
auto
i
=
0
;
i
<
100
;
i
++
)
{
...
...
@@ -230,12 +342,12 @@ TEST(FactorGnssPreusoRangeTest, observe_frame_p_clock)
// fix/unfix
fixAllStates
();
frm
->
getP
()
->
unfix
();
cap
->
getStateBlock
(
"T"
)
->
unfix
();
frm
_r
->
getP
()
->
unfix
();
cap
_r
->
getStateBlock
(
"T"
)
->
unfix
();
// perturb
frm
->
getP
()
->
perturb
(
1
);
cap
->
getStateBlock
(
"T"
)
->
perturb
(
1e2
);
frm
_r
->
getP
()
->
perturb
(
1
);
cap
_r
->
getStateBlock
(
"T"
)
->
perturb
(
1e2
);
// all 4 factors
...
...
@@ -243,12 +355,12 @@ TEST(FactorGnssPreusoRangeTest, observe_frame_p_clock)
std
::
string
report
=
solver
->
solve
(
SolverManager
::
ReportVerbosity
::
FULL
);
//std::cout << report << std::endl;
ASSERT_MATRIX_APPROX
(
frm
->
getP
()
->
getState
(),
t_map_base
,
1e-4
);
ASSERT_MATRIX_APPROX
(
clock_drift
,
cap
->
getStateBlock
(
"T"
)
->
getState
(),
1e-4
);
ASSERT_MATRIX_APPROX
(
frm
_r
->
getP
()
->
getState
(),
t_map_base
_r
,
1e-4
);
ASSERT_MATRIX_APPROX
(
clock_drift
_r
,
cap
_r
->
getStateBlock
(
"T"
)
->
getState
(),
1e-4
);
}
}
TEST
(
FactorGnss
PreusoRange
Test
,
observe_enumap_p
)
TEST
(
FactorGnss
Tdcp
Test
,
observe_enumap_p
)
{
for
(
auto
i
=
0
;
i
<
100
;
i
++
)
{
...
...
@@ -274,7 +386,7 @@ TEST(FactorGnssPreusoRangeTest, observe_enumap_p)
}
}
TEST
(
FactorGnss
PreusoRange
Test
,
observe_enumap_o
)
TEST
(
FactorGnss
Tdcp
Test
,
observe_enumap_o
)
{
for
(
auto
i
=
0
;
i
<
100
;
i
++
)
{
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment