nrl-tracker 0.22.0__py3-none-any.whl → 0.22.2__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {nrl_tracker-0.22.0.dist-info → nrl_tracker-0.22.2.dist-info}/METADATA +1 -1
- nrl_tracker-0.22.2.dist-info/RECORD +150 -0
- pytcl/__init__.py +11 -9
- pytcl/assignment_algorithms/__init__.py +42 -32
- pytcl/assignment_algorithms/data_association.py +3 -7
- pytcl/assignment_algorithms/gating.py +2 -4
- pytcl/assignment_algorithms/jpda.py +2 -6
- pytcl/assignment_algorithms/three_dimensional/__init__.py +8 -6
- pytcl/assignment_algorithms/three_dimensional/assignment.py +2 -6
- pytcl/assignment_algorithms/two_dimensional/__init__.py +13 -9
- pytcl/assignment_algorithms/two_dimensional/assignment.py +2 -5
- pytcl/assignment_algorithms/two_dimensional/kbest.py +6 -8
- pytcl/astronomical/__init__.py +108 -96
- pytcl/astronomical/ephemerides.py +1 -3
- pytcl/astronomical/lambert.py +1 -2
- pytcl/astronomical/time_systems.py +1 -2
- pytcl/atmosphere/__init__.py +13 -11
- pytcl/atmosphere/models.py +2 -4
- pytcl/clustering/__init__.py +36 -28
- pytcl/clustering/dbscan.py +2 -5
- pytcl/clustering/gaussian_mixture.py +2 -6
- pytcl/clustering/hierarchical.py +2 -6
- pytcl/clustering/kmeans.py +2 -6
- pytcl/containers/__init__.py +26 -29
- pytcl/containers/cluster_set.py +2 -10
- pytcl/containers/covertree.py +2 -8
- pytcl/containers/kd_tree.py +2 -6
- pytcl/containers/measurement_set.py +2 -9
- pytcl/containers/rtree.py +2 -6
- pytcl/containers/track_list.py +13 -13
- pytcl/containers/vptree.py +2 -7
- pytcl/coordinate_systems/__init__.py +74 -69
- pytcl/coordinate_systems/conversions/__init__.py +24 -20
- pytcl/coordinate_systems/conversions/geodetic.py +2 -4
- pytcl/coordinate_systems/conversions/spherical.py +2 -4
- pytcl/coordinate_systems/jacobians/__init__.py +12 -10
- pytcl/coordinate_systems/jacobians/jacobians.py +1 -2
- pytcl/coordinate_systems/projections/__init__.py +21 -23
- pytcl/coordinate_systems/projections/projections.py +1 -3
- pytcl/coordinate_systems/rotations/__init__.py +22 -20
- pytcl/coordinate_systems/rotations/rotations.py +1 -2
- pytcl/core/__init__.py +22 -16
- pytcl/core/array_utils.py +3 -6
- pytcl/core/validation.py +2 -7
- pytcl/dynamic_estimation/__init__.py +86 -77
- pytcl/dynamic_estimation/imm.py +3 -7
- pytcl/dynamic_estimation/information_filter.py +6 -8
- pytcl/dynamic_estimation/kalman/__init__.py +48 -40
- pytcl/dynamic_estimation/kalman/extended.py +2 -4
- pytcl/dynamic_estimation/kalman/linear.py +3 -7
- pytcl/dynamic_estimation/kalman/square_root.py +2 -5
- pytcl/dynamic_estimation/kalman/unscented.py +3 -8
- pytcl/dynamic_estimation/particle_filters/__init__.py +14 -12
- pytcl/dynamic_estimation/particle_filters/bootstrap.py +2 -6
- pytcl/dynamic_estimation/smoothers.py +3 -8
- pytcl/dynamic_models/__init__.py +41 -37
- pytcl/dynamic_models/continuous_time/__init__.py +11 -11
- pytcl/dynamic_models/continuous_time/dynamics.py +2 -4
- pytcl/dynamic_models/discrete_time/__init__.py +13 -11
- pytcl/dynamic_models/process_noise/__init__.py +13 -11
- pytcl/gravity/__init__.py +65 -55
- pytcl/gravity/clenshaw.py +1 -2
- pytcl/gravity/egm.py +3 -8
- pytcl/gravity/spherical_harmonics.py +1 -2
- pytcl/gravity/tides.py +1 -2
- pytcl/magnetism/__init__.py +25 -26
- pytcl/magnetism/emm.py +1 -4
- pytcl/magnetism/igrf.py +6 -5
- pytcl/magnetism/wmm.py +1 -2
- pytcl/mathematical_functions/__init__.py +87 -69
- pytcl/mathematical_functions/basic_matrix/__init__.py +19 -25
- pytcl/mathematical_functions/basic_matrix/decompositions.py +2 -5
- pytcl/mathematical_functions/basic_matrix/special_matrices.py +1 -2
- pytcl/mathematical_functions/combinatorics/__init__.py +14 -18
- pytcl/mathematical_functions/combinatorics/combinatorics.py +1 -4
- pytcl/mathematical_functions/geometry/__init__.py +15 -15
- pytcl/mathematical_functions/geometry/geometry.py +3 -6
- pytcl/mathematical_functions/interpolation/__init__.py +12 -10
- pytcl/mathematical_functions/interpolation/interpolation.py +2 -7
- pytcl/mathematical_functions/numerical_integration/__init__.py +10 -16
- pytcl/mathematical_functions/numerical_integration/quadrature.py +2 -6
- pytcl/mathematical_functions/signal_processing/__init__.py +30 -42
- pytcl/mathematical_functions/signal_processing/detection.py +3 -6
- pytcl/mathematical_functions/signal_processing/filters.py +2 -5
- pytcl/mathematical_functions/signal_processing/matched_filter.py +3 -6
- pytcl/mathematical_functions/special_functions/__init__.py +76 -74
- pytcl/mathematical_functions/special_functions/bessel.py +1 -2
- pytcl/mathematical_functions/special_functions/debye.py +2 -4
- pytcl/mathematical_functions/special_functions/elliptic.py +1 -2
- pytcl/mathematical_functions/special_functions/error_functions.py +1 -2
- pytcl/mathematical_functions/special_functions/gamma_functions.py +1 -2
- pytcl/mathematical_functions/special_functions/hypergeometric.py +1 -2
- pytcl/mathematical_functions/special_functions/lambert_w.py +1 -2
- pytcl/mathematical_functions/special_functions/marcum_q.py +1 -2
- pytcl/mathematical_functions/statistics/__init__.py +31 -27
- pytcl/mathematical_functions/statistics/distributions.py +4 -9
- pytcl/mathematical_functions/statistics/estimators.py +1 -2
- pytcl/mathematical_functions/transforms/__init__.py +51 -45
- pytcl/mathematical_functions/transforms/fourier.py +2 -5
- pytcl/mathematical_functions/transforms/stft.py +2 -5
- pytcl/mathematical_functions/transforms/wavelets.py +2 -7
- pytcl/navigation/__init__.py +99 -89
- pytcl/navigation/geodesy.py +2 -4
- pytcl/navigation/great_circle.py +1 -3
- pytcl/navigation/ins.py +5 -11
- pytcl/navigation/ins_gnss.py +12 -17
- pytcl/navigation/rhumb.py +2 -4
- pytcl/performance_evaluation/__init__.py +25 -21
- pytcl/performance_evaluation/estimation_metrics.py +1 -3
- pytcl/performance_evaluation/track_metrics.py +1 -3
- pytcl/plotting/__init__.py +38 -30
- pytcl/plotting/coordinates.py +1 -3
- pytcl/plotting/ellipses.py +2 -5
- pytcl/plotting/metrics.py +1 -2
- pytcl/plotting/tracks.py +1 -4
- pytcl/static_estimation/__init__.py +41 -37
- pytcl/static_estimation/least_squares.py +2 -4
- pytcl/static_estimation/maximum_likelihood.py +2 -5
- pytcl/static_estimation/robust.py +2 -5
- pytcl/terrain/__init__.py +34 -28
- pytcl/terrain/dem.py +1 -4
- pytcl/terrain/loaders.py +1 -4
- pytcl/terrain/visibility.py +1 -2
- pytcl/trackers/__init__.py +14 -17
- pytcl/trackers/hypothesis.py +1 -6
- pytcl/trackers/mht.py +9 -13
- pytcl/trackers/multi_target.py +3 -8
- pytcl/trackers/single_target.py +2 -5
- nrl_tracker-0.22.0.dist-info/RECORD +0 -150
- {nrl_tracker-0.22.0.dist-info → nrl_tracker-0.22.2.dist-info}/LICENSE +0 -0
- {nrl_tracker-0.22.0.dist-info → nrl_tracker-0.22.2.dist-info}/WHEEL +0 -0
- {nrl_tracker-0.22.0.dist-info → nrl_tracker-0.22.2.dist-info}/top_level.txt +0 -0
|
@@ -6,16 +6,12 @@ for PDF, CDF, sampling, and moment calculations. These wrap scipy.stats
|
|
|
6
6
|
distributions with additional functionality useful for tracking applications.
|
|
7
7
|
"""
|
|
8
8
|
|
|
9
|
-
from abc import ABC
|
|
10
|
-
from
|
|
11
|
-
from typing import Optional
|
|
12
|
-
from typing import Tuple
|
|
13
|
-
from typing import Union
|
|
9
|
+
from abc import ABC, abstractmethod
|
|
10
|
+
from typing import Optional, Tuple, Union
|
|
14
11
|
|
|
15
12
|
import numpy as np
|
|
16
13
|
import scipy.stats as stats
|
|
17
|
-
from numpy.typing import ArrayLike
|
|
18
|
-
from numpy.typing import NDArray
|
|
14
|
+
from numpy.typing import ArrayLike, NDArray
|
|
19
15
|
|
|
20
16
|
|
|
21
17
|
class Distribution(ABC):
|
|
@@ -565,8 +561,7 @@ class VonMises(Distribution):
|
|
|
565
561
|
|
|
566
562
|
def var(self) -> float:
|
|
567
563
|
# Circular variance: 1 - I_1(kappa)/I_0(kappa)
|
|
568
|
-
from scipy.special import i0
|
|
569
|
-
from scipy.special import i1
|
|
564
|
+
from scipy.special import i0, i1
|
|
570
565
|
|
|
571
566
|
return 1 - i1(self._kappa) / i0(self._kappa)
|
|
572
567
|
|
|
@@ -8,8 +8,7 @@ robust estimators, and related quantities used in tracking applications.
|
|
|
8
8
|
from typing import Optional
|
|
9
9
|
|
|
10
10
|
import numpy as np
|
|
11
|
-
from numpy.typing import ArrayLike
|
|
12
|
-
from numpy.typing import NDArray
|
|
11
|
+
from numpy.typing import ArrayLike, NDArray
|
|
13
12
|
|
|
14
13
|
|
|
15
14
|
def weighted_mean(
|
|
@@ -7,51 +7,57 @@ This module provides signal transforms for time-frequency analysis:
|
|
|
7
7
|
- Wavelet transforms (CWT and DWT)
|
|
8
8
|
"""
|
|
9
9
|
|
|
10
|
-
from pytcl.mathematical_functions.transforms.fourier import
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
from pytcl.mathematical_functions.transforms.stft import
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
from pytcl.mathematical_functions.transforms.wavelets import
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
10
|
+
from pytcl.mathematical_functions.transforms.fourier import (
|
|
11
|
+
CoherenceResult,
|
|
12
|
+
CrossSpectrum,
|
|
13
|
+
PowerSpectrum,
|
|
14
|
+
coherence,
|
|
15
|
+
cross_spectrum,
|
|
16
|
+
fft,
|
|
17
|
+
fft2,
|
|
18
|
+
fftshift,
|
|
19
|
+
frequency_axis,
|
|
20
|
+
ifft,
|
|
21
|
+
ifft2,
|
|
22
|
+
ifftshift,
|
|
23
|
+
irfft,
|
|
24
|
+
magnitude_spectrum,
|
|
25
|
+
periodogram,
|
|
26
|
+
phase_spectrum,
|
|
27
|
+
power_spectrum,
|
|
28
|
+
rfft,
|
|
29
|
+
rfft_frequency_axis,
|
|
30
|
+
)
|
|
31
|
+
from pytcl.mathematical_functions.transforms.stft import (
|
|
32
|
+
Spectrogram,
|
|
33
|
+
STFTResult,
|
|
34
|
+
get_window,
|
|
35
|
+
istft,
|
|
36
|
+
mel_spectrogram,
|
|
37
|
+
reassigned_spectrogram,
|
|
38
|
+
spectrogram,
|
|
39
|
+
stft,
|
|
40
|
+
window_bandwidth,
|
|
41
|
+
)
|
|
42
|
+
from pytcl.mathematical_functions.transforms.wavelets import (
|
|
43
|
+
PYWT_AVAILABLE,
|
|
44
|
+
CWTResult,
|
|
45
|
+
DWTResult,
|
|
46
|
+
available_wavelets,
|
|
47
|
+
cwt,
|
|
48
|
+
dwt,
|
|
49
|
+
dwt_single_level,
|
|
50
|
+
frequencies_to_scales,
|
|
51
|
+
gaussian_wavelet,
|
|
52
|
+
idwt,
|
|
53
|
+
idwt_single_level,
|
|
54
|
+
morlet_wavelet,
|
|
55
|
+
ricker_wavelet,
|
|
56
|
+
scales_to_frequencies,
|
|
57
|
+
threshold_coefficients,
|
|
58
|
+
wavelet_info,
|
|
59
|
+
wpt,
|
|
60
|
+
)
|
|
55
61
|
|
|
56
62
|
__all__ = [
|
|
57
63
|
# Fourier transform types
|
|
@@ -23,13 +23,10 @@ References
|
|
|
23
23
|
Electroacoustics, 15(2), 70-73.
|
|
24
24
|
"""
|
|
25
25
|
|
|
26
|
-
from typing import NamedTuple
|
|
27
|
-
from typing import Optional
|
|
28
|
-
from typing import Union
|
|
26
|
+
from typing import NamedTuple, Optional, Union
|
|
29
27
|
|
|
30
28
|
import numpy as np
|
|
31
|
-
from numpy.typing import ArrayLike
|
|
32
|
-
from numpy.typing import NDArray
|
|
29
|
+
from numpy.typing import ArrayLike, NDArray
|
|
33
30
|
from scipy import fft as scipy_fft
|
|
34
31
|
from scipy import signal as scipy_signal
|
|
35
32
|
|
|
@@ -22,13 +22,10 @@ References
|
|
|
22
22
|
Speech, and Signal Processing, 32(2), 236-243.
|
|
23
23
|
"""
|
|
24
24
|
|
|
25
|
-
from typing import NamedTuple
|
|
26
|
-
from typing import Optional
|
|
27
|
-
from typing import Union
|
|
25
|
+
from typing import NamedTuple, Optional, Union
|
|
28
26
|
|
|
29
27
|
import numpy as np
|
|
30
|
-
from numpy.typing import ArrayLike
|
|
31
|
-
from numpy.typing import NDArray
|
|
28
|
+
from numpy.typing import ArrayLike, NDArray
|
|
32
29
|
from scipy import signal as scipy_signal
|
|
33
30
|
|
|
34
31
|
# =============================================================================
|
|
@@ -20,15 +20,10 @@ References
|
|
|
20
20
|
.. [2] Daubechies, I. (1992). Ten Lectures on Wavelets. SIAM.
|
|
21
21
|
"""
|
|
22
22
|
|
|
23
|
-
from typing import Callable
|
|
24
|
-
from typing import List
|
|
25
|
-
from typing import NamedTuple
|
|
26
|
-
from typing import Optional
|
|
27
|
-
from typing import Union
|
|
23
|
+
from typing import Callable, List, NamedTuple, Optional, Union
|
|
28
24
|
|
|
29
25
|
import numpy as np
|
|
30
|
-
from numpy.typing import ArrayLike
|
|
31
|
-
from numpy.typing import NDArray
|
|
26
|
+
from numpy.typing import ArrayLike, NDArray
|
|
32
27
|
|
|
33
28
|
# Try to import pywavelets for DWT support
|
|
34
29
|
try:
|
pytcl/navigation/__init__.py
CHANGED
|
@@ -14,101 +14,111 @@ needed in tracking applications, including:
|
|
|
14
14
|
from pytcl.navigation.geodesy import (
|
|
15
15
|
GRS80, # Ellipsoids; Coordinate conversions; Geodetic problems
|
|
16
16
|
)
|
|
17
|
-
from pytcl.navigation.geodesy import
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
17
|
+
from pytcl.navigation.geodesy import (
|
|
18
|
+
SPHERE,
|
|
19
|
+
WGS84,
|
|
20
|
+
Ellipsoid,
|
|
21
|
+
direct_geodetic,
|
|
22
|
+
ecef_to_enu,
|
|
23
|
+
ecef_to_geodetic,
|
|
24
|
+
ecef_to_ned,
|
|
25
|
+
enu_to_ecef,
|
|
26
|
+
geodetic_to_ecef,
|
|
27
|
+
haversine_distance,
|
|
28
|
+
inverse_geodetic,
|
|
29
|
+
ned_to_ecef,
|
|
30
|
+
)
|
|
29
31
|
from pytcl.navigation.great_circle import EARTH_RADIUS # Great circle navigation
|
|
30
|
-
from pytcl.navigation.great_circle import
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
32
|
+
from pytcl.navigation.great_circle import (
|
|
33
|
+
CrossTrackResult,
|
|
34
|
+
GreatCircleResult,
|
|
35
|
+
IntersectionResult,
|
|
36
|
+
WaypointResult,
|
|
37
|
+
angular_distance,
|
|
38
|
+
cross_track_distance,
|
|
39
|
+
destination_point,
|
|
40
|
+
great_circle_azimuth,
|
|
41
|
+
great_circle_direct,
|
|
42
|
+
great_circle_distance,
|
|
43
|
+
great_circle_intersect,
|
|
44
|
+
great_circle_inverse,
|
|
45
|
+
great_circle_path_intersect,
|
|
46
|
+
great_circle_tdoa_loc,
|
|
47
|
+
great_circle_waypoint,
|
|
48
|
+
great_circle_waypoints,
|
|
49
|
+
)
|
|
46
50
|
from pytcl.navigation.ins import (
|
|
47
51
|
A_EARTH, # Constants; State representation; Gravity and Earth rate
|
|
48
52
|
)
|
|
49
|
-
from pytcl.navigation.ins import
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
53
|
+
from pytcl.navigation.ins import (
|
|
54
|
+
B_EARTH,
|
|
55
|
+
E2_EARTH,
|
|
56
|
+
F_EARTH,
|
|
57
|
+
GM_EARTH,
|
|
58
|
+
OMEGA_EARTH,
|
|
59
|
+
IMUData,
|
|
60
|
+
INSErrorState,
|
|
61
|
+
INSState,
|
|
62
|
+
coarse_alignment,
|
|
63
|
+
compensate_imu_data,
|
|
64
|
+
coning_correction,
|
|
65
|
+
earth_rate_ned,
|
|
66
|
+
gravity_ned,
|
|
67
|
+
gyrocompass_alignment,
|
|
68
|
+
initialize_ins_state,
|
|
69
|
+
ins_error_state_matrix,
|
|
70
|
+
ins_process_noise_matrix,
|
|
71
|
+
mechanize_ins_ned,
|
|
72
|
+
normal_gravity,
|
|
73
|
+
radii_of_curvature,
|
|
74
|
+
sculling_correction,
|
|
75
|
+
skew_symmetric,
|
|
76
|
+
transport_rate_ned,
|
|
77
|
+
update_attitude_ned,
|
|
78
|
+
update_quaternion,
|
|
79
|
+
)
|
|
74
80
|
from pytcl.navigation.ins_gnss import GPS_L1_FREQ # INS/GNSS integration
|
|
75
|
-
from pytcl.navigation.ins_gnss import
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
81
|
+
from pytcl.navigation.ins_gnss import (
|
|
82
|
+
GPS_L1_WAVELENGTH,
|
|
83
|
+
SPEED_OF_LIGHT,
|
|
84
|
+
GNSSMeasurement,
|
|
85
|
+
INSGNSSState,
|
|
86
|
+
LooseCoupledResult,
|
|
87
|
+
SatelliteInfo,
|
|
88
|
+
TightCoupledResult,
|
|
89
|
+
compute_dop,
|
|
90
|
+
compute_line_of_sight,
|
|
91
|
+
gnss_outage_detection,
|
|
92
|
+
initialize_ins_gnss,
|
|
93
|
+
loose_coupled_predict,
|
|
94
|
+
loose_coupled_update,
|
|
95
|
+
loose_coupled_update_position,
|
|
96
|
+
loose_coupled_update_velocity,
|
|
97
|
+
position_measurement_matrix,
|
|
98
|
+
position_velocity_measurement_matrix,
|
|
99
|
+
pseudorange_measurement_matrix,
|
|
100
|
+
satellite_elevation_azimuth,
|
|
101
|
+
tight_coupled_measurement_matrix,
|
|
102
|
+
tight_coupled_pseudorange_innovation,
|
|
103
|
+
tight_coupled_update,
|
|
104
|
+
velocity_measurement_matrix,
|
|
105
|
+
)
|
|
98
106
|
from pytcl.navigation.rhumb import RhumbDirectResult # Rhumb line navigation
|
|
99
|
-
from pytcl.navigation.rhumb import
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
107
|
+
from pytcl.navigation.rhumb import (
|
|
108
|
+
RhumbIntersectionResult,
|
|
109
|
+
RhumbResult,
|
|
110
|
+
compare_great_circle_rhumb,
|
|
111
|
+
direct_rhumb,
|
|
112
|
+
direct_rhumb_spherical,
|
|
113
|
+
indirect_rhumb,
|
|
114
|
+
indirect_rhumb_spherical,
|
|
115
|
+
rhumb_bearing,
|
|
116
|
+
rhumb_distance_ellipsoidal,
|
|
117
|
+
rhumb_distance_spherical,
|
|
118
|
+
rhumb_intersect,
|
|
119
|
+
rhumb_midpoint,
|
|
120
|
+
rhumb_waypoints,
|
|
121
|
+
)
|
|
112
122
|
|
|
113
123
|
__all__ = [
|
|
114
124
|
# Ellipsoids
|
pytcl/navigation/geodesy.py
CHANGED
|
@@ -8,12 +8,10 @@ This module provides geodetic utilities including:
|
|
|
8
8
|
- Earth ellipsoid parameters
|
|
9
9
|
"""
|
|
10
10
|
|
|
11
|
-
from typing import NamedTuple
|
|
12
|
-
from typing import Tuple
|
|
11
|
+
from typing import NamedTuple, Tuple
|
|
13
12
|
|
|
14
13
|
import numpy as np
|
|
15
|
-
from numpy.typing import ArrayLike
|
|
16
|
-
from numpy.typing import NDArray
|
|
14
|
+
from numpy.typing import ArrayLike, NDArray
|
|
17
15
|
|
|
18
16
|
|
|
19
17
|
class Ellipsoid(NamedTuple):
|
pytcl/navigation/great_circle.py
CHANGED
|
@@ -10,9 +10,7 @@ computing the shortest path on a sphere, including:
|
|
|
10
10
|
- TDOA localization on a sphere
|
|
11
11
|
"""
|
|
12
12
|
|
|
13
|
-
from typing import NamedTuple
|
|
14
|
-
from typing import Optional
|
|
15
|
-
from typing import Tuple
|
|
13
|
+
from typing import NamedTuple, Optional, Tuple
|
|
16
14
|
|
|
17
15
|
import numpy as np
|
|
18
16
|
from numpy.typing import NDArray
|
pytcl/navigation/ins.py
CHANGED
|
@@ -18,19 +18,13 @@ References
|
|
|
18
18
|
.. [3] J. Farrell, "Aided Navigation: GPS with High Rate Sensors", McGraw-Hill, 2008.
|
|
19
19
|
"""
|
|
20
20
|
|
|
21
|
-
from typing import NamedTuple
|
|
22
|
-
from typing import Optional
|
|
23
|
-
from typing import Tuple
|
|
21
|
+
from typing import NamedTuple, Optional, Tuple
|
|
24
22
|
|
|
25
23
|
import numpy as np
|
|
26
|
-
from numpy.typing import ArrayLike
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
from pytcl.
|
|
30
|
-
from pytcl.coordinate_systems.rotations import quat_multiply
|
|
31
|
-
from pytcl.coordinate_systems.rotations import rotmat2quat
|
|
32
|
-
from pytcl.navigation.geodesy import WGS84
|
|
33
|
-
from pytcl.navigation.geodesy import Ellipsoid
|
|
24
|
+
from numpy.typing import ArrayLike, NDArray
|
|
25
|
+
|
|
26
|
+
from pytcl.coordinate_systems.rotations import quat2rotmat, quat_multiply, rotmat2quat
|
|
27
|
+
from pytcl.navigation.geodesy import WGS84, Ellipsoid
|
|
34
28
|
|
|
35
29
|
# =============================================================================
|
|
36
30
|
# Physical Constants
|
pytcl/navigation/ins_gnss.py
CHANGED
|
@@ -17,25 +17,20 @@ References
|
|
|
17
17
|
Kalman Filtering", 4th ed., Wiley, 2012.
|
|
18
18
|
"""
|
|
19
19
|
|
|
20
|
-
from typing import List
|
|
21
|
-
from typing import NamedTuple
|
|
22
|
-
from typing import Optional
|
|
23
|
-
from typing import Tuple
|
|
20
|
+
from typing import List, NamedTuple, Optional, Tuple
|
|
24
21
|
|
|
25
22
|
import numpy as np
|
|
26
|
-
from numpy.typing import ArrayLike
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
from pytcl.
|
|
30
|
-
from pytcl.
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
from pytcl.navigation.ins import ins_process_noise_matrix
|
|
38
|
-
from pytcl.navigation.ins import mechanize_ins_ned
|
|
23
|
+
from numpy.typing import ArrayLike, NDArray
|
|
24
|
+
|
|
25
|
+
from pytcl.dynamic_estimation.kalman import kf_predict, kf_update
|
|
26
|
+
from pytcl.navigation.geodesy import WGS84, Ellipsoid, geodetic_to_ecef
|
|
27
|
+
from pytcl.navigation.ins import (
|
|
28
|
+
IMUData,
|
|
29
|
+
INSState,
|
|
30
|
+
ins_error_state_matrix,
|
|
31
|
+
ins_process_noise_matrix,
|
|
32
|
+
mechanize_ins_ned,
|
|
33
|
+
)
|
|
39
34
|
|
|
40
35
|
# =============================================================================
|
|
41
36
|
# Constants
|
pytcl/navigation/rhumb.py
CHANGED
|
@@ -9,14 +9,12 @@ constant-bearing paths on a sphere and ellipsoid, including:
|
|
|
9
9
|
- Spherical and ellipsoidal formulations
|
|
10
10
|
"""
|
|
11
11
|
|
|
12
|
-
from typing import NamedTuple
|
|
13
|
-
from typing import Tuple
|
|
12
|
+
from typing import NamedTuple, Tuple
|
|
14
13
|
|
|
15
14
|
import numpy as np
|
|
16
15
|
from numpy.typing import NDArray
|
|
17
16
|
|
|
18
|
-
from pytcl.navigation.geodesy import WGS84
|
|
19
|
-
from pytcl.navigation.geodesy import Ellipsoid
|
|
17
|
+
from pytcl.navigation.geodesy import WGS84, Ellipsoid
|
|
20
18
|
|
|
21
19
|
|
|
22
20
|
class RhumbResult(NamedTuple):
|
|
@@ -27,29 +27,33 @@ RMSE: 0.100
|
|
|
27
27
|
"""
|
|
28
28
|
|
|
29
29
|
# Estimation metrics
|
|
30
|
-
from pytcl.performance_evaluation.estimation_metrics import
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
30
|
+
from pytcl.performance_evaluation.estimation_metrics import (
|
|
31
|
+
ConsistencyResult,
|
|
32
|
+
average_nees,
|
|
33
|
+
consistency_test,
|
|
34
|
+
credibility_interval,
|
|
35
|
+
estimation_error_bounds,
|
|
36
|
+
monte_carlo_rmse,
|
|
37
|
+
nees,
|
|
38
|
+
nees_sequence,
|
|
39
|
+
nis,
|
|
40
|
+
nis_sequence,
|
|
41
|
+
position_rmse,
|
|
42
|
+
rmse,
|
|
43
|
+
velocity_rmse,
|
|
44
|
+
)
|
|
43
45
|
|
|
44
46
|
# Track metrics
|
|
45
|
-
from pytcl.performance_evaluation.track_metrics import
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
47
|
+
from pytcl.performance_evaluation.track_metrics import (
|
|
48
|
+
MOTMetrics,
|
|
49
|
+
OSPAResult,
|
|
50
|
+
identity_switches,
|
|
51
|
+
mot_metrics,
|
|
52
|
+
ospa,
|
|
53
|
+
ospa_over_time,
|
|
54
|
+
track_fragmentation,
|
|
55
|
+
track_purity,
|
|
56
|
+
)
|
|
53
57
|
|
|
54
58
|
__all__ = [
|
|
55
59
|
# Track metrics
|
|
@@ -10,9 +10,7 @@ References
|
|
|
10
10
|
Applications to Tracking and Navigation," Wiley, 2001.
|
|
11
11
|
"""
|
|
12
12
|
|
|
13
|
-
from typing import List
|
|
14
|
-
from typing import NamedTuple
|
|
15
|
-
from typing import Optional
|
|
13
|
+
from typing import List, NamedTuple, Optional
|
|
16
14
|
|
|
17
15
|
import numpy as np
|
|
18
16
|
from numpy.typing import NDArray
|