python 資料處理 姿態角資料解算

2021-10-07 05:44:28 字數 2386 閱讀 1543

對於姿態角解算,目前我所知道的只有兩種,一種是dmp庫解算出姿態角、一種是演算法進行姿態解算;

本次說的是姿態解算,採集的是六軸的原始資料,用python進行姿態解算;廢話不多說,看程式,有註解的。。

import math

import csv

kp=100 #比例增益控制加速度計/磁強計的收斂速度

ki=0.002 #積分增益控制陀螺儀偏差的收斂速度

halft=0.001 #取樣週期的一半

#感測器框架相對於輔助框架的四元數(初始化四元數的值)

q0=1

q1=0

q2=0

q3=0

#由ki縮放的積分誤差項(初始化)

exint=0

eyint=0

ezint=0

'''舉例子:「-0.31,-0.11,-0.95,-26,70,9」

#三軸加速度原始資料

ax=-0.31

ay=-0.11

az=-0.95

#三軸角速度原始資料

gx=-26

gy=70

gz=9

'''#讀取data.csv的資料然後把對比結果資料寫入到data.txt檔案中

f0=open("data.txt",'w',encoding='utf-8')

f0.write("\n")

csvname="data.csv"

with open(csvname,"r") as f:

csvhandle = csv.reader(f)

for row in csvhandle:

aax=row[0] #原始加速度x軸資料

aay=row[1] #原始加速度y軸資料

aaz=row[2] #原始加速度z軸資料

ggx=row[3] #原始角速度x軸資料

ggy=row[4] #原始角速度y軸資料

ggz=row[5] #原始角速度z軸資料

#把csv的字串轉化為float型

ax=float(aax)

ay=float(aay)

az=float(aaz)

gx=float(ggx)

gy=float(ggy)

gz=float(ggz)

#單元化

norm=math.sqrt(ax*ax+ay*ay+az*az)

ax=ax/norm

ay=ay/norm

az=az/norm

#估計方向的重力

vx=2*(q1*q3-q0*q2)

vy=2*(q0*q1+q2*q3)

vz=q0*q0-q1*q1-q2*q2+q3*q3

# 錯誤的領域和方向感測器測量參考方向之間的交叉乘積的總和

ex=(ay*vz - az*vy)

ey=(az*vx - ax*vz)

ez=(ax*vy - ay*vx)

# 積分誤差比例積分增益

exint +=ex*ki

eyint +=ey*ki

ezint +=ez*ki

# 調整後的陀螺儀測量

gx +=kp*ex + exint

gy +=kp*ey + eyint

gz +=kp*ez +ezint

# 整合四元數

q0 +=(-q1*gx - q2*gy - q3*gz)*halft

q1 +=(q0*gx + q2*gz - q3*gy)*halft

q2 +=(q0*gy - q1*gz + q3*gx)*halft

q3 +=(q0*gz + q1*gy - q2*gx)*halft

# 正常化四元數

norm = math.sqrt(q0*q0+q1*q1+q2*q2+q3*q3)

q0 /=norm

q1 /=norm

q2 /=norm

q3 /=norm

# 獲取尤拉角 pitch、roll、yaw

pitch = math.asin(-2*q1*q3+2*q0*q2)*57.3

roll = math.atan2(2*q2*q3+2*q0*q1,-2*q1*q1-2*q2*q2+1)*57.3

yaw = math.atan2(2*(q1*q2 + q0*q3),q0*q0+q1*q1-q2*q2-q3*q3)*57.3

#列印姿態角資訊以及把姿態角資料寫到txt文字中

print("pry:%.3f,%.3f,%.3f"%(pitch,roll,yaw))

f0.write("pitch:%.3f;roll:%.3f;yaw:%.3f"%(pitch,roll,yaw))

f0.write("\n")

Python 資料處理

將檔案切分,存入列表 strip split with open james.txt as jaf data jaf.readline james data.strip split 資料檔案為 2 34,3 21,2.34,2.45,3.01,2 01,2 01,3 10,2 22 print ja...

Python 資料處理

本場 chat 為 python 資料處理課程,包括 python 基礎知識 極簡教程 提公升 python 執行效率的方法 爬蟲簡介 scrapy selenium 自動化測試框架 簡易分布式 redis 分詞程式設計 jieba 資料儲存 本地資料上傳 hive 通過本場 chat 讀者可學到以...

Python資料處理

用傳統的電子 來處理資料不僅效率低下,而且無法處理某些格式的資料,對於混亂或龐大的資料集更是束手無策。本書將教你如何利用語法簡單 容易上手的python輕鬆處理資料。作者通過循序漸進的練習,詳細介紹如何有效地獲取 清洗 分析與呈現資料,如何將資料處理過程自動化,如何安排檔案編輯與清洗任務,如何處理更...