1.tf(transform)
当机器人的"眼睛"获取一组数据,关于物体的坐标方位,但是相对于机器人手臂来说,这个坐标只是相对于机器人头部的视觉传感器,并不直接适用于机器人手臂执行,那么物体相对于头部和手臂之间的坐标转换,就是tf。
坐标变换包括了位置和姿态两个方面的变换,ROS中的tf是一个可以让用户随时记录多个坐标系的软件包。
tf本质是树状的数据结构,所以我们通常称之为"tf tree",维护各个坐标系之间的关系,就要靠着tf tree来处理。
2.小海龟tf tree可视化
控制第一只小海龟运动,第二只小海龟通过坐标变换跟随第一只小海龟运动
安装示例功能包
sudo apt-get install ros-melodic-turtle-tf
启动节点
roslaunch turtle_tf turtle_tf_demo.launch
运行键盘控制节点,控制第一只小海龟运动
rosrun turtlesim turtle_teleop_key
查看tf tree
图中每一个圆圈代表一个frame,即一个坐标系,对应着机器人上的一个link,任意的两个frame之间都必须是联通的,如果出现某一环节的断裂,就会引发系统报错。
下图中一共有三个坐标系,world坐标系表示仿真器坐标原点,左下角零点,不会变化;turtle1和turtle2是两个海龟的坐标系,相对于world不断变化,它们二者的相对位置也是不断变化的。通过坐标变换实现跟随,即两个坐标系重叠。
rosrun tf view_frames
3.查询坐标系的关系
用tf_echo
查询tf tree
中任意两个坐标系之间的位置关系。
rosrun tf tf_echo turtle1 turtle2
输出信息包含两部分:平移和旋转
旋转通过三种方式描述:
- 四元数
- RPY俯仰偏角(绕X、Y、Z轴的旋转)通过弧度单位来描述
- RPY俯仰偏角(绕X、Y、Z轴的旋转)通过角度单位来描述
由于是平面,只有绕Z轴旋转有值
4.rviz可视化
rosrun rviz rviz -d 'rospack find turtle_tf' /rviz/turtle_rviz.rviz
在rviz仿真界面中,将fixed frame改成world,点击左下角add TF
移动小海龟可以看到两个坐标系实时变化的情况
底层实现原理:在两个坐标系之间连接一条向量,通过计算模长计算两个坐标系之间的距离,除以时间可以得到移动速度
参考:
- 古月居ROS入门21讲
- 中国大学MOOC—《机器人操作系统入门》课程讲义