主要内容

估计方向使用惯性传感器融合和微处理器- 9250

这个例子展示了如何从一个InvenSense微处理器- 9250 IMU传感器获得数据,并使用六轴和9-axis传感器数据融合算法来计算设备的方向。

微控制器- 9250是一个9-axis传感器和加速度计、陀螺仪、磁强计。加速度计测量加速度、角速度陀螺仪的措施,和磁强计测量磁场在x - y和z -轴。传感器的轴取决于传感器的制造。

需要MathWorks®产品s manbetx 845

  • MATLAB®

  • MATLAB支万博1manbetx持包Arduino®硬件

  • 导航工具箱™或传感器融合和跟踪工具箱™

所需的硬件

  • Arduino Uno

  • InvenSense微处理器- 9250

硬件连接

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

  • SDA - A4

  • sci - A5

  • VCC - + 3.3 v

  • 接地,接地

确保传感器连接完好无损。推荐使用一个原型盾牌和焊接时避免松散连接的传感器移动的传感器。参考的传感器故障诊断页面传感器调试传感器相关问题。

创建传感器对象

创建一个arduino对象,包括I2C图书馆。

一个= arduino (“COM9”,“Uno”,“库”,“I2C”);
更新服务器代码Uno (COM9)。这可能需要几分钟。

创建一个微处理器- 9250传感器对象。

fs = 100;在赫兹%采样率imu = mpu9250 (,“SampleRate”fs,“OutputFormat”,“矩阵”);

补偿磁强计扭曲

融合算法利用磁强计读数需要补偿磁场扭曲。一般而言,存在两个效果:硬铁扭曲和软铁扭曲。更多地了解这种扭曲,请参考。可以纠正这些扭曲的调整值,可以确定使用这些步骤:

  1. 从0到360度旋转传感器在每个轴。

  2. 使用函数,如下所示,得到修正系数。

ts =抽搐;stopTimer = 50;magReadings = [];(toc (ts) < stopTimer)%沿着x轴旋转传感器从0到360度。% 2 - 3旋转来提高精度。%为其他轴,沿着轴旋转。(accel、陀螺、mag) =阅读(imu);magReadings = (magReadings;杂志);结束[A, b] = magcal (magReadings);% = 3 x3软铁校正矩阵% b = 3 x1向量对硬铁校正

调整轴微处理器- 9250传感器与NED坐标

这个示例中所使用的传感器融合算法使用North-East-Down (NED)作为固定的,父坐标系统。NED参考系,轴点北,y轴分东,z轴点下来。根据算法,北可能是磁北或真北。在这个例子中使用磁北的算法。这里使用的算法,希望所有的传感器对象有其轴对齐,并依照NED公约。

微控制器- 9250有两个设备,磁强计和accelerometer-gyroscope,在相同的董事会。这些设备的轴与彼此不同。磁强计轴与NED坐标是一致的。axis accelerometer-gyroscope不同于磁强计的微处理器- 9250。加速度计和陀螺轴需要交换和/或反向磁强计轴相匹配。有关更多信息,请参阅部分“轴取向”的部分微控制器- 9250数据表

结合微处理器- 9250 accelerometer-gyroscope轴NED坐标,做到以下几点:

1。定义设备轴:虚轴定义为设备轴的传感器根据NED坐标系一样可能是也可能不是传感器轴。为微处理器- 9250,磁强计轴可以被视为设备轴。

2。交换的x和y值加速度计和陀螺仪数据,因此加速度计和陀螺轴与磁强计轴。

3所示。确定极性值加速度计和陀螺仪。

一个加速度计。

  • 位置传感器设备X轴是向下的,垂直于表面的传感器。加速度计读数应该阅读约(9.8 0 0)。如果不是否定加速度计的值。

  • 位置传感器设备Y轴是向下的,垂直于表面的传感器。加速度计读数应该阅读大约9.8 [0 0]。如果不是否定加速度计的y的值。

  • 将传感器设备Z轴是向下的,垂直于表面的传感器。加速度计读数应该阅读大约[0 0 9.8]。如果不是否定加速度计的z值。

b。陀螺仪

旋转传感器在每个轴和捕获数据。用右手螺旋法则的极性正确旋转。

上述方法用于设置轴的传感器在这个例子。

优化滤波器参数

所使用的算法在这个例子中,当适当的调整,使估计的方向和强劲的反对环境噪声来源。你必须考虑的情况下使用传感器,并相应地调整过滤器。看到自定义优化融合过滤器(传感器融合和跟踪工具箱)更多细节优化滤波器参数有关。

示例演示了三个算法来确定方向,即ahrsfilter,imufilter,ecompass。请参考使用惯性传感器确定方向(传感器融合和跟踪工具箱)更多细节与惯性融合算法。

Accelerometer-Gyroscope-Magnetometer融合

姿态和航向参考系统(AHRS)由9-axis系统使用一个加速度计、陀螺仪和磁强计计算设备的方向。的ahrsfilter产生一个平稳变化的估计的定位设备,而正确地估计北方向。的ahrsfilter有能力消除陀螺仪的偏见,也可以检测并拒绝温和的磁干扰。

下面的代码片段使用ahrsfilter系统对象来确定方向的传感器和创建一个图更新当你移动的传感器。传感器必须是静止的,在这个例子的开始。

