# how to calculate transform for two geometry_msgs/poseStamped messages

Hi,

I am new to ROS and RTT.

I want to calculate the transformation (relative position) for two geometry_msgs/poseStamped messages so that I can get the absolute position of my object if the position of other object is changed.

The first task is clearly to calculate the transform and then to use that transform also..

# ============================================================================ Updated on August 8, 2016

CODE

input_port_hand.read(msg_hand);

// calculate the transform from the object Pose this way we have the frame in which the object is lying

tf::Transform transform;
transform.setOrigin(tf::Vector3(msg_obj.pose.position.x, msg_obj.pose.position.y, msg_obj.pose.position.z));
transform.setRotation(tf::Quaternion( msg_obj.pose.orientation.x, msg_obj.pose.orientation.y, msg_obj.pose.orientation.z, msg_obj.pose.orientation.w));
tf::StampedTransform stf = tf::StampedTransform(transform,ros::Time(),"world","object");
std::cout<<stf.frame_id_<<"\n";
// Calculate the relative position of hand WRT this frame

std::string target_frame = "world";
geometry_msgs::PoseStamped& rel_hand_pos = msg_hand;
tf::TransformListener tl;

try{
tl.transformPose(target_frame, msg_hand, rel_hand_pos);
}
catch (tf::TransformException ex){
ROS_ERROR("%s",ex.what());
ros::Duration(1.0).sleep();
}

output_port.write(rel_hand_pos);


} else{ std::cout << "Rtt_apc executes updateHook!! No New Data !!"<<std::endl; } }

ERROR

world ERROR "world" passed to lookupTransform argument target_frame does not exist. listener: I heard : [ 0.25,0.25,0.25,0,0,0,1 ]

Originally posted by gk on ROS Answers with karma: 3 on 2016-08-03

Post score: 0

Use transformPose(). Exists for python and cpp. That of course requires that your tf tree is correct. See this tutorial.

Originally posted by Chrissi with karma: 1642 on 2016-08-04

This answer was ACCEPTED on the original site

Post score: 0