主要内容gydF4y2Ba

imuSensorgydF4y2Ba

IMU仿真模型gydF4y2Ba

描述gydF4y2Ba

的gydF4y2BaimuSensorgydF4y2Ba系统对象™模型接收来自惯性测量单元(IMU)的数据。gydF4y2Ba

为IMU建模:gydF4y2Ba

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

  2. 使用参数调用对象,就像调用函数一样。gydF4y2Ba

有关系统对象如何工作的详细信息,请参见gydF4y2Ba什么是系统对象?gydF4y2Ba.gydF4y2Ba

创建gydF4y2Ba

描述gydF4y2Ba

例子gydF4y2Ba

IMUgydF4y2Ba= imuSensorgydF4y2Ba返回一个System对象,gydF4y2BaIMUgydF4y2Ba,根据惯性输入信号计算惯性测量单元读数。gydF4y2BaIMUgydF4y2Ba具有理想的加速度计和陀螺仪。gydF4y2Ba

例子gydF4y2Ba

IMU =传感器(gydF4y2Ba“accel-gyro”gydF4y2Ba)gydF4y2Ba返回一个gydF4y2BaimuSensorgydF4y2Ba系统对象具有理想的加速度计和陀螺仪。gydF4y2BaimuSensorgydF4y2Ba而且gydF4y2BaimuSensor(“accel-gyro”)gydF4y2Ba是等价的创建语法。gydF4y2Ba

例子gydF4y2Ba

IMU =传感器(gydF4y2Ba“accel-mag”gydF4y2Ba)gydF4y2Ba返回一个gydF4y2BaimuSensorgydF4y2Ba系统对象具有理想的加速度计和磁力计。gydF4y2Ba

例子gydF4y2Ba

IMU =传感器(gydF4y2Ba“accel-gyro-mag”gydF4y2Ba)gydF4y2Ba返回一个gydF4y2BaimuSensorgydF4y2Ba系统对象与一个理想的加速度计,陀螺仪,和磁力计。gydF4y2Ba

IMU =传感器(gydF4y2Ba___gydF4y2Ba,gydF4y2Ba“ReferenceFrame”gydF4y2Ba,gydF4y2Ba射频gydF4y2Ba)gydF4y2Ba返回一个gydF4y2BaimuSensorgydF4y2Ba计算相对于参考系的惯性测量单元读数的系统对象gydF4y2Ba射频gydF4y2Ba.指定gydF4y2Ba射频gydF4y2Ba作为gydF4y2BaNED的gydF4y2Ba(North-East-Down)或gydF4y2Ba“ENU表示”gydF4y2Ba(East-North-Up)。默认值为gydF4y2BaNED的gydF4y2Ba.gydF4y2Ba

例子gydF4y2Ba

IMU =传感器(gydF4y2Ba___gydF4y2Ba,gydF4y2Ba名称,值gydF4y2Ba)gydF4y2Ba设置每个属性gydF4y2Ba的名字gydF4y2Ba到指定的gydF4y2Ba价值gydF4y2Ba.未指定的属性有默认值。此语法可以与前面的任何输入参数组合使用。gydF4y2Ba

属性gydF4y2Ba

全部展开gydF4y2Ba

除非另有说明,属性为gydF4y2BanontunablegydF4y2Ba,这意味着在调用对象后不能更改它们的值。对象在调用时锁定,而gydF4y2Ba释放gydF4y2Ba功能解锁它们。gydF4y2Ba

如果属性为gydF4y2Ba可调gydF4y2Ba,您可以随时更改其值。gydF4y2Ba

有关更改属性值的详细信息,请参见gydF4y2Ba使用系统对象的MATLAB系统设计gydF4y2Ba.gydF4y2Ba

惯性测量单元的类型,用a表示gydF4y2Ba“accel-gyro”gydF4y2Ba,gydF4y2Ba“accel-mag”gydF4y2Ba,或gydF4y2Ba“accel-gyro-mag”gydF4y2Ba.gydF4y2Ba

惯性测量单元的类型指定了要建模的传感器读数:gydF4y2Ba

  • “accel-gyro”gydF4y2Ba——加速度计和陀螺仪gydF4y2Ba

  • “accel-mag”gydF4y2Ba——加速度计和磁力计gydF4y2Ba

  • “accel-gyro-mag”gydF4y2Ba——加速度计、陀螺仪和磁力计gydF4y2Ba

