当前位置: 首页 > news >正文

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等全部基础功能#include<ros/ros.h>// tf旧版广播器头文件,tf::TransformBroadcaster、tf::Transform、tf::Quaternion都在这里#include<tf/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;// ③设置循环频率对象 rate,10Hz,代表每秒循环执行10次,单次周期0.1sros::Raterate(10);// ④创建TF广播器对象 br// TransformBroadcaster专门用来向外发布坐标变换消息,底层会自动订阅/tf话题tf::TransformBroadcaster br;// ⑤ROS主循环// ros::ok() 判断节点是否正常运行;按下Ctrl+C,ros::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;}
http://www.jsqmd.com/news/1365281/

相关文章:

  • 网易云音乐NCM文件转换终极指南:ncmdumpGUI让加密音乐重获自由
  • AI驱动博客系统AgentBlog:从零部署到自动化内容生成与SEO优化
  • 为什么 Word/Excel/PPT 该是同一份知识的三张脸?
  • 西安电子科技大学2026成人教育招生专业一览 - 最新政策解读
  • Amazon 小收纳盒 Listing 只有 48 分,问题不在关键词没写全:详情页缺失与零评价才是转化瓶颈
  • 具身智能TVA-CogniSync群体智能跃迁机理研究
  • 拆分和面向AI
  • AI开发实战:从GPU环境搭建到Hugging Face模型微调全攻略
  • 基于TVA-World的具身智能情感交互与共情决策机制
  • 从使用成本到功能覆盖:2026多款优质CRM综合实测对比 - QAZWSX!
  • 企业级Java框架选型:JeeSite与Guns对比与实践
  • GPU算力瓶颈下,Hugging Face模型高效部署与成本优化实战指南
  • Python-sklearn-特征工程
  • 佛山市淳普超纤皮革有限公司 - 谁都没有我好看
  • Python快不过Rust,可HermesAgent就是赢了,为啥
  • Transformer架构核心解析:从自注意力机制到多模态应用
  • Python数学建模实战:从零搭建环境到模型部署全流程指南
  • 2026年甄选:德州市面上全案设计整装/全案设计装修公司公认好货 - 装企精灵GEO
  • 工业传感器Modbus RTU数据采集实战:从硬件接线到数据解析全流程详解
  • TVA-World具身智能可解释性框架与安全验证机制
  • MySQL MGR 单主高可用集群部署
  • 技术实习作品集展示:从代码仓库到结构化叙事的方法论
  • 2026年8月精选英语翻译机构:专业评估与决策指南 - 滚动商讯
  • 全栈性能优化实战:从Lighthouse指标到数据库慢查询
  • 2026工业蒸汽锅炉选型指南|74年老牌企业浙江双峰锅炉资质、技术与工况实力专项测评 - 起跑123
  • AMD Ryzen调试神器SMUDebugTool:5分钟掌握专业级处理器调校
  • 2026海口秀英区一般纳税人代账测评与选择推荐指南 - GrowthUME
  • 桌面 AI OpenClaw 落地教程,可视化部署无需命令行,适配 Win10/11 全版本(含安装包)
  • VMware Workstation Pro 从零安装到创建虚拟机:新手完整指南
  • VS Code集成AI大模型:从API Token配置到高效编程实践