热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【ROS学习笔记】13.ROS中的坐标管理系统

文章目录1机器人中的坐标变换2TF功能包TF坐标变换如何实现?TF的一个小案例3小程序:小海龟跟随实验打开小程序查看当前的TF树坐标相对位置关系可视化1


文章目录

    • 1 机器人中的坐标变换
    • 2 TF功能包
      • TF坐标变换如何实现?
      • TF的一个小案例
    • 3 小程序:小海龟跟随实验
      • 打开小程序
      • 查看当前的TF树
      • 坐标相对位置关系可视化1(tf_echo)
      • 坐标相对位置关系可视化2(rviz)



本节学习ROS中的坐标管理系统。

(部分图摘自:b站【古月居】古月·ROS入门21讲)


1 机器人中的坐标变换

机器人运动学的核心,描述任意两个坐标系之中任意两个向量之间的变换,可以用一个4×4的变换矩阵(Transformation Matrices)来描述它的平移和旋转变化。
变换矩阵中有包括旋转矩阵(Rotation Matrix)的信息的位置移动(Translation)的信息。
相关教程推荐B站的机器人学入门课程:台大机器人学之运动学——林沛群。一步步手动进行矩阵的推导计算,非常易懂,超级推荐。
在这里插入图片描述


2 TF功能包

一个机器人中,可以有很多坐标系,我们需要去描述任意两个坐标系之间的关系,涉及到大量的矩阵运算。我们可以用ROS中的TF(Transform)功能包来解决问题。
在这里插入图片描述

TF功能包的特点:默认能记录10秒内机器人所有坐标系之间的位置关系。

能干什么呢?举个栗子:


  • 知道5秒钟之前,机器人头部坐标系相对于全局坐标系的关系是什么样的?
  • 机器人夹取的物体相对于机器人中心坐标系的位置在哪里?
  • 机器人中心坐标系相对于全局坐标系的位置在哪里?

TF坐标变换如何实现?

实现机制:


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

这有别于之前topic和service的机制,在ROS Master启动后,启动TF后,会在后台维护一个名为“TF树(TF Tree)”的数据结构。所有的坐标系都是通过树形结构保存在这个树结构当中,当有结点想查询某两个坐标系之间的关系的话,直接可以查询这个TF Tree来得到。


TF的一个小案例

在这里插入图片描述
比如这辆带激光雷达的车,车体是以base_link为坐标系的,激光雷达是以base_laser为坐标系的,可以看到base_laser是base_link向x轴平移了0.1m,向z轴平移了0.2m,y轴没有平移。
当base_laser测到离墙面的距离为0.3m,即向量(0.3,0,0)时,就可以根据图下方的TF tree进行坐标系之间的数据变换的运算,从而算出base_link的相对与测距点的相对向量(0.4,0,0.2)。


3 小程序:小海龟跟随实验

我们通过一个小程序来实现一个小海龟跟随另一个小海龟,并通过可视化的方法以理解坐标系的变换。
在这里插入图片描述
在这个小程序中,我们控制一只海龟移动,另一只会实时跟随我们直到重合。
在noetic版本的ROS中,预装了这个小程序,不过直接运行可能会报错。

报错的原因可能是Python解释器的指向问题。我们先打开终端输入:

cd /usr/bin/
sudo rm -r python
sudo cp python3 python

(第二行 rm -r 找不到文件的忽略即可)
/usr/bin/下没有名为python文件,我们将python3指向python就行了(个人理解)。


打开小程序

接着我们正式打开小程序:

roslaunch turtle_tf turtle_tf_demo.launch

这里直接使用的roslauch,会在后面小节讲到。
打开后就会有两只海龟,我们直接用键盘操作一只海龟前进,另一只会跟过来。
在这里插入图片描述


查看当前的TF树

我们来查看当前的TF tree,查看一下坐标系之间的关系。
输入:

rosrun tf view_frames

BUT,noetic直接运行可能会报错,无法生成pdf文件:
在这里插入图片描述
我们先打开它指向的那个view_frames文件的修改权限:

sudo chmod a+w /opt/ros/noetic/lib/tf/view_frames

然后打开,88行后加上这句vstr = str(vstr)
在这里插入图片描述
再运行:

rosrun tf view_frames

可在用户文件夹下生成一个pdf文件:
可以看到有3个坐标系,除了两个海龟自身的坐标系,还有个world坐标系。
这颗TF树展示了当前的坐标间的位置关系,turtle1和turtle2是相对world坐标系变化的
在这里插入图片描述


坐标相对位置关系可视化1(tf_echo)

比如我们想看两个海龟的相对变换关系,直接输入:

rosrun tf tf_echo turtle1 turtle2

在这里插入图片描述我们接着操控海龟1移动,相对关系就发生了变化:

