主要内容

自动调优infilterasync过滤器

insfilterAsync对象是一个复杂的扩展卡尔曼滤波器,估计设备姿态。然而,手动调整滤波器或寻找噪声参数的最佳值可能是一项具有挑战性的任务。控件的使用方法调优功能优化滤波器噪声参数。

轨迹和传感器设置

的调优过程insfilterAsync过滤器,使用一个简单的随机路径点轨迹。的imuSensorgpsSensor对象为筛选器创建输入。

% IMU运行在100hz, GPS运行在1hz。imurate = 100;gpsrate = 1;decim = imurate / gpsrate;%创建一个随机路径点轨迹。rng(1) Npts = 4;%路径点的数量wp = 5;路径点之间的时间tstart = 0;tend = wpPer*(Npts -1);wp = waypointTrajectory (“锚点”5 *兰德(《不扩散核武器条约》,3),...“TimeOfArrival”tstart: wp:一般,...“定位”, (quaternion.ones;randrot (Npts-1, 1)),...“SampleRate”, imurate);(位置,方向,速度,加速度,AngularVelocity] = lookupPose (...wp tstart: (1 / imurate):一般);%建立IMU并处理轨迹。imu = imuSensor (“SampleRate”, imurate);loadparams (imu fullfile (matlabroot...“工具箱\共享\ \ positioningdata \ generic.json定位”),...“GenericLowCost9Axis”);[加速度计,陀螺仪,磁力计]= imu(加速度,陀螺仪,磁力计)...AngularVelocity取向);imuData =时间表(加速度计、陀螺仪、磁强计,“SampleRate”, imurate);%设置GPS传感器并处理轨迹。全球定位系统(gps) = gpsSensor (“SampleRate”gpsrate,“DecayFactor”, 0.5,...“HorizontalPositionAccuracy”, 1.6,“VerticalPositionAccuracy”, 1.6,...“VelocityAccuracy”, 0.1);[gpposition,GPSVelocity] = gps(Position(1:decim:end,:), Velocity(1:decim:end,:));gpsData =时间表(GPSPosition GPSVelocity,“SampleRate”, gpsrate);%为tune函数创建时间表。sensorData =同步(imuData gpsData);创建一个时间表捕捉地面真实的姿态。groundTruth =时间表(位置、方向、“SampleRate”, imurate);

构造滤波器

insfilterAsync过滤器融合来自多个异步操作传感器的数据

filtUntuned = insfilterAsync;

确定过滤器初始条件

的初始值状态StateCovariance基于基本真理的属性。通常要获得初始值,您将使用前几个样本sensorData还有校准程序。但是,在本例中groundTruth用于设置初始状态,使滤波器快速收敛。

idx = stateinfo (filtUntuned);filtUntuned.State (idx.Orientation) =紧凑(取向(1));filtUntuned.State (idx.AngularVelocity) = AngularVelocity (1:);filtUntuned.State位置(idx.Position) = (1:);filtUntuned.State速度(idx.Velocity) = (1:);filtUntuned.State加速度(idx.Acceleration) = (1:);filtUntuned.State (idx.AccelerometerBias) = imu.Accelerometer.ConstantBias;filtUntuned.State (idx.GyroscopeBias) = imu.Gyroscope.ConstantBias;filtUntuned.State (idx.GeomagneticFieldVector) = imu.MagneticField;filtUntuned.State (idx.MagnetometerBias) = imu.Magnetometer.ConstantBias; filtUntuned.StateCovariance = 1e-5*eye(numel(filtUntuned.State));%创建filtUntuned对象的副本,以便以后进行调优。filtTuned = (filtUntuned)复印件;

过程sensorData使用未调谐滤波器

使用tunernoise功能,以创造测量噪音,也需要调整。为了说明进行调优的必要性,首先使用带有默认参数的过滤器。

mn = tunernoise (“insfilterAsync”);[posUntunedEst, orientUntunedEst] = fuse(filtun调谐,传感器数据,mn);

优化过滤器和流程sensorData

使用调优函数最小化之间的均方根(RMS)误差groundTruth和状态估计。

