主要内容

insEKF

惯性导航使用扩展卡尔曼滤波

自从R2022a

描述

insEKF对象创建一个continuous-discrete扩展卡尔曼滤波器(EKF)的状态预测使用连续时间模型和状态调整使用离散时间模型。过滤器使用惯性传感器的数据来估计平台等州的位置,速度,和方向。工具箱提供了一些传感器模型,如insAccelerometer,insGyroscope,insGPS,insMagnetometer,你可以使用它来启用相应测量卡尔曼滤波器。你也可以定制自己的传感器模型的继承positioning.insSensorModel接口类。工具箱还提供了运动模型,如insMotionOrientationinsMotionPose,您可以使用它来启用相应的国家传播的卡尔曼滤波器。你也可以定制自己的运动模型的继承positioning.insMotionModel接口类。

创建

描述

例子

过滤器= insEKF创建一个insEKF过滤器对象的默认属性值。使用默认设置,过滤器可以通过加速度计和陀螺仪数据融合估计取向。

例子

过滤器= insEKF (sensorN sensor1, sensor2,…)配置过滤器接受和融合数据从一个或多个传感器。这些传感器在其过滤保存传感器财产。

过滤器= insEKF (___motionModel)配置过滤器使用运动模型来预测和估计的状态,除了从以前的语法输入参数的任意组合。过滤器保存指定的运动模型MotionModel财产。

过滤器= insEKF (___,选项)配置过滤器使用insOptions对象选项

属性

全部展开

扩展卡尔曼滤波器的状态向量,作为指定N元实值向量。N滤波器的尺寸状态,取决于特定的传感器和运动模型用于构造过滤器。

请注意

状态财产,如果一个状态变量命名取向有四个的长度,假定它是一个对象四元数。在这种情况下,过滤器renormalizes四元数,确保真正的四元数的一部分总是正的。

数据类型:|

扩展的卡尔曼滤波状态误差协方差,指定为一个N——- - - - - -N实正定矩阵。N中指定的尺寸状态,状态财产的过滤器。

数据类型:|

添加剂过程噪声的扩展卡尔曼滤波器,指定为一个N——- - - - - -N实正定矩阵。N中指定的尺寸状态,状态的过滤器。

数据类型:|

这个属性是只读的。

运动模型中使用扩展卡尔曼滤波,指定为一个insMotionOrientation对象,一个insMotionPose对象,或一个对象继承positioning.INSMotionModel接口类。指定一个运动模型使用motionModel输入参数。

数据类型:对象

这个属性是只读的。

指定的扩展卡尔曼滤波器,传感器融合在惯性传感器单元阵列的对象。一个惯性传感器对象是这些对象之一:

数据类型:细胞

这个属性是只读的。

传感器的名字,指定为一个单元阵列的特征向量。默认情况下,过滤器的名字传感器使用的格式“sensorname_n”,在那里sensorname传感器的名称,比如加速度计,n是额外的索引相同类型的传感器。

自定义传感器名称,指定选项当构造滤波器的输入。

例子:{“加速器”“Accelerometer_1”“Accelerometer_2”“陀螺”}

数据类型:细胞

这个属性是只读的。

参考系的扩展卡尔曼滤波器,指定为“内德”north-east-down框架或“ENU表示”east-north-up框架。

指定参考系“ENU表示”,指定选项当构造滤波器的输入。

数据类型:字符|字符串

对象的功能

预测 预测状态估计的时间insEKF
保险丝 传感器数据融合的状态估计insEKF
剩余 从国家测量残,残协方差insEKF
正确的 正确的状态估计在insEKF使用直接状态测量
stateparts 获取和设置状态向量的一部分insEKF
statecovparts 获取和设置状态协方差矩阵的一部分insEKF
stateinfo 状态向量信息insEKF
estimateStates 批处理和平滑的传感器数据融合
调优 调优insEKF参数估计误差减少
createTunerCostTemplate 调谐器的成本函数创建模板
tunerCostFcnParam 第一个参数为优化代价函数例子
复制 创建的副本insEKF
重置 复位状态insEKF

例子

全部折叠

创建一个默认的insEKF对象。默认情况下,过滤器融合加速度计和陀螺仪的测量数据假设orientation-only运动。

filter1 = insEKF
filter1 = insEKF属性:状态:x1双[13]StateCovariance:[13 * 13双]AdditiveProcessNoise:[13 * 13双]MotionModel: [1 x1 insMotionOrientation]传感器:{[1 x1 insAccelerometer] [1 x1 insGyroscope]} SensorNames:{“加速器”“陀螺”}ReferenceFrame:“NED”

创建第二个insEKF对象融合数据从一个加速度计、陀螺仪、磁强计,以及模型平移运动和旋转运动。

filter2 = insEKF (insAccelerometer insGyroscope、insMagnetometer insMotionPose)
filter2 = insEKF属性:状态:[28 x1双]StateCovariance: [28 x28双]AdditiveProcessNoise: [28 x28双]MotionModel: [1 x1 insMotionPose]传感器:{[1 x1 insAccelerometer] [1 x1 insGyroscope] [1 x1 insMagnetometer]} SensorNames:{“加速器”“陀螺”“磁强计”}ReferenceFrame:“内德”