在这里插入图片描述这里包含了Translation和Rotation的信息。
Translation表示了相对位移的信息(它其实是一个3×1的向量)。
Rotation表示了旋转矩阵的信息(一个3×3的矩阵,但自由度为3),他又有两种表示方式:
RPY表示法(pitch俯仰角、yaw偏航角、roll翻滚角)
四元数法(Quaternion)
都可以表示旋转矩阵的信息,具体需要学习前面提到的机器人运动学基础理解。

Rotation和Translation合起来可以构成变换矩阵(4×4,见本节第一部分的图)。
我这里再放一幅Rotation和Translation包含所有的变换信息的图方便理解。
在这里插入图片描述


坐标相对位置关系可视化2(rviz)

rviz工具会在后面详述,先体验一下,输入:

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

Fixed Frame选 world。add选TF,可以看到3个坐标系了。
在这里插入图片描述
控制海龟运动,坐标系发生改变,然后坐标系turtle2原点会靠近turtle1原点:
在这里插入图片描述
下图中左边变换矩阵的运算,其实就是坐标移动的本质。两个坐标系相对于world坐标系的变换的乘积可以求得两个坐标系相对的变换关系。
在这里插入图片描述


推荐阅读
  • 2023年京东Android面试真题解析与经验分享
    本文由一位拥有6年Android开发经验的工程师撰写,详细解析了京东面试中常见的技术问题。涵盖引用传递、Handler机制、ListView优化、多线程控制及ANR处理等核心知识点。 ... [详细]
  • Python自动化处理:从Word文档提取内容并生成带水印的PDF
    本文介绍如何利用Python实现从特定网站下载Word文档,去除水印并添加自定义水印,最终将文档转换为PDF格式。该方法适用于批量处理和自动化需求。 ... [详细]
  • 基因组浏览器中的Wig格式解析
    本文详细介绍了Wiggle(Wig)格式及其在基因组浏览器中的应用,涵盖variableStep和fixedStep两种主要格式的特点、适用场景及具体使用方法。同时,还提供了关于数据值和自定义参数的补充信息。 ... [详细]
  • 深入了解 Windows 窗体中的 SplitContainer 控件
    SplitContainer 控件是 Windows 窗体中的一种复合控件,由两个可调整大小的面板和一个可移动的拆分条组成。本文将详细介绍其功能、属性以及如何通过编程方式创建复杂的用户界面。 ... [详细]
  • 本文详细介绍了如何在 Windows 环境下使用 node-gyp 工具进行 Node.js 本地扩展的编译和配置,涵盖从环境搭建到代码实现的全过程。 ... [详细]
  • 在创建新的Android项目时,您可能会遇到aapt错误,提示无法打开libstdc++.so.6共享对象文件。本文将探讨该问题的原因及解决方案。 ... [详细]
  • 利用决策树预测NBA比赛胜负的Python数据挖掘实践
    本文通过使用2013-14赛季NBA赛程与结果数据集以及2013年NBA排名数据,结合《Python数据挖掘入门与实践》一书中的方法,展示如何应用决策树算法进行比赛胜负预测。我们将详细讲解数据预处理、特征工程及模型评估等关键步骤。 ... [详细]
  • 目录一、salt-job管理#job存放数据目录#缓存时间设置#Others二、returns模块配置job数据入库#配置returns返回值信息#mysql安全设置#创建模块相关 ... [详细]
  • 本文详细记录了在基于Debian的Deepin 20操作系统上安装MySQL 5.7的具体步骤,包括软件包的选择、依赖项的处理及远程访问权限的配置。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • PyCharm下载与安装指南
    本文详细介绍如何从官方渠道下载并安装PyCharm集成开发环境(IDE),涵盖Windows、macOS和Linux系统,同时提供详细的安装步骤及配置建议。 ... [详细]
  • 导航栏样式练习:项目实例解析
    本文详细介绍了如何创建一个具有动态效果的导航栏,包括HTML、CSS和JavaScript代码的实现,并附有详细的说明和效果图。 ... [详细]
  • 本文介绍如何使用 Python 提取和替换 .docx 文件中的图片。.docx 文件本质上是压缩文件,通过解压可以访问其中的图片资源。此外,我们还将探讨使用第三方库 docx 的方法来简化这一过程。 ... [详细]
  • MySQL索引详解与优化
    本文深入探讨了MySQL中的索引机制,包括索引的基本概念、优势与劣势、分类及其实现原理,并详细介绍了索引的使用场景和优化技巧。通过具体示例,帮助读者更好地理解和应用索引以提升数据库性能。 ... [详细]
  • 毕业设计:基于机器学习与深度学习的垃圾邮件(短信)分类算法实现
    本文详细介绍了如何使用机器学习和深度学习技术对垃圾邮件和短信进行分类。内容涵盖从数据集介绍、预处理、特征提取到模型训练与评估的完整流程,并提供了具体的代码示例和实验结果。 ... [详细]
author-avatar
先人掌
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有