坐标变换是机器人系统中常用的基础功能,ROS中的坐标变换系统由TF功能包维护。一个机器人系统通常有很多三维坐标系,而且会随时间的推移发生变化,如世界坐标系(World Frame)、基坐标系(Base Frame)、机械爪坐标系(Gripper Frame)、机器人头部坐标系(Head Frame)等。而TF功能包则可以让用户随时间跟踪多个坐标系,以时间为轴跟踪这些坐标系(默认10s以内)。
TF功能包的作用?
5秒钟之前,机器人头部坐标系相对于全局坐标系的关系是什么样的?
机器人夹取的物体相对于机器人中心坐标系的位置在哪里?
机器人中心坐标系相对于全局坐标系的位置在哪里?
TF如何使用?
监听TF变换
广播TF变换
TF工具:
tf_monitor 打印TF树中所有坐标系的发布状态,也可以通过输入参数来查看指定坐标系之间的发布状态
查看TF树中所有坐标系的发布状态
$ tf_monitor
查看指定坐标系之间的发布状态
$ tf_monitor <source_frame> <target_frame>
tf_echo 查看指定坐标系之间的变换关系
$ tf_echo <source_frame> <target_frame>
static_transform_publisher 发布两个坐标系之间的静态坐标变换,这两个坐标系不发生相对位置变化,在命令中需要设置坐标的偏移参数和旋转参数,偏移参数都是使用相对于x、y、z三轴的坐标偏移;而旋转参数在第一种命令格式中是使用以弧度为单位的yaw/pitch/roll角度,在第二种命令格式中是使用四元数表达旋转角度。发布频率以ms为单位。
$ static_transform_publisher x y z yaw pitch roll frame_id child_frame_id period_in_ms
$ static_transform_publisher x y z qx qy qz qw frame_id child_frame_id period_in_ms
view_frames 是可视化的调试工具,可以生成pdf文件,显示整棵TF树的信息
$ rosrun tf view_frames
下面举个乌龟例程中的TF来说明一下:
1.安装该例程的功能包turtle-tf
$ sudo apt-get install ros-kinetic-turtle-tf
2.通过roslaunch来启动我们要运行的关于海龟跟随的指令
$ roslaunch turtle_tf turtle_tf_demo.launch
3.启动键盘控制节点
$ rosrun turtlesim turtle_teleop_key
4.查看系统中整个tf的数据结构,会生成一个pdf文件在该路径下
$ rosrun tf view_frames
5.使用tf_echo工具可以在TF工具树中查找乌龟坐标系之间的变换关系
$ rosrun tf tf_echo turtle1 turtle2
6.可以通过rviz的图形界面更加形象的看到这三者之间的坐标关系
$ rosrun rviz rviz -d `rospack find turtle_tf`/rviz/turtle_rviz.rviz
如何实现一个tf广播器
定义TF广播器(TransformBroadcaster)
创建坐标变换值
发布坐标变换(sendTransform)
如何实现一个tf监听器
定义TF监听器(TransformListener)
查找坐标变换(waitForTransform、lookupTransform)