tf(Transform Frame)变换

tf是ROS中建立坐标系,并且使用各个坐标间转换关系的一个很好的工具。虽然官网的资料很复杂,但在

一、广播tf

    就是发布你建立的坐标系,步骤如下

   1. 定义一个广播,相当于发布话题时定义一个发布器。       

tf::TransformBroadcaster br;

 2. 定义存放转换信息(平动,转动)的变量 transform  

tf::Transform transform;//这里transform为一个类

3.通过调用类transform的成员函数设置坐标原点

transform.setOrigin( tf::Vector3(msg->x, msg->y, 0.0) );

需要注意:

(1)setOrigin()函数的参数类型需要为tf::Vector3类型

 (2) 假设是需要发布一个子坐标系为小车base_link,父坐标系为 map,那么其中(msg->x, msg->y, 0.0)是指子坐标系base_link的坐标原点在父坐标系map坐标下的坐标

4.定义旋转

tf::Quaternion q;//Quaternion是一个类
q.setRPY(0.0, 0.0, laser_scan->angle_min);//setRPY是类Quaternion的一个成员函数
transform.setRotation(q);

需要注意:

 (1)setRPY()函数的参数为小车base_link在map坐标系下的roll(绕x轴),pitch(绕y轴),yaw(绕z轴),

  问题,我们一般用的是2d坐标系,为什么还会有一个绕z轴旋转的角呢?

 5. 将变换广播出去

br.sendTransform(tf::StampedTransform(transform, ros::Time::now(), "map", ”base_link“));

其中,

(1)transform:存储变换关系的变量

(2)ros::Time::now():广播tf使用的时间戳

(3)map, 父坐标系的名称

(4) base_link:子坐标系的名称。

备注:sendTransform函数有很多重载

namespa
  • 24
    点赞
  • 164
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值