从数据表% GyroscopeNoise和AccelerometerNoise决定。GyroscopeNoiseMPU9250 = 3.0462 e-06;% GyroscopeNoise(方差值)在单位的rad / sAccelerometerNoiseMPU9250 = 0.0061;% AccelerometerNoise(方差值)在单位的m / s ^ 2观众= HelperOrientationViewer (“标题”,{“AHRS过滤”});保险丝= ahrsfilter (“SampleRate”imu.SampleRate,“GyroscopeNoise”GyroscopeNoiseMPU9250,“AccelerometerNoise”,AccelerometerNoiseMPU9250);stopTimer = 100;

正在执行下面的代码,缓慢移动的运动传感器和检查图匹配的运动传感器。

%校正因子A和b是获得使用magcal函数的一个解释%前面,“补偿磁强计扭曲”。magx_correction = b (1);magy_correction = b (2);magz_correction = b (3);ts =抽搐;(toc (ts) < stopTimer) (accel、陀螺、mag) =阅读(imu);%对齐坐标按照NED公约accel = [accel (:, 2), accel (: 1), accel (:, 3)];陀螺=[陀螺(:,2),陀螺(:1),陀螺(:,3)];杂志=[杂志(:1)-magx_correction,杂志(:,2)——magy_correction mag (:, 3) -magz_correction] *;旋转=保险丝(accel、陀螺、杂志);j =元素个数(旋转)查看器(旋转器(j));结束结束

当传感器的设备X轴指向北方,设备轴指向东和设备z轴向下。

当传感器的设备X轴指向北方,设备轴指向西方和设备z轴向上指向。

Accelerometer-Gyroscope融合

imufilter使用一个内部系统对象融合加速度计和陀螺仪数据误差状态卡尔曼滤波器。过滤器能够消除陀螺仪偏见噪声,随着时间的推移而飘。过滤器不处理磁强计数据,因此它不正确估计北的方向。算法假定传感器的初始位置是在这样一种装置轴指向磁北的传感器,传感器的设备轴指向东和设备z轴的传感器是向下的。传感器必须固定,开始前的这个例子。

下面的代码片段使用imufilter对象来确定方向的传感器和创建一个图更新当你移动的传感器。

displayMessage ([本节使用IMU过滤器来确定方向的传感器通过收集传感器数据从\ slmpu9250 \ rm的生活的系统对象。移动传感器可视化定位传感器的图窗口。你之前保持传感器文具“单击OK”),估计定位使用IMU过滤和微处理器- 9250”。)从数据表% GyroscopeNoise和AccelerometerNoise决定。GyroscopeNoiseMPU9250 = 3.0462 e-06;% GyroscopeNoise(方差)单位的rad / sAccelerometerNoiseMPU9250 = 0.0061;% AccelerometerNoise(方差)单位的m / s ^ 2观众= HelperOrientationViewer (“标题”,{“IMU过滤”});保险丝= imufilter (“SampleRate”imu.SampleRate,“GyroscopeNoise”GyroscopeNoiseMPU9250,“AccelerometerNoise”,AccelerometerNoiseMPU9250);stopTimer = 100;

正在执行下面的代码,缓慢移动的运动传感器和检查图匹配的运动传感器。

%使用imufilter估计取向和更新时间观众随着传感器由stopTimer规定抽搐;(toc < stopTimer) [accel,陀螺]=阅读(imu);accel = [accel (:, 2), accel (: 1), accel (:, 3)];陀螺=[陀螺(:,2),陀螺(:1),陀螺(:,3)];旋转=保险丝(accel,陀螺);j =元素个数(旋转)查看器(旋转器(j));结束结束

imufilter算法与MPU6050也可以使用,因为它不需要磁强计值。

当传感器的设备X轴指向北方,设备z轴是向下和设备轴指向东方。

当设备的X轴传感器向上翘着,设备轴指向西和设备z轴指向南。

Accelerometer-Magnetometer融合

ecompass系统对象融合加速度计和磁强计数据。Ecompass算法是一个无记忆的算法不需要参数调优,但极易受传感器的噪声。您可以使用球形线性插值(SLERP)低通滤波器的轨迹。请参考低通滤波器使用四元数SLERP取向(传感器融合和跟踪工具箱)更多细节的例子。

displayMessage ([这部分使用\ slecompass \ rmfunction来确定方向的传感器收集实时传感器数据从\ slmpu9250 '“\ rmsystem对象。移动传感器可视化定位传感器的图窗口。保持传感器文具在单击OK),“用Ecompass算法估计取向”。)查看器= HelperOrientationViewer (“标题”,{“Ecompass算法”});%使用ecompass算法来估计取向和更新时间观众随着传感器由stopTimer规定。%校正因子A和b是获得使用magcal函数的一个解释%前面,“补偿磁强计扭曲”。magx_correction = b (1);magy_correction = b (2);magz_correction = b (3);stopTimer = 100;抽搐;(toc < stopTimer) (accel ~, mag) =阅读(imu);accel = [accel (:, 2), accel (: 1), accel (:, 3)];杂志=[杂志(:1)-magx_correction,杂志(:,2)——magy_correction mag (:, 3) -magz_correction] *;旋转= ecompass (accel、杂志);j =元素个数(旋转)查看器(旋转器(j));结束结束

清理

当不再需要连接,释放和清晰的对象

释放(imu);清晰;

尝试的东西

你可以试试这个例子与其他传感器如InvenSense微处理器- 6050和意法半导体LSM9DS1。注意,微处理器- 6050传感器只可以使用imufilter系统对象。