创建一个第三insEKF对象从陀螺仪融合数据和GPS。指定过滤器的参考系作为east-north-up ENU表示框架。注意,过滤器使用的运动模型insMotionPose对象,因为一个GPS测量平台的位置。

选择= insOptions (ReferenceFrame =“ENU表示”);filter3 = insEKF (insGyroscope、insGPS选项)
filter3 = insEKF属性:状态:[19 x1双]StateCovariance: [19 x19双]AdditiveProcessNoise: [19 x19双]MotionModel: [1 x1 insMotionPose]传感器:{[1 x1 insGyroscope] [1 x1 insGPS]} SensorNames:{“陀螺”“GPS”} ReferenceFrame:“ENU表示”

负载从一个加速度计和陀螺仪测量数据。

负载(“accelGyroINSEKFData.mat”);

创建一个insEKF过滤器对象。指定方向的一部分在过滤器使用测量数据的初始取向。指定状态估计误差协方差矩阵的对角元素对应于取向状态0.01

accel = insAccelerometer;陀螺= insGyroscope;filt = insEKF (accel,陀螺);stateparts (filt“定位”紧凑(ld.initOrient));statecovparts (filt“定位”1依照);

指定测量噪声和添加剂过程噪声。您可以获得使用这些值调优过滤器对象的目标函数。

accNoise = 0.1739;gyroNoise = 1.1129;processNoise =诊断接头([2.8586 1.3718 0.8956 3.2148 4.3574 2.5411 3.2148 0.5465 0.28111.7149 0.1739 0.7752 0.1739]);filt。AdditiveProcessNoise = processNoise;

按顺序把测量数据使用预测保险丝过滤的对象功能对象。

N =大小(ld.sensorData, 1);estOrient = quaternion.zeros (N, 1);dt =秒(diff (ld.sensorData.Properties.RowTimes));2 = 1:N如果ii ~ = 1%的一步。预测(filt dt (ii-1));结束%融合加速度计数据。保险丝(filt、accel ld.sensorData.Accelerometer (ii):), accNoise);%陀螺仪数据融合。保险丝(filt、陀螺、ld.sensorData.Gyroscope (ii):), gyroNoise);%提取取向状态估计使用stateparts对象%的功能。estOrient (ii) =四元数(stateparts (filt,“定位”));结束

可视化估计错误,使用四元数的距离经销对象的函数四元数对象。

图绘制(rad2deg (dist (estOrient ld.groundTruth.Orientation)))包含(“样本”)ylabel (“距离(度)”)标题(“取向估计错误”)

图包含一个坐标轴对象。坐标轴对象与标题取向估计错误,包含样本,ylabel距离(度)包含一个类型的对象。

负载从一个加速度计和陀螺仪测量数据。

负载(“accelGyroINSEKFData.mat”);

创建一个insEKF过滤器对象。指定方向的一部分在过滤器使用测量数据的初始取向。指定状态估计误差协方差矩阵的对角元素对应于取向状态0.01

filt = insEKF;stateparts (filt“定位”紧凑(ld.initOrient));statecovparts (filt“定位”1依照);

指定测量噪声和添加剂过程噪声。您可以获得使用这些值调优过滤器对象的目标函数。

measureNoise =结构(“AccelerometerNoise”,0.1739,“GyroscopeNoise”,1.1129);processNoise =诊断接头([2.8586 1.3718 0.8956 3.2148 4.3574 2.5411 3.2148 0.5465 0.28111.7149 0.1739 0.7752 0.1739]);filt。AdditiveProcessNoise = processNoise;

Batch-estimate美国使用estimateStates对象的功能。同时,获得平滑后的估计。

(估计,smoothEstimates) = estimateStates (filt、ld.sensorData measureNoise);

可视化欧拉角的方向估计。

图t = estimates.Properties.RowTimes;情节(t, eulerd (estimates.Orientation“ZYX股票”,“帧”));标题(“估计取向”);ylabel (“度”)

图包含一个坐标轴对象。坐标轴对象与标题估计取向,ylabel度包含3线类型的对象。

可视化估计方向平滑后欧拉角。

图绘制(t, eulerd (smoothEstimates.Orientation“ZYX股票”,“帧”));标题(“平滑取向”);ylabel (“度”)

图包含一个坐标轴对象。坐标轴对象与标题平滑取向,ylabel度包含3线类型的对象。

可视化估计错误,使用四元数的距离经销对象的函数四元数对象。

trueOrient = ld.groundTruth.Orientation;情节(t, rad2deg(经销(估计。取向,trueOrient)),t, rad2deg(经销(smoothEstimates。取向,trueOrient)));标题(“估计和平滑误差”);传奇(“估计误差”,“平滑错误”)包含(“时间”);ylabel (“度”)

图包含一个坐标轴对象。坐标轴对象标题估计和平滑误差,包含时间,ylabel度包含2线类型的对象。这些对象代表估计误差,平滑误差。

扩展功能

C / c++代码生成
生成C和c++代码使用MATLAB®编码器™。

版本历史

介绍了R2022a