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、发送变换信息
上面四元数表示旋转角度的方式不太直观,我们写代码的时候不想将旋转变换换算成四元数的时候可以采用如下方法写这个变换:
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