主要内容

轮式编码器误差来源

探讨车轮编码器的各种误差来源及其对车轮里程数估计的影响。定义一个地面真值轨迹后,更改车轮半径偏置、车轮位置噪声、车轮滑移和各种车轮编码器对象的轨道宽度的参数。注意改变这些参数对车轮编码器传感器模型的输出轨迹的影响。

地面真相轨迹

创建一个在检查误差参数时使用的地面真值轨迹。画出轨迹。

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)”)轴平等的

图中包含一个axes对象。标题为Position (Ground Truth)的axis对象包含一个类型为line的对象。

车轮半径的偏差

为独轮车模型创建车轮编码器传感器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)”)传说(“地面实况”“测程法”)轴平等的

图中包含一个axes对象。标题为Position (Wheel Radius Bias)的axis对象包含两个类型为line的对象。这些物体代表地面真相,里程计。

车轮位置测量中的噪声

指定非零值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)”)传说(“地面实况”“测程法”)轴平等的

图中包含一个axes对象。标题为Position (Wheel Position Noise)的axis对象包含两个类型为line的对象。这些物体代表地面真相,里程计。

车轮打滑

指定非零值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)”)传说(“地面实况”“测程法”)轴平等的

图中包含一个axes对象。标题为Position (Wheel Slippage)的axis对象包含两个类型为line的对象。这些物体代表地面真相,里程计。

履带宽度的偏差

指定非零值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)”)传说(“地面实况”“测程法”)轴平等的

图中包含一个axes对象。标题为Position (Track Width Bias)的axis对象包含两个类型为line的对象。这些物体代表地面真相,里程计。

车轮的不同偏差

对象指定不同的非零值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)”)传说(“地面实况”“测程法”)轴平等的

图中包含一个axes对象。标题为Position (Different Wheel bias)的axis对象包含两个类型为line的对象。这些物体代表地面真相,里程计。

Baidu
map