- 把测量设备测得的X、Y、Z的原始数据复制到"Pos_uAPp_data1.csv"中,表格的第1列为X坐标,第2列为Y坐标,第3列为Z坐标。
- "Pos_uAPp_data1.csv"文件内容如图中表格:
- 运行以下Python脚本即可算出结果
#!/usr/bin/env python3 # -*- coding: utf-8 -*- import csv,math,time ts = time.time() i,j,k,l,end,cycle = 0,0,0,0,"#",30 #测试循环次数 X,Y,Z = [[] for kk in range(3)],[[] for kk in range(3)],[[] for kk in range(3)] #创建多维列表 for ii in range(3): #X,Y,Z中每个都有三个列表 for jj in range(cycle): #每个列表中都存放cycle个数据 X[ii].append(0),Y[ii].append(0),Z[ii].append(0) #初始化多维列表值 end end for line in open("Pos_uAPp_data1.csv"): #读取csv文件 x,y,z = line.split(",") #解析分隔符 x,y,z = x.strip(' \t\r\n'),y.strip(' \t\r\n'),z.strip(' \t\r\n') #提取数据 if i < cycle: X[0][j],Y[0][j],Z[0][j] = float(x),float(y),float(z) #字符类型转换,并存入列表 j += 1 elif i >= cycle and i < 2 * cycle: X[1][k],Y[1][k],Z[1][k] = float(x),float(y),float(z) k += 1 elif i >= 2 * cycle and i < 3 * cycle: X[2][l],Y[2][l],Z[2][l] = float(x),float(y),float(z) l += 1 end print (i,'\t' + x + '\t' + y + '\t' + z) i += 1 end n = cycle uAPp1 = math.sqrt(((1/n) * sum(X[0])-(1/n) * sum(X[1]))**2 + ((1/n) * sum(Y[0])-(1/n) * sum(Y[1]))**2 + ((1/n) * sum(Z[0])-(1/n) * sum(Z[1]))**2) uAPp2 = math.sqrt(((1/n) * sum(X[0])-(1/n) * sum(X[2]))**2 + ((1/n) * sum(Y[0])-(1/n) * sum(Y[2]))**2 + ((1/n) * sum(Z[0])-(1/n) * sum(Z[2]))**2) uAPp3 = math.sqrt(((1/n) * sum(X[1])-(1/n) * sum(X[2]))**2 + ((1/n) * sum(Y[1])-(1/n) * sum(Y[2]))**2 + ((1/n) * sum(Z[1])-(1/n) * sum(Z[2]))**2) print(uAPp1,uAPp2,uAPp3) uAPp = max(uAPp1,uAPp2,uAPp3) print(uAPp) #多方向位姿准确度变动 print("计算用时:",time.time() - ts)
结果如下: