第 14.8.1.1 節

轮式里程计标定

0瀏覽次數0訪問次數--跳出率--平均停留

轮式里程计标定是校准机器人轮子的旋转和移动,以提供机器人运动中的准确位置和姿态信息的方法。通过标定,可以修正因轮子尺寸和轮距等因素引起的误差,获得更准确的运动轨迹。本节将以MyCar导航机器人为例演示标定过程,其标定步骤如下:

  1. 准备测量场地;
  2. 线性位移标定;
  3. 转角位移标定;
  4. 验证和调整。

另外,该过程还需要使用尺子作为测量工具。

1.准备测量场地

选择一个开放而平坦的区域,确保没有障碍物和其他干扰因素。

2.线性位移标定

线性位移标定是用来标定机器人在直线移动时行进的距离。该标定与车轮直径参数密切相关,当车轮直径测量不准确或轮胎磨损时,会导致轮式里程计的线性位移出现误差。以下是线性位移标定的主要步骤:

(1)实际数据采集

启动机器人底盘和键盘控制节点,使用键盘控制机器人向前直线运动一段距离,并测量线性位移数据。

(2)里程计消息采集

机器人停止后,输出里程计消息,并获取里程计消息中的机器人的位移数据。

(3)参数计算以及修改

收集实际位移数据(w1)和里程计消息中的位移数据(w2),并结合驱动包配置文件中的原轮胎直径值(d1),即可计算修正后的轮胎直径值(d)。计算公式如下:

d = w1 / w2 * d1;

将计算出的结果写入 MyCar 机器人的配置文件对应的参数,并重新构建。

为了获得最佳结果,可以多次执行上述流程。每次执行后,测量并记录新的实际位移数据(w1)和里程计消息中的位移数据(w2),然后根据新的数据再次计算修正后的轮胎直径值(d)。不断迭代这个过程,可以逐步优化轮胎直径的估计值,减小里程计的线性位移误差。

小提示:

如果使用的是以Arduino为主控的MyCar两轮差速机器人,那么需要修改ros2_arduino_bridge功能包下的params/arduino.yaml文件,该文件中有一个名为wheel_diameter参数即为车轮直径;

如果使用的是以Stm32为主控的MyCar两轮差速机器人,那么需要修改ros2_stm32_bridge功能包下的params/stm32_2w.yaml文件,该文件中有一个名为wheel_diameter参数即为车轮直径;

如果使用的是以Stm32为主控的MyCar四轮差速机器人,那么需要修改ros2_stm32_bridge功能包下的params/stm32_4w.yaml文件,该文件中有一个名为wheel_diameter参数即为车轮直径。

3.转角位移标定

转角位移标定是用来标定机器人在转弯时的角度变化。该标定与底盘的旋转半径参数密切相关,当旋转半径设置不当时,会导致转角位移的测量误差。另外需要注意的是,如果是两轮差速机器人,那么旋转半径和轮间距基本一致。这是因为两轮差速机器人在旋转时没有造成车体的侧滑运动,所以可以使用轮间距来计算旋转角度,并且旋转半径可以近似等于轮间距。然而,对于四轮差速机器人,在旋转时会产生侧滑,轮间距无法直接用于计算旋转角度。四轮差速机器人的旋转半径需要通过实验获取,因为它的旋转半径受到侧滑运动的影响。此外,由于机器人的左右侧轮胎差异或车辆重心偏移等原因,左旋转和右旋转时计算旋转角度所使用的旋转半径可能不同,因此需要进行分别实验来获取左右旋转时的旋转半径。

以下是转角位移标定的主要步骤:

(1)实际数据采集

启动机器人底盘和键盘控制节点,使用键盘控制机器人原地旋转,并测量转角位移数据,比如可以原地旋转一周。

(2)里程计消息采集

机器人停止后,打开rviz2,并添加tf插件,以显示机器人基坐标系(一般是base_link或base_footprint)与里程计坐标系(一般是odom)相对关系。

(3)参数计算以及修改

在机器人原地旋转一周时,如果机器人基坐标系与里程计坐标系相吻合,那么旋转半径参数无需调整;如果机器人基坐标系与里程计坐标系不吻合且rviz2中机器人的旋转角度大于实际旋转角度,那么请将旋转半径调大;如果机器人基坐标系与里程计坐标系不吻合且rviz2中机器人的旋转角度小于实际旋转角度,那么请将旋转半径调小。将计算出的结果写入 MyCar 机器人的配置文件对应的参数,并重新构建。

为了获得最佳结果,可以多次执行上述流程。每次执行后,测量并记录新的实际转角位移数据和rviz2中的坐标系相对关系,然后根据新的数据再次修正旋转半径。通过不断迭代这个过程,可以逐步优化旋转半径的估计值,减小转角位移的测量误差。

小提示:

如果使用的是以Arduino为主控的MyCar两轮差速机器人,那么需要修改ros2_arduino_bridge功能包下的params/arduino.yaml文件,该文件中有一个名为wheel_track参数即为车轮直径,在ros2_arduino_bridge中并未对左旋转和右旋转做区分;

如果使用的是以Stm32为主控的MyCar两轮差速机器人,那么需要修改ros2_stm32_bridge功能包下的params/stm32_2w.yaml文件,在机器人左旋转时,要标定的是名为model_param_acw的参数,在机器人右旋转时,要标定的是名为model_param_cw的参数;

如果使用的是以Stm32为主控的MyCar四轮差速机器人,那么需要修改ros2_stm32_bridge功能包下的params/stm32_4w.yaml文件,和两轮差速类似的,在机器人左旋转时,要标定的是名为model_param_acw的参数,在机器人右旋转时,要标定的是名为model_param_cw的参数。

4.验证和调整

将标定后的轮式里程计应用于实际场景中,并进行验证和调整。观察车辆的实际位置和运动与估计值的差异,并进行必要的调整和校准。另外,当车辆使用环境发生改变,或持续使用较长一段时间后,建议对里程计进行重新标定。

音乐页