-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsimple_test.py
76 lines (67 loc) · 1.65 KB
/
simple_test.py
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
import serial
import json
import time
import numpy as np
import matplotlib.pyplot as plt
import threading
from transform import *
from quaternion import *
from pose_observer import *
from arrow import *
# serial
PORT = "/dev/ttyUSB0"
BAUDRATES = 115200
ser = serial.Serial(PORT, BAUDRATES)
# control
dt = 0.01
t = 0
# gyro
gX_offset = 0.0
gY_offset = 0.0
gZ_offset = 0.0
# calibration
cnt = 0
calibration = True
gXs = []
gYs = []
gZs = []
# observer
q = np.array([1, 0, 0, 0])
observer = pose_observer(dt)
observer.set_quaternion(q)
while True:
byte_data = ser.readline()
str_data = byte_data.decode().split()[0]
time.sleep(dt)
t += dt
cnt += 1
try:
json_data = json.loads(str_data)
if len(json_data) < 6:
continue
aX = json_data["aX"]
aY = json_data["aY"]
aZ = json_data["aZ"]
gX = json_data["gX"] + gX_offset
gY = json_data["gY"] + gY_offset
gZ = json_data["gZ"] + gZ_offset
w = np.array([gX, gY, gZ])
g_vec = np.array([aX, aY, aZ])
if calibration:
gXs.append(gX)
gYs.append(gY)
gZs.append(gZ)
if cnt > 100:
gX_offset = - np.mean(gXs)
gY_offset = - np.mean(gYs)
gZ_offset = - np.mean(gZs)
print("calibration is done")
calibration = False
else:
q = observer.update(w, g_vec)
r, p, y = observer.get_rpy()
if cnt % 5 == 0:
print("rpy = ", np.degrees(r), np.degrees(p), np.degrees(y), t)
except json.JSONDecodeError:
print("encode error")
continue