ROS学习古月居TF使用总结
目录
大佬链接
最全的广播整理:
官方的transform介绍
四元数与欧拉角
ROS学习的另一个大佬的总结
整理了半年tf相关内容,然后古老师在最后的广播这块讲的也不是很详细,所以我查了很多资料,在这里记录一下我此时的看法和对坐标的理解给未来的我看。
总代码目录
The Code of TFboardcast
#include <ros/ros.h>
#include <tf/transform_broadcaster.h>
#include <turtlesim/Pose.h>
std::string turtle_name;
void poseCallback(const turtlesim::Pose::ConstPtr& msg)
{
static tf::TransformBroadcaster br;//定义一个广播
//--------初始化坐标系数据--------
tf::Transform transform;//定义一个transform类
transform.setOrigin( tf::Vector3(msg ->x, msg->y, 0.0) );
//设置transform坐标原始值
tf::Quaternion q//定义一个四元数
q.setRPY(0, 0, msg->theta);//设置四元数类中欧拉角的三个
transform.setRotation(q); //设置transform中的四元数的值
//----------为什么这么初始化在后面总结有--------------
br.sendTransform( tf::StampedTransform( transform, ros::Time::now(),"world",turtle_name) );
//将该StampedTransform消息广播出去(注:不只是transform,还发送了world等信息)
//该广播的名字就是turtle_name
}
int main( int argc, char** argv )
{
ros::init(argc, argv, "my_tf_broadcaster" );
//初始化节点,节点名字叫做my_tf_broadcaster
ros::NodeHandle node;//创造一个节点句柄
if( argc != 2)
{
//判断给main函数输入的变量个数,2的时候说明有输入某值,也就是创造的海归的i拿工资
ROS_INFO("NEED TURTLE NAME");
return -1;
}
turtle_name = argv[1];//输入的第一个变量赋值给turtle_name
ros::Subscriber sub = node.subscribe(turtle_name+"/pose", 10, &poseCallback);
//创造一个订阅者,因为turtlesim_node里会自动发布海龟的位置坐标
ros::