• ROS1 学习11 坐标系tf 管理系统 简介及demo示例


    坐标系是我们非常熟悉的一个概念,也是机器人学中的重要基础,在一个完整的机器人系统中,会存在很多坐标系,这些坐标系之间的位置关系该如何管理?
    ROS给我们提供了一个坐标系的管理神器——TF。
    在这里插入图片描述
    比如在机械臂形态的机器人中,机器人安装的位置叫做基坐标系Base Frame,机器人安装位置在外部环境下的参考系叫做世界坐标系World Frame,机器人末端夹爪的位置叫做工具坐标系,外部被操作物体的位置叫做工件坐标系,在机械臂抓取外部物体的过程中,这些坐标系之间的关系也在跟随变化。

    一、机器人中的坐标变换

    机器人运动学的核心,描述任意两个坐标系之中任意两个向量之间的变换,可以用一个4×4的变换矩阵(Transformation Matrices)来描述它的平移和旋转变化。
    变换矩阵中有包括旋转矩阵(Rotation Matrix)的信息和位置移动(Translation)的信息

    在这里插入图片描述

    二、TF功能包

    一个机器人系统中,通常会涉及到很多坐标系的运算,这免不了大量的矩阵运算。我们可以使用ROS中的TF(Transform)功能包来解决问题。

    在这里插入图片描述

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

    在这里插入图片描述

    TF坐标变化如何实现?

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

    在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.1 启动实验
    在进行实验之前,由于noetic的版本是预制了这个程序的,但是直接运行会报错,原因是python解释器的指向问题,我们先打开终端输入以下命令:

    cd /usr/bin/
    sudo rm -r python #出现rm -r 找不到文件的忽略即可
    sudo cp python3 python
    
    • 1
    • 2
    • 3

    执行完后我们就可以运行这个程序了:

    roslaunch turtle_tf turtle_tf_demo.launch
    
    • 1

    启动键盘控制

     rosrun turtlesim turtle_teleop_key
    
    • 1

    打开后我们就会生成两只小乌龟,我们通过键盘控制其中一只小乌龟,另一只就会自动跟随。

    在这里插入图片描述

    在这里插入图片描述
    3.2 查看当前的TF树

    我们可以查看当前的TF数,查看坐标系之间的关系:

    rosrun tf view_frames
    
    
    • 1
    • 2

    但是直接运行会报错,无法生成pdf文件

    在这里插入图片描述

    我们打开如图所示的报错文件夹,加上如图所示的这句话:

    在这里插入图片描述

    再运行:

    rosrun tf view_frames
    
    • 1

    成功生成了pdf文件:

    在这里插入图片描述

    我们可以看到这棵树展示了当前坐标系之间的位置关系,turtle1和turtle2是相对于world坐标系变化的。

    3.3 坐标相对位置可视化
    3.3.1 tf_echo
    我们如果想看两只小海龟的相对变换关系,可输入:

    rosrun tf tf_echo turtle1 turtle2
    
    • 1

    在这里插入图片描述
    我们如果操控小海龟移动,则位置会发生变化:

    在这里插入图片描述
    3.3.2 rviz
    我们可以打开rviz工具:

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

    打开界面之后,在上面的Fixed Frame选择world
    在左下角的add添加TF。就可以看到三个坐标系了。

    在这里插入图片描述

    最后,控制小海龟运动,坐标系发生改变,然后坐标系turtle2原点会靠近turtle1原点

    在这里插入图片描述
    下图中左边变换矩阵的运算,其实就是坐标移动的本质。两个坐标系相对于world坐标系的变换的乘积可以求得两个坐标系相对的变换关系。

    在这里插入图片描述

    rviz的中心点位置对应小乌龟的左下 0.0 点
    在这里插入图片描述

    有一个简单的认知概念吧,上面大部分的来自于这个文章,文中有个控制小乌龟的怎么控制走动起来的没说明,我做下补充,
    https://blog.csdn.net/weixin_56197703/article/details/127098905

  • 相关阅读:
    Linux 指令心法(十六)`mtd_debug erase` 擦除MTD(Memory Technology Device)设备
    【记录】go语言编程规范梳理总结
    单元测试与集成测试:软件质量的双重保障
    基于Python和mysql开发的智慧校园答题考试系统(源码+数据库+程序配置说明书+程序使用说明书)
    初识Spring
    java毕业设计乒乓球俱乐部管理源码+lw文档+mybatis+系统+mysql数据库+调试
    独立站建站实操:斗篷使用、AB收款【FP商家不能错过】
    Android之App跳转其他软件
    KGAT推荐系统
    社区新知 | MindSpore社区和Pair团队携手共进,高效节约医生手动勾画70%的时间成本
  • 原文地址:https://blog.csdn.net/hai411741962/article/details/134374879