imufiltergydF4y2Ba

加速度计和陀螺仪读数的方向gydF4y2Ba

描述gydF4y2Ba

的gydF4y2BaimufiltergydF4y2BaSystem object™融合加速度计和陀螺仪传感器数据来估计设备方向。gydF4y2Ba

为了估计设备的方向:gydF4y2Ba

  1. 创建gydF4y2BaimufiltergydF4y2Ba对象并设置其属性。gydF4y2Ba

  2. 调用带参数的对象,就好像它是一个功能。gydF4y2Ba

要了解更多关于System对象如何工作的信息,请参见gydF4y2Ba什么是系统对象?gydF4y2Ba(MATLAB)。gydF4y2Ba

创建gydF4y2Ba

描述gydF4y2Ba

例子gydF4y2Ba

保险丝gydF4y2Ba= imufiltergydF4y2Ba返回间接卡尔曼滤波系统对象,gydF4y2Ba保险丝gydF4y2Ba用于加速度计和陀螺仪数据的融合来估计设备的方向。的过滤器使用一个九元件状态矢量中的取向估计,所述陀螺仪偏差估计,以及线性加速度估计跟踪误差。gydF4y2Ba

保险丝gydF4y2Ba= imufilter (gydF4y2Ba“ReferenceFrame”gydF4y2Ba,gydF4y2BaRF.gydF4y2Ba)gydF4y2Ba返回A.gydF4y2BaimufiltergydF4y2Ba过滤系统对象,使加速度计和陀螺数据熔化,以估计相对于参考帧的设备方向gydF4y2BaRF.gydF4y2Ba.指定gydF4y2BaRF.gydF4y2Ba作为gydF4y2BaNED的gydF4y2Ba(North-East-Down)或gydF4y2Ba'enu'gydF4y2Ba(East-North-Up)。默认值为gydF4y2BaNED的gydF4y2Ba.gydF4y2Ba

例子gydF4y2Ba

保险丝gydF4y2Ba= imufilter (gydF4y2Ba___gydF4y2Ba,gydF4y2Ba名称,值gydF4y2Ba)gydF4y2Ba每个属性集gydF4y2Ba姓名gydF4y2Ba到指定的gydF4y2Ba价值gydF4y2Ba.未指定的属性具有默认值。gydF4y2Ba

例子:gydF4y2Ba保险丝= imufilter(“GyroscopeNoise”“SampleRate”,200年,1 e-6)gydF4y2Ba创建一个System对象,gydF4y2Ba保险丝gydF4y2Ba,采样频率为200hz,陀螺仪噪声设置为1e-6弧度每秒的平方。gydF4y2Ba

属性gydF4y2Ba

全部展开gydF4y2Ba

除非另有说明,属性是gydF4y2BanontunablegydF4y2Ba,这意味着在调用对象后无法更改其值。当您调用它们时,对象锁定gydF4y2Ba释放gydF4y2Ba函数打开它们。gydF4y2Ba

如果一个属性是gydF4y2Ba可调gydF4y2Ba,您可以随时更改它的值。gydF4y2Ba

有关更改属性值的更多信息,请参阅gydF4y2Ba在MATLAB中使用系统对象进行系统设计gydF4y2Ba(MATLAB)。gydF4y2Ba

输入传感器数据的采样率(Hz),指定为正的有限标量。gydF4y2Ba

可调:gydF4y2Ba不gydF4y2Ba

数据类型:gydF4y2Ba单身的gydF4y2Ba|gydF4y2Ba双gydF4y2Ba|gydF4y2Bauint8gydF4y2Ba|gydF4y2Bauint16gydF4y2Ba|gydF4y2Bauint32gydF4y2Ba|gydF4y2BaUINT64gydF4y2Ba|gydF4y2BaINT8gydF4y2Ba|gydF4y2Baint16gydF4y2Ba|gydF4y2BaINT32.gydF4y2Ba|gydF4y2Baint64gydF4y2Ba

抽取因子通过减少输入传感器数据的采样率,指定为正整数标量。gydF4y2Ba

输入的行数,gydF4y2Ba加速gydF4y2Ba和gydF4y2BagyroReadingsgydF4y2Ba,必须是抽取因子的倍数。gydF4y2Ba

可调:gydF4y2Ba不gydF4y2Ba

数据类型:gydF4y2Ba单身的gydF4y2Ba|gydF4y2Ba双gydF4y2Ba|gydF4y2Bauint8gydF4y2Ba|gydF4y2Bauint16gydF4y2Ba|gydF4y2Bauint32gydF4y2Ba|gydF4y2BaUINT64gydF4y2Ba|gydF4y2BaINT8gydF4y2Ba|gydF4y2Baint16gydF4y2Ba|gydF4y2BaINT32.gydF4y2Ba|gydF4y2Baint64gydF4y2Ba

在加速度计信号的噪声方差(米/秒gydF4y2Ba2gydF4y2Ba)gydF4y2Ba2gydF4y2Ba,指定为正实标量。gydF4y2Ba

可调:gydF4y2Ba是的gydF4y2Ba

