「嵌入式->ROS2」建图导航入门知识点介绍:TF坐标变换 大家好本节我们来解释ROS2中的TF坐标变换的知识点。1.导言-嵌入式的传感器到机器人的传感器机器人需要建图和导航建图和导航就需要“感知”学过嵌入式的你知道感知我们采用传感器来实现比如红外、温度、湿度、光敏……同样的对于机器人而言也需要传感器而且通常而言的传感器包括雷达、IMU、里程计……我们在此简单地介绍一下这几个重要的部分。1.雷达雷达的分类有很多中激光雷达、毫米波雷达、超声波雷达等。重点放在激光雷达LiDAR上。激光雷达的基本原理很简单对于学习过嵌入式的同学而言红外测距传感器并不陌生模块发送红外出去在外界经过边界时反弹回来然后传感器接收到这个刚刚发出的红外或者超声波通过时间差测算得到距离这就是ToF测距法。同样的激光雷达中也有使用这种方法来扫描周围的情况。激光雷达的构造包括激光发射器、激光接收器、核心板、电机、传动装置。原理就是通过电机传动使激光收发装置高速旋转扫描周围然后通过测距方法得到结果。2.IMUIMU惯性测量单元这个模块主要由陀螺仪、加速度计组成有的时候还包括磁力计。加速度计自然是测算物体的加速度对加速度的积分可以得到速度再积分一次得到位移。陀螺仪在嵌入式中也经常见到主要功能是对于三维方向的角度进行测量可以获取当前的姿态涉及的知识点常常包含欧拉角偏航角、俯仰角、滚转角、四元数转换等。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:机器人位置坐标系不同于其他的坐标系该坐标系是虚拟的他是机器人底盘垂直投影于地面的一个坐标他的Z0。他的主要作用是为了和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之间的关系是静态变换描述传感器相对于底盘的机械安装位置与角度硬件装配完成后相对位置固定。