关于turtlebot 中tf tree的理解

首先使turtlebot在导航模式下运行

rosrun rqt_tf_tree rqt_tf_tree
得到



关于turtlebot 中tf tree的理解_第1张图片

(⊙﹏⊙)b图有点大


主要来讲turtlebot 有四个重要的tf坐标系, map,odom, base_footprint, base_link.

map的原点一般是刚开始建图时的地点,当然也可以在yaml里面修改原点坐标

在map的配置文件里

image: 
resolution: 0.050000
origin: [-1.4500000, 3.3600000, 0.000000]
negate: 0
occupied_thresh: 0.65
free_thresh: 0.196

第一个为静态地图的路径,第二个为像素与坐标之间的倍数关系,第三个为map原点的坐标,,这个坐标体系并不在tf tree里,,只是让ros在图片里找到原点而已

def get_origin(x=0.0, y=0.0):
    x = (x + orign_x) /resolution
    y = height - (orign_y + y)/resolution
   return (x, y)
这个函数返还的是map坐标系下点转换成图片中的像素坐标,,比如我想在图片上标记原点之类的,,这个变换并不在tf tree里。


1.map

map是robot的全局坐标系, 原点上面已经说过了,

2.odom

odom同样是个现实世界的固定坐标系,但他是变动的,是ros在运动前已当前观测到的数据建立的临时的坐标系,避免远离map原点而造成误差,

3.base_link

先讲base_link, 他是已底座中心为原点的坐标系,跟随robot而动,robot身上的任何零件都是已这个为母参考系的。

4.base_footprint

base_footprint是base_link坐标系在地面上的投影,就是z恒等于0的base_link,


说一些小的应用来理解下这四个坐标系

比如我要获取他前进的距离,就获取base_footprint 相对于odom的坐标,计算每次运动前后的差值就是运动的距离。

在比如我想要获取目前机器人在地图上的坐标,那明显就要获取base_footprint 相对于map的坐标,然后在计算其像素坐标




你可能感兴趣的:(ros)