数据类型:gydF4y2Ba单身的gydF4y2Ba|gydF4y2Ba双gydF4y2Ba|gydF4y2Bauint8gydF4y2Ba|gydF4y2Bauint16gydF4y2Ba|gydF4y2Bauint32gydF4y2Ba|gydF4y2BaUINT64gydF4y2Ba|gydF4y2BaINT8gydF4y2Ba|gydF4y2Baint16gydF4y2Ba|gydF4y2BaINT32.gydF4y2Ba|gydF4y2Baint64gydF4y2Ba

陀螺仪信号噪声的方差(rad/s)gydF4y2Ba2gydF4y2Ba,指定为正实标量。gydF4y2Ba

可调:gydF4y2Ba是的gydF4y2Ba

数据类型:gydF4y2Ba单身的gydF4y2Ba|gydF4y2Ba双gydF4y2Ba|gydF4y2Bauint8gydF4y2Ba|gydF4y2Bauint16gydF4y2Ba|gydF4y2Bauint32gydF4y2Ba|gydF4y2BaUINT64gydF4y2Ba|gydF4y2BaINT8gydF4y2Ba|gydF4y2Baint16gydF4y2Ba|gydF4y2BaINT32.gydF4y2Ba|gydF4y2Baint64gydF4y2Ba

陀螺仪偏移漂移方差(rad/s)gydF4y2Ba2gydF4y2Ba,指定为正实标量。gydF4y2Ba

可调:gydF4y2Ba是的gydF4y2Ba

数据类型:gydF4y2Ba单身的gydF4y2Ba|gydF4y2Ba双gydF4y2Ba|gydF4y2Bauint8gydF4y2Ba|gydF4y2Bauint16gydF4y2Ba|gydF4y2Bauint32gydF4y2Ba|gydF4y2BaUINT64gydF4y2Ba|gydF4y2BaINT8gydF4y2Ba|gydF4y2Baint16gydF4y2Ba|gydF4y2BaINT32.gydF4y2Ba|gydF4y2Baint64gydF4y2Ba

线性加速度噪声的差异(M / sgydF4y2Ba2gydF4y2Ba)gydF4y2Ba2gydF4y2Ba,指定为正实标量。线性加速度被建模为低通滤波的白噪声过程。gydF4y2Ba

可调:gydF4y2Ba是的gydF4y2Ba

数据类型:gydF4y2Ba单身的gydF4y2Ba|gydF4y2Ba双gydF4y2Ba|gydF4y2Bauint8gydF4y2Ba|gydF4y2Bauint16gydF4y2Ba|gydF4y2Bauint32gydF4y2Ba|gydF4y2BaUINT64gydF4y2Ba|gydF4y2BaINT8gydF4y2Ba|gydF4y2Baint16gydF4y2Ba|gydF4y2BaINT32.gydF4y2Ba|gydF4y2Baint64gydF4y2Ba

线性加速度漂移的衰减系数,指定为[0,1]范围内的标量。如果线性加速度变化很快,设置gydF4y2BaLinearAccelerationDecayFactorgydF4y2Ba到一个更低的值。如果线性加速度变化缓慢,设置gydF4y2BaLinearAccelerationDecayFactorgydF4y2Ba到更高的值。线性加速度漂移被建模为低通滤波白噪声过程。gydF4y2Ba

可调:gydF4y2Ba是的gydF4y2Ba

数据类型:gydF4y2Ba单身的gydF4y2Ba|gydF4y2Ba双gydF4y2Ba|gydF4y2Bauint8gydF4y2Ba|gydF4y2Bauint16gydF4y2Ba|gydF4y2Bauint32gydF4y2Ba|gydF4y2BaUINT64gydF4y2Ba|gydF4y2BaINT8gydF4y2Ba|gydF4y2Baint16gydF4y2Ba|gydF4y2BaINT32.gydF4y2Ba|gydF4y2Baint64gydF4y2Ba

协方差矩阵为过程噪声,指定为9乘9矩阵。默认值是:gydF4y2Ba

列1到6 0 0 0 0 0 0 0.000006092348396 0.000006092348396 0.000006092348396 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.000076154354947 0.000076154354947 0.000076154354947 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0列7到9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.009623610000000 0.009623610000000 0.009623610000000gydF4y2Ba

初始过程协方差矩阵解释了过程模型中的误差。gydF4y2Ba

数据类型:gydF4y2Ba单身的gydF4y2Ba|gydF4y2Ba双gydF4y2Ba|gydF4y2Bauint8gydF4y2Ba|gydF4y2Bauint16gydF4y2Ba|gydF4y2Bauint32gydF4y2Ba|gydF4y2BaUINT64gydF4y2Ba|gydF4y2BaINT8gydF4y2Ba|gydF4y2Baint16gydF4y2Ba|gydF4y2BaINT32.gydF4y2Ba|gydF4y2Baint64gydF4y2Ba

