1,静态tf发布
<node pkg="tf" type="static_transform_publisher" name="link1_link2_broadcaster" args="x y z yaw pitch raw link1 link2 100" />
<node pkg="tf" type="static_transform_publisher" name="link1_link2_broadcaster" args="x y z qx qy qz qw link1 link2 100" />
2,动态tf发布
#include <tf/transform_broadcaster.h>
static tf::TransformBroadcaster br;
tf::Transform transform;
transform.setOrigin( tf::Vector3(x, y, z) );
tf::Quaternion q;
q.setRPY(0, 0,yaw);
transform.setRotation(q);
br.sendTransform(tf::StampedTransform(transform, ros::Time::now(), "world", "my_frame"));
broadcaster.sendTransform(
tf::StampedTransform(
tf::Transform(tf::Quaternion(0, 0, 0, 1), tf::Vector3(0.1, 0.0, 0.2)),
ros::Time::now(),"base_link", "base_laser"));
3, 四元数和欧拉角之间的变换
3.1 四元数->欧拉角
C++:
geometry_msgs::Quaternion geom_quat
tf::Quaternion tf_quat_;
tf::quaternionMsgToTF(geom_quat, tf_quat_);
double roll, pitch, yaw;//
tf::Matrix3x3(tf_quat_).getRPY(roll, pitch, yaw);
python:
import roslib
roslib.load_manifest('learning_tf')
import rospy
quaternion = (
pose.orientation.x,
pose.orientation.y,
pose.orientation.z,
pose.orientation.w)
euler = tf.transformations.euler_from_quaternion(quaternion)
roll = euler[0]
pitch = euler[1]
yaw = euler[2]
3.2 欧拉角->四元数
C++:
tf::Quaternion q;
q.setRPY(0, 0,yaw);
python:
q = quaternion_from_euler(1.5707, 0, -1.5707)
x = quaternion[0]
y = quaternion[1]
z = quaternion[2]
w = quaternion[3]
版权声明:本文为guijiaqing原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。