ROS2极简总结-坐标变换-TF
2023-03-31 10:31:52 时间
- TF2 - TRANSFORMS IN ROS2
- ROS机器人TF基础(坐标相关概念和实践)
TF2 - 概述
- TF2 是 TF (TransForm) 库的第二代。 事实上,ROS1 中的 TF 目前在后台调用 TF2。 ROS2 仅使用 TF2。
- TF2 跟踪树结构中的所有坐标系。
- 与 ROS2 中的大多数功能一样,TF2 API 仍在开发中,但基本功能已经可用。
- TF2 vs TF - 更快、更高效、新功能和更容易扩展。
*此处重点,ROS1成熟,而ROS2还是深度开发中的实验版,LTS长期支持版目前也没有5年,而是3年,此版本不适合初学者学习!
rviz2中可视化
rqt_tf_tree
设计
TF2 核心独立于 ROS & BufferCore 类提供 API
- 用户可以查询任意给定时间点树中任意 2 帧之间的转换 - 即使在过去!
- 对于异步/分布式系统必不可少
提供坐标之间的转换(动态/静态)。
- 例如:robot_state_publisher 提供基于 URDF 的 TF 数据
- 例如:用户编写的具有专用广播器的节点
可以访问变换树并查找 2 帧之间的特定变换(阻塞/非阻塞)。
buffer = tf2_ros.Buffer()
transform = buffer.lookup_transform("base_link","camera_link", rclpy.time.Time()) # Blocking
transform = await buffer.lookup_transform_async("base_link","camera_link",rclpy.time.Time()) #Non-Blocking
函数原型:lookup_transform(target_frame,source_frame,time)
使用 rclpy.time.Time() 提供最新的可用转换。
工具:
tf2_ros buffer_server.exe tf2_ros static_transform_publisher.exe tf2_ros tf2_echo.exe tf2_ros tf2_monitor.exe tf2_tools view_frames.py
ros2 launch dummy_robot_bringup dummy_robot_bringup.launch.py
rviz2
发布坐标变换数据
ros2 run tf2_ros static_transform_publisher 1 2 3 0.5 0.1 -1.0 foo bar
接受坐标变换数据
ros2 run tf2_ros tf2_echo foo bar
数据:
[INFO] [1628841444.349748000] [tf2_echo]: Waiting for transform foo -> bar: Invalid frame ID "foo" passed to canTransform argument target_frame - frame does not exist
At time 0.0
- Translation: [1.000, 2.000, 3.000]
- Rotation: in Quaternion [-0.475, -0.076, 0.240, 0.843]
At time 0.0
- Translation: [1.000, 2.000, 3.000]
- Rotation: in Quaternion [-0.475, -0.076, 0.240, 0.843]
At time 0.0
- Translation: [1.000, 2.000, 3.000]
- Rotation: in Quaternion [-0.475, -0.076, 0.240, 0.843]
At time 0.0
- Translation: [1.000, 2.000, 3.000]
- Rotation: in Quaternion [-0.475, -0.076, 0.240, 0.843]
At time 0.0
- Translation: [1.000, 2.000, 3.000]
- Rotation: in Quaternion [-0.475, -0.076, 0.240, 0.843]
At time 0.0
- Translation: [1.000, 2.000, 3.000]
- Rotation: in Quaternion [-0.475, -0.076, 0.240, 0.843]
At time 0.0
- Translation: [1.000, 2.000, 3.000]
- Rotation: in Quaternion [-0.475, -0.076, 0.240, 0.843]
At time 0.0
- Translation: [1.000, 2.000, 3.000]
- Rotation: in Quaternion [-0.475, -0.076, 0.240, 0.843]
At time 0.0
- Translation: [1.000, 2.000, 3.000]
- Rotation: in Quaternion [-0.475, -0.076, 0.240, 0.843]
At time 0.0
- Translation: [1.000, 2.000, 3.000]
- Rotation: in Quaternion [-0.475, -0.076, 0.240, 0.843]
At time 0.0
- Translation: [1.000, 2.000, 3.000]
- Rotation: in Quaternion [-0.475, -0.076, 0.240, 0.843]
ros2 run tf2_ros tf2_monitor
Gathering data on all frames for 10 seconds...
RESULTS: for all Frames
Frames:
Frame: bar, published by <no authority available>, Average Delay: 336.186, Max Delay: 336.186
Frame: single_rrbot_camera_link, published by <no authority available>, Average Delay: 0.0112712, Max Delay: 0.0168042
Frame: single_rrbot_hokuyo_link, published by <no authority available>, Average Delay: 0.011265, Max Delay: 0.016798
Frame: single_rrbot_link1, published by <no authority available>, Average Delay: 0.0112664, Max Delay: 0.0167992
Frame: single_rrbot_link2, published by <no authority available>, Average Delay: 0.0197751, Max Delay: 0.0335286
Frame: single_rrbot_link3, published by <no authority available>, Average Delay: 0.0197761, Max Delay: 0.033529
All Broadcasters:
Node: <no authority available> 34.0131 Hz, Average Delay: 0.940838 Max Delay: 336.186
RESULTS: for all Frames
Frames:
Frame: bar, published by <no authority available>, Average Delay: 336.186, Max Delay: 336.186
Frame: single_rrbot_camera_link, published by <no authority available>, Average Delay: 0.0111137, Max Delay: 0.0169733
Frame: single_rrbot_hokuyo_link, published by <no authority available>, Average Delay: 0.0111072, Max Delay: 0.0169675
Frame: single_rrbot_link1, published by <no authority available>, Average Delay: 0.0111086, Max Delay: 0.0169683
Frame: single_rrbot_link2, published by <no authority available>, Average Delay: 0.0197954, Max Delay: 0.0335286
Frame: single_rrbot_link3, published by <no authority available>, Average Delay: 0.0197964, Max Delay: 0.033529
ros2 run tf2_tools view_frames.py
相关文章
- Java NIO的多路复用及reactor
- Java NIO非阻塞服务器示例
- Python Qt GUI设计:QScrollBar类实现窗口水平或垂直滑动条效果(拓展篇—4)
- BERT是图像预训练未来?字节跳动iBOT刷新十几项SOTA,部分指标超MAE
- NLP大火的prompt能用到其他领域吗?清华孙茂松组的 CPT 了解一下
- 构建高质量的前端工程完全指南
- 为什么样本方差分母是n-1?
- 说透 Docker:基础
- PostgreSQL 14中提升Nested Loop Joins性能的enable_memoize
- 浅析Tomcat NIO 配置
- 在k8s上部署metersphere
- vscode中远程操作工具
- Java NIO的介绍及工作原理
- 程序设计五大原则
- 首次赢得WMT机器翻译大赛,Meta证明单个多语言模型强于双语模型
- 速度高达百万帧/秒,颜水成团队开源RL环境并行模拟器,大幅节省CPU资源
- Python-ini文件-01-读操作
- dart系列之:在dart中使用packages
- Dart语法基础系列八《抽象类》
- Druid源码阅读7-DruidDataSource的recycle过程