tf入门

来源:互联网 发布:工行td交易软件 编辑:程序博客网 时间:2024/05/22 01:50
  • 推荐一个雷锋精神的资源http://v.youku.com/v_show/id_XMTY2NDI4MzQ5Ng==.html?spm=a2h0j.8191423.playlist_content.5!2~5~5~A&&f=27718645&from=y1.2-3.4.2
  • ros tf tutorial 网址http://wiki.ros.org/tf/Tutorials/Writing%20a%20tf%20broadcaster%20%28C%2B%2B%29
  • tf 工具
    -rosrun tf view_frames 在当前目录中生产一个frames.pdf,evince命令查看

    • rosrun rqt_tf_tree rqt_tf_tree 运行可视化图形工具。
    • rosrun tf tf_echo [reference_frame] [target_frame] 屏幕打印两个坐标系的变化,Translation 和 Rotation.
    • rosrun rviz rviz -drospack find turtle_tf/rviz/turtle_rviz.rviz 可视化图形化显示坐标系之间的变化 x-red;y-green;z-blue;
  • 例程1

    • 广播小乌龟的位姿到tf包。
#include <ros/ros.h>#include <tf/transform_broadcaster.h>#include <turtlesim/Pose.h>std::string turtle_name;void poseCallback(const turtlesim::PoseConstPtr& msg){  static tf::TransformBroadcaster br;  tf::Transform transform;  transform.setOrigin( tf::Vector3(msg->x, msg->y, 0.0) );  tf::Quaternion q;  q.setRPY(0, 0, msg->theta);  transform.setRotation(q);  br.sendTransform(tf::StampedTransform(transform, ros::Time::now(), "world", turtle_name));}int main(int argc, char** argv){  ros::init(argc, argv, "my_tf_broadcaster");  if (argc != 2){ROS_ERROR("need turtle name as argument"); return -1;};  turtle_name = argv[1];  ros::NodeHandle node;  ros::Subscriber sub = node.subscribe(turtle_name+"/pose", 10, &poseCallback);  ros::spin();  return 0;};

br.sendTransform(tf::StampedTransform(transform, ros::Time::now(), “world”, turtle_name));
This is where the real work is done. Sending a transform with a TransformBroadcaster requires four arguments.

 - 第一个参数:定义的变换 - 第二个参数:给变换一个时间戳,ros::Time::now(). - 第三个参数:父框架,本例中为“world” - 第四个参数:子框架,本例中为turtle
原创粉丝点击