ROS2 Jazzy系列入门教程(四)—— TF
simple_robot/odom → child_frame_id: simple_robot/base_link 的变换信息已发布。此次教程我们使用第二章的simple_robot.sdf进行仿真,打开终端,启动Ubuntu,然后启动仿真。string child_frame_id : 子帧名称(例如 camera_link)然后根据frame_id配置Fixed Frame为simple_r
“/tf topic”是 ROS 中用于管理和共享坐标系(帧)之间关系(例如位置和旋转)的标准机制。它包含各个关节、传感器、末端执行器等的相对坐标。通过使用“tf 库”,可以集成管理不同机器人和传感器的坐标,并轻松计算变换关系
主要坐标系如下:
/map:以环境整体为基准的固定全局坐标系
/odom:机器人开始运动的初始位置为基准的坐标系
/base_link:以机器人自身中心为基准的坐标系
此次教程我们使用第二章的simple_robot.sdf进行仿真,打开终端,启动Ubuntu,然后启动仿真
$ gz sim simple_robot.sdf

然后将ROS2和Gazebo进行桥接
$ ros2 run ros_gz_bridge parameter_bridge /cmd_vel@geometry_msgs/msg/Twist@gz.msgs.Twist

$ ros2 run ros_gz_bridge parameter_bridge /model/simple_robot/tf@tf2_msgs/msg/TFMessage[gz.msgs.Pose_V --ros-args -r /model/simple_robot/tf:=/tf

打开twist_keyboard
$ ros2 run teleop_twist_keyboard teleop_twist_keyboard

接着查看topic
$ ros2 topic list

看一下/tf的信息
$ ros2 topic info /tf

然后看一下tf2_msgs/msg/TFMessage的接口类型

tf2_msgs/TFMessage
geometry_msgs/TransformStamped[] transforms : 数组形式存储多个变换
std_msgs/Header header
uint32 seq : 序列号(由 ROS 生成)
time stamp:消息的时间戳
string frame_id : 帧的名称 (base_link 等)
string child_frame_id : 子帧名称(例如 camera_link)
geometry_msgs/Transform transform : 父坐标系到子坐标系的坐标转换数据
至此simple_robot/odom → child_frame_id: simple_robot/base_link 的变换信息已发布
然后我们输出tf的实时信息
$ ros2 topic echo /tf

最后我们打开可视化数据工具rviz2,

然后根据frame_id配置Fixed Frame为simple_robot/odom

在rviz2界面中添加TF可视化

当我们再操作小车的时候就可以看到坐标系的变化


当然我们也可以编写一个启动文件来实现上述功能,大家可以尝试自行编写,代码应该和上一章的代码差不多
火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。
更多推荐
所有评论(0)