尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
2026.8.07-初入ros+slam+opencv第十二天-学习tf广播器
一、理论理解1.TF维护机器人各个坐标系之间位姿变换关系举例base_link 机器人底盘laser_link 激光雷达雷达装在底盘上方需要告诉 ROS 雷达相对于底盘在哪。2.TF广播器TransformBroadcaster:向外发布「子坐标系相对父坐标系」的位姿平移 旋转。传感器、底盘都要广播自己的坐标系。3.TF 监听器 TransformListener查询两个坐标系之间的变换把数据从一个坐标系转换到另一个坐标系。导航算法、点云处理都靠监听。4.父坐标系 / 子坐标系描述子坐标系相对于父坐标系的位置姿态5.旋转不用手写矩阵使用tf::Quaternion生成四元数。6.ros::Time(0)获取缓存中最新的 TF 数据新手固定写这个。7.监听必须加try‑catch异常捕获TF 找不到变换直接会让程序崩溃。二、代码实现// ROS核心头文件提供节点初始化、句柄、时间、Rate、spinOnce等全部基础功能#includeros/ros.h// tf旧版广播器头文件tf::TransformBroadcaster、tf::Transform、tf::Quaternion都在这里#includetf/transform_broadcaster.h// 程序入口 main函数// argc命令行参数个数argv命令行参数数组ros::init会从这里提取ROS相关参数intmain(intargc,char**argv){// ①ROS节点初始化// 参数命令行参数节点名字tf_broadcaster_noderos::init(argc,argv,tf_broadcaster_node);// ②创建节点句柄nh// 句柄相当于你程序和ROS系统沟通的手柄发布、订阅、参数、tf都依赖它ros::NodeHandle nh;// ③设置循环频率对象 rate10Hz代表每秒循环执行10次单次周期0.1sros::Raterate(10);// ④创建TF广播器对象 br// TransformBroadcaster专门用来向外发布坐标变换消息底层会自动订阅/tf话题tf::TransformBroadcaster br;// ⑤ROS主循环// ros::ok() 判断节点是否正常运行按下CtrlCros::ok()返回false退出循环while(ros::ok()){// transform存储一组坐标变换包含两部分平移(origin) 旋转(rotation)tf::Transform transform;// setOrigin() 设置平移部分// tf::Vector3(x,y,z) 三维向量单位米// 含义子坐标系laser_link在父坐标系base_link下坐标(0, 0, 0.2)底盘正上方0.2米transform.setOrigin(tf::Vector3(0.0,0.0,0.2));// tf::Quaternion 四元数ROS用来存储旋转姿态避免欧拉角万向锁缺陷tf::Quaternion q;// setRPY(roll, pitch, yaw) 单位弧度不是角度// roll绕X轴旋转pitch绕Y轴旋转yaw绕Z轴旋转机器人转向// 全部填0代表没有任何旋转laser_link和base_link朝向完全一致q.setRPY(0,0,0);// 将四元数旋转赋值给transform变换对象transform.setRotation(q);// 核心广播TF变换 sendTransform// StampedTransform带时间戳的变换TF的每条变换必须绑定时间br.sendTransform(tf::StampedTransform(transform,// 平移旋转的数据ros::Time::now(),// 时间戳当前系统时间标记这个变换生效的时刻base_link,// 父坐标系参考基准laser_link));// 子坐标系子相对于父的位置姿态// 顺序千万不能写反sendTransform(变换,时间,父,子)// ros::spinOnce()处理ROS消息回调// 当前程序只发TF没有订阅回调逻辑上可以不写属于ROS代码规范建议保留ros::spinOnce();// rate.sleep()休眠保证整体循环维持10Hz。// 会扣除掉上面代码执行消耗的时间保证周期稳定0.1srate.sleep();}// main函数返回程序结束return0;}
RELATED

相关推荐

祈盟平台如何选择联运产品:核心流程、执行重点与常见问题

祈盟平台如何选择联运产品:核心流程、执行重点与常见问题

祈盟平台如何选择联运产品,表面上是合作资源问题,实质上是一套以数据为核心的筛选过程。对通过游戏运营平台寻找手游联运机会的买量团队、游戏公会、主播和MCN机构来说,判断一款产品值不值得接,不能只看素材好不好看、短期流水亮不…

📅 2026/10/6 7:37:50
3步将旧电脑变身高性能游戏串流服务器:Sunshine终极指南

3步将旧电脑变身高性能游戏串流服务器:Sunshine终极指南

3步将旧电脑变身高性能游戏串流服务器:Sunshine终极指南 【免费下载链接】Sunshine Self-hosted game stream host for Moonlight. 项目地址: https://gitcode.com/GitHub_Trending/su/Sunshine 你是否曾经想过,让那台闲置的旧电脑焕发新生&#…

📅 2026/10/7 12:55:31
Kimi-3大模型垂直应用评测:法律、审核与PPT生成实战指南

Kimi-3大模型垂直应用评测:法律、审核与PPT生成实战指南

这次我们来看一个关于 Kimi-3 大模型在特定垂直领域应用效果的快速评测。Kimi 作为国内知名的 AI 助手,其最新版本 Kimi-3 在长文本处理、逻辑推理和多模态理解上都有显著提升。对于法律从业者、内容审核员、PPT 制作者等需要处理大量结构化文档和复杂任务的用户来说…

📅 2026/10/8 6:49:53
MORE NEWS

更多资讯

📰

基于迁移学习的花卉识别系统实战:从数据准备到模型部署全流程解析

最近在整理我手头这个基于深度学习的花卉检测系统项目时,翻到几个月前的训练日志,发现自己当初真是踩了不少坑。这个项目虽然听起来不复杂——不就是让电脑认出花吗,但真正做下来,从数据集准备到模型训练再到最后包装成一个能用的…

📰

2026年10月18日智慧农业行业早报:展台上一场会发两个模型,地里两个种植季才长出一个

📑 本文覆盖时段:2026年10月16日午后 — 10月18日清晨(隔夜与清晨新增资讯)。 📑 本文目录 开场|一个矛盾:模型按场发布,数据按季生长一、今日行业政策动态 1.1 部委发布会&#xf…

📰

24GB显存跑32B开源大模型:量化+动态卸载的春节实验

春节我给自己找了一件挺拧巴的事:非要把一个32B参数的开源大模型,塞进家用那台只有24GB显存的消费级显卡里。拧巴的不是技术难度,而是时机——走亲访友最忙的那几天,客厅里主机风扇一响,整个年味就碎了一地。所以这场实…

📰

心电算法实战:Python滤波、R波识别与心率计算全链路解析

简介:这是一份以Python编写的心电信号处理算法合集,围绕滤波、R波识别、心率计算、特征提取、心律失常分类,以及房颤、室颤室速等异常心律识别构建,同时覆盖伪差干扰研究、可视化展示与测试工程,适合生物医学工程专业学…

📰

假期AI圈动态全解析:模型迭代、工具链与工程落地

七天假期结束,把手机里这段时间攒下的AI圈消息重新捋了一遍,说实话比上班还累。人在景区排队,群里在刷权重更新;晚上躺床上刷手机,新框架的讨论又顶上热搜。这七天给我的感觉就是:AI圈真的没一天消停&#…

📰

Spring Boot编程训练系统实战:高并发判题与Docker沙箱隔离

简介:这是一套基于Spring Boot开发的编程训练系统完整源码,面向Java初学者、高校计算机专业学生及编程自学爱好者,旨在解决理论学习与动手实践脱节的问题,提供从课程学习、在线编码到社区交流的一站式编程能力提升环境。资源包共8…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