• map、odom、base_link、laser 的理解 及其 tf 树的理解


    一、题目各个坐标系的含义

    背景:
    本文以 gmapping 为例,其中 map、odom、base_link、laser 均来自 gmapping 中的坐标系。这里的 gmapping 是指使用laser_scan_matcher包,在仅使用激光雷达、无需里程计的情况下跑 gmapping。
    下图是执行rosrun rqt_tf_tree rqt_tf_tree的结果:
    在这里插入图片描述

    • map:可以理解为世界坐标系
    • odom:机器人以为的世界坐标系
    • base_link:机器人本体坐标系
    • laser:激光雷达坐标系

    二、对坐标系的理解

    • map:地图坐标系,顾名思义,一般设该坐标系为固定坐标系(fixed frame,rviz中的设置项),一般与机器人所在的世界坐标系一致。
    • base_link:机器人本体坐标系,与机器人中心重合,原点一般为机器人的旋转中心。当然有些机器人(PR 2)是 base_footprint,其实意思差不多,base_footprint 坐标系原点为 base_link 原点在地面的投影,有些许区别(z值不同)。
    • odom:里程计坐标系,这里要区分开odom topic,这是两个概念,一个是坐标系(本文),一个是根据编码器或者视觉等计算的里程计。但是两者也有关系,odom topic 转化的位姿矩阵是odom–>base_link的tf关系。这时可能会有疑问,odom 和 map 坐标系是不是重合的?可以很肯定地说,机器人起始运动位置这两者是重合的。但是,随着时间的推移是不重合的,而出现的偏差就是里程计的累积误差。那 map–>odom 的 tf 怎么得到?就是在一些校正传感器合作校正的 package 比如 amcl 会给出一个位置估计(localization),这可以得到 map–>base_link 的 tf,所以估计位置和里程计位置的偏差也就是 odom 与 map 的坐标系偏差。所以,如果你的 odom 计算没有错误,那么 map–>odom 的 tf 就是 0。
    • laser:激光雷达的坐标系,与激光雷达的安装点有关,其与 base_link 的 tf 为固定的。

    三、对于 map --> odom 举个例子

    • 首先,我们制定机器人路径时,使用的必然是绝对坐标系。要完成这件事,机器人需要先知道自己在哪。它没有GPS,所以只能倒推——通过里程计。这也是为什么“没有偏移的话 odam 应该与 map 重合”,因为 odam 本来就是用来倒推 map 的。
    • 假设机器人终点定在了(8,5),初始时刻,map 的(8,5)和 odom 的(8,5)是重合的。
    • odom 坐标系视角看运动过程:假设里程计告诉它,自原点启动起,它在 X 方向移动 2 ,Y 方向移动 5 ,运动描述为(+2,+5)。于是它就认为自己在 odom 坐标系下的(2,5)。反馈给 base_link,则 base_link 坐标系下,机器人需要运动(8,5) - (2,5) = (+6,+0)才能到达目标点(8,5)。而此时如果机器人按(+6,+0)运动完后,确实能到达odom下的终点(8,5),并开始以完成任务为由而沾沾自喜,殊不知,它并没有运动到真正的终点终点:map 坐标系下的(8,5)
    • map 坐标系看运动过程:然而实际上,因为里程计累计误差,它其实第一次运动到了(3,4)。但在 odom 中它在(2,5)。它理应运动(8,5)-(3,4) = (+5,+1)到达目标点,但它会运动(+6,+0),因为 odam 反馈给 base_link 后,目标在 base_link 坐标系下的(6,0)。其实到达的是 map 坐标系下的(9,4),并不能达到运动到 map 坐标系下目标点(8,5)的目的。机器人只能自以为是地认为自己运动到了odom 坐标系下的(8,5)就算万事大吉了。
    • 而这时,校正传感器又告诉它了,“我觉得你的里程计刚才 X 漏算了 0.999,Y 多算了 1.001”。
      于是它把自己所在位置修正为了(2 + 0.999,5 - 1.001)=(2.999,3.999),接下来该移动(8,5)-(2.999,3.999)=(+5.001,+1.001)。就能将偏差校正回来,到达 map 坐标系下的终点(8,5)了。

    在这里插入图片描述
    过程总结:

    base_link + 里程计
    odom
    接近 map 坐标系下的定位结果
    校正

    四、tf 树是怎么回事

    布拉布拉

  • 相关阅读:
    对于Mixin(混入)详情介绍
    数据结构之堆 → 不要局限于堆排序
    字符与字符串
    山西电力市场日前价格预测【2023-09-18】
    K8S java应用jvm内存诊断解决方案:java应用诊断和在线debug利器bistoury介绍及在K8S环境中的使用
    docker 搭建私有仓库并发布私有镜像
    maven
    nvm的简介、安装、使用(简单明了)
    PMP考试倒计时,速看3A通关锦囊!
    AWS的RDS数据库开启慢查询日志
  • 原文地址:https://blog.csdn.net/weixin_42915934/article/details/126055222