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,然后添加工具验证功能。

相关推荐
新华经济5 小时前
合规+AI双驱动,Decode Global 2025重构全球服务新生态
人工智能·重构·区块链
IT老兵20255 小时前
PyTorch DDP多GPU训练实践问题总结
人工智能·pytorch·python·分布式训练·ddp
破烂pan5 小时前
2025年下半年AI应用架构演进:从RAG到Agent再到MCP的生态跃迁
人工智能·架构·ai应用
数字会议深科技5 小时前
深科技 | 高端会议室效率升级指南:无纸化会议系统的演进与价值
大数据·人工智能·会议系统·无纸化·会议系统品牌·综合型系统集成商·会议室
曦云沐5 小时前
轻量却强大:Fun-ASR-Nano-2512 语音识别模型上手指南
人工智能·语音识别·asr·fun-asr-nano
少年白char6 小时前
【AI漫剧】开源自动化AI漫剧生成工具 - 从文字到影像:AI故事视频创作的全新可能
运维·人工智能·自动化
容智信息6 小时前
容智Report Agent智能体驱动财务自动化,从核算迈向价值创造
大数据·运维·人工智能·自然语言处理·自动化·政务
Allen正心正念20256 小时前
AWS专家Greg Coquillo提出的8层Agentic AI架构分析
人工智能·架构·aws
JoannaJuanCV6 小时前
自动驾驶—CARLA仿真(25)synchronous_mode demo
人工智能·机器学习·自动驾驶·carla
骚戴6 小时前
大语言模型(LLM)进阶:从闭源大模型 API 到开源大模型本地部署,四种接入路径全解析
java·人工智能·python·语言模型·自然语言处理·llm·开源大模型