ROS发布静态tf

系统环境

ubuntu 20.04
ros-noetic

一、构建工作空间 catkin_ws

mkdir catkin_ws
cd catkin_ws
mkdir src
cd src

二、创建package,包名字为:robot_tf2,在src文件夹目录下,执行以下指令。

catkin_create_pkg robot_tf2 roscpp rospy tf2 tf2_ros tf2_geometry_msgs

三、写launch文件

cd robot_tf2

mkdir launch

cd launch

写 launch文件.

vim static_tf.launch

launch文件内容如下:

<launch>

  <!-- 发布 base_footprint 到 base_link 的静态变换 -->

  <!-- 参数说明: x y z yaw pitch roll parent_frame child_frame -->

  <node pkg="tf2_ros" type="static_transform_publisher" name="base_footprint_broadcaster"

        args="0 0 0.1 0 0 0 base_footprint base_link" />



  <!-- 可选: 发布 odom 到 base_footprint 的静态变换 (仅用于测试) -->

  <node pkg="tf2_ros" type="static_transform_publisher" name="odom_broadcaster"

        args="0 0 0 0 0 0 odom base_footprint" />

</launch>

四、编译包

回到工作空间目录 catkin_ws,执行以下指令。

catkin_make

五、加载环境变量

source devel/setup.bash 

六、运行launch脚本

roslaunch robot_tf2 static_tf.launch

七、查看发布 tf 的 topic

rostopic echo tf_static

输出结果如下:

transforms: 
  - 
    header: 
      seq: 0
      stamp: 
        secs: 1751734669
        nsecs: 626066038
      frame_id: "odom"
    child_frame_id: "base_footprint"
    transform: 
      translation: 
        x: 0.0
        y: 0.0
        z: 0.0
      rotation: 
        x: 0.0
        y: 0.0
        z: 0.0
        w: 1.0
---
transforms: 
  - 
    header: 
      seq: 0
      stamp: 
        secs: 1751734669
        nsecs: 623734317
      frame_id: "base_footprint"
    child_frame_id: "base_link"
    transform: 
      translation: 
        x: 0.0
        y: 0.0
        z: 0.1
      rotation: 
        x: 0.0
        y: 0.0
        z: 0.0
        w: 1.0
---

### ROS `static_transform_publisher` 使用方法 在 ROSROS2 中,`static_transform_publisher` 是用于发布静态坐标变换的一个重要工具。它可以通过命令行或者集成到启动文件中使用。 #### 命令行用法 通过命令行调用 `static_transform_publisher` 的基本语法如下: ```bash ros2 run tf2_ros static_transform_publisher x y z yaw pitch roll frame_id child_frame_id ``` 其中: - **x, y, z**: 表示从父坐标系 (`frame_id`) 到子坐标系 (`child_frame_id`) 的平移量 (单位为米)[^1]。 - **yaw, pitch, roll**: 表示旋转角度 (单位为弧度),分别对应 Z 轴、Y 轴和 X 轴上的旋转角。 - **frame_id**: 父坐标系名称。 - **child_frame_id**: 子坐标系名称。 ##### 示例 1: 发布一个简单的静态变换 假设要定义一个从 `world` 到 `base_link` 的变换,其位置偏移 `(0.5, 0.0, 0.0)` 米,方向无旋转,则可以运行以下命令: ```bash ros2 run tf2_ros static_transform_publisher 0.5 0.0 0.0 0.0 0.0 0.0 world base_link ``` 此命令会持续广播这个固定的变换关系直到节点被终止[^3]。 --- #### 配置到 Launch 文件中 如果希望将 `static_transform_publisher` 添加到启动文件中以便更方便地管理多个静态变换,可以在 `.launch.py` 文件中实现这一点。 以下是 Python 启动脚本的示例代码片段: ```python from launch import LaunchDescription from launch.actions import ExecuteProcess def generate_launch_description(): return LaunchDescription([ ExecuteProcess( cmd=['ros2', 'run', 'tf2_ros', 'static_transform_publisher', '0.5', '0.0', '0.0', '0.0', '0.0', '0.0', 'world', 'base_link'], output='screen' ) ]) ``` 上述代码创建了一个启动描述符并添加了一条指令来运行 `static_transform_publisher`,从而实现了相同的变换效果。 --- #### RViz 显示静态坐标变换 为了验证发布静态坐标变换是否正确,可以利用 RViz 工具可视化这些坐标系之间的关系[^4]。 步骤如下: 1. 打开一个新的终端窗口并启动 RViz: ```bash rviz2 ``` 2. 在 RViz 设置界面中,将 **Fixed Frame** 参数设为父坐标系名(例如 `world`)。 3. 单击左下角的 “Add” 按钮,在弹出菜单中选择 **TF** 组件以加载所有已知的坐标系及其变换关系。 此时应能看到所发布静态坐标系以及它们的空间布局。 --- ### 注意事项 - 如果需要频繁修改或动态调整坐标变换数据,建议改用其他方式(如编程接口),而不是依赖 `static_transform_publisher`。 - 对于复杂的机器人模型,通常推荐结合 URDF/Xacro 描述文件与 `robot_state_publisher` 来自动处理大部分固定不变的几何结构信息[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值