-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmy_functions.py
More file actions
99 lines (82 loc) · 2.35 KB
/
my_functions.py
File metadata and controls
99 lines (82 loc) · 2.35 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
import ahrs
import numpy as np
import pandas as pd
import pyproj
from matplotlib import pyplot as plt
def get_rpy(Q, samples):
"""
Převádí quaterniony na úhly roll, pitch a yaw.
Parametry:
----------
Q : ndarray
Matice quaternionů (qw, qx, qy, qz).
samples : int
Počet vzorků
Návratová hodnota:
-------------------
list
Seznam obsahující tři pole: roll, pitch a yaw ve stupních.
"""
roll = np.zeros(samples)
pitch = np.zeros(samples)
yaw = np.zeros(samples)
for i in range(samples):
[r, p, y] = ahrs.common.orientation.q2rpy(Q[i], in_deg=True)
roll[i] = r
pitch[i] = p
yaw[i] = y
return [roll, pitch, yaw]
def quaternion_get_dataframe(Q, samples):
"""
Z Quaternionů vytvoří DataFrame, jehož obsah budou úhly roll, pitch a yaw.
Parametry:
----------
Q : ndarray
Matice quaternionů.
Návratová hodnota:
-------------------
DataFrame
DataFrame obsahující roll, pitch a yaw ve stupních.
"""
[r, p, y] = get_rpy(Q, samples)
data_frame = pd.DataFrame({"roll": r, "pitch": p, "yaw": y})
return data_frame
def exp_filter(vec, alfa):
"""
Filtruje vektor pomocí jednoduchého exponenciálního vyrovnávácího filtru.
Parametry:
----------
vec : ndarray
Vstupní vektor k filtrování.
alfa : float
Filtrační konstanta (0 < alfa < 1).
Návratová hodnota:
-------------------
ndarray
Filtrovaný vektor.
"""
outvec = 0 * vec
outvec[0] = vec[0]
for x in range(1, len(vec)):
outvec[x] = (1 - alfa) * outvec[x - 1] + alfa * vec[x]
return outvec
def convert_gps_to_utm(lat, lon):
"""
Převádí GPS souřadnice na UTM souřadnice.
Parametry:
----------
lat : float
Zeměpisná šířka.
lon : float
Zeměpisná délka.
Návratová hodnota:
-------------------
tuple
Dvojice UTM souřadnic (x, y).
"""
wgs84 = pyproj.CRS("EPSG:4326")
utm_zone = int((lon + 180) / 6) + 1
utm_crs = pyproj.CRS.from_proj4(f"+proj=utm +zone={utm_zone} +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
transformer = pyproj.Transformer.from_crs(wgs84, utm_crs, always_xy=True)
utm_x, utm_y = transformer.transform(lon, lat)
return utm_x, utm_y