主要内容

估计定位互补滤波器和IMU数据

这个例子展示了如何从一个Arduino IMU数据流并使用互补滤波器估计取向。

连接硬件

连接SDA, sci、接地和VCC别针的微处理器- 9250传感器相应的别针Arduino®硬件。这个示例使用一个Arduino®Uno板用下面的连接:

  • SDA - A4

  • sci - A5

  • VCC - + 3.3 v

  • 接地,接地

确保传感器连接完好无损。建议附加/传感器连接到一个原型盾时避免松散连接的传感器。参考的传感器故障诊断(MATLAB支金宝app持包Arduino硬件)页面调试传感器相关问题。

创建传感器对象

创建一个arduino对象和一个mpu9250对象。指定传感器采样率Fs和运行的时间循环。可选地,使isVerbose检查是否有样品溢出。通过禁用的useHW国旗,您也可以运行示例与传感器数据保存在MAT-fileloggedMPU9250Data.mat

中的数据loggedMPU9250Data.mat记录而IMU普遍面临正南方,然后旋转:

  • 在z轴+ 90度

  • -180度在z轴

  • 在z轴+ 90度

  • 在轴+ 90度

  • -180度的轴

  • 在轴+ 90度

  • 绕x轴+ 90度

  • -270度绕x轴

  • 绕x轴+ 180度

注意最后两个旋转绕x轴是一个额外的90度。这样做是为了翻转设备倒。乌兹别克斯坦伊斯兰运动的最终方向是一样的初始取向,由于南方。

Fs = 100;samplesPerRead = 10;运行时= 20;isVerbose = false;useHW = true;如果useHW = arduino;imu = mpu9250 (,“SampleRate”Fs,“OutputFormat”,“矩阵”,“SamplesPerRead”,samplesPerRead);其他的负载(“loggedMPU9250Data.mat”,“allAccel”,“allGyro”,“allMag”,“allT”,“allOverrun”,“numSamplesAccelGyro”,“numSamplesAccelGyroMag”)结束

使轴的微处理器- 9250传感器与NED坐标

轴的加速度计、陀螺仪和磁强计的微处理器- 9250相互不一致。指定索引和符号x, y,和z轴的传感器,传感器与North-East-Down (NED)坐标系统,当它处于静止状态。在这个例子中,磁强计轴改变而加速度计和陀螺仪轴保持不变。为您自己的应用程序中,根据需要改变以下参数。

%加速度计轴参数。accelXAxisIndex = 1;accelXAxisSign = 1;accelYAxisIndex = 2;accelYAxisSign = 1;accelZAxisIndex = 3;accelZAxisSign = 1;%陀螺轴参数。gyroXAxisIndex = 1;gyroXAxisSign = 1;gyroYAxisIndex = 2;gyroYAxisSign = 1;gyroZAxisIndex = 3;gyroZAxisSign = 1;%磁强计轴参数。magXAxisIndex = 2;magXAxisSign = 1;magYAxisIndex = 1;magYAxisSign = 1;magZAxisIndex = 3;magZAxisSign = 1;%辅助函数用于传感器数据轴对齐。alignAccelAxes = @ () [accelXAxisSign、accelYAxisSign accelZAxisSign](. *:[accelXAxisIndex accelYAxisIndex, accelZAxisIndex]);alignGyroAxes = @ () [gyroXAxisSign、gyroYAxisSign gyroZAxisSign](. *:[gyroXAxisIndex gyroYAxisIndex, gyroZAxisIndex]);alignMagAxes = @ () [magXAxisSign、magYAxisSign magZAxisSign](. *:[magXAxisIndex magYAxisIndex, magZAxisIndex]);

执行额外的传感器校准

如果有必要,你可以调整磁强计补偿磁场扭曲。更多细节,请参阅的硬铁扭曲部分的补偿估计方向使用惯性传感器融合和微处理器- 9250的例子。

指定互补滤波器参数

complementaryFilter有两个可调参数。的AccelerometerGain参数决定了加速度计陀螺仪测量测量是可信的。的MagnetometerGain参数决定了陀螺仪测量磁强计测量是可信的。

compFilt = complementaryFilter (“SampleRate”Fs)
compFilt = complementaryFilter属性:SampleRate: 100 AccelerometerGain: 0.0100 MagnetometerGain: 0.0100 HasMagnetometer: 1 OrientationFormat:“四元数”

估计方向加速度计和陀螺仪

设置HasMagnetometer财产禁用磁强计测量输入。在这种模式下,过滤器只需要加速度计和陀螺仪测量作为输入。同时,过滤器假定的初始取向IMU与父导航框架。如果不符合乌兹别克斯坦伊斯兰运动导航框架最初,将会有一个常数抵消的方向估计。

compFilt = complementaryFilter (“HasMagnetometer”、假);调谐器= HelperOrientationFilterTuner (compFilt);如果useHW抽搐其他的idx = 1: samplesPerRead;overrunIdx = 1;结束真正的如果useHW (accel、陀螺、杂志、t、泛滥]= imu ();accel = alignAccelAxes (accel);陀螺= alignGyroAxes(陀螺);其他的accel = allAccel (idx:);陀螺= allGyro (idx:);杂志= allMag (idx:);t = allT (idx:);泛滥= allOverrun (overrunIdx:);idx = idx + samplesPerRead;overrunIdx = overrunIdx + 1;暂停(samplesPerRead / Fs)结束如果(isVerbose & &泛滥> 0)流(“% d样品溢出…\ n”、泛滥);结束q = compFilt (accel,陀螺);更新(调谐器,q);如果useHW如果toc > =运行时打破;结束其他的如果idx > numSamplesAccelGyro(结束)打破;结束结束结束

估计方向与加速度计、陀螺仪和磁强计

的默认值AccelerometerGainMagnetometerGain,过滤器信托的陀螺仪测量在短期内,但信托更长期的加速度计和磁强计测量。这允许过滤器更活性快速取向变化和阻止取向估计在更长时间的漂移。用于特定IMU传感器和应用程序,您可能希望优化滤波器的参数来提高方位估计精度。

compFilt = complementaryFilter (“SampleRate”Fs);调谐器= HelperOrientationFilterTuner (compFilt);如果useHW抽搐结束真正的如果useHW (accel、陀螺、杂志、t、泛滥]= imu ();accel = alignAccelAxes (accel);陀螺= alignGyroAxes(陀螺);杂志= alignMagAxes (mag);其他的accel = allAccel (idx:);陀螺= allGyro (idx:);杂志= allMag (idx:);t = allT (idx:);泛滥= allOverrun (overrunIdx:);idx = idx + samplesPerRead;overrunIdx = overrunIdx + 1;暂停(samplesPerRead / Fs)结束如果(isVerbose & &泛滥> 0)流(“% d样品溢出…\ n”、泛滥);结束q = compFilt (accel、陀螺、杂志);更新(调谐器,q);如果useHW如果toc > =运行时打破;结束其他的如果idx > numSamplesAccelGyroMag(结束)打破;结束结束结束

总结

这个例子展示了如何估计使用数据从一个Arduino IMU的取向和互补滤波器。这个示例还展示了如何配置IMU和讨论优化互补滤波器参数的影响。