这个例子展示了如何消除陀螺仪偏差从IMU使用imufilter
.
使用kinematicTrajectory
创建一个由两部分组成的轨迹。第一部分的角速度是恒定的y- - -z相互重合。第二部分在所有三个轴上的角速度都是变化的。
时间= 60 * 8;fs = 20;numSamples = duration * fs;rng (“默认”)%给RNG种子,以再现噪声传感器的测量结果。initialAngVel =(0、0.5、0.25);finalAngVel = (-0.2, 0.6, 0.5);constantAngVel = repmat (initialAngVel,地板(numSamples / 2), 1);varyingAngVel = [linspace(initialAngVel(1), finalAngVel(1), ceil(numSamples/2)).',...finalAngVel linspace (initialAngVel(2),(2),装天花板(numSamples / 2)。”...linspace (initialAngVel (3) finalAngVel(3),装天花板(numSamples / 2)。');angVelBody = [constantAngVel;varyingAngVel];accBody = 0 (numSamples, 3);traj = kinematicTrajectory (“SampleRate”fs);[qn, ~ ~, accNED angVelNED] = traj (accBody angVelBody);
创建一个imuSensor
系统对象™,IMU
,使用非理想陀螺仪。调用IMU
加速度,角速度和方向。
IMU = imuSensor (“accel-gyro”,...“陀螺”gyroparams (“随机散步”, 0.003,“ConstantBias”0.3),...“SampleRate”fs);[accelreads, gyroReadingsBody] = IMU(accNED,angVelNED,qNED);
创建一个imufilter
系统对象,保险丝
.调用保险丝
用建模的加速度计读数和陀螺仪读数。
保险丝= imufilter (“SampleRate”fs,“GyroscopeDriftNoise”1 e-6);[~, angVelBodyRecovered] =保险丝(accelReadings gyroReadingsBody);
绘制地面真实角速度,陀螺仪读数,以及每个轴的恢复角速度。
角速度从imufilter
补偿陀螺仪偏差随时间的影响,并收敛到真实的角速度。
时间= (0:numSamples-1) / fs;图(1)图(时间,angVelBody (: 1),...时间,gyroReadingsBody (: 1),...时间,angVelBodyRecovered(: 1)标题(“轴”)传说(“真正的角速度”,...“陀螺仪数据”,...“恢复角速度”) ylabel (“角速度(rad / s)”)
图(2)图(时间,angVelBody (:, 2),...时间,gyroReadingsBody (:, 2),...时间,angVelBodyRecovered(: 2)标题(“轴”) ylabel (“角速度(rad / s)”)
图(3)图(时间,angVelBody (:, 3),...时间,gyroReadingsBody (:, 3),...时间,angVelBodyRecovered(: 3)标题(z轴的) ylabel (“角速度(rad / s)”)包含(“时间(s)”)