极简说明ROS中TF变换的使用

如何在ROS中获取坐标系间的变换关系

在机器人应用中,我们有时难免要将对象的位姿在不同坐标系之间转换,比如在仿真软件Coppeliasim中,我们可以直接指定一个简单的参数实现这一需求。

image-20240728224552694

那么在ROS中呢?虽然不像仿真环境里那么简单直观,但我们可以利用TF坐标变换实现需求。以baxter机器人模型进行说明


查看baxter机器人中模型中有哪些坐标系

首先启动baxter的仿真:roslaunch baxter_gazebo baxter_world.launch

执行以下命令:rosrun rqt_tf_tree rqt_tf_tree

image-20240726152731966

图中各圆框就是各坐标系,如right_upper_shoulder就是一个坐标系的名称


图形化观察baxter的坐标系关系

首先启动baxter的仿真:roslaunch baxter_gazebo baxter_world.launch

然后启动rviz:rosrun rviz rviz

在Displays栏添加TF,如下:

image-20240726160204021

此时我们发现这里坐标系太多了,为了筛选我们要的部分,在TF下的frame中勾选我们需要的部分:

image-20240726160446640

这就是左手的各关节坐标系,当然,只看到坐标系并不直观,为了将坐标系在机器人上对应起来,我们在rviz中显示baxter的模型

  • 关掉这个界面,在终端运行:

    roslaunch baxter_moveit_config baxter_grippers.launch

    image-20240726160933986
  • 和前面一样,添加TF

    image-20240726161209225

    现在就看到各坐标系和机器人的对应关系了,当然,我们可以调整坐标系显示的大小方便观察:

    image-20240726161402834

数值化得到坐标系之间的相对关系

执行命令:rosrun tf tf_echo <target_frame> <source_frame>

输出从 right_upper_shoulder 坐标系到 right_lower_shoulder 坐标系的变换信息

image-20240728225203467

编程得到上述变换信息(使用tf2)

    def translation_test():
        tf_buffer = tf2_ros.Buffer()
        tf_listener = tf2_ros.TransformListener(tf_buffer) 
        transform_msgs = tf_buffer.lookup_transform('right_upper_shoulder', 'right_lower_shoulder', rospy.Time(0), rospy.Duration(1.0))
        print("transform_msgs")
        print(transform_msgs)

输出:

image-20240728223100936

根据这些信息你可以容易得到转换矩阵之类的信息,进而实现自己个性化的需求。


总结

本文从需求出发描述了在ROS中TF变换的作用,如需系统学习可以移步官网:tf2 - ROS Wiki

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值