(yaw is rotation about Z, pitch is rotation about Y, and roll is rotation about X)
---------------------------------------------------------
tf下的发布静态坐标关系:
<launch>
<node pkg="tf" type="static_transform_publisher" name="link1_broadcaster" args="x y z 绕z 绕y 绕x parent_link child_link 100" />
</launch>
try {
listener.waitForTransform("target_frame","source_frame",time_stamp, ros::Duration(0.5));
listener.transformPose("target_frame",pose_in_source_frame, pose_in_target_frame);
}
catch(tf::TransformException& ex){
ROS_ERROR("Failed to transform from source to target: %s\n", ex.what());
return false;
}
const geometry_msgs::Pose& pose = xx;
tf::Pose tf_pose;
tf::poseMsgToTF(pose, tf_pose);
double theta = tf::getYaw(tf_pose.getRotation());///绕z
geometry_msgs::PoseStamped robot_pose=xx;
double yaw,pitch,roll;
ros::Rate r(10);
transform.setRotation( tf::Quaternion(robot_pose.pose.orientation.x,
robot_pose.pose.orientation.y,
robot_pose.pose.orientation.z,
robot_pose.pose.orientation.w) );
transform.getBasis().getEulerYPR(yaw, pitch, roll);
-----------------------------------------------
1.建立和维护一棵tf树。主要是通过不停地向tf树发送各个坐标系之间的转换关系,也就是位置关系,来维护一个tf树。主要用到的指令就是:
static tf::TransformBroadcaster br;
tf::Transform transform;
transform.setOrigin( tf::Vector3(msg->x, msg->y, 0.0) );