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
100
101
102
103
104
|
import serial
from time import sleep
from filterpy.kalman import KalmanFilter
import numpy as np
import re
x_mu = -0.02163601775523146
x_std = 0.07074315964054628
y_mu = 0.02645106742760512
y_std = 0.07415316805017082
kf = KalmanFilter(dim_x=2, dim_z=2)
# Initial position
kf.x = np.array([[0.],
[0.]])
# State transition matrix
kf.F = np.array([[1., 0.],
[0., 1.]])
# Measurement function
kf.H = np.array([[1., 0.],
[0., 1.]])
# Covariance matrix
kf.P = np.array([[x_std**2, 0.],
[0., y_std**2]])
kf.R = np.array([[x_mu, 0.],
[0., y_mu]])
position = np.array([0, 0])
updRate = "10 10" # Active Idle
with serial.Serial('/dev/ttyACM0', 115200, timeout = 1) as s:
# print(f"Opened serial port {s.name}")
sleep(1)
s.write(b"\r")
sleep(0.1)
s.write(b"\r")
s.write(b'nis ')
sleep(0.1)
s.write(b'0x1234')
sleep(0.1)
s.write(b'\r')
# print(f"Set PAN ID to 0x1234")
sleep(1)
s.write(b'nmt')
sleep(0.1)
s.write(b'\r')
# print("Configured node as tag")
sleep(1)
s.write(b"\r")
sleep(0.1)
s.write(b"\r")
sleep(2)
s.write(b"aurs ")
sleep(0.1)
s.write(updRate.encode())
sleep(0.1)
s.write(b'\r')
# print("Set update rate to " + updRate)
sleep(0.1)
s.write(b"lep")
sleep(0.1)
s.write(b"\r")
sleep(0.1)
for i in range(10):
s.readline()
while True:
dstr = s.readline().decode('utf-8').strip('\n')
if "POS," in dstr:
dstr = re.sub('[^0-9,.]', '', dstr)
_, x, y, z, qf = dstr.split(",")
x = float(x)
y = float(y)
kf.predict()
kf.update(np.array([[x],
[y]]))
x = int(kf.x[0] * 1000)
y = int(kf.x[1] * 1000)
with open("position.txt", "w") as f:
print(f"{x},{y}")
f.write(f"{x},{y}\n")
f.close()
print("Shutting down serial communication")
|