创建自己的 Omnigraph (python篇)

Omnigraph 是 Nvidia Omniverse 中一个强大的视觉化脚本工具,它让开发者能够以直观和灵活的方式创建复杂的行为和交互性。通过结合 Action GraphsPush Graphs,以及利用丰富的节点库,用户可以在 Omniverse 平台上构建出令人惊叹的虚拟世界。

omnigraph介绍icon-default.png?t=N7T8https://docs.omniverse.nvidia.com/extensions/latest/ext_omnigraph.html

在 Omnigraph 中,用户可以创建两种主要类型的图表:

  1. Action Graphs(动作图表):这类图表允许用户定义事件驱动的行为。这意味着你可以设置一系列的动作,这些动作会在满足特定条件或事件发生时被触发。这对于创建响应式场景、游戏逻辑或交互式模拟非常有用。

  2. Push Graphs(推送图表):与 Action Graphs 不同,Push Graphs 会持续评估其节点。这意味着图表中的每个节点都会不断地更新其状态,并根据输入数据进行计算。这种图表类型非常适合于需要实时数据处理和反馈的场景,如物理模拟、粒子效果或动态系统。

虽然Omniverse和isaac sim中已有了大量的 Omnigraph ,但是很多时候这些或这些的组合在实际开发中是不够的,那就需要自己去实现一些 Omnigraph ,本文将探讨如何使用python实现自定义的 Omnigraph 。

现有的Omnigraph 定义和描述icon-default.png?t=N7T8https://docs.omniverse.nvidia.com/extensions/latest/ext_omnigraph/node-library/node-library.html

