android ros 节点编写_(二)ROS入门——7.理解tf的原理

ROS的tf工具是机器人系统中处理坐标变换的关键,它允许节点广播和监听不同坐标系之间的关系。tf通过树型数据结构tftree存储坐标系间的动态和静态关系,简化了在机器人定位、导航和复杂操作中的坐标转换工作。了解tf的工作原理和使用方法对于理解ROS在实际机器人应用中的高级功能至关重要。
摘要由CSDN通过智能技术生成

d6586e8c333e23f271be08f4899967bd.png

ROS机器人操作系统在机器人应用领域很流行,依托代码开源和模块间协作等特性,给机器人开发者带来了很大的方便。我们的机器人“miiboo”中的大部分程序也采用ROS进行开发,所以本文就重点对ROS基础知识进行详细的讲解,给不熟悉ROS的朋友起到一个抛砖引玉的作用。本章节主要内容:

1.ROS是什么

2.ROS系统整体架构

3.在ubuntu16.04中安装ROS kinetic

4.如何编写ROS的第一个程序hello_world

5.编写简单的消息发布器和订阅器

6.编写简单的service和client

7.理解tf的原理

8.理解roslaunch在大型项目中的作用

9.熟练使用rviz

10.在实际机器人上运行ROS高级功能预览


7.理解tf的原理

(1)机器人中的坐标系

一个机器人系统中通常会有多个三维参考坐标系,而且这些坐标系之间的相对关系随时间推移会变化。这里举一个实际的机器人应用场景例子,来说明这种关系和变化:

全局世界坐标系:通常为激光slam构建出来的栅格地图的坐标系map。

机器人底盘坐标系:通常为机器人底盘的坐标系base_footprint。

机器人上各部件自己的坐标系:比如激光雷达、imu等传感器自己的坐标系base_laser_link、imu_link。

这些坐标系之间的关系有些是静态的、有些是动态的。比如当机器人底盘移动的过程中,机器人底盘与世界的相对关系map->base_footprint就会随之变化;而安装在机器人底盘上的激光雷达、imu这些传感器与机器人底盘的相对关系base_footprint->base_laser_link、base_footprint->imu_link就不会随之变化。其实,这个很好理解。

如图25中,map->base_footprint会随着底盘的移动而变化,即动态坐标系关系。

f4be434acd2bd30c2c4e46dee841951b.png
(图25)动态坐标系关系

如图26中,base_footprint->base_laser_link、base_footprint->imu_link不会随着底盘的移动而变化,即静态坐标系关系。

98a88c58889b9502c97357f640ad91c4.png
(图26)静态坐标系关系

(2)机器人坐标关系工具tf

由于坐标及坐标转换在机器人系统中非常重要,特别是机器人在环境地图中自主定位和导航、机械手臂对物体进行复杂的抓取任务,都需要精确的知道机器人各部件之间的相对位置及机器人在工作环境中的相对位置。因此ROS专门提供了tf这个工具用于简化这些工作。

tf可以让用户随时跟踪多个坐标系的关系,机器人各个坐标系之间的关系是通过一种树型数据结构来存储和维护的,即tf tree。借助这个tf tree,用户可以在任意时间将点、向量等数据的坐标在两个坐标系中完成坐标值变换。

如图27,为一个自主导航机器人的tf tree结构图。圆圈中是坐标系的名称,箭头表示两个坐标系之间的关系,箭头上会显示该坐标关系的发布者、发布速率、时间戳等信息。

c4c32e4a9499d190d7e1f80e71973a9a.png
(图27)一个自主导航机器人的tf tree结构图

(3)使用tf

使用tf分为两个部分,广播tf变换、监听tf变换。

广播tf变换:

ROS网络中的节点可以向系统广播坐标系之间的变换关系。比如负责机器人全局定位的amcl节点会广播map->odom的变换关系,负责机器人局部定位的轮式里程计计算节点会广播odom->base_footprint的变换关系,机器人底盘上安装的传感器与底盘的变换关系可以通过urdf机器人模型进行广播(urdf将在后面实际机器人中进行讲解)。每个节点的广播都可以直接将变换关系插入tf tree,不需要进行同步。通过多个节点广播坐标变换的关系,便可以实现tf tree的动态维护。

关于广播tf变换的具体程序实现,请直接参考ROS官方教程http://wiki.ros.org/tf/Tutorials

监听tf变换:

ROS网络中的节点可以从系统监听坐标系之间的变换关系,并从中查询所需要的坐标变换。比如要知道机器人底盘当前在栅格地图坐标系下的什么地方,就可以通过监听map->base_footprint来实现,比如要知道机器人底盘坐标系上的某个坐标点在世界坐标系下的坐标是多少,就可以通过监听map->base_footprint,并通过map->base_footprint这个变换查询出变换后的坐标点取值。

关于监听tf变换的具体程序实现,请直接参考ROS官方教程http://wiki.ros.org/tf/Tutorials

7a82eafad1d53363bf38ac498d062f9a.png

1df86a8a14dd71aebe2c32140a5177f9.png

42829dbf45ab657de510377f39839d48.png

cf8b7add8dc0de2dddf8818965c72092.png

18b9b444e36f0b0be3e794b89f1a7073.png

https://b23.tv/av48918514

bdc530eabf97688243aed6d7ec80eebc.png

https://b23.tv/av49401644

1a3aa2dcdfe535b05fa053fb03c6c62d.png

https://www.bilibili.com/video/av61448040

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值