ROS的tf包中坐标变换的方法

本文介绍了ROS中tf包进行坐标变换的方法,特别是如何使用setRotation函数设置旋转,包括四元数和RPY(绕XYZ轴旋转角度)的表示。在遇到tf listener报错时,提供了解决方案,如添加waitForTransform函数调用来解决同步问题。此外,还讨论了四元数的直观解释以及如何修正代码使两个turtle模型正确跟随。
摘要由CSDN通过智能技术生成

1、setRotation函数的参数

在坐标变换的时候常有这样的写法:
tfTutorialsAdding a frame (C++)

transform.setOrigin( tf::Vector3(0.0, 2.0, 0.0) );
transform.setRotation( tf::Quaternion(0, 0, 0, 1) );
br.sendTransform(tf::StampedTransform(transform,ros::Time::now(), "turtle1", "carrot1"));

这三句话分别做了以下工作:
1、设置carrot1在turtle1坐标系下的坐标原点
2、设置carrot1相对于turtle1的旋转角度,这里用四元数表示
3、发送变换信息
上面四元数表示旋转角度的方式不太直观,我们写代码的时候不想将旋转变换换算成四元数的时候可以采用如下方法写这个变换:

turtle_tf_ broadcaster.cpp

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));

这样通过这三句话就可以直接用RPY(分别对应绕XYZ轴旋转角度)来设置旋转变换了

tf::Quaternion q;
q.setRPY(0, 0, msg->theta);
transform.setRotation(q);

这里的msg->x, msg->y,msg->theta是解引用msg并获取该元素名为x(或者y,theta)的成员,相当于(*msg).x,(*msg).y,(*msg).theta

四元数的直观意义:
四元数 (x,y,z,w) 表示绕轴 (x

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值