ROS中的TF坐标变换

        坐标变换是机器人系统中常用的基础功能,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  

        tf_echo        查看指定坐标系之间的变换关系

$ tf_echo  

        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)

你可能感兴趣的:(ros1,机器人)