这个例子展示了如何模拟惯性测量单元(IMU)测量使用imuSensor
系统对象。IMU可以包括单个传感器的组合,包括陀螺仪、加速度计和磁力计。您可以使用命令指定单个传感器的属性gyroparams
,accelparams
,magparams
,分别。
在下列图中,除非另有说明,否则只显示x轴的测量值。使用滑块交互式地调整参数。
陀螺仪模型的默认参数模拟一个理想信号。给定一个正弦输入,陀螺仪输出应该完全匹配。
params = gyroparams
params = gyroparams属性:MeasurementRange:正rad / s决议:0 (rad / s) / LSB ConstantBias: [0 0 0] rad / s AxesMisalignment: [3 x3双]% NoiseDensity: [0 0 0] (rad / s) /√赫兹BiasInstability: [0 0 0] rad / s随机散步:[0 0 0](rad / s) *√赫兹TemperatureBias: [0 0 0] (rad / s) /°C TemperatureScaleFactor:[0 0 0] % /°C AccelerationBias:[0 0 0] (rad/s)/(m/s²)
%生成N个样本,采样率为Fs,频率为正弦%的Fc。N = 1000;Fs = 100;Fc = 0.25;t = (0: (1 / Fs): ((n - 1) / Fs)。”;acc = 0 (N, 3);角度= 0 (N, 3);angvel(: 1) =罪(2 *π* Fc * t);imu = imuSensor (“SampleRate”Fs,“陀螺”、参数);[~, gyroData] = imu(acc,角度);图绘制(t, angvel (: 1),“——”, t, gyroData(:,1)) xlabel(“时间(s)”) ylabel (“角速度(rad / s)”)标题(“理想的陀螺仪数据”)传说(“x(地面实况),“x(陀螺仪)')
以下参数模拟硬件限制或缺陷。有些可以通过校准进行校正。
MeasurementRange
确定陀螺仪报告的最大绝对值。较大的绝对值是饱和的。通过将测量范围设置为一个小于正弦地面真实角速度振幅的值来显示这种效果。
imu = imuSensor (“SampleRate”Fs,“陀螺”、参数);imu.Gyroscope.MeasurementRange =0.5;% rad /秒[~, gyroData] = imu(acc,角度);图绘制(t, angvel (: 1),“——”, t, gyroData(:,1)) xlabel(“时间(s)”) ylabel (“角速度(rad / s)”)标题(“饱和陀螺仪数据”)传说(“x(地面实况),“x(陀螺仪)')
决议
影响数字测量的步长。使用这个参数来模拟模数转换器(ADC)的量化效果。通过将参数增加到一个比典型值大得多的值来显示这种效果。
imu = imuSensor (“SampleRate”Fs,“陀螺”、参数);imu.Gyroscope.Resolution =0.5;% (rad / s) / LSB[~, gyroData] = imu(acc,角度);图绘制(t, angvel (: 1),“——”, t, gyroData(:,1)) xlabel(“时间(s)”) ylabel (“角速度(rad / s)”)标题(“量子化的陀螺仪数据”)传说(“x(地面实况),“x(陀螺仪)')
AxesMisalignment
为传感器轴上的倾斜量。这种倾斜通常发生在传感器安装到PCB上时,可以通过校准来校正。这种效果是通过略微倾斜x轴和绘制x轴和y轴来显示的。
imu = imuSensor (“SampleRate”Fs,“陀螺”、参数);xMisalignment =2;% %imu.Gyroscope.AxesMisalignment = [xMisalignment, 0,0];% %[~, gyroData] = imu(acc,角度);图绘制(t, angvel (:, 1:2),“——”, t, gyroData(:,1:2)) xlabel(“时间(s)”) ylabel (“角速度(rad / s)”)标题(“偏差陀螺仪数据”)传说(“x(地面实况),“y”(地面实况),...“x(陀螺仪)',y(陀螺仪)')
ConstantBias
由于硬件缺陷在传感器测量中发生。由于这种偏差不是由温度等环境因素造成的,因此可以通过校准进行校正。
imu = imuSensor (“SampleRate”Fs,“陀螺”、参数);xBias =0.4;% rad /秒imu.Gyroscope.ConstantBias = [xBias, 0,0];% rad /秒[~, gyroData] = imu(acc,角度);图绘制(t, angvel (: 1),“——”, t, gyroData(:,1)) xlabel(“时间(s)”) ylabel (“角速度(rad / s)”)标题(“有偏见的陀螺仪数据”)传说(“x(地面实况),“x(陀螺仪)')
以下参数模拟传感器测量中的随机噪声。有关这些参数的更多信息可在基于Allan方差的惯性传感器噪声分析的例子。
NoiseDensity
为传感器测量中的白噪声量。它有时被称为陀螺仪的角度随机行走或加速度计的速度随机行走。
rng (“默认”) imu = imussensor (“SampleRate”Fs,“陀螺”、参数);imu.Gyroscope.NoiseDensity =0.0125;% (rad / s) /√(赫兹)[~, gyroData] = imu(acc,角度);图绘制(t, angvel (: 1),“——”, t, gyroData(:,1)) xlabel(“时间(s)”) ylabel (“角速度(rad / s)”)标题(“白噪声陀螺仪数据”)传说(“x(地面实况),“x(陀螺仪)')
BiasInstability
是传感器测量中粉红色或闪烁噪声的量。
imu = imuSensor (“SampleRate”Fs,“陀螺”、参数);imu.Gyroscope.BiasInstability =0.02;% rad /秒[~, gyroData] = imu(acc,角度);图绘制(t, angvel (: 1),“——”, t, gyroData(:,1)) xlabel(“时间(s)”) ylabel (“角速度(rad / s)”)标题(“偏置不稳定陀螺仪数据”)传说(“x(地面实况),“x(陀螺仪)')
随机散步
为传感器测量中布朗噪声的量。它有时被称为陀螺仪的速率随机游动或加速度计的加速度随机游动。
imu = imuSensor (“SampleRate”Fs,“陀螺”、参数);imu.Gyroscope.RandomWalk =0.091;% (rad / s) * sqrt(赫兹)[~, gyroData] = imu(acc,角度);图绘制(t, angvel (: 1),“——”, t, gyroData(:,1)) xlabel(“时间(s)”) ylabel (“角速度(rad / s)”)标题(“随机行走陀螺仪数据”)传说(“x(地面实况),“x(陀螺仪)')
以下参数描述了由于传感器环境变化而产生的噪声。
TemperatureBias
是由于与默认工作温度的温差而增加到传感器测量中的偏差。大多数传感器数据表列出默认操作温度为25摄氏度。通过将参数设置为非零值,并将操作温度设置为大于25摄氏度的值,可以显示这种偏差。
imu = imuSensor (“SampleRate”Fs,“陀螺”、参数);imu.Gyroscope.TemperatureBias =0.06;% (rad / s) /(摄氏度)imu。温度= 35;[~, gyroData] = imu(acc,角度);图绘制(t, angvel (: 1),“——”, t, gyroData(:,1)) xlabel(“时间(s)”) ylabel (“角速度(rad / s)”)标题(“Temperature-Biased陀螺仪数据”)传说(“x(地面实况),“x(陀螺仪)')
TemperatureScaleFactor
为由于工作温度变化而引起的传感器比例因子的误差。这导致测量的比例误差;换句话说,较小的理想值比较大的值误差更小。这个误差用线性增加温度来表示。
imu = imuSensor (“SampleRate”Fs,“陀螺”、参数);imu.Gyroscope.TemperatureScaleFactor =3.2;% % /(摄氏度)standardTemperature = 25;%摄氏度temperatureSlope = 2;%(摄氏度)/ s温度=温度值*t +标准温度;gyroData = 0 (N, 3);为i = 1:N imu。温度=温度(我);[~, gyroData(i,:)] = imu(acc(i,:),角度(i,:)));结束图绘制(t, angvel (: 1),“——”, t, gyroData(:,1)) xlabel(“时间(s)”) ylabel (“角速度(rad / s)”)标题(“Temperature-Scaled陀螺仪数据”)传说(“x(地面实况),“x(陀螺仪)')
AccelerationBias
为由于线性加速度而增加到陀螺仪测量中的偏置。这个参数是陀螺仪特有的。通过将参数设置为非零值并使用非零输入加速度来显示该偏差。
imu = imuSensor (“SampleRate”Fs,“陀螺”、参数);imu.Gyroscope.AccelerationBias =0.3;% (rad / s) / (m / s ^ 2)acc (: 1) = 1;[~, gyroData] = imu(acc,角度);图绘制(t, angvel (: 1),“——”, t, gyroData(:,1)) xlabel(“时间(s)”) ylabel (“角速度(rad / s)”)标题(“Acceleration-Biased陀螺仪数据”)传说(“x(地面实况),“x(陀螺仪)')