AGV_demo奔跑 里程计准确标定前后的目标点位置误差对比

前言

搭完样机之后,迫不及待地应用算法去运行agv小车,但是在跑程序的过程中发现一些问题,其中若干现象表明定位不准确是一大因素。所以,如何通过调参提高定位精度是需要解决的首要问题。本文先就重新标定里程计减小里程计的系统误差进行记录。

实验方案介绍

通过程序控制机器人多目标巡航,每次到定点A的时候记录小车所在位置。多点巡航坐标点如下:

waypoints =[
    ['A', (3, -0.5), (0.0, 0.0, 0.0, 1.0)],    
    ['B', (8, 0), (0.0, 0.0, -0.984047240305, 0.177907360295)],
    ['C', (0.0, 0.0), (0.0, 0.0, 0.0, 1.0)]
]

为了更直观更精确的记录小车位置,在小车的尾部黏贴红色的标识。
AGV_demo奔跑 里程计准确标定前后的目标点位置误差对比_第1张图片
在进行实验时需要运行机器人的传感器模块、导航模块和多点巡航程序,设定巡航程序在到达指定目标点后sleep.time2秒,此时用色块记录agv尾部红色标识的位置。
里程计标定包括两部分:直线标定和角度标定。其中涉及三个启动文件:底盘控制驱动启动文件、直线标定启动文件、角度标定启动文件。通过实验测量实际的运行距离和理论行程对比,修改相关转换参数,直到误差在人为可控范围之内。标定方法为:如果直线实际行程超过1米,增大speed_ratio;如果直线实际行程小于1米,则减小speed_ratio;如果角度旋转超过360°,减小wheel_distance;如果角度旋转小于360°,则增大wheel_distance。
实验后的结果如图所示,其中红色色块为里程计尚未标定的位置结果,蓝色色块为里程计标定完成后的位置结果,由于实验分两天进行,其中部分红色色块在中途丢失,但不影响实验结果:

实验结果分析

由于无法对应在map下绝对坐标系坐标和物理世界的实际点位置,故选取第一个点作为参考基准点来计算之后坐标点的误差。

里程计未标定的误差

先前agv用于各种调试,已经稳定运行了一个月。此时我们发现agv在多次到达目标点后,其实际目标点位置偏移得很严重。在减小了goal tolerance后,此情况并未有效改变,由此判断定位不精确的主要原因是由于里程计的累积误差造成,通过标定里程计减小其系统误差能在之后的运动中降低累积误差。未标定的里程计的实际位置偏差如下表所示:

基准点1 2 3 4 5 6 7 8 9
与1点的距离(单位mm) 880 585 430 55 320

由上表可知,agv如果长时间未进行重定位,里程计的系统误差会使得agv的定位误差过大。此外,在实验过程中有一个奇怪现象,acml的粒子会在不同位置突然发散,从而丢失位置,原因未知。经过一点时间等待之后,有时会自身收敛,但是大部分会丢失位置。如图所示:
AGV_demo奔跑 里程计准确标定前后的目标点位置误差对比_第2张图片

里程计标定后的误差

里程计标定后的实际偏差如下表所示:

基准点1 2 3 4 5 6 7 8 9
与1点的距离(单位mm) 95 72 85 53 255 30 105 83

经过反复标定后,agv底盘能以更高的精度运行。对比标定前后实际位置的误差可知,标定后的定位效果显著,而且再也没有运行途中acml的粒子突然发散现象,无法解释。需要后期理解acml源码才能理解这个现象。

结论

综上所述,一个标定准确的里程计标定是稳定精准地运行agv的必要条件。一定要在前期,将这部分工作细致地完成。下文继续介绍相关调参,来提高agv的稳定性和准确性。

你可能感兴趣的:(AGV_demo奔跑,定位,算法)