你可以指定gydF4y2BaIMUTypegydF4y2Ba在创建过程中作为仅值参数或作为gydF4y2Ba名称,值gydF4y2Ba对。gydF4y2Ba

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

传感器模型的采样率,以Hz为单位,指定为正标量。gydF4y2Ba

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

IMU的工作温度,以摄氏度为单位,指定为实标量。gydF4y2Ba

当对象计算温度尺度因子和环境漂移噪声时,25gydF4y2BaogydF4y2Ba以C为标称温度。gydF4y2Ba

可调:gydF4y2Ba是的gydF4y2Ba

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

磁场矢量,以微特斯拉为单位,指定为局部导航坐标系中的三元行矢量。gydF4y2Ba

默认磁场对应于纬度为0、经度为0、高度为0的磁场。gydF4y2Ba

可调:gydF4y2Ba是的gydF4y2Ba

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

加速度计传感器参数,由gydF4y2BaaccelparamsgydF4y2Ba对象。gydF4y2Ba

可调:gydF4y2Ba是的gydF4y2Ba

陀螺仪传感器参数,由a指定gydF4y2BagyroparamsgydF4y2Ba对象。gydF4y2Ba

可调:gydF4y2Ba是的gydF4y2Ba

磁强计传感器参数,由gydF4y2BamagparamsgydF4y2Ba对象。gydF4y2Ba

可调:gydF4y2Ba是的gydF4y2Ba

随机数源,指定为字符向量或字符串:gydF4y2Ba

  • “全球流”gydF4y2Ba—使用当前全局随机数流生成随机数。gydF4y2Ba

  • “mt19937ar with seed”gydF4y2Ba——使用mt19937ar算法生成随机数,其种子由gydF4y2Ba种子gydF4y2Ba财产。gydF4y2Ba

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

mt19937ar随机数生成器算法的初始种子,指定为一个实的非负整数标量。gydF4y2Ba

依赖关系gydF4y2Ba

若要启用此属性,请设置gydF4y2BaRandomStreamgydF4y2Ba来gydF4y2Ba“mt19937ar with seed”gydF4y2Ba.gydF4y2Ba

数据类型:gydF4y2Ba单gydF4y2Ba|gydF4y2Ba双gydF4y2Ba|gydF4y2Baint8gydF4y2Ba|gydF4y2Baint16gydF4y2Ba|gydF4y2Baint32gydF4y2Ba|gydF4y2Baint64gydF4y2Ba|gydF4y2Bauint8gydF4y2Ba|gydF4y2Bauint16gydF4y2Ba|gydF4y2Bauint32gydF4y2Ba|gydF4y2Bauint64gydF4y2Ba

使用gydF4y2Ba

描述gydF4y2Ba

