热门标签 | 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坐标系的变换的乘积可以求得两个坐标系相对的变换关系。
在这里插入图片描述


推荐阅读
  • 安装mysqlclient失败解决办法
    本文介绍了在MAC系统中,使用django使用mysql数据库报错的解决办法。通过源码安装mysqlclient或将mysql_config添加到系统环境变量中,可以解决安装mysqlclient失败的问题。同时,还介绍了查看mysql安装路径和使配置文件生效的方法。 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 树莓派语音控制的配置方法和步骤
    本文介绍了在树莓派上实现语音控制的配置方法和步骤。首先感谢博主Eoman的帮助,文章参考了他的内容。树莓派的配置需要通过sudo raspi-config进行,然后使用Eoman的控制方法,即安装wiringPi库并编写控制引脚的脚本。具体的安装步骤和脚本编写方法在文章中详细介绍。 ... [详细]
  • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
    本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • ZSI.generate.Wsdl2PythonError: unsupported local simpleType restriction ... [详细]
  • 本文介绍了在mac环境下使用nginx配置nodejs代理服务器的步骤,包括安装nginx、创建目录和文件、配置代理的域名和日志记录等。 ... [详细]
  • 本文介绍了如何使用C#制作Java+Mysql+Tomcat环境安装程序,实现一键式安装。通过将JDK、Mysql、Tomcat三者制作成一个安装包,解决了客户在安装软件时的复杂配置和繁琐问题,便于管理软件版本和系统集成。具体步骤包括配置JDK环境变量和安装Mysql服务,其中使用了MySQL Server 5.5社区版和my.ini文件。安装方法为通过命令行将目录转到mysql的bin目录下,执行mysqld --install MySQL5命令。 ... [详细]
  • 本文介绍了Windows操作系统的版本及其特点,包括Windows 7系统的6个版本:Starter、Home Basic、Home Premium、Professional、Enterprise、Ultimate。Windows操作系统是微软公司研发的一套操作系统,具有人机操作性优异、支持的应用软件较多、对硬件支持良好等优点。Windows 7 Starter是功能最少的版本,缺乏Aero特效功能,没有64位支持,最初设计不能同时运行三个以上应用程序。 ... [详细]
  • Imtryingtofigureoutawaytogeneratetorrentfilesfromabucket,usingtheAWSSDKforGo.我正 ... [详细]
  • 程序安装包制作工具 v1.0官方版免费下载
    本文介绍了一款名为程序安装包制作工具 v1.0官方版的软件,该软件可以用于应用程序的安装打包,只需几步就能完成整个安装向导程序的制作。你可以将编译好的应用程序和相关文件打包生成一个可执行的安装文件进行发布。该软件免费下载,下载网址为http://www.xiazai.com/wins6890。 ... [详细]
  • Android系统源码分析Zygote和SystemServer启动过程详解
    本文详细解析了Android系统源码中Zygote和SystemServer的启动过程。首先介绍了系统framework层启动的内容,帮助理解四大组件的启动和管理过程。接着介绍了AMS、PMS等系统服务的作用和调用方式。然后详细分析了Zygote的启动过程,解释了Zygote在Android启动过程中的决定作用。最后通过时序图展示了整个过程。 ... [详细]
  • EzPP 0.2发布,新增YAML布局渲染功能
    EzPP发布了0.2.1版本,新增了YAML布局渲染功能,可以将YAML文件渲染为图片,并且可以复用YAML作为模版,通过传递不同参数生成不同的图片。这个功能可以用于绘制Logo、封面或其他图片,让用户不需要安装或卸载Photoshop。文章还提供了一个入门例子,介绍了使用ezpp的基本渲染方法,以及如何使用canvas、text类元素、自定义字体等。 ... [详细]
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社区 版权所有