ros 动态坐标转换案例
步骤
1.初始化
2.新建Nodehandler
3.创建订阅方,订阅turtlesim的位姿信息
4.订阅的位姿信息发送 topic:/tf
验证方法
1.用rviz查看
2.用rostopic echo /tf 查看
代码以及最终效果
创建工程以及编译过程,此处省略,如有疑问可以查看我以前写的文章。
catkin_create_pkg dynamic_coodinate_tf tf2 tf2_ros tf2_geometry_msgs roscpp std_msgs geometry_msgs turtlesim
#include "ros/ros.h"
#include "turtlesim/Pose.h"
#include "tf2_ros/transform_broadcaster.h"
#include "geometry_msgs/TransformStamped.h"
#include "tf2/LinearMath/Quaternion.h"
void doPose(const turtlesim::Pose::ConstPtr &pose)
{
static tf2_ros::TransformBroadcaster pub;
geometry_msgs::TransformStamped ts;
ts.header.frame_id = "world";
ts.header.stamp = ros::Time::now();
ts.child_frame_id = "turtle1";
ts.transform.translation.x = pose->x;
ts.transform.translation.y = pose->y;
ts.transform.translation.z = 0;
tf2::Quaternion qtn;
qtn.setRPY(0,0,pose->theta);
ts.transform.rotation.x = qtn.getX();
ts.transform.rotation.y = qtn.getY();
ts.transform.rotation.z = qtn.getZ();
ts.transform.rotation.w = qtn.getW();
pub.sendTransform(ts);
}
int main(int argc,char **argv)
{
//Init
ros::init(argc,argv,"dynamic_pub");
//create node handle
ros::NodeHandle nh;
//create subscriber
ros::Subscriber sub = nh.subscribe("/turtle1/pose",100,doPose);
//spin
ros::spin();
return 0;
}