← Back to ratslair.com
aboutsummaryrefslogtreecommitdiff
path: root/DWM.py
blob: 6db458269375be11aaf15851eb1de2433c05d4c9 (plain)
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 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]])

updRate = "1 1" # 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)
    
    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)
            print(f"x: {x}, y: {y}")
            with open("position.txt", "w") as f:
                f.write(f"x,y\n")
                f.close()

print("Shutting down serial communication")