7、tf坐标系的广播与监听

一、对tf的了解

一个机器人中通常有多个坐标系,如世界坐标系、基座坐标系、夹具坐标系等等,这些坐标系在tf中构成坐标树,tf通过坐标树维护多个坐标系之间的坐标变换,ros坐标系可以在分布式系统中进行变换,这意味着坐标对所有的节点都是可用的,同时所有订阅tf消息的节点都会缓存一份所有坐标系的变换关系数据,而不需要中心节点来存储。

1、TF功能包能干什么?

五秒钟之前,机器人头部坐标系相对于全局坐标系的关系是什么样的?
机器人夹取的物体相对于机器人中心坐标系的位置在哪里?
机器人中心坐标系相对于全局坐标系的位置在哪里?

2、TF坐标变换如何实现?
(1)广播TF变换
向系统中广播坐标系之间的坐标变换关系。系统中可能存在多个不同部分的TF变换广播,每个广播都可以直接将坐标变换关系插入TF树中,不需要再进行同步。
(2)监听TF变换
接收并缓存系统中发布的所有坐标变换数据,并从中查询所需要的坐标变换关系。

二、编程实现

(1)创建功能包

 cd ~/catkin_ws/src
$ catkin_create_pkg learning_tf roscpp rospy tf turtlesim

(2)如何实现一个TF广播器和监听器

广播器:
定义TF广播器(TransformBroadcaster)
创建坐标变换值;
发布坐标变换(sendTransform)

监听器:
定义TF监听器;(TransformListener)
查找坐标变换;(waitForTransform、 lookupTransform)

(3)创建tf广播器代码(C++)

/**
 * 该例程产生tf数据,并计算、发布turtle2的速度指令
 */

#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,初始化tf数据
	transform.setOrigin( tf::Vector3(msg->x, msg->y, 0.0) );//设置平移变换
	tf::Quaternion q;//定义旋转,或者说设置角度变换
	q.setRPY(0, 0, msg->theta);
	transform.setRotation(q);

	// 广播world与海龟坐标系之间的tf数据
	br.sendTransform(tf::Sta
  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值