[gydF4y2BaaccelReadingsgydF4y2Ba,gydF4y2BagyroReadingsgydF4y2Ba= imu (gydF4y2BaaccgydF4y2Ba,gydF4y2BaangVelgydF4y2Ba)gydF4y2Ba从加速度和角速度输入中生成加速度计和陀螺仪读数。gydF4y2Ba

此语法仅在以下情况下有效gydF4y2BaIMUTypegydF4y2Ba设置为gydF4y2Ba“accel-gyro”gydF4y2Ba或gydF4y2Ba“accel-gyro-mag”gydF4y2Ba.gydF4y2Ba

[gydF4y2BaaccelReadingsgydF4y2Ba,gydF4y2BagyroReadingsgydF4y2Ba= imu (gydF4y2BaaccgydF4y2Ba,gydF4y2BaangVelgydF4y2Ba,gydF4y2Ba取向gydF4y2Ba)gydF4y2Ba从加速度、角速度和方向输入生成加速度计和陀螺仪读数。gydF4y2Ba

此语法仅在以下情况下有效gydF4y2BaIMUTypegydF4y2Ba设置为gydF4y2Ba“accel-gyro”gydF4y2Ba或gydF4y2Ba“accel-gyro-mag”gydF4y2Ba.gydF4y2Ba

[gydF4y2BaaccelReadingsgydF4y2Ba,gydF4y2BamagReadingsgydF4y2Ba= imu (gydF4y2BaaccgydF4y2Ba,gydF4y2BaangVelgydF4y2Ba)gydF4y2Ba从加速度和角速度输入中生成加速度计和磁力计读数。gydF4y2Ba

此语法仅在以下情况下有效gydF4y2BaIMUTypegydF4y2Ba设置为gydF4y2Ba“accel-mag”gydF4y2Ba.gydF4y2Ba

[gydF4y2BaaccelReadingsgydF4y2Ba,gydF4y2BamagReadingsgydF4y2Ba= imu (gydF4y2BaaccgydF4y2Ba,gydF4y2BaangVelgydF4y2Ba,gydF4y2Ba取向gydF4y2Ba)gydF4y2Ba从加速度、角速度和方向输入中生成加速度计和磁力计读数。gydF4y2Ba

此语法仅在以下情况下有效gydF4y2BaIMUTypegydF4y2Ba设置为gydF4y2Ba“accel-mag”gydF4y2Ba.gydF4y2Ba

[gydF4y2BaaccelReadingsgydF4y2Ba,gydF4y2BagyroReadingsgydF4y2Ba,gydF4y2BamagReadingsgydF4y2Ba= imu (gydF4y2BaaccgydF4y2Ba,gydF4y2BaangVelgydF4y2Ba)gydF4y2Ba从加速度和角速度输入中生成加速度计、陀螺仪和磁力计读数。gydF4y2Ba

此语法仅在以下情况下有效gydF4y2BaIMUTypegydF4y2Ba设置为gydF4y2Ba“accel-gyro-mag”gydF4y2Ba.gydF4y2Ba

[gydF4y2BaaccelReadingsgydF4y2Ba,gydF4y2BagyroReadingsgydF4y2Ba,gydF4y2BamagReadingsgydF4y2Ba= imu (gydF4y2BaaccgydF4y2Ba,gydF4y2BaangVelgydF4y2Ba,gydF4y2Ba取向gydF4y2Ba)gydF4y2Ba从加速度、角速度和方向输入中生成加速度计、陀螺仪和磁力计读数。gydF4y2Ba

此语法仅在以下情况下有效gydF4y2BaIMUTypegydF4y2Ba设置为gydF4y2Ba“accel-gyro-mag”gydF4y2Ba.gydF4y2Ba

输入参数gydF4y2Ba

全部展开gydF4y2Ba

IMU在局部导航坐标系中的加速度,指定为实的,有限的gydF4y2BaNgydF4y2Ba-by-3数组,单位为米每秒平方。gydF4y2BaNgydF4y2Ba是当前帧中的样本数。gydF4y2Ba

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

IMU在局部导航坐标系中的角速度,指定为实的,有限的gydF4y2BaNgydF4y2Ba-by-3数组,单位为弧度/秒。gydF4y2BaNgydF4y2Ba是当前帧中的样本数。gydF4y2Ba

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

IMU相对于本地导航坐标系的方向,指定为agydF4y2Ba四元数gydF4y2BaNgydF4y2Ba-元素列向量或3 × 3 × -gydF4y2BaNgydF4y2Ba旋转矩阵。每一个gydF4y2Ba四元数gydF4y2Ba或旋转矩阵表示从局部导航坐标系到当前IMU传感器体坐标系的帧旋转。gydF4y2BaNgydF4y2Ba是当前帧中的样本数。gydF4y2Ba

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

输出参数gydF4y2Ba

全部展开gydF4y2Ba

加速度计测量的IMU在传感器体坐标系中,指定为实、有限gydF4y2BaNgydF4y2Ba-by-3数组,单位为米每秒平方。gydF4y2BaNgydF4y2Ba是当前帧中的样本数。gydF4y2Ba

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

陀螺仪测量的IMU在传感器体坐标系中,指定为实、有限gydF4y2BaNgydF4y2Ba-by-3数组,单位为弧度/秒。gydF4y2BaNgydF4y2Ba是当前帧中的样本数。gydF4y2Ba

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

磁力计测量的IMU在传感器体坐标系中,指定为实、有限gydF4y2BaNgydF4y2Bamicrotelsa中的-by-3数组。gydF4y2BaNgydF4y2Ba是当前帧中的样本数。gydF4y2Ba

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

对象的功能gydF4y2Ba

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

发行版(obj)gydF4y2Ba

全部展开gydF4y2Ba

loadparamsgydF4y2Ba 从JSON文件加载传感器参数gydF4y2Ba
一步gydF4y2Ba 运行gydF4y2Ba系统对象gydF4y2Ba算法gydF4y2Ba
释放gydF4y2Ba 释放资源并允许更改gydF4y2Ba系统对象gydF4y2Ba属性值和输入特征gydF4y2Ba
重置gydF4y2Ba 重置的内部状态gydF4y2Ba系统对象gydF4y2Ba

例子gydF4y2Ba

全部折叠gydF4y2Ba

的gydF4y2BaimuSensorgydF4y2Ba系统对象™使您能够对从由陀螺仪、加速度计和磁力计组合组成的惯性测量单元接收的数据进行建模。gydF4y2Ba

创建默认值gydF4y2BaimuSensorgydF4y2Ba对象。gydF4y2Ba

IMU = imsensorgydF4y2Ba
IMU = imussensor与属性:IMUType: ' accelerate - gyroams ' SampleRate: 100温度:25加速度计:[1x1 accelparams]陀螺仪:[1x1 gyroparams] RandomStream: '全局流'gydF4y2Ba

的gydF4y2BaimuSensorgydF4y2Ba对象,gydF4y2BaIMUgydF4y2Ba,包含一个理想的陀螺仪和加速度计。使用点表示法查看陀螺仪的属性。gydF4y2Ba

IMU。陀螺仪gydF4y2Ba
ans = gyroparams与属性:MeasurementRange: Inf rad/s分辨率:0 (rad/s)/LSB ConstantBias: [0 0 0] rad/s AxesMisalignment: [0 0 0] % NoiseDensity: [0 0 0] (rad/s)/√Hz BiasInstability: [0 0 0] rad/s RandomWalk: [0 0 0] (rad/s)*√Hz TemperatureBias: [0 0 0] (rad/s)/°C TemperatureScaleFactor:[0 0 0] %/°C AccelerationBias: [0 0 0] (rad/s)/(m/s²)gydF4y2Ba

传感器属性由相应的参数对象定义。例如,陀螺仪模型所使用的gydF4y2BaimuSensorgydF4y2Ba的实例定义的gydF4y2BagyroparamsgydF4y2Ba类。可以使用点表示法修改陀螺仪模型的属性。将陀螺仪测量范围设置为4.3 rad/s。gydF4y2Ba

IMU.Gyroscope.MeasurementRange = 4.3;gydF4y2Ba

您还可以将传感器属性设置为预设参数对象。创建一个gydF4y2BaaccelparamsgydF4y2Ba对象模拟特定硬件,然后设置IMUgydF4y2Ba加速度计gydF4y2Ba属性gydF4y2BaaccelparamsgydF4y2Ba对象。显示gydF4y2Ba加速度计gydF4y2Ba属性以验证属性是否正确设置。gydF4y2Ba

SpecSheet1 = 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。一个ccelero米eter=SpecSheet1; IMU.Accelerometer
ans = accelparams with properties: MeasurementRange: 19.62 m/s²分辨率:0.00059875 (m/s²)/LSB ConstantBias: [0.4905 0.4905 0.4905] m/s²AxesMisalignment:[2 2 2] %噪声密度:[0.003924 0.003924 0.003924](m/s²)/√Hz BiasInstability: [0 000] m/s²RandomWalk: [0 000] (m/s²)*√Hz TemperatureBias: [0.34335 0.34335 0.5886] (m/s²)/°C TemperatureScaleFactor:[0.02 0.02 0.02] %/°CgydF4y2Ba

使用gydF4y2BaimuSensorgydF4y2Ba系统对象™用于模拟从包含加速度计、陀螺仪和磁力计的静止理想IMU接收数据。gydF4y2Ba

创建一个理想的IMU传感器模型,其中包含加速度计、陀螺仪和磁力计。gydF4y2Ba

IMU =传感器(gydF4y2Ba“accel-gyro-mag”gydF4y2Ba)gydF4y2Ba
IMU = imussensor与属性:IMUType: ' accelerate -gyro-mag' SampleRate: 100温度:25磁场:[27.5550 -2.4169 -16.0849]加速度计:[1x1 accelparams]陀螺仪:[1x1 gyroparams]磁力计:[1x1 magparams] RandomStream: '全局流'gydF4y2Ba

定义你正在建模的IMU的基本真实运动。加速度和角速度是相对于局部NED坐标系定义的。gydF4y2Ba

numSamples = 1000;加速度= 0 (numSamples,3);角速度=零(numSamples,3);gydF4y2Ba

调用gydF4y2BaIMUgydF4y2Ba用真实的加速度和角速度。对象输出加速度计读数、陀螺仪读数和磁力计读数,这些读数由对象的属性建模gydF4y2BaimuSensorgydF4y2Ba系统对象。加速度计读数、陀螺仪读数和磁力计读数相对于IMU传感器体坐标系。gydF4y2Ba

[accelReading,gyroReading,magReading] = IMU(加速度,角速度);gydF4y2Ba

绘制加速度计读数、陀螺仪读数和磁力计读数。gydF4y2Ba

t = (0:(numSamples-1))/IMU.SampleRate;subplot(3,1,1) plot(t,accelReading)gydF4y2Ba“轴”gydF4y2Ba,gydF4y2Ba“轴”gydF4y2Ba,gydF4y2Baz轴的gydF4y2Ba)标题(gydF4y2Ba的加速度计读数gydF4y2Ba) ylabel (gydF4y2Ba“加速度(m / s ^ 2)”gydF4y2Ba) subplot(3,1,2) plot(t,gyroReading)gydF4y2Ba“轴”gydF4y2Ba,gydF4y2Ba“轴”gydF4y2Ba,gydF4y2Baz轴的gydF4y2Ba)标题(gydF4y2Ba“陀螺仪数据”gydF4y2Ba) ylabel (gydF4y2Ba角速度(rad/s)gydF4y2Ba) subplot(3,1,3) plot(t,magReading)gydF4y2Ba“轴”gydF4y2Ba,gydF4y2Ba“轴”gydF4y2Ba,gydF4y2Baz轴的gydF4y2Ba)标题(gydF4y2Ba的磁强计读数gydF4y2Ba)包含(gydF4y2Ba“时间(s)”gydF4y2Ba) ylabel (gydF4y2Ba“磁场(uT)”gydF4y2Ba)gydF4y2Ba

由于未指定方向,且地面真实运动是静止的,因此整个仿真过程中IMU传感器体坐标系与局部NED坐标系重叠。gydF4y2Ba

  • 加速度计读数:gydF4y2BazgydF4y2Ba传感器体的-轴对应下轴。9.8 m/s^2的加速度gydF4y2BazgydF4y2Ba轴是由重力引起的。gydF4y2Ba

  • 陀螺仪读数:陀螺仪读数沿每个轴为零,正如预期的那样。gydF4y2Ba

  • 磁强计读数:由于传感器本体坐标系统与本地NED坐标系统对齐,磁强计读数对应于gydF4y2Ba磁场gydF4y2Ba的属性gydF4y2BaimuSensorgydF4y2Ba.的gydF4y2Ba磁场gydF4y2Ba属性在本地NED坐标系中定义。gydF4y2Ba

使用gydF4y2BaimuSensorgydF4y2Ba以模拟从包含理想加速度计和理想磁力计的旋转IMU获得的数据。使用gydF4y2BakinematicTrajectorygydF4y2Ba来定义地真运动。熔丝的gydF4y2BaimuSensorgydF4y2Ba使用gydF4y2BaecompassgydF4y2Ba函数确定随时间变化的方向。gydF4y2Ba

定义一个平台的真实运动,在4秒内旋转360度,然后在2秒内再旋转360度。使用gydF4y2BakinematicTrajectorygydF4y2Ba,在NED坐标系下输出方向、加速度和角速度。gydF4y2Ba

Fs = 100;firstLoopNumSamples = fs*4;secondLoopNumSamples = fs*2;totalNumSamples = firstLoopNumSamples + secondLoopNumSamples;轨迹(gydF4y2Ba“SampleRate”gydF4y2Bafs);accBody = 0 (totalNumSamples,3);angVelBody = 0 (totalNumSamples,3);angVelBody(1:firstLoopNumSamples,3) = (2*pi)/4;angVelBody(firstLoopNumSamples+1:end,3) = (2*pi)/2;[~,orientationNED,~,accNED,angVelNED] = traj(accBody,angVelBody);gydF4y2Ba

创建一个gydF4y2BaimuSensorgydF4y2Ba一个理想的加速度计和一个理想的磁力计。调用gydF4y2BaIMUgydF4y2Ba与地面真实加速度,角速度,和方向输出加速度计读数和磁力计读数。画出结果。gydF4y2Ba

IMU =传感器(gydF4y2Ba“accel-mag”gydF4y2Ba,gydF4y2Ba“SampleRate”gydF4y2Bafs);[accelreads, magreads] = IMU(accNED,angVelNED,orientationNED);图(1)t = (0:(totalNumSamples-1))/fs;subplot(2,1,1) plot(t, accelreads)图例(gydF4y2Ba“轴”gydF4y2Ba,gydF4y2Ba“轴”gydF4y2Ba,gydF4y2Baz轴的gydF4y2Ba) ylabel (gydF4y2Ba“加速度(m / s ^ 2)”gydF4y2Ba)标题(gydF4y2Ba的加速度计读数gydF4y2Ba) subplot(2,1,2) plot(t, magreads)图例(gydF4y2Ba“轴”gydF4y2Ba,gydF4y2Ba“轴”gydF4y2Ba,gydF4y2Baz轴的gydF4y2Ba) ylabel (gydF4y2Ba“磁场(\muT)”gydF4y2Ba)包含(gydF4y2Ba“时间(s)”gydF4y2Ba)标题(gydF4y2Ba的磁强计读数gydF4y2Ba)gydF4y2Ba

加速度计读数表明平台没有平移。磁力计的读数表明,平台正在围绕gydF4y2BazgydF4y2Ba设在。gydF4y2Ba

把加速度计和磁力计的读数输入gydF4y2BaecompassgydF4y2Ba函数来估计随时间变化的方向。的gydF4y2BaecompassgydF4y2Ba函数以四元数格式返回方向。将方向转换为欧拉角并绘制结果。方向图表示平台围绕gydF4y2BazgydF4y2Ba设在。gydF4y2Ba

orientation = ecompass(accelreads, magreads);orientationEuler = eulerd(方向,gydF4y2Ba“ZYX股票”gydF4y2Ba,gydF4y2Ba“帧”gydF4y2Ba);图(2)plot(t,orientationEuler)图例gydF4y2Baz轴的gydF4y2Ba,gydF4y2Ba“轴”gydF4y2Ba,gydF4y2Ba“轴”gydF4y2Ba)包含(gydF4y2Ba“时间(s)”gydF4y2Ba) ylabel (gydF4y2Ba的旋转(度)gydF4y2Ba)标题(gydF4y2Ba“定位”gydF4y2Ba)gydF4y2Ba

使用gydF4y2BaimuSensorgydF4y2Ba以模拟从包含真实加速度计和真实磁力计的旋转IMU获得的数据。使用gydF4y2BakinematicTrajectorygydF4y2Ba来定义地真运动。熔丝的gydF4y2BaimuSensorgydF4y2Ba使用gydF4y2BaecompassgydF4y2Ba函数确定随时间变化的方向。gydF4y2Ba

定义一个平台的真实运动,在4秒内旋转360度,然后在2秒内再旋转360度。使用gydF4y2BakinematicTrajectorygydF4y2Ba,在NED坐标系下输出方向、加速度和角速度。gydF4y2Ba

Fs = 100;firstLoopNumSamples = fs*4;secondLoopNumSamples = fs*2;totalNumSamples = firstLoopNumSamples + secondLoopNumSamples;轨迹(gydF4y2Ba“SampleRate”gydF4y2Bafs);accBody = 0 (totalNumSamples,3);angVelBody = 0 (totalNumSamples,3);angVelBody(1:firstLoopNumSamples,3) = (2*pi)/4;angVelBody(firstLoopNumSamples+1:end,3) = (2*pi)/2;[~,orientationNED,~,accNED,angVelNED] = traj(accBody,angVelBody);gydF4y2Ba

创建一个gydF4y2BaimuSensorgydF4y2Ba物体与现实的加速度计和现实的磁力计。调用gydF4y2BaIMUgydF4y2Ba与地面真实加速度,角速度,和方向输出加速度计读数和磁力计读数。画出结果。gydF4y2Ba

IMU =传感器(gydF4y2Ba“accel-mag”gydF4y2Ba,gydF4y2Ba“SampleRate”gydF4y2Bafs);IMU。一个ccelero米eter=accelparams(gydF4y2Ba...gydF4y2Ba“MeasurementRange”gydF4y2Ba, 19.62,gydF4y2Ba...gydF4y2Ba% m / s ^ 2gydF4y2Ba“决议”gydF4y2Ba, 0.0023936,gydF4y2Ba...gydF4y2Ba% m/s^2 / LSBgydF4y2Ba“TemperatureScaleFactor”gydF4y2Ba, 0.008,gydF4y2Ba...gydF4y2Ba% % /度CgydF4y2Ba“ConstantBias”gydF4y2Ba, 0.1962,gydF4y2Ba...gydF4y2Ba% m / s ^ 2gydF4y2Ba“TemperatureBias”gydF4y2Ba, 0.0014715,gydF4y2Ba...gydF4y2Ba% m/s^2 /度CgydF4y2Ba“NoiseDensity”gydF4y2Ba, 0.0012361);gydF4y2Ba% m/s²/ Hz^(1/2)gydF4y2BaIMU。磁力计= magparams(gydF4y2Ba...gydF4y2Ba“MeasurementRange”gydF4y2Ba, 1200,gydF4y2Ba...gydF4y2Ba% uTgydF4y2Ba“决议”gydF4y2Ba, 0.1,gydF4y2Ba...gydF4y2Ba% uT / LSBgydF4y2Ba“TemperatureScaleFactor”gydF4y2Ba, 0.1,gydF4y2Ba...gydF4y2Ba% % /度CgydF4y2Ba“ConstantBias”gydF4y2Ba, 1gydF4y2Ba...gydF4y2Ba% uTgydF4y2Ba“TemperatureBias”gydF4y2Ba,[0.8 0.8 2.4],gydF4y2Ba...gydF4y2Ba% uT /度CgydF4y2Ba“NoiseDensity”gydF4y2Ba,[0.6 0.6 0.9]/√(100));gydF4y2Ba% uT / Hz^(1/2)gydF4y2Ba[accelreads, magreads] = IMU(accNED,angVelNED,orientationNED);图(1)t = (0:(totalNumSamples-1))/fs;subplot(2,1,1) plot(t, accelreads)图例(gydF4y2Ba“轴”gydF4y2Ba,gydF4y2Ba“轴”gydF4y2Ba,gydF4y2Baz轴的gydF4y2Ba) ylabel (gydF4y2Ba“加速度(m / s ^ 2)”gydF4y2Ba)标题(gydF4y2Ba的加速度计读数gydF4y2Ba) subplot(2,1,2) plot(t, magreads)图例(gydF4y2Ba“轴”gydF4y2Ba,gydF4y2Ba“轴”gydF4y2Ba,gydF4y2Baz轴的gydF4y2Ba) ylabel (gydF4y2Ba“磁场(\muT)”gydF4y2Ba)包含(gydF4y2Ba“时间(s)”gydF4y2Ba)标题(gydF4y2Ba的磁强计读数gydF4y2Ba)gydF4y2Ba

加速度计读数表明平台没有平移。磁力计的读数表明,平台正在围绕gydF4y2BazgydF4y2Ba设在。gydF4y2Ba

把加速度计和磁力计的读数输入gydF4y2BaecompassgydF4y2Ba函数来估计随时间变化的方向。的gydF4y2BaecompassgydF4y2Ba函数以四元数格式返回方向。将方向转换为欧拉角并绘制结果。方向图表示平台围绕gydF4y2BazgydF4y2Ba设在。gydF4y2Ba

orientation = ecompass(accelreads, magreads);orientationEuler = eulerd(方向,gydF4y2Ba“ZYX股票”gydF4y2Ba,gydF4y2Ba“帧”gydF4y2Ba);图(2)plot(t,orientationEuler)图例gydF4y2Baz轴的gydF4y2Ba,gydF4y2Ba“轴”gydF4y2Ba,gydF4y2Ba“轴”gydF4y2Ba)包含(gydF4y2Ba“时间(s)”gydF4y2Ba) ylabel (gydF4y2Ba的旋转(度)gydF4y2Ba)标题(gydF4y2Ba“定位”gydF4y2Ba)gydF4y2Ba

%gydF4y2Ba

模型一个倾斜IMU,包含加速度计和陀螺仪使用gydF4y2BaimuSensorgydF4y2Ba系统对象™。用理想模型和现实模型比较了应用该方法的方向跟踪结果gydF4y2BaimufiltergydF4y2Ba系统对象。gydF4y2Ba

加载一个描述真实运动和采样率的结构。运动结构体描述了连续的旋转:gydF4y2Ba

  1. 偏航:两秒内120度gydF4y2Ba

  2. 俯仰角:一秒60度gydF4y2Ba

  3. 翻滚:半秒30度gydF4y2Ba

  4. 翻滚:半秒内-30度gydF4y2Ba

  5. 俯仰:-60度/秒gydF4y2Ba

  6. 偏航:两秒内-120度gydF4y2Ba

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

负载gydF4y2Bay120p60r30.matgydF4y2Ba运动gydF4y2BafsgydF4y2BaaccNED =运动。加速度;angVelNED =运动。角速度;orientationNED = motion.Orientation;numSamples = size(motion.Orientation,1);t = (0:(numSamples-1)).'/fs;gydF4y2Ba

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

IMU =传感器(gydF4y2Ba“accel-gyro”gydF4y2Ba,gydF4y2Ba“SampleRate”gydF4y2Bafs);过滤器= imufilter(gydF4y2Ba“SampleRate”gydF4y2Bafs);gydF4y2Ba

在循环中:gydF4y2Ba

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

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

方向= 0 (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)包含(gydF4y2Ba“时间(s)”gydF4y2Ba) ylabel (gydF4y2Ba的旋转(度)gydF4y2Ba)标题(gydF4y2Ba“方向估计—理想IMU数据,默认IMU过滤器”gydF4y2Ba)传说(gydF4y2Baz轴的gydF4y2Ba,gydF4y2Ba“轴”gydF4y2Ba,gydF4y2Ba“轴”gydF4y2Ba)gydF4y2Ba

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

IMU。一个ccelero米eter=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。陀螺仪=陀螺参数(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,1,gydF4y2Ba“四元数”gydF4y2Ba);gydF4y2Ba为gydF4y2Bai = 1:numSamples [accelBody,gyroBody] = IMU(accNED(i,:),angVelNED(i,:),orientationNED(i,:));orientationDefault(i) = aFilter(accelBody,gyroBody);gydF4y2Ba结束gydF4y2Ba(2) plot(t,eulerd(orientationDefault,gydF4y2Ba“ZYX股票”gydF4y2Ba,gydF4y2Ba“帧”gydF4y2Ba)包含(gydF4y2Ba“时间(s)”gydF4y2Ba) ylabel (gydF4y2Ba的旋转(度)gydF4y2Ba)标题(gydF4y2Ba“方向估计—真实的IMU数据,默认IMU过滤器”gydF4y2Ba)传说(gydF4y2Baz轴的gydF4y2Ba,gydF4y2Ba“轴”gydF4y2Ba,gydF4y2Ba“轴”gydF4y2Ba)gydF4y2Ba

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

aFilter。陀螺仪= 7.6154e-7;aFilter。一个ccelero米eterNoise = 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(3) plot(t,eulerd(orientationNondefault,gydF4y2Ba“ZYX股票”gydF4y2Ba,gydF4y2Ba“帧”gydF4y2Ba)包含(gydF4y2Ba“时间(s)”gydF4y2Ba) ylabel (gydF4y2Ba的旋转(度)gydF4y2Ba)标题(gydF4y2Ba方向估计——真实的IMU数据,非默认IMU过滤器gydF4y2Ba)传说(gydF4y2Baz轴的gydF4y2Ba,gydF4y2Ba“轴”gydF4y2Ba,gydF4y2Ba“轴”gydF4y2Ba)gydF4y2Ba

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

qDistDefault = rad2deg(dist(orientationNED,orientationDefault));qDistNondefault = rad2deg(dist(orientationNED,orientationNondefault));图(4)plot(t,[qDistDefault,qDistNondefault])gydF4y2Ba“与真方向的四元数距离”gydF4y2Ba)传说(gydF4y2Ba“真实的IMU数据,默认IMU过滤器”gydF4y2Ba,gydF4y2Ba...gydF4y2Ba真实的IMU数据,非默认IMU过滤器gydF4y2Ba)包含(gydF4y2Ba“时间(s)”gydF4y2Ba) ylabel (gydF4y2Ba四元数距离(度)gydF4y2Ba)gydF4y2Ba

算法gydF4y2Ba

全部展开gydF4y2Ba

扩展功能gydF4y2Ba

另请参阅gydF4y2Ba

类gydF4y2Ba

对象gydF4y2Ba

在R2018b中引入gydF4y2Ba