将测量的数据动态表现可以比较形象传递对比信息。下面通过TEASOFT软件绘制出数据的动态过程。
数据来自于惯性测量单元(IMU),它输出四路信号:一路是陀螺仪,三路是加速度计。
01惯性单元的基本情况
这是一款模拟输出的惯性测量传感器单元。
其中集成了陀螺仪:JPN MB 326;三轴加速度计:7260
▲ 陀螺仪和加速度计模块
工作电压5V。
在其保持垂直状态下,使用 八通道AD7606数据采集模块 采集陀螺仪,加速度计的输出电压信号,估计对应的均值和噪声情况。
▲ 保持垂直状态测量输出电压值
采集10秒中的数据,采样率1kHz。统计输出信号的均值和方差。
▲ 静态时输出的陀螺仪和一路加速度计的信号
- 陀螺仪输出的均值:1.7056V;方差:3.9857×10-5。
- 加速度计输出均值:1.7561V;方程:6.0229×10-5。
02采集动态数据显示
通过手持IMU左右晃动,同时使用 基于AD7606八通道高速数据采集模块 采集IMU输出的四路模拟信号。
▲ 采集IMU的输出数据
八秒中的信号的波形如下图所示:
▲ 采集到的惯性传感器的数据
通过TEASOFT软件可以将动态过程与数据的变化有效的结合在一起。在TEASOFT软件建立起显示数据的坐标系。同时使用长度为500的四种颜色的曲线来显示采集的实时数据。
▲ TEASOFT软件的界面
通过PlotGIF()录制在采集框内的所有对象,最后生成动态的GIF图像。下面给出了对应的生成结果:
▲ 惯性传感器数据可视化
▲ 惯性传感器数据可视化2
#!/usr/local/bin/python
# -*- coding: gbk -*-
#============================================================
# DRAW1.PY -- by Dr. ZhuoQing 2020-06-05
#
# Note:
#============================================================
from headm import *
from tsmodule.tsdraw import *
pltgif = PlotGIF()
xyc = XYCoor(3, 4, 22, 21, 200, 3)
#------------------------------------------------------------
data = tspload('data9', 'data')
rangeid = 38
gifid = tspgetgifid()[0]
curve = [9, 10, 11, 12]
#------------------------------------------------------------
gifpages = tspgetgifpage(gifid)
data = [d-0.5 for d in data]
gyro = data[0::4]
accz = data[1::4]
accx = data[2::4]
accy = data[3::4]
datalen = len(gyro)
curvelen = tspgetcurvelength(curve[0])
printff('Gif:%d pages, Data %d, Curve:%d'%(gifpages, datalen, curvelen))
#------------------------------------------------------------
gyrodata = [0] * curvelen
acczdata = [0] * curvelen
accxdata = [0] * curvelen
accydata = [0] * curvelen
#------------------------------------------------------------
def buf2data(buf, buflen, datalen, begin):
data = buf[0] * datalen
if begin >= datalen and begin < buflen:
data = buf[begin - datalen:begin]
elif begin < datalen and begin >= 0:
data = [buf[0]] * datalen
start = datalen - begin
data[start:datalen] = buf[0:begin]
elif begin > buflen and begin < buflen + datalen:
data = [buf[-1]] * datalen
endn = begin - datalen
data[0:endn] = buf[end:]
return data
def setcurvedata(begin):
global gyrodata, acczdata, accxdata, accydata
gyrodata = buf2data(gyro, datalen, curvelen, begin)
acczdata = buf2data(accz, datalen, curvelen, begin)
accxdata = buf2data(accx, datalen, curvelen, begin)
accydata = buf2data(accy, datalen, curvelen, begin)
def page2begin(page):
if page < 0: return 0
if page >= gifpages: return datalen
return int(page * (datalen - curvelen) / gifpages)
def begin2page(begin):
return int(begin * gifpages * 0.95 /datalen)
#------------------------------------------------------------
#gifpages = int(gifpages * .8)
steps = 200
for i in range(steps):
# begin = page2begin(i)
# printf('Gif:%d, Begin:%d'%(i, begin))
begin = int(i * datalen / steps)
page = begin2page(begin)
printf("Gif:%d, Begin:%d"%(page, begin))
setcurvedata(begin)
xyc.SetCurveY(gyrodata, curve[0])
xyc.SetCurveY(acczdata, curve[1])
xyc.SetCurveY(accxdata, curve[2])
xyc.SetCurveY(accydata, curve[3])
tspgotogifpage(gifid, page)
tsprv()
pltgif.appendrange(rangeid)
#pltgif.save(r'd:\temp\1.gif', 35, 35)
#------------------------------------------------------------
printf('\a')
#------------------------------------------------------------
# END OF FILE : DRAW1.PY
#============================================================
■ 结论
由于数据采集和GIF的录制是同时异步进行的,从显示的结果来看,数据的变化与GIF图像之间还是有一些不同步的地方。这就大大限制了动图可视化的效果。
至于为什么在同时录制的过程中出现了这样的异步情况,现在还不得而知。