主要内容

车轮编码器错误来源

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

地面真相轨迹

创建一个地面真相轨迹,用于检查误差参数。画出轨迹。

Fs = 100;WPS = [0 0 0;20 0 0;20 50 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)”)轴平等的

图中包含一个轴对象。标题为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)”)传说(“地面实况”“测程法”)轴平等的

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

车轮位置测量中的噪声

指定非零WheelPositionAccuracy并研究它是如何影响里程数估计的。这种噪声给车轮编码器测得的滴答声增加了随机偏差。

编码器= wheelEncoderUnicycle;编码器。WheelPositionAccuracy = 0.1;%使用本地随机流重现结果。编码器。RandomStream =“mt19937ar with seed”;odom = wheelEncoderOdometryUnicycle(编码器);Ticks =编码器(vel,angvel,orient);estPose = odom(ticks,angvelBody(:,3));绘制地面真相和估计位置。图绘制(pos (: 1), pos (:, 2), estPose (: 1), estPose(:, 2)标题(位置(车轮位置噪声))包含(“X (m)”) ylabel (“Y (m)”)传说(“地面实况”“测程法”)轴平等的

图中包含一个轴对象。标题为Position (Wheel Position Noise)的坐标轴对象包含2个类型为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)”)传说(“地面实况”“测程法”)轴平等的

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

轨道宽度偏差

指定非零TrackWidthBias并研究它是如何影响里程数估计的。指定正偏差将导致里程计算法高估车辆的转弯角度。这种对转弯的高估导致在转弯时的里程计估计中漂移累积。对于这种情况,需要有轴的车辆,因此使用wheelEncoderDifferentialDrive对象。

编码器= wheelencoderdifferaldrive;编码器。TrackWidthBias = 0.1;odom = wheelencoderodometrydifferaldrive(编码器);Ticks =编码器(vel,angvel,orient);estPose = odom(ticks);绘制地面真相和估计位置。图绘制(pos (: 1), pos (:, 2), estPose (: 1), estPose(:, 2)标题(“位置(轨道宽度偏差)”)包含(“X (m)”) ylabel (“Y (m)”)传说(“地面实况”“测程法”)轴平等的

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

车轮上的不同偏见

属性指定不同的非零值WheelRadiusBias并研究它是如何影响里程数估计的。指定不同的偏差会导致里程表估计值在整个轨迹中漂移。对于这个场景,需要两个轮子,因此使用wheelEncoderDifferentialDrive对象。

编码器= wheelencoderdifferaldrive;编码器。WheelRadiusBias = [-0.01, 0.001];odom = wheelencoderodometrydifferaldrive(编码器);Ticks =编码器(vel, angvel, orient);estPose = odom(ticks);绘制地面真相和估计位置。图绘制(pos (: 1), pos (:, 2), estPose (: 1), estPose(:, 2)标题(“位置(不同的车轮偏差)”)包含(“X (m)”) ylabel (“Y (m)”)传说(“地面实况”“测程法”)轴平等的

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