轮式编码器误差来源
探讨车轮编码器的各种误差来源及其对车轮里程数估计的影响。定义一个地面真值轨迹后,更改车轮半径偏置、车轮位置噪声、车轮滑移和各种车轮编码器对象的轨道宽度的参数。注意改变这些参数对车轮编码器传感器模型的输出轨迹的影响。
地面真相轨迹
创建一个在检查误差参数时使用的地面真值轨迹。画出轨迹。
Fs = 100;WPS = [0 0 0;20 0 0;20 5 0;0 5 0;0 0 0];Toa = cumsum([0 10 1.25*pi 10 1.25*pi]).';Vels = [2 0 0;2 0 0;-2 0 0; -2 0 0; 2 0 0]; traj = waypointTrajectory(wps,...“SampleRate”Fs,“ReferenceFrame”,“ENU表示”,...“TimeOfArrival”toa,“速度”韦尔);获取姿势值。[pos,orient,vel,acc,angvel] = lookupPose(traj,toa(1):1/Fs:toa(end));angvelBody = rotateframe(orient,angvel);密谋地面真相的位置。图图(pos(:,1),pos(:,2))“立场(基本事实)”)包含(“X (m)”) ylabel (“Y (m)”)轴平等的
车轮半径的偏差
为独轮车模型创建车轮编码器传感器wheelEncoderUnicycle
对象。指定非零值WheelRadiusBias
并研究它是如何影响里程数估算的。指定正偏置会导致里程计算法低估车轮的周长。这使得里程表估计的路程更小。
编码器= wheelEncoderUnicycle;编码器。WheelRadiusBias = 0.05;odom = wheelEncoderOdometryUnicycle(编码器);Ticks =编码器(vel, angvel, orient);estPose = odom(ticks, angvelBody(:,3));绘制地面真相和估计位置。。图绘制(pos (: 1), pos (:, 2), estPose (: 1), estPose(:, 2)标题(“位置(车轮半径偏置)”)包含(“X (m)”) ylabel (“Y (m)”)传说(“地面实况”,“测程法”)轴平等的
车轮位置测量中的噪声
指定非零值WheelPositionAccuracy
并研究它是如何影响里程数估算的。这种噪声增加了轮编码器测量的滴答声的随机偏差。
编码器= wheelEncoderUnicycle;编码器。WheelPositionAccuracy = 0.1;使用本地随机流来再现结果。编码器。RandomStream =“mt19937ar带种子”;odom = wheelEncoderOdometryUnicycle(编码器);Ticks =编码器(vel,angvel,orient);estPose = odom(ticks,angvelBody(:,3));绘制地面真相和估计位置。。图绘制(pos (: 1), pos (:, 2), estPose (: 1), estPose(:, 2)标题(“位置(车轮位置噪音)”)包含(“X (m)”) ylabel (“Y (m)”)传说(“地面实况”,“测程法”)轴平等的
车轮打滑
指定非零值SlipRatio
并研究它是如何影响里程数估算的。指定一个大于零的值将模拟车轮打滑。这种滑移导致里程表估计更大的旅行距离。滑移率的负值表示滑动。
编码器= wheelEncoderUnicycle;编码器。SlipRatio = 0.25;odom = wheelEncoderOdometryUnicycle(编码器);Ticks =编码器(vel, angvel, orient);estPose = odom(ticks, angvelBody(:,3));绘制地面真相和估计位置。。图绘制(pos (: 1), pos (:, 2), estPose (: 1), estPose(:, 2)标题(“位置(车轮滑移)”)包含(“X (m)”) ylabel (“Y (m)”)传说(“地面实况”,“测程法”)轴平等的
履带宽度的偏差
指定非零值TrackWidthBias
并研究它是如何影响里程数估算的。指定正偏置将导致里程计算法高估车辆的转弯角度。这种对转弯的过高估计导致在转弯时的里程计估计中累积漂移。对于这个场景,需要一个带有轴的车辆,因此使用wheelEncoderDifferentialDrive
对象。
编码器= wheelEncoderDifferentialDrive;编码器。TrackWidthBias = 0.1;odom = wheelEncoderOdometryDifferentialDrive(编码器);Ticks =编码器(vel,angvel,orient);estPose = odom(ticks);绘制地面真相和估计位置。。图绘制(pos (: 1), pos (:, 2), estPose (: 1), estPose(:, 2)标题(“位置(航迹宽度偏差)”)包含(“X (m)”) ylabel (“Y (m)”)传说(“地面实况”,“测程法”)轴平等的
车轮的不同偏差
对象指定不同的非零值WheelRadiusBias
并研究它是如何影响里程数估算的。指定不同的偏差会导致里程数估计在整个轨迹中漂移。对于这个场景,需要两个轮子,因此使用wheelEncoderDifferentialDrive
对象。
编码器= wheelEncoderDifferentialDrive;编码器。WheelRadiusBias = [-0.01, 0.001];odom = wheelEncoderOdometryDifferentialDrive(编码器);Ticks =编码器(vel, angvel, orient);estPose = odom(ticks);绘制地面真相和估计位置。。图绘制(pos (: 1), pos (:, 2), estPose (: 1), estPose(:, 2)标题(“位置(不同车轮偏差)”)包含(“X (m)”) ylabel (“Y (m)”)传说(“地面实况”,“测程法”)轴平等的