「嵌入式->ROS2」建图导航入门知识点介绍:TF坐标变换
大家好,本节我们来解释ROS2中的TF坐标变换的知识点。
1.导言-嵌入式的传感器到机器人的传感器
机器人需要建图和导航,建图和导航就需要“感知”,学过嵌入式的你知道,感知我们采用传感器来实现,比如红外、温度、湿度、光敏……同样的,对于机器人而言也需要传感器,而且通常而言的传感器包括:雷达、IMU、里程计……
我们在此简单地介绍一下这几个重要的部分。
1.雷达
雷达的分类有很多中,激光雷达、毫米波雷达、超声波雷达等。重点放在激光雷达(LiDAR)上。激光雷达的基本原理很简单,对于学习过嵌入式的同学而言红外测距传感器并不陌生,模块发送红外出去,在外界经过边界时反弹回来,然后传感器接收到这个刚刚发出的红外或者超声波,通过时间差测算得到距离,这就是ToF测距法。同样的,激光雷达中也有使用这种方法来扫描周围的情况。
激光雷达的构造包括:激光发射器、激光接收器、核心板、电机、传动装置。原理就是通过电机传动使激光收发装置高速旋转扫描周围,然后通过测距方法得到结果。

2.IMU
IMU,惯性测量单元,这个模块主要由陀螺仪、加速度计组成,有的时候还包括磁力计。

加速度计自然是测算物体的加速度,对加速度的积分可以得到速度,再积分一次得到位移。陀螺仪在嵌入式中也经常见到,主要功能是对于三维方向的角度进行测量,可以获取当前的姿态,涉及的知识点常常包含欧拉角(偏航角、俯仰角、滚转角)、四元数转换等。
3.(轮式)里程计
里程计本质上说就是编码器,嵌入式的同学对此应该比较了解,对于测算车轮速度什么的就常常使用编码器。
在机器人的世界中,编码器对轮子的转圈计数,外加轮子的半径等其他的数据就可以得到自己大概行驶了多远(尽管这是理想的画面,实际中常常包含打滑等因素)。
2.TF坐标变换
1.简介
TF 是 ROS 中管理多个坐标系之间平移 + 旋转变换的工具库,能够随时查询任意时刻两个坐标系之间的位置姿态关系,实现不同传感器、机器人本体之间的数据坐标换算。
在此之前,各位请记住以下英文对应:对于机器人的各部件,一般使用link,对于坐标系,一般使用frame。

坐标变换分为父坐标系和子坐标系,所有坐标变换组成一棵有向无环树(常说TF树),一个子坐标系只能有唯一父坐标系,不能形成环路。
2.静态变换和动态变换
机器人组装好了之后,里程计、雷达、IMU的位置对于机器人而言都是固定的,就像你行走的时候,你的大脑和心脏的相对位置是不变的,为相对位置不变的两个部分做坐标变换,这就叫做静态变换。
同样的,你现在过红绿灯,你走的时候,你会和红绿灯的相对位置发生变化,这就叫动态变化。
聪明的你肯定想到了,静态坐标变换的相对位置不变,只需要测算一次就好了,而事实也确实如此,两坐标系相对位置永不改变(底盘与雷达、相机)时,仅发布一次,通过/tf_static传输。
而动态变换中,相对位置是实时发生变化的,所以对于动态坐标变换,程序持续高频发布,通过/tf传输。
3.常见例子详解(map → odom → base_footprint → base_link → laser /imu_link)
首先,我有必要为各位介绍一下这些分别代表着什么。
1.map:全局静态世界坐标系
如果你玩过我的世界,你知道的,我的世界中有三维坐标,其中有一个(0,0,0)坐标,map就是这样一个建图世界的一个固定的,作为基准的坐标系。
2.odom:里程计坐标系
odom,里程计。这个坐标系诞生于机器人开机之后的起始位置。如果类比我的世界,那就是玩家的世界重生点,在没有绑定床的时候,玩家死亡就会回到这个世界重生点,也就是你第一次开游戏的重生点。
3.base_footprint:机器人位置坐标系
不同于其他的坐标系,该坐标系是虚拟的,他是机器人底盘垂直投影于地面的一个坐标,他的Z=0。他的主要作用是为了和odom坐标系进行测算,是导航框架约定代表机器人位置的基准。这个坐标系比较难以理解,但是他的作用是计算水平的距离,水平的距离不需Z轴。
4.base_link:机器人底盘坐标系
底盘是机器人的一个部件,在本章开始时强调过了link代表部件。既然是部件,那么他是实际存在的,和base_footprint是不同的。
5.laser_link / imu_link:雷达/IMU坐标系
这两个同样属于部件,原理相同,在机器人本体上的位置也是相对不变的。
6.原理过程详解
map和odom之间的关系是:动态变换,你可能会疑问:map是地图创建就固定的基准、odom里程计是开机就固定的了,二者都不变,不应该是静态变换吗?odom里程计获取的机器人的位置和实际物理位置是有偏差的,而且随着时间变化越来越大,这个误差叫做漂移。为了消除误差,通过其他的方法得到实际位置之后(SLAM等手段),代码会矫正map和odom的位置变换,以消除漂移。
odom和base_footprint之间的关系是:动态变换,odom和base_footprint之间的坐标变换可以获取机器人相对于odom坐标系的的实际位置和朝向。
base_footprint和base_link之间的关系是:静态变换,这就像影子和你的脚底板一样(光源一直在头顶),base_footprint是垂直投影,是虚拟的,而base_link是真实的底盘,这条变换只有 Z 轴偏移,数值永远不变,完成 “地面虚拟点” 到 “车身本体” 坐标转换。
base_link和laser /imu_link之间的关系是,静态变换,描述传感器相对于底盘的机械安装位置与角度;硬件装配完成后相对位置固定。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐



所有评论(0)