目录
一、机器人作中的坐标变换
二、海龟案例
一、机器人作中的坐标变换
TF功能包能干什么?
- 五秒钟之前,机器人头部坐标系相对于全局坐标系的关系是什么样子的?
- 机器人夹取的物体i相对于机器人中心坐标系的位置在哪里?
- 机器人中心坐标系相对于全局坐标系的位置在哪里?
- 具有时间属性,默认可以记录十秒钟之内机器人所有的坐标系之间的位置关系。
TF坐标转换如何实现?
- 广播TF变换
- 监听TF变换
例如移动机器人的本体坐标系与雷达坐标系
二、海龟案例
1. 下载工具包(对应20.04版本的Noetic)
sudo apt-get install ros-noetic-tf
2. 运行launch文件
roslaunch turtle_tf turtle_tf_demo.launch
(在这里可能会出现一段红色警告,我们通过下面指令可以消除)
sudo apt install python-is-python3
接下来再重新运行即可。
3. 运行海龟的键盘控制节点
rosrun turtlesim turtle_teleop_key
然后我们运行海龟,发现后面的海龟会一直跟着我们移动的海龟
4. 运行tf工具(第一个工具)
rosrun tf view_frames
可能会出现生成的pdf崩溃,报以下错误
Listening to /tf for 5.0 seconds
Done Listening
b'dot - graphviz version 2.43.0 (0)\n'
Traceback (most recent call last):
File "/opt/ros/noetic/lib/tf/view_frames", line 119, in <module>
generate(dot_graph)
File "/opt/ros/noetic/lib/tf/view_frames", line 89, in generate
m = r.search(vstr)
TypeError: cannot use a string pattern on a bytes-like object
这时我们运行以下指令:
sudo gedit /opt/ros/noetic/lib/tf/view_frames
然后搜索 m = r.search(vstr)
(89行),在这行前面添加 vstr=str(vstr)
即可。
修改后再重新尝试就不会报错。
再次运行会在当前目录下生成PDF文件
当前系统中共有3个坐标系:
- 第一个是world坐标系,world是全局坐标系,表示的是以仿真器的左下角为零点的x轴和y轴的坐标系。
- turtle1和turtle2分别代表两只海龟(坐标系)
还可以通过另一个指令查看两个坐标系之间的关系
例如我们想要查看turtle1和turtle2两个坐标系之间的关系(第二个工具)
rosrun tf tf_echo turtle1 turtle2
上面的数据包括两个部分:
- Translation表示的是平移
- Rotation表示的是旋转
还可以通过Rviz查看两个坐标系之间的关系
rosrun rviz rviz -d `rospack find turtle_tf`/rviz/turtle_rviz.rviz
显示结果如下所示:
中心点是world坐标点, 移动海龟时,相应的坐标系也会发生变化。
坐标系之间的位置关系也可以用下列公式来表示: