终于完成了Robotic SLAM 所有的内容了。说实话,课程的内容比较一般,但是作业还是挺有挑战性的。最后一章的内容是 Location. Location 是 Mapping 的逆过程。在给定map的情况下,需要求取机器人的位姿。
1、Location 的意义
在机器人导航任务中,location 可以告诉机器人目前位置,以方便闭环控制或者轨迹规划。一般情况下,Location 可以通过GPS,WIFI 等方式完成。GPS的定位精度在3.5米左右,WIFI则大于10米。对于机器人、无人汽车而言,这样的精度显然是不可接受的。激光雷达在10m的距离可以达到cm的精度,双目视觉在4m可以达到10cm的精度,与GPS相比有一定优势,此外,这种非在线的定位方式可以在室内使用。
Location 最大的难度来自于测量误差。里程计的计数误差,测量与里程计的不统一等。所以我们需要一种算法,能够较高精度的确定机器人的位姿。
2、Location 的流程
Location的流程可以总结为以下:1、确定机器人的初始位姿;2、求取传感器测量结果;3、利用粒子滤波器基于当前位姿与机器人测量结果估计机器人下一步的位姿。
此处粒子滤波器的作用似乎与卡尔曼滤波器相似,但是粒子滤波器可以有非0的均值(编码器读数),可以有非正太分布(你关我怎样采样),可以有非线性解(反正是大力出奇迹,什么解不可能?)
机器人初始位姿确定略过。传感器测量结果的获取又叫做地图的 Registration. 这是一个我们非常熟悉的词 —— 配准。配准的作用是将测量结果与地图结果相匹配。匹配所使用的方式是概率图的 factor product. 对于给定位姿,如果测量结果与实际地图匹配成功则给正分,否则给负分。至于给多少正分,多少负分,需要进行 tuning....这个 tuning 也是作业的核心。tuning 的关键是一定要对测量结果进行可视化,如果第一帧都匹配不上,那后面必跑飞。如果第一帧匹配上了,那么后面才有调的可能性。
3.粒子滤波器
基于粒子滤波器的机器人位姿估计是一个大模块,其pipeline如下:
1.针对初始位姿,给定一堆粒子,每个粒子就是一个位姿,粒子可以是均匀分布的,也可以是正太分布的,也可以是任意你喜欢的分布。针对每个粒子算 Registration 的分数
2.利用已知的转移关系——编码器,惯性传感器,whatever,给出这堆粒子下一步的位姿。注意,粒子是带着它的分数转移的。
3.针对转移后的粒子重采样——根据转移关系的噪声,重新采样一次粒子转移后的结果。计算并更新配准分数。
4.计算有效粒子数目,如果小于粒子总数,则重新采样。如果和粒子总数相等,则回到2.
总而言之,粒子滤波器叫做“多party参政制” 个个都有可能当总统。每个转移相当于一次大选,而与地图的配准结果相当于选票。尽管最后我们会选择一个得票最多的,但是我们也不允许一party独大(n_effective)。Resampling则是如果某个party的理念确实优秀,那么允许其分身,分身后加上噪声保证了意见的多样性。
所以粒子滤波器总能给出较好的结果。