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 -d rospack 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