ROS-TF-新建坐标系

前言:在前面的试验中,我们分别有wolrd,turtle1和turtle2三个坐标系,并且world是turtle1和turtle2的父坐标系。现在我们来新建一个自定义坐标系,让turtle2跟着新的坐标系”carrot“运动。

参考自:http://wiki.ros.org/tf/Tutorials/Adding%20a%20frame%20%28C%2B%2B%29

 一、新建源文件

 新建frame_tf_broadcaster.cpp文件,内容如下:

#include <ros/ros.h>
#include <tf/transform_broadcaster.h>

int main(int argc, char** argv){
  ros::init(argc, argv, "my_tf_broadcaster");
  ros::NodeHandle node;

  tf::TransformBroadcaster br;
  tf::Transform transform;

  ros::Rate rate(10.0);
  while (node.ok()){
//创建一个新坐标系carrot1,距离父坐标系turtle1距离2米
    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"));
    rate.sleep();
  }
  return 0;
};

二、修改launch文件

在launch文件中添加代码:

  <launch>
    ...
    <node pkg="learning_tf" type="frame_tf_broadcaster"
          name="broadcaster_frame" />
  </launch>

三、修改广播信息

修改turtle_tf_listener.cpp文件

listener.lookupTransform("/turtle2", "/carrot1", ros::Time(0), transform);

四、运行

编译并运行launch文件

roslaunch learning_tf start_demo.launch

 

现在turtle2始终跟随在carrot坐标系运动。

-END-

猜你喜欢

转载自www.cnblogs.com/chendeqiang/p/10334598.html