F
Member
机器人系统里有大量坐标系:地图 map、里程计 odom、底盘 base_link、各个传感器坐标系等。ROS 2 用 TF2 管理它们之间的变换关系。
一、TF 树的结构。 所有坐标系组成一棵树,每个子坐标系只有一个父坐标系。REP 105 约定了移动机器人常用的链条:map → odom → base_link。其中 odom → base_link 由里程计连续发布,平滑但会漂移;map → odom 由定位模块发布,用于修正漂移。
二、静态与动态变换。 传感器在机器人上的安装位置通常固定,用 static_transform_publisher 或 URDF + robot_state_publisher 发布到 /tf_static;关节、底盘运动等随时间变化的变换发布到 /tf。静态变换只发一次,订阅端使用 transient local 的 QoS 获取。
三、外参标定决定 TF 是否“可信”。 相机与激光雷达、IMU 与底盘之间的相对位姿,如果只按图纸填写,安装误差会直接导致点云和图像错位、建图重影。常见做法是使用标定板或专门的标定工具求解外参,再写入 URDF 或静态变换。
四、常见问题。
1. “Lookup would require extrapolation”:时间戳不一致或缓存不足,需要检查时钟同步和 use_sim_time。
2. TF 树断开:某个变换没有发布或 frame_id 拼写不一致,可用 tf2_tools 的 view_frames 画出整棵树检查。
3. 同一子坐标系被两个节点发布,导致跳变。
讨论问题:
1. 你们做激光雷达与相机联合标定时,常用哪些工具和流程?
2. 多机器人系统中,TF 命名空间怎样组织比较清晰?
3. 如何在系统运行中检测外参是否因振动或碰撞而发生变化?
一、TF 树的结构。 所有坐标系组成一棵树,每个子坐标系只有一个父坐标系。REP 105 约定了移动机器人常用的链条:map → odom → base_link。其中 odom → base_link 由里程计连续发布,平滑但会漂移;map → odom 由定位模块发布,用于修正漂移。
二、静态与动态变换。 传感器在机器人上的安装位置通常固定,用 static_transform_publisher 或 URDF + robot_state_publisher 发布到 /tf_static;关节、底盘运动等随时间变化的变换发布到 /tf。静态变换只发一次,订阅端使用 transient local 的 QoS 获取。
三、外参标定决定 TF 是否“可信”。 相机与激光雷达、IMU 与底盘之间的相对位姿,如果只按图纸填写,安装误差会直接导致点云和图像错位、建图重影。常见做法是使用标定板或专门的标定工具求解外参,再写入 URDF 或静态变换。
四、常见问题。
1. “Lookup would require extrapolation”:时间戳不一致或缓存不足,需要检查时钟同步和 use_sim_time。
2. TF 树断开:某个变换没有发布或 frame_id 拼写不一致,可用 tf2_tools 的 view_frames 画出整棵树检查。
3. 同一子坐标系被两个节点发布,导致跳变。
讨论问题:
1. 你们做激光雷达与相机联合标定时,常用哪些工具和流程?
2. 多机器人系统中,TF 命名空间怎样组织比较清晰?
3. 如何在系统运行中检测外参是否因振动或碰撞而发生变化?