三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

《ROS1学习笔记10——坐标管理系统》

《ROS1学习笔记10——坐标管理系统》

文章目录

  • 1、机器人坐标变换
  • 2、TF功能包
  • 3、TF工具
    • 3.1、安装工具包
    • 3.2、运行脚本
    • 3.3、生成TF 树的框架图
    • 3.4、打印坐标系变换关系
    • 3.5、可视化工具

1、机器人坐标变换

2、TF功能包

1、TF功能包能干什么?

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

2、TF坐标变换如何实现

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

3、TF工具

3.1、安装工具包

首先输入下列命令安装工具包,我这里之前安装过了,蓑衣提示为是最新版本。

sudo apt-get install ros-noetic-turtle-tf2

3.2、运行脚本

在ros包中提供了一个关于TF演示的脚本

我们这里输入

roslaunch turtle_tf2 turtle_tf2_demo.launch

就会出现两个海龟跟随的画面

(我最开始运行该脚本时,报了下面的错误:

Use arrow keys to move the turtle. ‘q’ to quit.
process[turtle2_tf_broadcaster-5]: started with pid [7483]
/usr/bin/env: “python”: 没有那个文件或目录 /usr/bin/env: “python”: 没有那个文件或目录
process[turtle_pointer-6]: started with pid [7486]
[turtle1_tf_broadcaster-4] process has died [pid 7478, exit code 127,
cmd /opt/ros/noetic/lib/turtle_tf/turtle_tf_broadcaster.py
__name:=turtle1_tf_broadcaster __log:=/home/yang/.ros/log/aa10d01c-b3ad-11f0-a144-77641f2868bc/turtle1_tf_broadcaster-4.log].
log file:
/home/yang/.ros/log/aa10d01c-b3ad-11f0-a144-77641f2868bc/turtle1_tf_broadcaster-4*.log
[turtle2_tf_broadcaster-5] process has died [pid 7483, exit code 127,
cmd /opt/ros/noetic/lib/turtle_tf/turtle_tf_broadcaster.py
__name:=turtle2_tf_broadcaster __log:=/home/yang/.ros/log/aa10d01c-b3ad-11f0-a144-77641f2868bc/turtle2_tf_broadcaster-5.log].
log file:
/home/yang/.ros/log/aa10d01c-b3ad-11f0-a144-77641f2868bc/turtle2_tf_broadcaster-5*.log
[turtle_pointer-6] process has died [pid 7486, exit code 127, cmd
/opt/ros/noetic/lib/turtle_tf/turtle_tf_listener.py
__name:=turtle_pointer __log:=/home/yang/.ros/log/aa10d01c-b3ad-11f0-a144-77641f2868bc/turtle_pointer-6.log].
log file:
/home/yang/.ros/log/aa10d01c-b3ad-11f0-a144-77641f2868bc/turtle_pointer-6*.log

然后询问AI:ROS 某些 Python 脚本的第一行通常是 #!/usr/bin/env python,它会寻找系统中的 python 命令。但现代 Linux 系统默认可能只安装 Python 3(命令为 python3),没有 python 这个命令,导致脚本无法执行。
解决方法:
sudo ln -s /usr/bin/python3 /usr/bin/python

继续回到这个脚本,当你鼠标放在终端上,控制上下左右键可以控制一只海龟进行移动,并且零一只海龟会跟随,这里就是用到了TF坐标。

3.3、生成TF 树的框架图

打开一个新的终端,输入

rosrun tf view_frames

监听5s钟,把5s内所有坐标关系都保存下来
并输出一个pdf,默认保存在终端目录下

打开frames.pdf

world时全局坐标系
turtle1和turtle2是两个海龟的坐标系

3.4、打印坐标系变换关系

rosrun tf tf_echo turtle1 turtle2

Translation(平移):turtle2 原点相对于 turtle1 原点的位置,单位为米(m)。格式:[x, y, z],分别对应 x 轴、y 轴、z 轴方向的偏移。
Rotation(旋转):turtle2 坐标系相对于 turtle1 坐标系的姿态,有三种表示方式:
Quaternion(四元数):[x, y, z, w],ROS 中默认的旋转表示方式,避免万向锁问题。
RPY(欧拉角):分别对应 Roll(横滚)、Pitch(俯仰)、Yaw(偏航),分为弧度(radian)和角度(degree)两种单位。

3.5、可视化工具

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

进入可视化页面工具后,按以下操作新建一个TF坐标系

此时,再把鼠标放到刚运行脚本的终端上,移动小海龟,你会发现页面里的坐标图标也在移动,黄线的左边两个坐标系代表两个海龟,黄线右边的处在地图中间的是world坐标。

← 返回列表