11. isaacsim4.2教程-Transform 树与Odometry

1. 前言

学习目标

在本示例中,你将学习如何:

  • 使用 TF 发布器将相机作为 TF 树的一部分发布

  • 在 TF 上发布机械臂/可动结构(articulation)的树状结构

  • 发布里程计(Odometry)消息


开始之前

前置条件

  • 已完成 "ROS 相机" 和 "URDF 导入:Turtlebot" 教程

  • 已启用 ROS Bridge,且 roscore 正在运行


2. TF 树发布器

假设你已经完成了 ROS 相机教程,并且场景中已有两台相机。接下来,我们要把它们添加到 TF 树里,这样就能实时跟踪它们在全局坐标系中的位置了。

  1. 打开或新建一个 Action Graph

    • 转到 Window → Visual Scripting → Action Graph,打开一个新的或已有的可视化脚本编辑窗口。
  2. 添加 ROS1 Publish Transform Tree 节点

    • 在图中拖入一个 ROS1 Publish Transform Tree 节点。

    • 将它的输入连接到 On Playback Tick (每帧触发)和 Isaac Read Simulation Time(仿真时间)节点,如下示例布局。

  3. 配置目标 Prim

    • 选中 ROS1 Publish Transform Tree 节点,在 Property 面板的 targetPrims 字段中填写:
  4. 查看 TF 树 : rostopic echo /tf

3. 关节式机器人坐标变换

要获取关节式机器人中每个连杆(linkage)的坐标变换,只需将机器人的根 Articulation Root 加入 targetPrims 字段。Articulation Root 之后的所有连杆都会被自动发布。

  • targetPrims 字段中添加:

    /World/turtlebot3_burger

在 ROS 终端运行: rostopic echo /tf

验证机器人所有连杆(无论是固定的还是可动的)的变换是否都发布到了 /tf 话题。

重要提示

如果你发现对关节式机器人生成的 TF 树选错了根连杆(root link),可以手动指定 Articulation Root。

这种情况常见于使用 URDF Importer 导入机器人时,勾选了 "Merge Fixed Link" 选项,或是移动机器人模型。

  1. Stage Tree 中选中机器人的根 Prim,在它的 Raw USD Properties 面板里找到 Articulation Root 部分,点击右上角的 X 将其删除。

  2. Stage Tree 中选中你想设为根的连杆,在它的 Raw USD Properties 面板里点击 + ADD,选择 Physics > Articulation Root,将其添加。

我是通过python脚本修改的,因为我没有添加root的选项,又找不到:

只能通过代码修改:

python 复制代码
from pxr import Usd, UsdPhysics, UsdGeom

# 打开当前 Stage
stage = Usd.Stage.Open("path/to/your/scene.usd")

# 定位到你的机器人根 Xform(比如:/World/robot_root)
robot_root = stage.GetPrimAtPath("/World/robot_root")
if not robot_root:
    raise RuntimeError("找不到 /World/robot_root")

# 确保它是一个 Xform
UsdGeom.XformCommonAPI(robot_root).GetResetXformStack()

# 给它附上 ArticulationRoot API
UsdPhysics.ArticulationRootAPI.Apply(robot_root)

# 保存
stage.GetRootLayer().Save()

4. 发布相对坐标变换

默认情况下,所有变换都是相对于世界坐标系(/World)。例如,你可以看到 TurtleBot 的 /base_link 变换是相对于 /World 发布的。

如果想让变换相对于其他坐标系(比如某个相机),请在 parentPrim 字段中指定该父坐标系。

本示例中,我们希望 TurtleBot 的所有 Prim 都以 /base_link 作为父坐标系:

  • parentPrim 字段中填入:

    /World/turtlebot3_burger/base_link

  • 在修改属性后,务必先 StopPlay 仿真,以验证 /base_link 是否已成为所有机器人连杆和相机帧的父坐标系。

5. Odometry发布器

把之前的tf图删掉,重新在Odometry中构建,否则会有两个Transform Tree ,导致冲突!!!

要设置Odometry发布器,请按照下图所示构建一个 Action Graph:

  1. Create → Visual Scripting → Action Graph 中新建或打开一个 Action Graph。

  2. 向图中添加以下节点,并用 On Playback Tick 触发它们,每帧执行一次:

    • Isaac Read Simulation Time:读取仿真时间。

    • Isaac Compute Odometry:计算机器人当前位置。

    • ROS1 Publish Odometry :将里程计消息发布到 /odom 话题。

    • ROS1 Publish Transform Tree (或 Raw TF 发布器):将从 /odom/base_link 的单一坐标变换发布到 TF。

  3. Isaac Compute Odometry 节点的属性面板(Property)中,将 Chassis Prim 输入字段设置为你的 TurtleBot 实例(例如 /World/turtlebot3_burger),这样该节点就能根据机器人底盘计算Odometry

  4. 启动仿真并运行以下命令,查看构建好的 TF 树:rosrun rqt_tf_tree rqt_tf_tree

6. 测试TurtleBot

rosrun rviz rviz,然后添加工具验证功能。

相关推荐
白-胖-子1 小时前
深入剖析大模型在文本生成式 AI 产品架构中的核心地位
人工智能·架构
静心问道3 小时前
InstructBLIP:通过指令微调迈向通用视觉-语言模型
人工智能·多模态·ai技术应用
宇称不守恒4.04 小时前
2025暑期—06神经网络-常见网络2
网络·人工智能·神经网络
小楓12014 小时前
醫護行業在未來會被AI淘汰嗎?
人工智能·醫療·護理·職業
数据与人工智能律师4 小时前
数字迷雾中的安全锚点:解码匿名化与假名化的法律边界与商业价值
大数据·网络·人工智能·云计算·区块链
chenchihwen4 小时前
大模型应用班-第2课 DeepSeek使用与提示词工程课程重点 学习ollama 安装 用deepseek-r1:1.5b 分析PDF 内容
人工智能·学习
说私域5 小时前
公域流量向私域流量转化策略研究——基于开源AI智能客服、AI智能名片与S2B2C商城小程序的融合应用
人工智能·小程序
Java樱木5 小时前
AI 编程工具 Trae 重要的升级。。。
人工智能
凪卄12135 小时前
图像预处理 二
人工智能·python·深度学习·计算机视觉·pycharm