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的选项,又找不到:

只能通过代码修改:

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/90964.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/90964.shtml
英文地址,请注明出处:http://en.pswp.cn/web/90964.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

安宝特新闻丨安宝特与Logivations正式建立合作伙伴关系,共筑物流新未来

近日,安宝特与物流创新企业Logivations签署合作协议,双方将深度融合技术专长,共同为客户提供高效、精准的智能物流解决方案,助力企业实现从人工巡检到智能管控的跨越式升级。 关于Logivations Logivations是一家深耕物流与供应链…

第三阶段—8天Python从入门到精通【itheima】-139节(pysqark实战-前言介绍)

目录 139节——pysqark实战-前言介绍 1.学习目标 2.spark是什么 3.如下是详细介绍 PySpark 的两种使用方式,并提供具体的代码示例【大数据应用开发比赛的代码熟悉如潮水一般冲刷我的记忆】: 一、本地模式(作为 Python 第三方库使用&#…

redis数据库的四种取得 shell方法

Redis作为高性能内存数据库,若配置不当(特别是未授权访问),将面临极高安全风险。攻击者可利用漏洞实现远程代码执行(GetShell),严重威胁数据安全与服务器控制权。本文深入剖析此类漏洞的核心原理…

墨者:SQL过滤字符后手工绕过漏洞测试(万能口令)

1. 墨者学院:SQL过滤字符后手工绕过漏洞测试(万能口令)🚀 2. 漏洞背景分析🔍 近期发现某登录系统存在SQL注入漏洞,攻击者可通过构造特殊用户名admin,a,a)#绕过身份验证。本文将深入解析其工作原理,并演示完整渗透测试流…

Kafka 顺序消费实现与优化策略

在 Apache Kafka 中,实现顺序消费需要从 Kafka 的架构和特性入手,因为 Kafka 本身是分布式的消息系统,默认情况下并不完全保证全局消息的顺序消费,但可以通过特定配置和设计来实现局部或完全的顺序消费。以下是实现 Kafka 顺序消费…

CSP-J 2022_第三题逻辑表达式

题目 逻辑表达式是计算机科学中的重要概念和工具,包含逻辑值、逻辑运算、逻辑运算优先级等内容。 在一个逻辑表达式中,元素的值只有两种可能:0(表示假)和 1(表示真)。元素之间有多种可能的逻辑运…

从释永信事件看“积善“与“积恶“的人生辩证法

博客目录起心动念皆是因,当下所受皆是果。"起心动念皆是因,当下所受皆是果。"这句古老的智慧箴言,在少林寺方丈释永信涉嫌违法被调查的事件中得到了令人唏嘘的印证。一位本应六根清净、持戒修行的佛门领袖,却深陷贪腐丑…

图片格式转换

文章目录 背景目标实现下载 背景 格式碎片化问题 行业标准差异:不同领域常用格式各异(如设计界用PSD/TIFF,网页用JPG/PNG/WEBP,系统图标用ICO/ICNS)。 设备兼容性:老旧设备可能不支持WEBP,专业…

Flutter实现Android原生相机拍照

方法1:使用Flutter的camera插件(完整实现) 1. 完整依赖与权限配置 # pubspec.yaml dependencies:flutter:sdk: fluttercamera: ^0.10.52path_provider: ^2.0.15 # 用于获取存储路径path: ^1.8.3 # 用于路径操作permission_handler:…

记录几个SystemVerilog的语法——随机

1. 随机稳定性(random stability)随机稳定性是指每个线程(thread)或对象(object)的random number generator(RNG)是私有的,一个线程返回的随机值序列与其他线程或对象的RNG是无关的。随机稳定性适用于以下情况:系统随机方法调用:$urandom()和…

初识 docker [下] 项目部署

项目部署Dockerfile构建镜像DockerCompose基本语法基础命令项目部署 前面我们一直在使用别人准备好的镜像,那如果我要部署一个Java项目,把它打包为一个镜像该怎么做呢? …省略一万字 站在巨人的肩膀上更适合我们普通人,所以直接介绍两种简单…

Android15广播ANR的源码流程分析

Android15的广播ANR源码流程跟了下实际代码的流程,大概如下哈:App.sendBroadcast() // 应用发起广播→ AMS.broadcastIntentWithFeature() // 通过Binder IPC进入system_server进程→ AMS.broadcastIntentLocked() // 权限校验广播分类(前…

密码学中的概率论与统计学:从频率分析到现代密码攻击

在密码学的攻防博弈中,概率论与统计学始终是破解密码的“利器”。从古典密码时期通过字母频率推测凯撒密码的密钥,到现代利用线性偏差破解DES的线性密码分析,再到侧信道攻击中通过功耗数据的统计特性还原密钥,统计思维贯穿了密码分…

力扣刷题977——有序数组的平方

977. 有序数组的平方 题目: 给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。示例 1: 输入:nums [-4,-1,0,3,10] 输出:[0,1,9,16,100] 解释&…

应用加速游戏盾的安全作用

在数字娱乐产业蓬勃发展的今天,游戏已从单纯的娱乐工具演变为连接全球数十亿用户的社交平台与文化载体。然而,伴随游戏市场的指数级增长,网络攻击的频率与复杂性也呈爆发式上升。从DDoS攻击导致服务器瘫痪,到外挂程序破坏公平竞技…

linux安装zsh,oh-my-zsh,配置zsh主题及插件的方法

这是一份非常详细的指南,带你一步步在 Linux 系统中安装 Zsh、配置主题和安装插件。 Zsh(Z Shell)是一个功能强大的 Shell,相比于大多数 Linux 发行版默认的 Bash,它提供了更强的自定义能力、更智能的自动补全、更漂亮…

【设计模式系列】策略模式vs模板模式

策略模式是什么?如何定义并封装一系列算法策略模式 (Strategy Pattern)模板模式 (Template Pattern)模板模式与策略模式的深度对比与区分混合使用两种模式的场景策略模式 (Strategy Pattern) 应用场景:当需要根据不同条件选择不同算法或行为时&#xff…

aigc(1.1) opensora-2.0

open sora-2.0相关链接: arxiv链接 huggingface页面 HunyuanVideo VAE open sora2.0的VAE模型复用了HunyuanVideo的3D VAE,HunyuanVideo的arxiv链接。下图来自论文,可见VAE是一个因果注意力的3D结构。在配图左侧,视频会被编码为video token序列,而在配图右侧,去噪的vide…

Linux驱动21 --- FFMPEG 音频 API

目录 一、FFMPEG 音频 API 1.1 解码步骤 创建核心上下文指针 打开输入流 获取输入流 获取解码器 初始化解码器 创建输入流指针 创建输出流指针 初始化 SDL 配置音频参数 打开音频设备 获取一帧数据 发送给解码器 从解码器获取数据 开辟数据空间 初始化内存 音频重采样…

《计算机“十万个为什么”》之 [特殊字符] 序列化与反序列化:数据打包的奇妙之旅 ✈️

《计算机“十万个为什么”》之 📦 序列化与反序列化:数据打包的奇妙之旅 ✈️欢迎来到计算机“十万个为什么”系列! 本文将以「序列化与反序列化」为主题,深入探讨计算机世界中数据的打包与解包过程。 让我们一起解开数据的神秘面…