陀螺仪的测试
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
SUCCESS BELONGS TO THE ONE WITH CLEAR AND LONG-TERM GOALS!
电子陀螺仪的角度获取测试
2013-06-07 16:11 by DarkHorse, 111 阅读, 0 评论, 收藏, 编辑
导航中经常用到电子陀螺。为了测试陀螺仪在静止下的零漂输出和运动情况下的输出角度值,做了2个实验。用的陀螺仪型号是:L3G4200DTR
是一个三轴输出的MEMS电子陀螺。
1 零漂测试
让陀螺仪静止不动,运行5分钟,记录串口输出数据,并解析出三个轴的角速度值。在matlab里面进行仿真。
function main
clc;
clear;
dataFile = input('put file: ','s');
nCount = 0;
fileHandle = fopen(dataFile,'r');
while ~feof(fileHandle)
string = fgetl(fileHandle);
nCount = nCount + 1;
end
nCount = nCount-2;
frewind(fileHandle);
i = 1;
while ~feof(fileHandle)
string = str2num(fgetl(fileHandle));
zData(i) = string(3);
i = i + 1;
if i > nCount
break;
end
end
fclose(fileHandle);
figure(1);
plot(zData,'b-');
hold on;
meanZData = mean(zData);
title('原始Z轴输出数据');
xlabel('ms');
ylabel('dps(degree per second)');
text(3500, 1.2, ['mean=',num2str(meanZData)]);
figure(2);
newData = runge_kutta_intergration(zData);
plot(newData);
xlabel('ms');
ylabel('degree');
title('积分输出的角度');
function newData = runge_kutta_intergration(rawData) samplePeriod = 0.1;%%100ms
size = length(rawData);
i=1;
while (i <= size)
%%%%%简单的积分累加获取角度
if(i == 1)
Data(i) = rawData(i);
else
Data(i) = Data(i-1) + rawData(i)*samplePeriod;
end
%%%%runge-kutta积分累加获取角度
%{
if i<4
Data(i) = rawData(i);
else
Data(i) =
Data(i-1)+1/6*(rawData(i-3)+2*rawData(i-2)+2*rawData(i-1)+rawData(i))*sample Period;
end
%}
i = i+1;
end
newData = Data;
输出结果:
结果表明,静止情况下的陀螺仪也存在很大的累加误差(本身的零漂和温度引起的漂移),5分钟后居然产生了160度的角度误差。
2 运动情况下的输出测试
实验中,我把仪器逆时针旋转90度,然后还原到原来的位置,再顺时针旋转90度,然后回到原来的位置。同样记录在文件中,解析文件,对解析出来的数据进行测试。因为旋转理论上只会导致Z轴的角速率变化,所以只分析这个轴上的角度输出。
function main
clc;
clear;
dataFile = input('put file: ','s');
nCount = 0;
fileHandle = fopen(dataFile,'r');
while ~feof(fileHandle)
string = fgetl(fileHandle);
nCount = nCount + 1;
end
nCount = nCount-2;
frewind(fileHandle);
i = 1;
while ~feof(fileHandle)
string = str2num(fgetl(fileHandle));
zData(i) = string(3);
i = i + 1;
if i > nCount
break;
end
end
fclose(fileHandle);
figure(1);
plot(zData,'b-');
hold on;
zData = zData-mean(zData);%为了抑制零漂,采用减均值的方式plot(zData,'r-');
title('原始Z轴输出数据');
legend('未减均值','减均值');
xlabel('ms');
ylabel('dps(degree per second)');
hold off;
figure(2);
newData = runge_kutta_intergration(zData);
plot(newData);
title('积分输出的角度');
xlabel('ms');
ylabel('degree');
function newData = runge_kutta_intergration(rawData) samplePeriod = 0.1;%%100ms
size = length(rawData);
i=1;
while (i <= size)
%%%%%简单的积分累加获取角度
if(i == 1)
Data(i) = rawData(i);