主要内容

消除角速度测量中的偏差

这个例子展示了如何消除陀螺仪偏差从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)”

图中包含一个坐标轴。标题为x轴的轴包含3个类型为line的对象。这些对象代表真实角速度,陀螺仪读数,恢复角速度。

图(2)图(时间,angVelBody (:, 2),...时间,gyroReadingsBody (:, 2),...时间,angVelBodyRecovered(: 2)标题(“轴”) ylabel (“角速度(rad / s)”

图中包含一个坐标轴。标题为y轴的轴包含3个类型为line的对象。

图(3)图(时间,angVelBody (:, 3),...时间,gyroReadingsBody (:, 3),...时间,angVelBodyRecovered(: 3)标题(z轴的) ylabel (“角速度(rad / s)”)包含(“时间(s)”

图中包含一个坐标轴。标题为z轴的轴包含3个类型为line的对象。