ROS中使用TF的广播与监听

         在使用ROS下的TF工具包进行坐标变换,我们需要对各个坐标系进行广播和监听。网上有很多的例程,这里使用的也是常用的例程,不过一般书籍和网上没有对程序中的内容进行详细地解释,这里对其进行详细地解释说明。

TF广播器

        我们创建一个发布小乌龟坐标与世界坐标系TF变换的节点,其代码具体内容如下(记得在CMakeList文件加上依赖项):

#include <ros/ros.h>
#include <tf/transform_broadcaster.h>
#include <turtlesim/Pose.h>

std::string turtle_name;

void poseCallback(const turtlesim::PoseConstPtr& msg)
{
     //TF广播器 
     static tf::TransformBroadcaster br;
     
     //根据乌龟当前的位姿。设置相对于世界坐标系的坐标变换
     tf::Transform transform;
     transform.setOrigin(tf::Vector3(msg->x,msg->y,0.0));//设置平移变换
     tf::Quaternion q;
     q.setRPY(0,0,msg->theta);
     transform.setRotation(q);//设置角度变换

     //发布坐标变换
     br.sendTransform(tf::StampedTransform(transform,ros::Time::now(),"world",turtle_name));
}



int main(int argc,char** argv)
{
    ros::init(argc, argv, "my_tf_broadcaster");
    if(argc!=2)
    {
        ROS_ERROR("need turtle name as argument");
        return -1;
    }
    turtle_name=argv[1];

    ros::NodeHandle node;
    ros::Subscriber sub=node.subscribe(turtle_name+"/pose",10,&poseCallback);

    ros::spin();

    return 0;
}

       先从主函数分析,首先常规操作,初始化节点,判断命令行中是否有出现坐标系的输入,若没有,报错,生成节点句柄,定义一个subscriber,订阅的是小乌龟的pose消息,循环等待启动回调函数。

       回调函数:先定义一个tf广播器,定义一个TF中坐标变换的类型,将订阅到的pose中的相对于世界坐标系下的位置和旋转角度对transform进行设置,最后将坐标变换,当前时间,源坐标系和目标坐标系等信息进行广播、插入TF树中。

       我们可以看出该广播函数只需知道小乌龟的pose,就能够将世界坐标系相对于小乌龟坐标系的坐标变换进行广播。

TF监听

        当TF

  • 8
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
ROS(Robot Operating System)是一款用于机器人开发的开源软件平台,它提供了一些常用的功能模块和工具,如传感器数据处理、运动控制、导航、定位等。其TF(Transform)是ROS非常重要的一个模块,主要用于机器人坐标系的变换和坐标系之间的关系。随着ROS的不断发展,TF2被引入到ROS,取代了原来的TF模块。本文将介绍ROS系统TFTF2的相关知识。 1. TF TFROS的一个模块,主要用于机器人坐标系的变换和坐标系之间的关系。TF可以帮助我们处理机器人在不同坐标系下的运动和感知,为机器人控制和导航等任务提供支持。TF的主要功能包括: 1)管理坐标系之间的关系:TF可以帮助我们管理机器人不同坐标系之间的关系,包括父子关系、坐标系之间的相对位置和姿态等。 2)发布变换:TF可以将一个坐标系的变换发布到ROS系统,供其他节点使用。 3)监听变换:TF可以监听一个坐标系的变换,当变换发生变化时,TF会自动更新坐标系之间的关系。 2. TF2 TF2是ROSTF模块的升级版,它主要解决了TF模块存在的一些问题,并且提供了更加灵活和高效的接口。TF2的主要改进包括: 1)可扩展性:TF2支持动态添加和移除坐标系,可以在运行时动态调整坐标系之间的关系。 2)高效性:TF2使用了一些优化算法,可以在运行时快速计算坐标系之间的变换关系,提高了系统的效率。 3)可靠性:TF2使用了一些错误检测和纠正机制,可以防止坐标系之间出现不一致或错误的关系。 总的来说,TF2相对于TF模块来说更加灵活、高效和可靠,是ROS系统不可或缺的一个模块。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值