打开  USD Composer 软件,(新版的Isaac sim里没有带 Node Description Editor

点击:Window > Visual Scripting > Node Description Editor

这里演示做一个最简单的ros2 消息发布

一、创建一个OmniGraph模板和插件

property属性等介绍这里就不讲了,见 OmniGraph Developer 文档:

Attribute Type Definition — kit-omnigraph 1.26.2 documentation (nvidia.com)

 填好内容后,依次点击:

Populate Extension -> Save Node -> Generate Blank Implementation -> Edit Node

保存创建的Node

单击“Edit Node” 后, 会在vscode里打开 python 文件,这是您的节点的模板,编辑该模版,就可以实施您的节点逻辑。

 生成的python模板

二、实施自己的python节点逻辑

我们需要1hz频率不断发布一个ros2 string消息,并且将消息的索引打印出来,输出给前端显示。下面是对模板代码的更改,完成该需求:

"""
This is the implementation of the OGN node defined in ros2_easy_pub.ogn
"""# Array or tuple values are accessed as numpy arrays so you probably need this import
import numpy
import omni
import carb# OgnROS2CustomPythonNodeDatabase module is an autogenerated python module located in the extension and is used later on.
import rclpy
from std_msgs.msg import String# BaseResetNode class is used for resetting the node when stopping and playing
from omni.isaac.core_nodes import BaseResetNodeclass ros2_easy_pub:"""publish_ros2_msg"""@staticmethoddef internal_state():return OgnROS2CustomPythonPubInternalState()@staticmethoddef compute(db) -> bool:"""Compute the outputs from the current input"""state = db.per_instance_statetry:if not state.initialized:state.initialize_ros2_node('easy_ros2_pub')rclpy.spin_once(state.node, timeout_sec=0.01)db.outputs.index = state.indexexcept Exception as error:# If anything causes your compute to fail report the error and return Falsedb.log_error(str(error))return False# Even if inputs were edge cases like empty arrays, correct outputs mean successreturn True@staticmethoddef release(node):try:state = OgnROS2CustomPythonPubInternalState.per_instance_internal_state(node)except Exception:state = Noneif state is not None:state.custom_reset()class OgnROS2CustomPythonPubInternalState(BaseResetNode):def __init__(self):self.node = Noneself.index = 0super().__init__(initialize=False)def initialize_ros2_node(self, node_name):try:rclpy.init()except:carb.log_error("init ros2 node failed!")self.node = rclpy.create_node(node_name)self.pub = self.node.create_publisher(String, 'chatter', 10)timer_period = 1.0self.tmr = self.node.create_timer(timer_period, self.timer_callback)self.initialized = Truedef timer_callback(self):msg = String()msg.data = 'Hello World: {0}'.format(self.index)self.index += 1# self.get_logger().info('Publishing: "{0}"'.format(msg.data))self.pub.publish(msg)carb.log_info(f"msg: {msg.data}")# Overriding a function from BaseResetNode.# This is automatically called when simulation is stopped.# This is will also be called when the OmniGraph node is released.def custom_reset(self):if self.node:self.node.destroy_node()self.node = Noneself.initialized = Falserclpy.try_shutdown()

这里程序是ros2消息发布,依赖ros2_bridge插件,所以需要在插件配置文件里,添加该插件。打开创建的扩展文件夹根目录,然后打开config/extension.toml文件。查找[dependencies]部分并在其下添加以下行。保存并关闭。

"omni.isaac.ros2_bridge" = {}

三、启用插件和验证开发的OmniGraph

扩展管理器中,查找创建好的新扩展,这次创建的扩展名字叫 omni.new.extension ,我们直接搜索,在第三方插件那里即可显示出来。

由于需要ros2_bridge插件依赖,我们打开isaac sim,在里启动这个新建好的插件。 可以看到自己创建的插件都在User目录下。

然后打开 Action graph , 搜索自己定义的graph关键词就能看到创建的graph了

 下面创建一个具体的Action Graph来测试:

 ros消息可以顺利发布出来了,并且索引值也正常打印和输出传给前端界面


四、其它一些python ros2 OmniGraph的例子

官方为了我们更好理解摄像头和雷达的OmniGraph,开源了几个例子,在 isaac_sim 目录 exts\omni.isaac.ros2_bridge 里面以及 exts\omni.isaac.sensor 里面有激光等传感器,如 OgnIsaacPrintRTXLidarInfo 可以处理并打印原始RTX激光雷达数据,OgnROS2RtxLidarHelper 可以看到如何使用 replicator 发布激光点云数据,如果不会创建 OmniGraph,也可以直接在这些例程上修改。

可以看到创建定义和描述节点所需的两个文件.py.ogn

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/3280149.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

【书生大模型实战】L1-LangGPT结构化提示词编写实践

一、关卡任务 背景问题&#xff1a;近期相关研究发现&#xff0c;LLM在对比浮点数字时表现不佳&#xff0c;经验证&#xff0c;internlm2-chat-1.8b (internlm2-chat-7b)也存在这一问题&#xff0c;例如认为13.8<13.11。 任务要求&#xff1a;利用LangGPT优化提示词&#x…

【爱创大师】【数学】一元一次方程的实现

科技 教育 艺术 跨界融合&#xff0c;欢迎来到爱创大师 问题引入&#xff1a; 同学们还记得啥是一元一次方程吗&#xff0c;来回顾一下定义 一元一次方程指只含有一个未知数、未知数的最高次数为1且两边都为整式的等式。一元一次方程只有一个根。一元一次方程可以解决绝大多…

【2024最新】国内6个免费的AI绘画网站,支持Midjourney等绘画模型

一、什么是AI绘画&#xff1f; AI绘画&#xff0c;也称为人工智能绘画或机器生成艺术&#xff0c;是指使用人工智能技术来创作视觉艺术作品的过程。这种技术通常涉及到深度学习模型&#xff0c;尤其是生成对抗网络&#xff08;GANs&#xff09;和变分自编码器&#xff08;VAEs…

3d动画软件blender如何汉化?(最新版本4.2)

前言 Blender是一个非常强大的3d动画软件&#xff0c;总能受到大量工作者的青睐。 但是&#xff0c;对于新手来说&#xff08;尤其是英语学渣&#xff09;&#xff0c;语言是个难事。大部分blender打开时都是英文&#xff0c;对新手使用具有一定的障碍。因此&#xff0c;我们需…

向量数据库(二):Qdrant

写在前面 我们借助 Qdrant 来了解向量数据库的一些内容 内容 什么是 Qdrant? Qdrant 是一个开源的针对向量相似性搜索的引擎,它提供了一系列的 API 用于对向量数据进行存储、搜索和管理等功能。 下面是来自 Qdrant 官网的一个架构图: 初步了解 Qdrant 里的一些概念 …

【Qt】QComboBox和QListWidget样式调整问题

总是遇到一些重复的问题&#xff0c;隔得时间长了&#xff0c;就又忘记了&#xff0c;记录一下。 问题1&#xff1a; QComboBox下拉条目高度设置不生效的问题&#xff0c;在样式中设置了item的高度&#xff0c;但是不生效。 解决办法&#xff1a; 创建QCoboBox的时候&#…

SM2p256v1椭圆曲线点加点减倍点python实现代码

首先给出SM2p256v1椭圆曲线的建议参数如下&#xff1a; default_ecc_table {n: FFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFF7203DF6B21C6052B53BBF40939D54123,p: FFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFFFFFF,g: 32c4ae2c1f1981195f9904466a39c9948fe30bbff266…

freemodbus libmodbus

相比libmodbus, freeModbus看起来更舒服。 1. 文件与函数&#xff1a;FreeModbus每个文件函数都不是很多。客户端、服务端函数分开。相对每个函数功能比较明确 freeModbus mbfuncholding_m.c、mbfuncholding.c 函数一共就几个&#xff0c;只看函数列表就猜到函数功能 服务端…

数据库基础-认识数据库

文章目录 0.MySQL登录的基本介绍&#xff1a;1.数据库概念&#xff1a;2.见一见数据库3.主流数据库4.服务器&#xff0c;数据库和表之间的关系 0.MySQL登录的基本介绍&#xff1a; 1.数据库概念&#xff1a; 我们能看见mysqld&#xff0c;但是数据库还是没有看到。 2.见一见数…

SSRF-labs-master靶场

目录 file_get_content.php sql_connect.php download.php dns-spoofing.php dns_rebinding.php 访问链接 http://127.0.0.1/SSRF/# file_get_content.php 在编程语言中&#xff0c;有一些函数可以获取本地保存文件的内容。这些功能可能能够从远程URL以及本地文件 如果没…

Python 【机器学习】 进阶 之 【实战案例】房价数据中位数分析 | 1/2(含分析过程)

Python 【机器学习】 进阶 之 【实战案例】房价数据中位数分析 | 1/2&#xff08;含分析过程&#xff09; 目录 Python 【机器学习】 进阶 之 【实战案例】房价数据中位数分析 | 1/2&#xff08;含分析过程&#xff09; 一、简单介绍 二、机器学习 1、为什么使用机器学习&a…

免费【2024】springboot 厨房达人美食分享平台

博主介绍&#xff1a;✌CSDN新星计划导师、Java领域优质创作者、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流✌ 技术范围&#xff1a;SpringBoot、Vue、SSM、HTML、Jsp、PHP、Nodejs、Python、爬虫、数据可视化…

体育赛事中的AI运用

7月24日&#xff0c;国际奥委会&#xff08;IOC&#xff09;举办了新闻发布会&#xff0c;宣布计划在2024年巴黎奥运会上展示一系列创新的人工智能&#xff08;AI&#xff09;技术。这次会议不仅是对即将到来的奥运赛事的预热&#xff0c;也深入探讨了人工智能在体育领域可能带…

9000字干货:从消息流平台Serverless之路,看Serverless标准演进

本文分享自华为云社区《9000字干货&#xff1a;从消息流平台Serverless之路&#xff0c;看Serverless标准演进》 这是一个最美好的时代。 随着以数字化升级为代表的第四次工业革命浪潮的席卷&#xff0c;企业正在不断地深化运用这一技术&#xff0c;构建一个又一个全连接&…

从零开始,快速打造API:揭秘 Python 库toapi的神奇力量

在开发过程中&#xff0c;我们常常需要从不同的网站获取数据&#xff0c;有时候还需要将这些数据转化成API接口提供给前端使用。传统的方法可能需要大量的时间和精力去编写代码。但今天我要介绍一个神奇的Python库——toapi&#xff0c;它可以让你在几分钟内创建API接口&#x…

Axure中继器:数据动态展示的强大工具

在Axure RP这一强大的原型设计工具中&#xff0c;中继器&#xff08;Repeater&#xff09;无疑是一颗璀璨的明珠。它以其独特的功能和广泛的应用场景&#xff0c;成为设计师在创建数据密集型原型时的首选。本文将深入探讨Axure中继器的特点、使用方式及其在数据动态展示中的重要…

arr[:,0] arr[...,0]

1. arr[:, 0]相当于arr[:,0,:] 表示取arr第0维全取&#xff0c;第一维只取0&#xff0c;后面的维度全取 arr torch.tensor([ [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]], [[13, 14, 15, 16], [17, 18, 19, 20], [21, 22, 23, 24]] ]) arr1arr[:, 0] print(a…

docker安装elasticsearch(es)最新版本

docker安装elasticsearch&#xff08;es&#xff09; docker官网 https://hub.docker.com/ https://www.cnblogs.com/balloon72/p/13177872.html 1、拉取最新项目elasticsearch docker pull elasticsearch:8.14.3lscpu 查看架构 2、构建环境 mkdir -p /data/elasticsear…

创建完整的APP页面

完整的页面创建过程包括三个步骤 在layout目录下创建XML文件 创建与XML文件对应的Java代码 在AndroidMainfest.xml&#xff08;清单文件&#xff09;中注册页面配 一步到位的activity创建 跳转&#xff1a;意图 创建一个意图实例&#xff0c;使用setClass&#xff08;&#…

【论文阅读】SAM 2:Segment Anything in Images and Videos

SAM 2&#xff1a;Segment Anything in Images and Videos 官方代码 论文地址 SAM 2&#xff1a;Segment Anything in Images and Videos SAM 2&#xff1a;Segment Anything in Images and Videos摘要引言模型整体介绍各个模块Image encoderMemory attentionPrompt encoder a…