主要内容

自动调整的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”);加速度计,陀螺仪,磁力计...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);为调优功能创建一个时间表。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));%创建filtuntune对象的副本,以便稍后进行调优。filtTuned = (filtUntuned)复印件;

过程sensorData使用未调谐滤波器

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

mn = tunernoise (“insfilterAsync”);[posUntunedEst, orientUntunedEst] = fuse(filtun调谐,sensorData, mn);

调整筛选器和流程sensorData

使用调优函数的作用是尽量减小两个变量之间的均方根误差groundTruth和状态估计。

cfg = tunerconfig(类(filtTuned),“MaxIterations”15岁的“StepForward”, 1.1);tunedmn =调整(filtTuned、锰、sensorData、groundTruth cfg);
迭代参数公制加速度计噪声4.7634 1陀螺仪噪声4.7439 1磁力仪噪声4.7260 1 GPs位置噪声4.6562 1 GPs低噪声4.4895 1四元数噪声4.4895 1角速度噪声4.1764 1位置噪声4.1764 1速度噪声4.1764 1加速度噪声4.1657 1陀螺仪噪声4.1657加速度计噪声4.1615 1地磁矢量噪声4.1615 1磁力仪噪声4.1466 2加速度计噪声4.1466 2陀螺仪噪声4.1466 2磁力仪噪声4.1218 2 gps位置噪声4.1218 2 gps低频噪声3.9411 2四元数噪声3.9404 2角速度噪声3.2970 2位置噪声3.2970 2速度噪声3.2970 2加速度噪声3.2735 2陀螺仪噪声3.2735 2加速度计噪声3.2711 2地磁矢量噪声3.2711 2磁力计噪声3.2709 3加速度计噪声3.2704 3陀螺仪噪声3.2475 3磁力计噪声3.2338 3 gps位置噪声3.2338 3 gps低噪声3.1333四元数噪声3.1333角速度噪声3.0267 3位置噪声3.0267 3速度噪声3.0267 3加速度噪声3.0267 3陀螺仪噪声3.0267 3加速度计噪声3.0248 3地磁矢量噪声3.0248 3磁测噪声3.0184 4加速度计噪声3.0156 4陀螺仪噪声3.0028 4磁测噪声2.9903 4 gpsPosition噪声2.9872 4 gpsElocity噪声2.9043 4四元数噪声2.9043 4角速度噪声2.7873 4位置噪声2.7873 4速度噪声2.7873 4加速度噪声2.7833 4陀螺仪噪声2.7833 4加速度计噪声2.7821 4地磁矢量噪声2.7821 4磁强计噪声2.7727 5加速度计噪声2.7693 5陀螺仪噪声2.7591 5磁强计噪声2.7591 5 gps位置噪声2.7580 5 gps低频噪声2.6806 5四元数噪声2.6804 5角速度噪声2.5956 5位置噪声2.5956 5速度噪声2.5956 5加速度噪声2.5880 5陀螺仪偏差2.5880 5加速度计噪声2.5874 5地磁矢量噪声2.5874 5磁强计噪声2.5693 6加速度计噪声2.5651 6陀螺仪噪声2.5529 6磁强计噪声2.5472 6 gps位置噪声2.5344 6 GPSVelocityNoise 2.4514 6四元数噪声2.4514 6角速度噪声2.3829 6位置噪声2.3829 6速度噪声2.3829 6加速度噪声2.3826 6陀螺仪偏置2.3826 6加速度计轨道噪声2.3822 6地磁矢量噪声2.3822 6磁强计轨道噪声2.3675 7加速度计噪声2.3640 7陀螺仪噪声2.3547 7磁强计噪声2.3540 7 gps位置噪声2.3428 7 gps加速度噪声2.2634 7四元数噪声2.2633 7角速度噪声2.2179 7位置噪声2.2179 7速度噪声2.2179 7加速度噪声2.2159 7陀螺仪偏置2.2159 7加速度噪声2.2150 7地磁矢量噪声2.2150 7磁强计噪声2.2020 8加速度噪声2.1967 8陀螺仪噪声2.1951 8磁力仪噪声2.1948 8 GPsPosition噪声2.1804 8 GPsElocityNoise 2.1153 8四元数噪声2.1153 8角速度噪声2.0978 8位置噪声2.0978 8速度噪声2.0978 8加速度噪声2.0944 8陀螺仪偏置2.0944 8加速度计噪声2.0944 8地磁矢量噪声2.0944 8磁强计噪声2.0822 9加速度计噪声2.0771 9陀螺仪噪声2.0758 9磁强计噪声2.0754 9 gps位置噪声2.0645 9 gps低频噪声2.0028 9四元数噪声2.0027 9角速度噪声1.9943 9位置噪声1.9943 9速度噪声1.9943 9加速度噪声1.9883 9陀螺仪偏置1.9883 9加速度计噪声1.9876 9地磁矢量噪声1.9876 9磁力仪轨道噪声1.9770 10加速度计噪声1.9707 10陀螺仪噪声1.9707 10磁力仪噪声1.9706 10 gps位置噪声1.9564 10 gps低频噪声1.9005 10四元数噪声1.9003 10角速度噪声1.9003 10位置噪声1.9003 10速度噪声1.9003 10加速度噪声1.8999 10陀螺仪偏差1.8999 10加速度计噪声1.8992 10地磁矢量噪声1.8992 10磁测噪声1.8885 11加速度计噪声1.8815 11陀螺仪噪声1.8807 11磁测噪声1.8806 11 gps位置噪声1.8674 11 gps低频噪声1.8111四元数噪声1.8110 11角速度噪声1.8110 11位置噪声1.8110 11速度噪声1.8110 11加速度噪声1.8094 11陀螺仪噪声1.8094 11加速度计噪声1.8085 11地磁矢量噪声1.8085 11磁力仪噪声1.7984 12加速度计噪声1.7921 12陀螺仪噪声1.7919 12磁力仪噪声1.7902 12 gps位置噪声1.7774 12 gps低频噪声1.7315 12四元数噪声1.7313 12角速度噪声1.7282 12位置噪声1.7282 12速度噪声1.7282 12加速度噪声1.7278 12陀螺仪偏置噪声1.7278 12加速度计噪声1.7268 12地磁矢量噪声1.7268 12磁强计噪声1.7160 13加速度计噪声1.7103 13陀螺仪噪声1.7094 13磁强计噪声1.7094 13 gps位置噪声1.6980 13GPS低速噪声1.6589 13四元数噪声1.6587 13角速度噪声1.6587 13位置噪声1.6587 13速度噪声1.6587 13加速度噪声1.6575 13陀螺仪偏置1.6575 13加速度计轨道号ise 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, [postuntunedest (:,1) posUntunedEst(:,1) Position(:,1)]);标题(“位置”);ylabel (“轴”);传奇(“调”“不调谐的”“真相”);次要情节(3、1、2);plot(t, [postuntunedest (:,2) posUntunedEst(:,2) Position(:,2)]);ylabel (“轴”);次要情节(3,1,3);plot(t, [postuntunedest (:,3) posUntunedEst(:,3) Position(:,3)]);ylabel (z轴的);

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