输出方向格式,指定为gydF4y2Ba“四元数”gydF4y2Ba或者gydF4y2Ba“旋转矩阵”gydF4y2Ba.输出的大小取决于输入的大小,gydF4y2BaNgydF4y2Ba,输出方向格式:gydF4y2Ba

  • “四元数”gydF4y2Ba——输出是一个gydF4y2BaNgydF4y2Ba1gydF4y2Ba四元数gydF4y2Ba.gydF4y2Ba

  • “旋转矩阵”gydF4y2Ba- 输出是一个3×3逐gydF4y2BaNgydF4y2Ba旋转矩阵。gydF4y2Ba

数据类型:gydF4y2BachargydF4y2Ba|gydF4y2Ba字符串gydF4y2Ba

使用gydF4y2Ba

描述gydF4y2Ba

例子gydF4y2Ba

[gydF4y2Ba方向gydF4y2Ba,gydF4y2BaangularVelocitygydF4y2Ba) =保险丝(gydF4y2Ba加速gydF4y2Ba,gydF4y2BagyroReadingsgydF4y2Ba)gydF4y2Ba保险丝的加速度计和陀螺仪读数计算方位和角速度测量。该算法假定该设备是第一次调用之前固定。gydF4y2Ba

输入参数gydF4y2Ba

全部展开gydF4y2Ba

加速度计在传感器体坐标系中的读数,单位为m/sgydF4y2Ba2gydF4y2Ba,指定为gydF4y2BaNgydF4y2Ba-By-3矩阵。gydF4y2BaNgydF4y2Ba样品的数量是多少,三列是多少gydF4y2Ba加速gydF4y2Ba代表(gydF4y2BaxgydF4y2BaygydF4y2BazgydF4y2Ba)测量。假定加速度计读数与指定的采样率相对应gydF4y2Ba采样率gydF4y2Ba财产。gydF4y2Ba

数据类型:gydF4y2Ba单身的gydF4y2Ba|gydF4y2Ba双gydF4y2Ba

陀螺仪在传感器体坐标系中的读数,单位为rad/s,指定为gydF4y2BaNgydF4y2Ba-By-3矩阵。gydF4y2BaNgydF4y2Ba样品的数量是多少,三列是多少gydF4y2BagyroReadingsgydF4y2Ba代表(gydF4y2BaxgydF4y2BaygydF4y2BazgydF4y2Ba)测量。陀螺仪读数被假定为与指定的采样速率相对应gydF4y2Ba采样率gydF4y2Ba财产。gydF4y2Ba

数据类型:gydF4y2Ba单身的gydF4y2Ba|gydF4y2Ba双gydF4y2Ba

输出参数gydF4y2Ba

全部展开gydF4y2Ba

可以将量从全局坐标系旋转到物体坐标系的方向,以四元数或数组的形式返回。的大小和类型gydF4y2Ba方向gydF4y2Ba取决于gydF4y2BaOrientationFormatgydF4y2Ba属性设置为gydF4y2Ba“四元数”gydF4y2Ba或者gydF4y2Ba“旋转矩阵”gydF4y2Ba:gydF4y2Ba

  • “四元数”gydF4y2Ba——输出为angydF4y2Ba米gydF4y2Ba-by-1四元数向量,具有与输入相同的底层数据类型。gydF4y2Ba

  • “旋转矩阵”gydF4y2Ba- 输出是一个3×3逐gydF4y2Ba米gydF4y2Ba旋转矩阵阵列的相同的​​数据类型的输入。gydF4y2Ba

输入样本的数量,gydF4y2BaNgydF4y2Ba,gydF4y2BadecimationFactor.gydF4y2Ba财产确定gydF4y2Ba米gydF4y2Ba.gydF4y2Ba

您可以使用gydF4y2Ba方向gydF4y2Ba在一个gydF4y2Ba旋转框架gydF4y2Ba功能从全局坐标系旋转到传感器主体坐标系。gydF4y2Ba

数据类型:gydF4y2Ba四元数gydF4y2Ba|gydF4y2Ba单身的gydF4y2Ba|gydF4y2Ba双gydF4y2Ba

在传感器体坐标系中去除陀螺仪偏差的角速度(rad/s),返回为gydF4y2Ba米gydF4y2Ba-by-3阵列。输入样本的数量,gydF4y2BaNgydF4y2Ba,gydF4y2BadecimationFactor.gydF4y2Ba财产确定gydF4y2Ba米gydF4y2Ba.gydF4y2Ba

数据类型:gydF4y2Ba单身的gydF4y2Ba|gydF4y2Ba双gydF4y2Ba

对象的功能gydF4y2Ba

要使用对象函数,请指定System对象作为第一个输入参数。例如,释放名为system的对象的系统资源gydF4y2BaobjgydF4y2Ba,使用此语法:gydF4y2Ba

发行版(obj)gydF4y2Ba

全部展开gydF4y2Ba

一步gydF4y2Ba 跑gydF4y2Ba系统对象gydF4y2Ba算法gydF4y2Ba
释放gydF4y2Ba 释放资源并允许更改gydF4y2Ba系统对象gydF4y2Ba属性值和输入特征gydF4y2Ba
重置gydF4y2Ba 重置内部状态gydF4y2Ba系统对象gydF4y2Ba

例子gydF4y2Ba

全部折叠gydF4y2Ba

