frame_tf_broadcaster.cpp
1 #include <ros/ros.h>
2 #include <tf/transform_broadcaster.h>
3
4 int main(int argc, char** argv){
5 ros::init(argc, argv, "my_tf_broadcaster");
6 ros::NodeHandle node;
7
8 tf::TransformBroadcaster br;
9 tf::Transform transform;
10
11 ros::Rate rate(10.0);
12 while (node.ok()){
13 transform.setOrigin( tf::Vector3(0.0, 2.0, 0.0) );
14 transform.setRotation( tf::Quaternion(0, 0, 0, 1) );
15 br.sendTransform(tf::StampedTransform(transform, ros::Time::now(), "turtle1", "carrot1"));
//在这里,我们创建一个新的转换,从父turtle1到新的carrot1。所述carrot1坐标系在turtle1右侧
16 rate.sleep();
17 }
18 return 0;
19 };
同时你需要在你的listener重新收听新的坐标系
1 listener.lookupTransform("/turtle2", "/carrot1",
2 ros::Time(0), transform);
之前的坐标系是静态的,现在广播一个动态的参考系
1 transform.setOrigin( tf::Vector3(2.0*sin(ros::Time::now().toSec()), 2.0*cos(ros::Time::now().toSec()), 0.0) );
2 transform.setRotation( tf::Quaternion(0, 0, 0, 1) );