1. TF 简介
TF(TransForm),它是坐标转换,包括位置和姿势的转换。注意区分坐标转换和坐标系转换。坐标转换是不同坐标系下坐标的表示,坐标系转换不同坐标系的相对位置关系。 frame_id:显示发布的数据来自哪个坐标系。
2. ROS常用坐标系
(1) base_link 以机器人中心为原点的坐标系称为base_link坐标系。 base_linkx轴指向机器人前方,y轴指向汽车左侧,z轴指向汽车上方。
(2) odom 在一般使用中odom坐标系是通过里程计信息计算出来的。例如,轮子编码器、视觉里程计算法或陀螺仪和加速度计。odom长期大规模坐标较差,但是短期局域精确坐标系。
(3) map 一般来说map坐标系的坐标是通过不断计算和更新传感器信息。如激光雷达、视觉定位等。因此,它可以有效地减少累积误差,但也可能导致每次坐标更新的跳跃。 map坐标系下的坐标不需要保证连续性。map坐标系是一个非常有用的长期全球坐标系,但由于坐标会跳跃变化,这是一个相对较差的局部坐标系(不适合避障和局部操作)。
(4) 坐标关系 earth ------> map ------ > odom ------> base_link base_link 里程计等计算信息 -> odom 矫正(amcl)-> map坐标系
参考链接:ROS2 常用坐标系 ROS坐标系之间的关系
3. tf命令行工具:
view_frames:可视化坐标变换的完整树。 tf_monitor:监控帧之间的转换。 tf_echo:在屏幕上打印指定的变化 roswtf : 使用tfwtf插件,分析当前 tf 配置并尝试找出常见问题 static_transform_publisher是发送静态转换的命令行工具。
static_transform_publisher x y z yaw pitch roll frame_id child_frame_id period_in_ms 以米为单位使用 x/y/z 以弧度为单位的偏航/俯仰/滚动将静态坐标转换发布到 tf。(yaw 是围绕 Z 的旋转,pitch 是围绕 Y 的旋转,roll 是围绕 X 的旋转)。period_in_ms 周期(以毫秒为单位)指定发送转换的频率。100ms (10hz) 是个好值。 例如:
<node pkg="tf" type="static_transform_publisher" name="base_footprint_to_laser" args="-0.175 0.0 0.390 0.0 0.0 0.0 $(arg base_frame) $(arg lidar_frame) 100"> </node> tf 坐标转换 (x: -0.175m, y: 0.0m, z: 0.390m, yaw:0.0, roll:0, pitch:0)
static_transform_publisher x y z qx qy qz qw frame_id child_frame_id period_in_ms 以米和四元为单位使用 x/y/z 偏移发布静态坐标变换 tf。
参考连接:WIKI 源码