当前位置: 首页 > news >正文

ROS(八)——ROS中的坐标系管理系统(TF坐标系管理系统 view_frames tf_echo rviz)

机器人中的坐标变换

例如有A、B两个坐标系,两个坐标系之间的关系可以通过这样一个向量去做描述,这里面会包含一个平移的变换和一个旋转的变换,所以任意两个坐标系之间的变换可以通过一个4*4的矩阵去描述它的平移和旋转

 

ROS中的坐标系管理系统——TF

一个机器人系统中有很多坐标系,怎么来描述任意两个坐标系之间的关系就是一个比较麻烦的事情

TF功能包给我们提供的很重要的功能就是管理坐标系。用这个功能包就可以通过查询的方式告诉我们这两个坐标系之间的关系是什么样的,所有底层的数学计算都封装到里面帮我们完成了,我们就不需要自己去做一遍运算了

TF的意思就是transform坐标变换

 

TF坐标变换如何实现

  • 广播TF变换
  • 监听TF变换

 

只要启动ros master之后,启动TF之后,就会在后台维护一个TF树,所有坐标系都是通过树形结构保存在这个树当中的,想去查询任意两个坐标系之间的变换关系的话直接可以通过树去查询得到

 

举例

 

 

tf树维护坐标关系,tf其实是个topic

 

https://blog.csdn.net/qq_25678319/article/details/88090914

 

 

turtlesim小乌龟跟随实例

两个小海龟,两个海龟之间会一直保持位置一致。控制一只海龟移动,另一只会自动跟随,同步去做运动。

这就是通过坐标变换实现的

 

首先安装一个功能包

sudo apt-get install ros-melodic-turtle-tf 

 

roslaunch是用来启动一个在ROS当中的launch文件,launch文件大家可以认为是一个脚本,可以把很多节点的启动都写进去

roslaunch turtle_tf turtle_tf_demo.launch

第二只海龟产生之后,我们没有任何操作,他就已经在跟第一只海龟重叠到一起了

 

启动键盘控制节点

rosrun turtlesim turtle_teleop_key

我们控制海龟动,另一只海龟就会跟着动。他会抄近道

 

运行view_frames工具

rosrun tf view_frames

这是tf功能包里面给我们提供的工具,可以可视化的看到系统当中的所有tf的关系

他要稍微监听5s的时间,把5s之内所有坐标系之间的关系都给保存下来。然后生成一个pdf

world就是全局坐标系,表示整个海龟仿真器的坐标原点,就是左下角的零点

turtle1和turtle2就分别是位于两只海龟上面的坐标系

 

使用rqt_tf_tree

rosrun rqt_tf_tree rqt_tf_tree

这是一个实时工具,观察在ROS上被发布的坐标系树,可用刷新按钮来更新树的内容。

view_frames工具的区别在于:上一个工具连续采样5s获得的树的内容,并存成一个图片;这个工具可以连续的观察树的内容,使用起来更方便。

 

命令行工具 tf_echo

rosrun tf tf_echo turtle1 turtle2

直接帮助我们查询两个坐标系之间的位置关系。这里就是查询turtle1和turtle2之间的位置关系

可以看到数据包含translation和rotation两部分

 

可视化工具 rviz

是一个三维可视化的显示平台

rviz可以做建图,能visualize点云

rosrun rviz rviz -d `rospack find turtle_tf`/rviz/turtle_rviz.rviz

add添加一个TF

 

网格中间的点就是world,左下角就是turtle1和turtle2

现在用键盘控制乌龟动一下

可以看到坐标上的点就跟着不停动

 

 

turtle2和turtle1的位置关系可以通过两者相对于world之间的关系来得到

 

 

相关文章:

  • yolov3入门实战
  • Weka
  • Weka(一)——Data preparation in Weka(Iris鸢尾花数据集)
  • 数据挖掘与数据分析(一)—— 数据仓库(数据集市、ETL过程)
  • 数据挖掘与数据分析(二)—— 探索性数据分析EDA(单因子与对比分析) 可视化 (1) —— 集中趋势 离中趋势 数据分布(偏态系数峰态系数正态分布三大分布)抽样理论(误差精度)
  • 二叉排序树BST(二叉查找树) 二叉平衡树AVL 红黑树
  • B树 B+树
  • Node-Red(一)——简介与安装
  • 数据挖掘与数据分析(四)—— 预处理理论(1) —— 特征工程 Feature Engineering
  • representation learning 表示学习/表征学习
  • Darknet 轻量级深度学习训练框架
  • cfg文件
  • 双向循环神经网络(BiRNN)MNIST手写体识别(tensorflow)
  • 双向循环神经网络(BiRNN)
  • MIPS
  • 《剑指offer》分解让复杂问题更简单
  • 【Redis学习笔记】2018-06-28 redis命令源码学习1
  • Docker 1.12实践:Docker Service、Stack与分布式应用捆绑包
  • go语言学习初探(一)
  • JS变量作用域
  • MQ框架的比较
  • SSH 免密登录
  • Vue.js源码(2):初探List Rendering
  • Vue学习第二天
  • windows-nginx-https-本地配置
  • 深度学习在携程攻略社区的应用
  • 突破自己的技术思维
  • 小程序、APP Store 需要的 SSL 证书是个什么东西?
  • 一个项目push到多个远程Git仓库
  • AI又要和人类“对打”,Deepmind宣布《星战Ⅱ》即将开始 ...
  • ​configparser --- 配置文件解析器​
  • ​LeetCode解法汇总1410. HTML 实体解析器
  • ​马来语翻译中文去哪比较好?
  • #1015 : KMP算法
  • (Java实习生)每日10道面试题打卡——JavaWeb篇
  • (分享)自己整理的一些简单awk实用语句
  • (含react-draggable库以及相关BUG如何解决)固定在左上方某盒子内(如按钮)添加可拖动功能,使用react hook语法实现
  • (九)One-Wire总线-DS18B20
  • (十六)一篇文章学会Java的常用API
  • (算法)前K大的和
  • (算法)求1到1亿间的质数或素数
  • (转)程序员疫苗:代码注入
  • (转)全文检索技术学习(三)——Lucene支持中文分词
  • (转载)Linux网络编程入门
  • .apk文件,IIS不支持下载解决
  • .htaccess 强制https 单独排除某个目录
  • .NET C# 使用 SetWindowsHookEx 监听鼠标或键盘消息以及此方法的坑
  • .NET CORE使用Redis分布式锁续命(续期)问题
  • .NET 的静态构造函数是否线程安全?答案是肯定的!
  • .Net 访问电子邮箱-LumiSoft.Net,好用
  • .NET/C# 编译期间能确定的相同字符串,在运行期间是相同的实例
  • .NET企业级应用架构设计系列之结尾篇
  • ?php echo ?,?php echo Hello world!;?
  • [1159]adb判断手机屏幕状态并点亮屏幕
  • [145] 二叉树的后序遍历 js