通俗易懂讲解TF树和导航框架

本文介绍了机器人系统中如何通过TF坐标变换处理来自不同传感器的数据,如激光雷达和IMU,以及AMCL算法如何结合粒子滤波实现精确的定位。重点讲解了odom和map之间的关系,以及move_base在路径规划中的作用。
摘要由CSDN通过智能技术生成

这里没有代码和公式的解读,只是通俗的讲一下最基本的原理,如果有不正确的地方欢迎指正

基础知识

TF坐标变换

机器人系统上,有多个传感器,如激光雷达、摄像头等,有的传感器是可以感知机器人周边的物体方位(或者称之为:坐标,横向、纵向、高度的距离信息)的,以协助机器人定位障碍物,可以直接将物体相对该传感器的方位信息,等价于物体相对于机器人系统或机器人其它组件的方位信息吗?显示是不行的,这中间需要一个转换过程。更具体描述如下:

 

f06ab48c22ba95d9d5c1fb64457c52fd.png

这就需要坐标变换 tf:TransForm Frame,坐标变换

 

4146f56a5d86395aa6fe03ba7721ab77.jpeg

坐标系是通过右手坐标系来定义的

传感器

雷达 /scan

惯性传感器 /IMU

里程计 /Odom

导航框架

 

0aeb8bb2d60b5fe857bdc130c9e84d1d.png

  1. 全局地图

  2. 自身定位

  3. 路径规划

  4. 运动控制

  5. 环境感知

AMCL

自适应蒙特卡洛定位

AMCL的作用是估计机器人在地图上的位置,也就是将机器人从odom坐标系转换到map坐标

使用单位区间内的粒子数,表征事件发生的概率。根据选定的评估方程推算时间的置信程度,每个粒子代表机器人的方向和位置

  1. 生成初始的粒子

  2. 以当前置信度为起点使用粒子

  3. 从里程计模型里面采样,预测粒子位姿。更新后粒子更加分散(里程计有误差)

  4. 更新粒子的位姿。当接收到测量数据(比如/scan)后,通过测量模型,将测量数据放到各个粒子的位姿下,判断测量数据发生的可能性,以这个可能性来更新粒子的权重。计算激光测量的端点与地图最近障碍物的距离,距离越小激光测量数据发生的可能性越大,粒子的权重越大。

  5. 重采样 如果打开了有选择重采样,程序会判断粒子集合权重的方差,方差越大有效的粒子越小,粒子退化越严重,此时则需要进行重采样,否则可以跳过此步骤。一般情况下权重较小的粒子将被过滤掉,权重较大的粒子将被复制

  6. 将重采样后的粒子放入直方图中 将重采样后粒子的位姿,放入到对应的直方图中。其中,直方图内粒子的数量越多,直方图的颜色越深,代表该直方图的权重越大。

03265c32ec37445bb5dfc22841bf6f6c.png272eacaf00f44b83b94d9dc586f9c79f.png

9bf3ff70e6fa472583955fb8ad8aace9.png(颜色越深权重越大)

ad19e3592b9b495980bff9adf2f75803.png(颜色越深粒子数越多)

当车移动到一个未知的区域或,会随机在这个区域内增加粒子数

将IMU的数据转换成Odom数据,作为定位滤波时的参考数据

 

TF树为坐标变换提供了一个实时更新的框架,使得所有的数据都可以转换到一个共同的坐标系中,例如map

6678d4521be94a3ca9d161de54c74c15.png

/Odom

tf关系map–>odometry–>base_link

需要确定机器人在地图中移动的距离所以有odometry->base_link的tf广播。

odom的原点是机器人启动的位置,但是不知道它在地图上的相对位置,AMCL可以根据最佳粒子的位置推算出map->odom

map在地图中是不动的,odom 代表的是机器人启动点的位置,随着机器人移动,odom坐标系中的base_link。但是如果有误差比如轮子打滑,里程计显示走到了A点,但是AMCL融合其他传感器的数据,推算出小车在B点,里程计数据更新,就产生了一个误差是这样吗

比如说我现在算出来了一个坐标X=10(odom-->base_link),但是这个位置的真实坐标应该是X'=2(map-->base_link),也就是说我计算的坐标和真实坐标出现了偏差。但是ROS在说的时候换了个说法,不说计算出来的坐标在map中漂了8,而是说是odom坐标系相对于map坐标系漂了8。所以此时base_link相对odom坐标是真实坐标x=2(因为odom坐标系短时间是准确的,如果是刚开始时odom和map重合,odom中的该坐标就是真实坐标);odom相对于map坐标是driftX=8(map-->odom);最后计算出来的base_link相对于map的坐标就是X=drixfX+X'=10了。

/scan

base_link-->laser

由底盘的位置可以直接确定laser的位置

雷达畸变

原理 激光雷达扫描是有周期的,激光雷达的一帧数据是一个周期的数据,只有一个时间戳,假设雷达扫描一周的时间为T,那么机器人在这段时间里运动X

 

b285f4d6134060fd2f8f47c39ac5d217.png

$$
🔺Lmax=v*T
$$

 

但是最后数据封装的时候,会统一到第一束激光雷达发射点处,最后得到一个即便的数据

雷达数据帧率低,误差大,odom帧率在100HZ以上

/imu

它由三个单轴的加速度计和三个单轴的陀螺仪组成,加速度计检测物体在载体坐标系统独立三轴的加速度信号,而陀螺仪检测载体相对于导航坐标系的角速度信号,对这些信号进行处理之后,便可解算出物体的姿态。

move_base

这个包提供了一个基于actionlib的实现,即提供一个目标点,move_base会尝试通过全局以及局部的路径规划,让移动机器人移动到设定的目标点。

move_base维护了两种costmaps,分别给全局、局部规划器用.给定一个目标,然后控制移动机器人走到目标点的功能。

机器人能连续移动是因为把取了很多点连成一条线

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值