ros(tf包学习)

TF库的目的是实现系统中任一个点在所有坐标系之间的坐标变换,也就是说,只要给定一个坐标系下的一个点的坐标,就能获得这个点在其他坐标系的坐标.
使用:
链接

#include <ros/ros.h>
#include <tf/transform_broadcaster.h>
#include <turtlesim/Pose.h>
#include <string.h>
std::string turtle_name;
void posecallback(const turtlesim::PoseConstPtr &msg)
{
    static tf::TransformBroadcaster br; // 创建一个tf发布对象
    tf::Transform transform;            // 创建一个tf对象
    transform.setOrigin(tf::Vector3(msg->x,msg->y,0));  //设置turtle_name在world下的坐标原点
    tf::Quaternion q;                   //创建一个4元数类
    q.setRPY(0,0,msg->theta);           //turtle_name相对于world的旋转;进行RPY旋转,更新四元组
    transform.setRotation(q);           //旋转
                            
    br.sendTransform(tf::StampedTransform(transform,ros::Time::now(),"world",turtle_name));}
                                        //发送旋转信息
int main(int argc,char ** argv)
{
    ros::init(argc,argv,"tf_broadcaster");
    if(argc !=2)
    {
        ROS_ERROR("need turtle name");
        return -1;
    }
    turtle_name=argv[1];
    ros::NodeHandle n;
    ros::Subscriber sub=n.subscribe(turtle_name+"/pose",10,&posecallback);
    ros::spin();
    return 0;
}

使用rosrun tf tf_echo /world /turtle1查看
监听:

tf::TransformListener listener ;//监听器
tf::StampedTransform transform;	//定义存放变换关系的变量
listener.lookupTransform("/turtle2", "/turtle1",  ros::Time(0), transform);

添加其他坐标系

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(), "base_link", "carrot1"));//新建了carrot1 
//参数:存储两个坐标系的转换矩阵transform;
//时间戳;
//父坐标系;
//新的坐标系

.waitForTransform函数

listener.waitForTransform("/turtle2", "/turtle1",
                              now, ros::Duration(3.0))
//监听从"turtle2"到"/turtle1"的转换(到座标系到子坐标系)
//"/turtle2":父坐标系
// "/turtle1":子坐标系
//now 时间戳,一般用做数据的=时间戳
//ros::Duration(3.0) 最长等待时间

 listener.lookupTransform("/turtle2",now, "/turtle1", past, transform);
//now 可省略,当前时间
//past 写入"/turtle1"的时间戳
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值