我将分开发送给你一个较长程序,请逐渐分析并记忆该程序,下面是第一段
# coding=utf-8
# /usr/bin/env python3
"""
Author: Liu Liu
Email: Nicke_liu@163.com
DateTime: 2023/11/4 15:08
Description: 用于导航产品数据处理的文件
"""
import sys
import matplotlib.pyplot as plt
from matplotlib import gridspec
import numpy as np
from scipy.optimize import least_squares
import pandas as pd
from tools import chooseFile, chooseFromInput, dataFilter, SpatialTrans, Plot
np.set_printoptions(precision=2, suppress=True) # numpy输出精度的小数点个数为3,不以科学计数法输出
plt.rcParams['font.family'] = ['SimHei'] # 设置字体
plt.rcParams['axes.unicode_minus'] = False # 正确显示负号
#该函数读取特定格式的传感器数据文件(来自CB2板),解析并转换原始数据为物理量单位(磁场:uT,加速度:m/s²,转速:deg/s,角度:rad)。返回包含时间戳、通道数据和PCB板载传感器数据的字典。
def readDataCB2(fileName, start=0, end=sys.maxsize):
"""
基于CB2板的输出结果,磁场单位: uT, 加速度单位: m/s^2, 转速单位: deg/s, 角度单位: rad
:param fileName: 【string】数据文件名
:param start: 【int】起始行
:param end: 【int】结尾行
:return:【dict】原始数据字典
"""
chNum = 12 # 通道数
mmcSen = 6.25e-3 # mmc5983磁传感器的灵敏度[uT/LSB]
akSen = 1.1 # AK磁传感器的灵敏度[uT/LSB]
g0 = 9.8 # 重力加速度常数
encoderFR = pow(2, 18) # 绝编的最大量程
sensorNames = ["m1x", "m1y", "m1z", "m2x", "m2y", "m2z", "check"] #传感器名称列表
chSensorNames = ["ch" + str(i) + sensor for i in range(1, chNum + 1) for sensor in sensorNames] #通道传感器名称列表
sensorPcb = ["ak1x", "ak1y", "ak1z", "ak2x", "ak2y", "ak2z", "ak3x", "ak3y", "ak3z",
"ax", "ay", "az", "gx", "gy", "gz", "check", "e1", "e2"]
data = pd.read_table(filepath_or_buffer=fileName, header=None, sep=',', skiprows=start, nrows=end - start,
names=["ts"] + chSensorNames + sensorPcb)
print("read {}, from {} to {}, done!".format(fileName, start, start + len(data)))
ts = data.ts.values
chData = {}
for i in range(1, chNum + 1):
ch = "ch" + str(i)
chm1 = ch + "m1"
chm2 = ch + "m2"
chData[chm1] = (data.loc[:, [chm1 + 'x', chm1 + 'y', chm1 + 'z']].values - 2 ** 17) * 6.25e-3
chData[chm2] = (data.loc[:, [chm2 + 'x', chm2 + 'y', chm2 + 'z']].values - 2 ** 17) * 6.25e-3
chPcbm1 = "ak1"
chPcbm2 = "ak2"
chPcbm3 = "ak3"
pcbA = "a"
pcbG = "g"
pcbData = {"ak1": data.loc[:, [chPcbm1 + 'x', chPcbm1 + 'y', chPcbm1 + 'z']].values * akSen,
"ak2": data.loc[:, [chPcbm2 + 'x', chPcbm2 + 'y', chPcbm2 + 'z']].values * akSen,
"ak3": data.loc[:, [chPcbm3 + 'x', chPcbm3 + 'y', chPcbm3 + 'z']].values * akSen,
"acc": data.loc[:, [pcbA + 'x', pcbA + 'y', pcbA + 'z']].values * g0 / 2048,
"gyro": data.loc[:, [pcbG + 'x', pcbG + 'y', pcbG + 'z']].values / 16.4,
"encoder": data.loc[:, ["e1", "e2"]].values % encoderFR * 2 * np.pi / encoderFR
}
return {"ts": ts, "chData": chData, "pcbData": pcbData}
最新发布