我一直在尝试从我的STM32F3板上可视化磁强计校准。我通过USB发送原始的3轴(每轴16位无符号)进行读取,转换为16位有符号浮点,校准并最终在python代码中绘制。当我绘制校准的磁强计数据时,硬铁偏移似乎起作用(因为图形的中心是(0,0)),但软铁椭圆并没有变成一个圆,这让我很困惑。我是python新手,所以我认为这就是我的错误所在。我遵循方程式(6)&;(7) 来自本文{a1},下面是我的python代码和我的“校准结果”
(大小对我来说无关紧要,所以单位是原始传感器整数,而不是高斯)
任何帮助都将不胜感激
import numpy as np
import serial
import matplotlib.pyplot as plt
import time
#USB Com Port 16bit signed integer Communication
s = serial.Serial('COM4')
magx = []
magy = []
magz = []
for i in range(0, 250):
ret = s.read(6)
magx.append(np.int16((np.uint16(ret[0]) << 8) + ret[1]))
magy.append(np.int16((np.uint16(ret[2]) << 8) + ret[3]))
magz.append(np.int16((np.uint16(ret[4]) << 8) + ret[5]))
time.sleep(0.05)
s.close()
#Calibaration terms
Xmax = max(magx)
Xmin = min(magx)
Ymax = max(magy)
Ymin = min(magy)
Xsf = (Ymax - Ymin) / (Xmax - Xmin)
Ysf = (Xmax - Xmin) / (Ymax - Ymin)
if Xsf < 1:
Xsf = 1
if Ysf < 1:
Ysf = 1
Xoff = ((Xmax - Xmin)/2 - Xmax) * Xsf
Yoff = ((Ymax - Ymin)/2 - Ymax) * Ysf
print("Xsf = ",Xsf,"Ysf = ",Ysf,"\r")
print("Xoff = ",Xoff,"Yoff = ",Yoff,"\r\r")
for i in range(0, 250):
magx[i] = magx[i]*Xsf + Xoff
magy[i] = magy[i]*Ysf + Yoff
plt.grid()
plt.scatter(magx, magy, marker="o",c='w',edgecolors='r')
plt.show()
目前没有回答
相关问题 更多 >
编程相关推荐