加载gydF4y2Barpy_9axisgydF4y2Ba文件,其中包含记录的加速度计,陀螺仪,和磁力计传感器数据从一个设备在俯仰摆动(周围gydF4y2BaygydF4y2Ba-axis,然后偏航(周围gydF4y2BazgydF4y2Ba-axis),然后滚动(周围gydF4y2BaxgydF4y2Ba设在)。该文件还包含记录的采样率。gydF4y2Ba

负载gydF4y2Ba'rpy_9axis.mat'gydF4y2BaSensoldata.gydF4y2BaFsgydF4y2BaAcceleromaterReadings = Sensoldata.Acceleration;gyroscopereadings = sensoldata.angularvelocity;gydF4y2Ba

创建一个gydF4y2BaimufiltergydF4y2Ba系统对象™与采样率设置到传感器的数据的采样率。指定的两个抽取因子来降低算法的计算成本。gydF4y2Ba

decim = 2;保险丝= imufilter (gydF4y2Ba“SampleRate”gydF4y2BaFs,gydF4y2Ba“DecimationFactor”gydF4y2Ba, decim);gydF4y2Ba

将加速度计读数和陀螺仪读数传递给gydF4y2BaimufiltergydF4y2Ba目的,gydF4y2Ba保险丝gydF4y2Ba,输出随时间变化的传感器体方向的估计。默认情况下,方向输出为四元数向量。gydF4y2Ba

q =保险丝(accelerometerReadings gyroscopeReadings);gydF4y2Ba

取向由旋转父坐标系所需的角位移来定义为子坐标系。随着时间的推移在度数以欧拉角度的方向绘制。gydF4y2Ba

imufiltergydF4y2Ba融合正确地估计了从假设的朝北的初始方向的方向变化。然而,设备的gydF4y2BaxgydF4y2Ba-轴在记录时指向南方。要正确估计相对于真实初始方向或相对于NED的方向,请使用gydF4y2Baahrsfilter.gydF4y2Ba.gydF4y2Ba

时间=(0:DECIM:尺寸(加速度计,1)-1)/ FS;绘图(时间,eulerd(q,gydF4y2Ba“ZYX股票”gydF4y2Ba,gydF4y2Ba“帧”gydF4y2Ba)标题(gydF4y2Ba取向估计的gydF4y2Ba)传说(gydF4y2Ba“Z轴”gydF4y2Ba,gydF4y2Ba“轴”gydF4y2Ba,gydF4y2Ba“轴”gydF4y2Ba)xlabel(gydF4y2Ba“时间(s)”gydF4y2Ba) ylabel (gydF4y2Ba的旋转(度)gydF4y2Ba)gydF4y2Ba

模型包含了加速计和陀螺仪使用倾斜IMUgydF4y2BaimuSensorgydF4y2Ba系统对象™。使用理想模型和现实模型来比较使用的方向跟踪结果gydF4y2BaimufiltergydF4y2Ba系统对象。gydF4y2Ba

加载一个描述地面真实运动和采样率的结构体。运动结构描述顺序旋转:gydF4y2Ba

  1. 偏航:120度超过2秒gydF4y2Ba

  2. 音高:一秒钟内60度gydF4y2Ba

  3. 滚:30度半秒gydF4y2Ba

  4. 滚:-30度超过半秒gydF4y2Ba

  5. 音高:-60度/秒gydF4y2Ba

  6. 偏航:-120度超过两秒gydF4y2Ba

在最后一个阶段,运动结构将第1、2和3个旋转组合成单轴旋转。加速度、角速度和方向在本地NED坐标系中定义。gydF4y2Ba

负载gydF4y2BaY120P60R30.MatgydF4y2Ba运动gydF4y2BafsgydF4y2BaaccNED = motion.Acceleration;angVelNED = motion.AngularVelocity;取向= motion.Orientation;numSamples =大小(motion.Orientation, 1);t = (0: (numSamples-1)。/ fs;gydF4y2Ba

创建一个理想的IMU传感器对象和默认IMU过滤器对象。gydF4y2Ba

IMU = imuSensor (gydF4y2Ba“加速 - 陀螺仪”gydF4y2Ba,gydF4y2Ba“SampleRate”gydF4y2Bafs);aFilter = imufilter(gydF4y2Ba“SampleRate”gydF4y2Bafs);gydF4y2Ba

在循环中:gydF4y2Ba

  1. 通过向IMU传感器对象输入地面真实运动来模拟IMU输出。gydF4y2Ba

  2. 过滤器使用默认过滤器IMU对象IMU输出。gydF4y2Ba

取向=零(NUMSAMPLES,1,gydF4y2Ba“四元数”gydF4y2Ba);gydF4y2Ba为gydF4y2Bai = 1:numSamples [accelBody,gyroBody] = IMU(accNED(i,:),angVelNED(i,:),orientationNED(i,:));方向(i) = aFilter (accelBody gyroBody);gydF4y2Ba结束gydF4y2Ba发行版(aFilter)gydF4y2Ba

绘制随时间变化的方向。gydF4y2Ba

图(1)绘图(T,Eulerd(方向,gydF4y2Ba“ZYX股票”gydF4y2Ba,gydF4y2Ba“帧”gydF4y2Ba))xlabel(gydF4y2Ba“时间(s)”gydF4y2Ba) ylabel (gydF4y2Ba的旋转(度)gydF4y2Ba) 标题(gydF4y2Ba'定向估计 - 理想的IMU数据,默认IMU过滤器'gydF4y2Ba)传说(gydF4y2Ba“Z轴”gydF4y2Ba,gydF4y2Ba“轴”gydF4y2Ba,gydF4y2Ba“轴”gydF4y2Ba)gydF4y2Ba

修改您的gydF4y2BaimuSensorgydF4y2Ba模拟真实世界的传感器。再次运行这个循环,并随着时间的推移绘制方向估计。gydF4y2Ba

imu.accelerometer = Accelparams(gydF4y2Ba......gydF4y2Ba“MeasurementRange”gydF4y2Ba, 19.62,gydF4y2Ba......gydF4y2Ba“决议”gydF4y2Ba,0.00059875,gydF4y2Ba......gydF4y2Ba“ConstantBias”gydF4y2Ba,0.4905,gydF4y2Ba......gydF4y2Ba“AxesMisalignment”gydF4y2Ba2,gydF4y2Ba......gydF4y2Ba'NoiseDensity'gydF4y2Ba,0.003924,gydF4y2Ba......gydF4y2Ba“BiasInstability”gydF4y2Ba0,gydF4y2Ba......gydF4y2Ba“TemperatureBias”gydF4y2Ba, [0.34335 0.34335 0.5886],gydF4y2Ba......gydF4y2Ba“TemperatureScaleFactor”gydF4y2Ba,0.02);imu.gyroscope = gyroparams(gydF4y2Ba......gydF4y2Ba“MeasurementRange”gydF4y2Ba,4.3633,gydF4y2Ba......gydF4y2Ba“决议”gydF4y2Ba, 0.00013323,gydF4y2Ba......gydF4y2Ba“AxesMisalignment”gydF4y2Ba2,gydF4y2Ba......gydF4y2Ba'NoiseDensity'gydF4y2Ba8.7266 e-05gydF4y2Ba......gydF4y2Ba“TemperatureBias”gydF4y2Ba, 0.34907,gydF4y2Ba......gydF4y2Ba“TemperatureScaleFactor”gydF4y2Ba, 0.02,gydF4y2Ba......gydF4y2Ba'AccelerationBias'gydF4y2Ba, 0.00017809,gydF4y2Ba......gydF4y2Ba“ConstantBias”gydF4y2Ba, 0.3491, 0.5, 0);orientationDefault = 0 (numSamples 1gydF4y2Ba“四元数”gydF4y2Ba);gydF4y2Ba为gydF4y2Bai = 1:numSamples [accelBody,gyroBody] = IMU(accNED(i,:),angVelNED(i,:),orientationNED(i,:));orientationDefault(ⅰ)= aFilter(accelBody,gyroBody);gydF4y2Ba结束gydF4y2Ba发行版(aFilter)图(2)情节(t, eulerd (orientationDefault,gydF4y2Ba“ZYX股票”gydF4y2Ba,gydF4y2Ba“帧”gydF4y2Ba))xlabel(gydF4y2Ba“时间(s)”gydF4y2Ba) ylabel (gydF4y2Ba的旋转(度)gydF4y2Ba) 标题(gydF4y2Ba“方向估计 - 现实IMU数据,默认IMU过滤器”gydF4y2Ba)传说(gydF4y2Ba“Z轴”gydF4y2Ba,gydF4y2Ba“轴”gydF4y2Ba,gydF4y2Ba“轴”gydF4y2Ba)gydF4y2Ba

能力gydF4y2BaimufiltergydF4y2Ba当对真实的IMU建模时,跟踪地面真实数据的能力显著降低。要提高性能,请修改您的属性gydF4y2BaimufiltergydF4y2Ba目的。这些值是凭经验确定的。再次运行这个循环,并随着时间的推移绘制方向估计。gydF4y2Ba

aFilter。GyroscopeNoise = 7.6154 e;aFilter。一个ccelerometerNoise = 0.0015398; aFilter.GyroscopeDriftNoise = 3.0462e-12; aFilter.LinearAccelerationNoise = 0.00096236; aFilter.InitialProcessNoise = aFilter.InitialProcessNoise*10; orientationNondefault = zeros(numSamples,1,“四元数”gydF4y2Ba);gydF4y2Ba为gydF4y2Bai = 1:numSamples [accelBody,gyroBody] = IMU(accNED(i,:),angVelNED(i,:),orientationNED(i,:));orientationNondefault (i) = aFilter (accelBody gyroBody);gydF4y2Ba结束gydF4y2Ba发行版(aFilter)图(3)图(t, eulerd (orientationNondefault,gydF4y2Ba“ZYX股票”gydF4y2Ba,gydF4y2Ba“帧”gydF4y2Ba))xlabel(gydF4y2Ba“时间(s)”gydF4y2Ba) ylabel (gydF4y2Ba的旋转(度)gydF4y2Ba) 标题(gydF4y2Ba“方向估计 - 现实IMU数据,非默认IMU过滤器”gydF4y2Ba)传说(gydF4y2Ba“Z轴”gydF4y2Ba,gydF4y2Ba“轴”gydF4y2Ba,gydF4y2Ba“轴”gydF4y2Ba)gydF4y2Ba

量化改进后的性能gydF4y2BaimufiltergydF4y2Ba,绘制地面真实运动和返回方向之间的四元数距离gydF4y2BaimufiltergydF4y2Ba默认和非默认属性。gydF4y2Ba

qdistdefault = rad2deg(dist(方向,方向default));qdistnondefault = rad2deg(dist(方向,方向nondefault);图(4)plot(t,[qdistdefault,qdistnondefault])标题(gydF4y2Ba“从真正的定向四元距离”gydF4y2Ba)传说(gydF4y2Ba真实的IMU数据,默认的IMU过滤器gydF4y2Ba,gydF4y2Ba......gydF4y2Ba“真实的IMU数据,非默认的IMU过滤器”gydF4y2Ba)xlabel(gydF4y2Ba“时间(s)”gydF4y2Ba) ylabel (gydF4y2Ba“四元数距离(度)gydF4y2Ba)gydF4y2Ba

此示例示出了如何从IMU使用除去陀螺仪偏差gydF4y2BaimufiltergydF4y2Ba.gydF4y2Ba

使用gydF4y2Bakinematictrajectory.gydF4y2Ba创建一个由两部分组成的轨迹。第一部分的角速度是恒定的gydF4y2BaygydF4y2Ba- 和gydF4y2BazgydF4y2Ba相互重合。第二部分在所有三个轴上的角速度都是变化的。gydF4y2Ba

时间= 60 * 8;fs = 20;numSamples = duration * fs;rng (gydF4y2Ba'默认'gydF4y2Ba)gydF4y2Ba%给RNG种子,以再现噪声传感器的测量结果。gydF4y2BainitialAngVel = [0,0.5,0.25];finalAngVel = [-0.2,0.6,0.5];constantAngVel = repmat(initialAngVel,地板(NUMSAMPLES / 2),1);varyingAngVel = [linspace(initialAngVel(1),finalAngVel(1),小区(NUMSAMPLES / 2))。',gydF4y2Ba......gydF4y2BafinalAngVel linspace (initialAngVel(2),(2),装天花板(numSamples / 2)。”gydF4y2Ba......gydF4y2BaLinspace(InitiNangvel(3),Finalangvel(3),CEIL(NUMSAMPLES / 2))。'];angvelbody = [contantangvel;varyingangvel];AccBody = Zeros(Numsamples,3);traj = kinematictrajectory(gydF4y2Ba“SampleRate”gydF4y2Bafs);[qn, ~ ~, accNED angVelNED] = traj (accBody angVelBody);gydF4y2Ba

创建一个gydF4y2BaimuSensorgydF4y2Ba系统对象™,gydF4y2BaIMU.gydF4y2Ba,使用非理想陀螺仪。调用gydF4y2BaIMU.gydF4y2Ba加速度,角速度和方向。gydF4y2Ba

IMU = imuSensor (gydF4y2Ba“加速 - 陀螺仪”gydF4y2Ba,gydF4y2Ba......gydF4y2Ba“陀螺”gydF4y2Bagyroparams (gydF4y2Ba“随机散步”gydF4y2Ba, 0.003,gydF4y2Ba“ConstantBias”gydF4y2Ba0.3),gydF4y2Ba......gydF4y2Ba“SampleRate”gydF4y2Bafs);[accelReadings,gyroReadingsBody] = IMU(accNED,angVelNED,qNED);gydF4y2Ba

创建一个gydF4y2BaimufiltergydF4y2Ba系统对象,gydF4y2Ba保险丝gydF4y2Ba.调用gydF4y2Ba保险丝gydF4y2Ba使用建模的加速度计读数和陀螺仪读数。gydF4y2Ba

保险丝= imufilter (gydF4y2Ba“SampleRate”gydF4y2Bafs,gydF4y2Ba“GyroscopeDriftNoise”gydF4y2Ba1 e-6);[~, angVelBodyRecovered] =保险丝(accelReadings gyroReadingsBody);gydF4y2Ba

绘制地面实况角速度,陀螺仪的读数,并将回收的各轴的角速度。gydF4y2Ba

角速度从gydF4y2BaimufiltergydF4y2Ba补偿陀螺仪偏差随时间的影响,并收敛到真实的角速度。gydF4y2Ba

时间=(0:NUMSAMPLES-1)'/ FS;图(之一)图(时间,angVelBody(:,1),gydF4y2Ba......gydF4y2Ba时间,gyroReadingsBody (: 1),gydF4y2Ba......gydF4y2Ba时间,angvelbodyrocovered(:,1))标题(gydF4y2Ba“轴”gydF4y2Ba)传说(gydF4y2Ba“真正的角速度”gydF4y2Ba,gydF4y2Ba......gydF4y2Ba“陀螺仪数据”gydF4y2Ba,gydF4y2Ba......gydF4y2Ba“恢复角速度”gydF4y2Ba) ylabel (gydF4y2Ba'角速度(rad / s)'gydF4y2Ba)gydF4y2Ba

图(2)情节(时间,agvelbody(:,2),gydF4y2Ba......gydF4y2Ba时间,gyroReadingsBody (:, 2),gydF4y2Ba......gydF4y2Ba时间,angVelBodyRecovered(: 2)标题(gydF4y2Ba“轴”gydF4y2Ba) ylabel (gydF4y2Ba'角速度(rad / s)'gydF4y2Ba)gydF4y2Ba

图(3)图(时间,angVelBody (:, 3),gydF4y2Ba......gydF4y2Ba时间,gyroReadingsBody (:, 3),gydF4y2Ba......gydF4y2Ba时间,angVelBodyRecovered(: 3)标题(gydF4y2Ba“Z轴”gydF4y2Ba) ylabel (gydF4y2Ba'角速度(rad / s)'gydF4y2Ba)xlabel(gydF4y2Ba“时间(s)”gydF4y2Ba)gydF4y2Ba

算法gydF4y2Ba

全部展开gydF4y2Ba

注:以下算法仅适用于NED参考帧。gydF4y2Ba

的gydF4y2BaimufiltergydF4y2Ba使用六轴Kalman滤波器结构描述gydF4y2Ba[1]gydF4y2Ba(传感器融合和跟踪工具箱)。该算法试图跟踪方向,陀螺仪偏移和线性加速度的误差以输出最终方向和角速度。间接Kalman滤波器模型不直接跟踪方向,而不是直接跟踪方向,而是错误过程,gydF4y2BaxgydF4y2Ba,用递归的更新:gydF4y2Ba

xgydF4y2Ba kgydF4y2Ba =gydF4y2Ba [gydF4y2Ba θ.gydF4y2Ba kgydF4y2Ba bgydF4y2Ba kgydF4y2Ba 一个gydF4y2Ba kgydF4y2Ba ]gydF4y2Ba =gydF4y2Ba FgydF4y2Ba kgydF4y2Ba [gydF4y2Ba θ.gydF4y2Ba kgydF4y2Ba -gydF4y2Ba 1gydF4y2Ba bgydF4y2Ba kgydF4y2Ba -gydF4y2Ba 1gydF4y2Ba 一个gydF4y2Ba kgydF4y2Ba -gydF4y2Ba 1gydF4y2Ba ]gydF4y2Ba +gydF4y2Ba wgydF4y2Ba kgydF4y2Ba

在哪里gydF4y2BaxgydF4y2BakgydF4y2Ba是由一个9×1矢量:gydF4y2Ba

  • θ.gydF4y2BakgydF4y2Ba——3乘1的方向误差矢量,以度数表示gydF4y2BakgydF4y2Ba

  • bgydF4y2BakgydF4y2Ba- 3×1陀螺仪零角速率偏置载体,在DEG / s中gydF4y2BakgydF4y2Ba

  • 一个gydF4y2BakgydF4y2Ba- 3×1加速度误差向量在传感器帧测量的,单位为g,在时间gydF4y2BakgydF4y2Ba

  • wgydF4y2BakgydF4y2Ba——9乘1的加性噪声向量gydF4y2Ba

  • FgydF4y2BakgydF4y2Ba——状态转移模型gydF4y2Ba

因为gydF4y2BaxgydF4y2BakgydF4y2Ba被定义为误差的过程中,gydF4y2Ba先天的gydF4y2Ba估计总是零,因此状态转移模型,gydF4y2BaFgydF4y2BakgydF4y2Ba,为零。这种洞察力导致以下降低标准卡尔曼方程:gydF4y2Ba

标准卡尔曼方程:gydF4y2Ba

xgydF4y2Ba kgydF4y2Ba -gydF4y2Ba =gydF4y2Ba FgydF4y2Ba kgydF4y2Ba xgydF4y2Ba kgydF4y2Ba -gydF4y2Ba 1gydF4y2Ba +gydF4y2Ba PgydF4y2Ba kgydF4y2Ba -gydF4y2Ba =gydF4y2Ba FgydF4y2Ba kgydF4y2Ba PgydF4y2Ba kgydF4y2Ba -gydF4y2Ba 1gydF4y2Ba +gydF4y2Ba FgydF4y2Ba kgydF4y2Ba TgydF4y2Ba +gydF4y2Ba 问gydF4y2Ba kgydF4y2Ba ygydF4y2Ba kgydF4y2Ba =gydF4y2Ba zgydF4y2Ba kgydF4y2Ba -gydF4y2Ba HgydF4y2Ba kgydF4y2Ba xgydF4y2Ba kgydF4y2Ba -gydF4y2Ba 年代gydF4y2Ba kgydF4y2Ba =gydF4y2Ba RgydF4y2Ba kgydF4y2Ba +gydF4y2Ba HgydF4y2Ba kgydF4y2Ba PgydF4y2Ba kgydF4y2Ba -gydF4y2Ba HgydF4y2Ba kgydF4y2Ba TgydF4y2Ba KgydF4y2Ba kgydF4y2Ba =gydF4y2Ba PgydF4y2Ba kgydF4y2Ba -gydF4y2Ba HgydF4y2Ba kgydF4y2Ba TgydF4y2Ba (gydF4y2Ba 年代gydF4y2Ba kgydF4y2Ba )gydF4y2Ba -gydF4y2Ba 1gydF4y2Ba xgydF4y2Ba kgydF4y2Ba +gydF4y2Ba =gydF4y2Ba xgydF4y2Ba kgydF4y2Ba -gydF4y2Ba +gydF4y2Ba KgydF4y2Ba kgydF4y2Ba ygydF4y2Ba kgydF4y2Ba PgydF4y2Ba kgydF4y2Ba +gydF4y2Ba =gydF4y2Ba PgydF4y2Ba kgydF4y2Ba -gydF4y2Ba -gydF4y2Ba KgydF4y2Ba kgydF4y2Ba HgydF4y2Ba kgydF4y2Ba PgydF4y2Ba kgydF4y2Ba -gydF4y2Ba

算法中使用的卡尔曼方程:gydF4y2Ba

xgydF4y2Ba kgydF4y2Ba -gydF4y2Ba =gydF4y2Ba 0gydF4y2Ba PgydF4y2Ba kgydF4y2Ba -gydF4y2Ba =gydF4y2Ba 问gydF4y2Ba kgydF4y2Ba ygydF4y2Ba kgydF4y2Ba =gydF4y2Ba zgydF4y2Ba kgydF4y2Ba 年代gydF4y2Ba kgydF4y2Ba =gydF4y2Ba RgydF4y2Ba kgydF4y2Ba +gydF4y2Ba HgydF4y2Ba kgydF4y2Ba PgydF4y2Ba kgydF4y2Ba -gydF4y2Ba HgydF4y2Ba kgydF4y2Ba TgydF4y2Ba KgydF4y2Ba kgydF4y2Ba =gydF4y2Ba PgydF4y2Ba kgydF4y2Ba -gydF4y2Ba HgydF4y2Ba kgydF4y2Ba TgydF4y2Ba (gydF4y2Ba 年代gydF4y2Ba kgydF4y2Ba )gydF4y2Ba -gydF4y2Ba 1gydF4y2Ba xgydF4y2Ba kgydF4y2Ba +gydF4y2Ba =gydF4y2Ba KgydF4y2Ba kgydF4y2Ba ygydF4y2Ba kgydF4y2Ba PgydF4y2Ba kgydF4y2Ba +gydF4y2Ba =gydF4y2Ba PgydF4y2Ba kgydF4y2Ba -gydF4y2Ba -gydF4y2Ba KgydF4y2Ba kgydF4y2Ba HgydF4y2Ba kgydF4y2Ba PgydF4y2Ba kgydF4y2Ba -gydF4y2Ba

在哪里gydF4y2Ba

  • xgydF4y2BakgydF4y2Ba-gydF4y2Ba- 预料到的 (gydF4y2Ba先天的gydF4y2Ba)状态估计;错误处理gydF4y2Ba

  • PgydF4y2BakgydF4y2Ba-gydF4y2Ba- 预料到的 (gydF4y2Ba先天的gydF4y2Ba)估计协方差gydF4y2Ba

  • ygydF4y2BakgydF4y2Ba- 创新gydF4y2Ba

  • 年代gydF4y2BakgydF4y2Ba——创新协方差gydF4y2Ba

  • KgydF4y2BakgydF4y2Ba——卡尔曼增益gydF4y2Ba

  • xgydF4y2BakgydF4y2Ba+gydF4y2Ba- 更新 (gydF4y2Ba后验gydF4y2Ba)状态估计gydF4y2Ba

  • PgydF4y2BakgydF4y2Ba+gydF4y2Ba- 更新 (gydF4y2Ba后验gydF4y2Ba)估计协方差gydF4y2Ba

kgydF4y2Ba表示迭代中,上标gydF4y2Ba+gydF4y2Ba代表一个gydF4y2Ba后验gydF4y2Ba估计,上标gydF4y2Ba-gydF4y2Ba代表一个gydF4y2Ba先天的gydF4y2Ba估计。gydF4y2Ba

图和下面的步骤描述了通过算法的基于单一帧的迭代。gydF4y2Ba

第一次迭代之前,gydF4y2Ba加速gydF4y2Ba和gydF4y2BagyroReadingsgydF4y2Ba输入被分块成1×3帧和gydF4y2BadecimationFactor.gydF4y2Ba分别3帧。该算法使用最新的加速度计读数对应的块陀螺仪读数。gydF4y2Ba

参考gydF4y2Ba

Roetenberg, D., H.J. Luinge, C.T.M. Baten和P.H. Veltink。磁扰动补偿改善了人体节段定位的惯性和磁传感。gydF4y2Ba神经系统与康复工程学报gydF4y2Ba.卷。13。2005年第3期,第395-405页。gydF4y2Ba

扩展功能gydF4y2Ba

另请参阅gydF4y2Ba

|gydF4y2Ba|gydF4y2Ba|gydF4y2Ba

介绍了R2018bgydF4y2Ba