ROS学习-TF树

本文介绍了如何在ROS中使用C++代码获取TF树中两个坐标系的相对位姿,并展示了TF程序包的相关命令行工具,如tf_monitor、tfview_frames和rqt_tf_tree,用于监控和可视化TF树结构。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 代码获取 tf 树相对位姿

// 获取tf树中两个坐标系的相对位姿(末端相对于基座标)并转为topic
#include <iostream>
using namespace std;
 
int main(int argc, char** argv)
{
    ros::init(argc, argv, "Franka_tool_pose_pub");
    ros::NodeHandle nh;
    ROS_INFO("create node successfully!");
 
    ros::Publisher tool_pose_pub = nh.advertise<geometry_msgs::PoseStamped>("/franka_tool_pose", 1);
 
    tf2_ros::Buffer tfBuffer;
    tf2_ros::TransformListener tfListener(tfBuffer);
 
    ros::Rate rate(30.0);
 
    bool tf_error=false;
 
    while (nh.ok()){
        geometry_msgs::TransformStamped transformStamped;
        try{
            transformStamped = tfBuffer.lookupTransform("panda_link0", "panda_link8", ros::Time(0), ros::Duration(1.0));
        }
        catch (tf2::TransformException &ex) {
            ROS_WARN("%s",ex.what());
            tf_error=true;
        }
 
        if (!tf_error) {
            ROS_INFO_STREAM_ONCE("tf no error....");
            
            geometry_msgs::PoseStamped msg;
            msg.header.stamp = transformStamped.header.stamp;
            msg.pose.position.x = transformStamped.transform.translation.x;
            msg.pose.position.y = transformStamped.transform.translation.y;
            msg.pose.position.z = transformStamped.transform.translation.z;
 
            msg.pose.orientation.x =transformStamped.transform.rotation.x;
            msg.pose.orientation.y =transformStamped.transform.rotation.y;
            msg.pose.orientation.z =transformStamped.transform.rotation.z;
            msg.pose.orientation.w =transformStamped.transform.rotation.w;
 
            tool_pose_pub.publish(msg);
        }
        ros::spinOnce();
        rate.sleep();
    }
    return 0;
}

2. TF程序包相关的命令行使用

  • 用命令行显示当前所有frame的方法:

    rosrun tf tf_monitor #显示当前坐标变换树的信息,主要是名称和实时的时间延时
    
    rostopic echo /tf #以TransformStamped消息类型的数组显示所有父子frame的位姿转换关系
    

    以上主要是数据显示

  • 据当前的tf树创建一个pdf图:

     $ rosrun tf view_frames
    

    这个工具首先订阅/tf,订阅5秒钟,根据这段时间接受到的tf信息,绘制成一张tf tree,然后创建成一个pdf图。
    将会以图形的形式显示出TF树中所有的frame和两个frame 的父子关系及其Broadcaster、Average rate等

  • 查看当前的tf树:

     $ rosrun rqt_tf_tree rqt_tf_tree
    

    该命令同样是查询tf tree的,但是与第一个命令的区别是该命令是动态的查询当前的tf tree,当前的任何变化都能当即看到,例如何时断开何时连接,捕捉到这些然后通过rqt插件显示出来。

  • 查看两个frame之间的变换关系:

     $ rosrun tf tf_echo[source_frame][target_frame]
    

    将会持续的显示源坐标系和目标坐标系的位姿变换关系。
    该指令可以查询任意两个frame的转换关系。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lx-summer

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值