cfg = tunerconfig(类(filtTuned),“MaxIterations”15岁的“StepForward”, 1.1);tunedmn =调整(filtTuned、锰、sensorData、groundTruth cfg);
迭代参数度_________ _________ ______ 1个AccelerometerNoise 4.7634 1 GyroscopeNoise 4.7439 1 MagnetometerNoise 4.7260 1 GPSPositionNoise 4.6562 1 GPSVelocityNoise 4.4895 1 QuaternionNoise 4.4895 1个AngularVelocityNoise 4.1764 1 PositionNoise 4.1764 1 VelocityNoise 4.1764 1 AccelerationNoise 4.1657 1 GyroscopeBiasNoise 4.1657 1 AccelerometerBiasNoise 4.1615 1 GeomagneticVectorNoise 4.1615 1 MagnetometerBiasNoise 4.1466 2 AccelerometerNoise4.1466 2 GyroscopeNoise 4.1466 2 MagnetometerNoise 4.1218 2 GPSPositionNoise 4.1218 2 GPSVelocityNoise 3.9411 2 QuaternionNoise 3.9404 2 AngularVelocityNoise 3.2970 2 PositionNoise 3.2970 2 VelocityNoise 3.2970 2 AccelerationNoise 3.2735 2 GyroscopeBiasNoise 3.2735 2 AccelerometerBiasNoise 3.2711 2 GeomagneticVectorNoise 3.2711 2 MagnetometerBiasNoise 3.2709 3 AccelerometerNoise 3.2704 3 GyroscopeNoise 3.2475 3 MagnetometerNoise 3.2338 3GPSPositionNoise 3.2338 3 GPSVelocityNoise 3.1333 3 Quaternionnoise 3.1333 3 AngularvelocityNoise 3.0267 3 PositionNoise 3.0267 3 VelocityNoise 3.0267 3 AccelerationNoise 3.0267 3 GyroscopeBiasNoise 3.0267 3 AccelerometerBiasNoise 3.0248 3 GeomagneticVectorNoise 3.0248 3 MagnetometerBiasNoise 3.0184 4 AccelerometerNoise 3.0156 4 GyroscopeNoise 3.0028 4 MagnetometerNoise 2.9903 4 GPSPositionNoise 2.9872 4 GPSVelocityNoise 2.9043 4 QuaternionNoise 2.9043 4 AngularVelocityNoise 2.7873 4 PositionNoise 2.7873 4 VelocityNoise 2.7873 4AccelerationNoise 2.7833 4 GyroscopeBiasNoise 2.7833 4 AccelerometerBiasNoise 2.7821 4 GeomagneticVectorNoise 2.7821 4 MagnetometerBiasNoise 2.7727 5 AccelerometerNoise 2.7693 5 GyroscopeNoise 2.7591 5 MagnetometerNoise 2.7591 5 GPSPositionNoise 2.7580 5 GPSVelocityNoise 2.6806 5 QuaternionNoise 2.6804 5 AngularVelocityNoise 2.5956 5 PositionNoise 2.5956 5 VelocityNoise 2.5956 5 AccelerationNoise 2.5880 5 GyroscopeBiasNoise 2.5880 5 AccelerometerBiasNoise 2.58745 GeomagneticVectornoise 2.5874 5 MagemeterBiasnoise 2.5693 6 Accelerernoise 2.5651 6 GyroscopeNoise 2.5529 6 MagnetometerNoise 2.5472 6 GPSPositionNoise 2.5344 6 GPSVelocityNoise 2.4514 6 QuaternionNoise 2.4514 6 AngularVelocityNoise 2.3829 6 PositionNoise 2.3829 6 VelocityNoise 2.3829 6 AccelerationNoise 2.3826 6 GyroscopeBiasNoise 2.3826 6 AccelerometerBiasNoise 2.3822 6 GeomagneticVectorNoise 2.3822 6 MagnetometerBiasNoise 2.3675 ​​7 AccelerometerNoise 2.3640 7 GyroscopeNoise 2.3547 7 MagnetometerNoise 2.3540 7 GPSPositionNoise 2.34287 GPSVelocityNoise 2.2634 7 QuaternionNoise 2.2633 7 AngularVelocityNoise 2.2179 7 PositionNoise 2.2179 7 VelocityNoise 2.2179 7 AccelerationNoise 2.2159 7 GyroscopeBiasNoise 2.2159 7 AccelerometerBiasNoise 2.2150 7 GeomagneticVectorNoise 2.2150 7 MagnetometerBiasNoise 2.2020 8 AccelerometerNoise 2.1967 8 GyroscopeNoise 2.1951 8 MagnetometerNoise 2.1948 8 GPSPositionNoise 2.1804 8 GPSVelocityNoise 2.1153 8 QuaternionNoise 2.1153 8 AngularVelocityNoise2.0978 8 PositionNoise 2.0978 8 VelocityNoise 2.0978 8 AccelerationNoise 2.0944 8 GyroscebiasNoise 2.0944 8 AccelerometerBiasNoise 2.0944 8 GeomagneticVectorNoise 2.0944 8 MagnetometerBiasNoise 2.0822 9 AccelerometerNoise 2.0771 9 GyroscopeNoise 2.0758 9 MagnetometerNoise 2.0754 9 GPSPositionNoise 2.0645 9 GPSVelocityNoise 2.0028 9 QuaternionNoise 2.0027 9 AngularVelocityNoise 1.9943 9 PositionNoise 1.9943 9 VelocityNoise 1.9943 9 AccelerationNoise 1.9883 9 GyroscopeBiasNoise 1.9883 9 AccelerometerBiasNoise 1.9876 9 GeomagneticVectorNoise 1.9876 9 MagnetometerBiasNoise 1.9770 10 AccelerometerNoise 1.9707 10 GyroscopeNoise 1.9707 10 MagnetometerNoise 1.9706 10 GPSPositionNoise 1.9564 10 GPSVelocityNoise 1.9005 10 QuaternionNoise 1.9003 10 AngularVelocityNoise 1.9003 10 PositionNoise 1.9003 10 VelocityNoise 1.9003 10 AccelerationNoise 1.8999 10 GyroscopeBiasNoise 1.8999 10 AccelerometerBiasNoise 1.8992 10 GeomagneticVectorNoise 1.8992 10 MagnetometerBiasNoise 1.8885 11 AccelerometerNoise 1.8815 11 GyroscopeNoise 1.8807 11 MagnetometerNoise 1.8806 11 GPSPositionNoise 1.8674 11 GPSVelocityNoise 1.8111 11 QuaternionNoise 1.8110 11 AngularVelocityNoise 1.8110 11 PositionNoise 1.8110 11 VelocityNoise 1.8110 11 AccelerationNoise 1.8094 11 GyroscopeBiasNoise 1.8094 11 AccelerometerBiasNoise 1.8085 11 GeomagneticVectorNoise 1.8085 11 MagnetometerBiasNoise 1.7984 12 AccelerometerNoise 1.7921 12 GyroscopeNoise 1.7919 12 MagnetometerNoise 1.7902 12 GPSPositionNoise 1.7774 12 GPSVelocityNoise 1.7315 12 QuaternionNoise 1.7313 12 AngularVelocityNoise 1.7282 12 PositionNoise 1.7282 12 VelocityNoise 1.7282 12 AccelerationNoise 1.7278 12 GyroscopeBiasNoise 1.7278 12 AccelerometerBiasNoise 1.7268 12 GeomagneticVectorNoise 1.7268 12 MagnetometerBiasNoise 1.7160 13 AccelerometerNoise 1.7103 13 GyroscopeNoise 1.7094 13 MagnetometerNoise 1.7094 13 GPSPositionNoise 1.6980 13 GPSVelocityNoise 1.6589 13 QuaternionNoise 1.6587 13 AngularVelocityNoise 1.6587 13 PositionNoise 1.6587 13 VelocityNoise 1.6587 13 AccelerationNoise 1.6575 13 GyroscopeBiasNoise 1.6575 13 AccelerometerBiasNoise 1.6566 13 GeomagneticVectorNoise 1.6566 13 MagnetometerBiasNoise 1.6480 14 AccelerometerNoise 1.6432 14 GyroscopeNoise 1.6422 14 MagnetometerNoise 1.6415 14 GPSPositionNoise 1.6330 14 GPSVelocityNoise 1.6097 14 QuaternionNoise 1.6095 14 AngularVelocityNoise 1.6093 14 PositionNoise 1.6093 14 VelocityNoise 1.6093 14 AccelerationNoise 1.6083 14 GyroscopeBiasNoise 1.6083 14 AccelerometerBiasNoise 1.6077 14 GeomagneticVectorNoise 1.6077 14 MagnetometerBiasNoise 1.6012 15 AccelerometerNoise 1.5972 15 GyroscopeNoise 1.5949 15 MagnetometerNoise 1.5942 15 GPSPositionNoise 1.5886 15 GPSVelocityNoise 1.5802 15 QuaternionNoise 1.5801 15 AngularVelocityNoise 1.5786 15 PositionNoise 1.5786 15 VelocityNoise 1.5786 15 AccelerationNoise 1.5786 15 GyroscopeBiasNoise 1.5786 15 AccelerometerBiasNoise 1.5783 15 GeomagneticVectorNoise 1.5783 15 MagnetometerBiasNoise 1.5737
[posTunedEst, orientTunedEst] = fuse(filtTuned,sensorData,tunedmn);

比较调谐和未调谐过滤器

从调谐和未调谐滤波器的位置估计与地面真相的位置绘制。然后,为调谐和未调谐滤波器以度绘制方向误差(四元数距离)。调谐滤波器比未调谐滤波器更好地估计位置和方向。

%位置误差图;t = sensorData.Time;次要情节(1,1);plot(t, [posTunedEst(:,1) posUntunedEst(:,1) Position(:,1)]);标题(“位置”);ylabel (“轴”);传奇(“调”“不调谐的”“真相”);次要情节(3、1、2);plot(t, [posTunedEst(:,2) posUntunedEst(:,2) Position(:,2)]);ylabel (“轴”);次要情节(3,1,3);plot(t, [posTunedEst(:,3) posUntunedEst(:,3) Position(:,3)]);ylabel (z轴的);

%的方向错误图;情节(t, rad2deg (dist(定位、orientTunedEst)),...t, rad2deg (dist(定位、orientUntunedEst)));标题(的方向错误);ylabel (“度”);传奇(“调”“不调谐的”);