image

ROS navigation关于map odem base_link三坐标关系的总结


writerlIcht                      emaillIcht.gzl@gmail.com                 date:  2019.10.19

 

 

12

        在对ROS navigation导航包的应用中,其中move_base的是核心算法。想要实现任何一个机器人移动,其tf树转换关系一定要明确,这也是实现控制目标的前提。在ROS中tf的关系是由系统tf包接收话题实时维护自动计算的。但是在navigaton中,对map、odom、base_link三个坐标之间关系的理解是难点。

        写作原因:在一个利用GPS改进传统ROS move_base navigation的项目中,其odom与amcl模块所提供的信息通通由GPS与IMU融合进行提供,在已有的move_base框架上进行改进,寻找不使用odom与amcl模块的方法。这就对原有的tf树进行了核心上的改变。

        move_base node原理图:

image

 

 

 

在ROS base_move中 map-->odom-->base_link三坐标系之间的关系:

世界坐标系: map 里程计坐标系: odom 自身(小车)坐标系: base_link

 

map 坐标系: 是地图的坐标系,不移动,固定坐标系,所有坐标系的基准。

odom 坐标系: 是由小车移动时对左右轮子的速度计算得到实际的在map上的偏航和位移速度的信息,由次速度和偏航信息实时发送出/odom topic,发送给/tf维持odom坐标系和base_link坐标系之间的关系。这个速度信息是连续不断的,因此作为计算小车位置的基准坐标系。但是由于对左右轮积分计算速度偏航信息的过程中会有微小偏差,长时间后会出现误差累积导致不准确。

 

        那么既然能得根据左右轮得到小车里程计那么为什么不直接用这个信息,直接计算map坐标系到小车base_link坐标系之间的关系直接定位到小车的位置呢?

        这样就不需要多计算一个坐标系odom了,但是这样长时间运行小车,所计算的位置的误差会累积得着越来越大。 为了消除这一误差,就引入了odom坐标系。那么map坐标系到base_link坐标系之间又是如何定位呢?而且/tf中一个子坐标系只能有一个父坐标系,这就导致base_link不可能同时直接维护map坐标系和odom坐标系的关系。

        这时在map到base_link之间引入odom坐标系。

        odom到base_link之间的计算时通过左右轮速度信息得到,map到base_link的/tf信息是由一些校正传感器合作校正的package(运动预测与定位模块)比如amcl会给出一个位置估计(localization)得到。Gmapping会先计算map到base_link的transform再计算odom到base_link的transform,然后根据这2个transform来计算map到odom的关系。所以传感定位模块(acml)估算的是map与base_link之间的变换,但是他发布的是odom与base_link之间的转换。

       这里假定通过运动预测和scanmatcher(acml)得到的map到base_link之间的/tf是准确的,那么通过两个transform得到的map和odom之间的变换就体现出累计的误差补偿,如果odom的数据都正确,则map应与odom坐标系始终重合,若不正确,则会通过map和odom坐标系之间的变换表现出来。

 

       那么既然定位模块的信息是准确的那么为什么不直接使用定位模块实时确定小车的位置而要加入有误差累积的odom坐标呢?

        前面提到,odom的计算是连续不断的,对于长时间执行来说是可靠的参考坐标。但是通过定位传感模块信息得到的map到base_link之间的信息不是连续的,在传感模块不断接受新信息时定位出的base_link位置会发生跳变,不适合作为一个长期的定位参考。所以odom坐标系是必须的。

 

       进阶:

       amcl(感知定位算法): 接收算法的map-->base_linkt的ransform,和odom的odom到base_link的transform。但是发布的是map-->odom的transform。(可以用发布静态tf维护map到odom,把map与odom重合?

        odom(里程计定位算法): 接收里程计的odom到odom-->base_link。发布的是odom-->base_link也发布base_link的x,y,yew航向(Pose)信息。(gps中有位姿信息可以编节点发布伪odom,实现map/odom到base_link的tf动态转换?