找回密码
 会员注册
查看: 20|回复: 0

创建自己的Omnigraph(python篇)

[复制链接]

1

主题

0

回帖

4

积分

新手上路

积分
4
发表于 2024-9-10 23:00:30 | 显示全部楼层 |阅读模式
Omnigraph是NvidiaOmniverse中一个强大的视觉化脚本工具,它让开发者能够以直观和灵活的方式创建复杂的行为和交互性。通过结合ActionGraphs和PushGraphs,以及利用丰富的节点库,用户可以在Omniverse平台上构建出令人惊叹的虚拟世界。omnigraph介绍https://docs.omniverse.nvidia.com/extensions/latest/ext_omnigraph.html在Omnigraph中,用户可以创建两种主要类型的图表:ActionGraphs(动作图表):这类图表允许用户定义事件驱动的行为。这意味着你可以设置一系列的动作,这些动作会在满足特定条件或事件发生时被触发。这对于创建响应式场景、游戏逻辑或交互式模拟非常有用。PushGraphs(推送图表):与ActionGraphs不同,PushGraphs会持续评估其节点。这意味着图表中的每个节点都会不断地更新其状态,并根据输入数据进行计算。这种图表类型非常适合于需要实时数据处理和反馈的场景,如物理模拟、粒子效果或动态系统。虽然Omniverse和isaacsim中已有了大量的 Omnigraph,但是很多时候这些或这些的组合在实际开发中是不够的,那就需要自己去实现一些 Omnigraph ,本文将探讨如何使用python实现自定义的 Omnigraph 。现有的Omnigraph 定义和描述https://docs.omniverse.nvidia.com/extensions/latest/ext_omnigraph/node-library/node-library.html打开  USDComposer软件,(新版的Isaacsim里没有带 NodeDescriptionEditor)点击:Window>VisualScripting>NodeDescriptionEditor这里演示做一个最简单的ros2消息发布一、创建一个OmniGraph模板和插件property属性等介绍这里就不讲了,见 OmniGraphDeveloper文档:AttributeTypeDefinition—kit-omnigraph1.26.2documentation(nvidia.com) 填好内容后,依次点击:PopulateExtension-> SaveNode-> GenerateBlankImplementation-> EditNode保存创建的Node单击“EditNode”后,会在vscode里打开python文件,这是您的节点的模板,编辑该模版,就可以实施您的节点逻辑。 生成的python模板二、实施自己的python节点逻辑我们需要1hz频率不断发布一个ros2string消息,并且将消息的索引打印出来,输出给前端显示。下面是对模板代码的更改,完成该需求:"""ThisistheimplementationoftheOGNnodedefinedinros2_easy_pub.ogn"""#Arrayortuplevaluesareaccessedasnumpyarrayssoyouprobablyneedthisimportimportnumpyimportomniimportcarb#OgnROS2CustomPythonNodeDatabasemoduleisanautogeneratedpythonmodulelocatedintheextensionandisusedlateron.importrclpyfromstd_msgs.msgimportString#BaseResetNodeclassisusedforresettingthenodewhenstoppingandplayingfromomni.isaac.core_nodesimportBaseResetNodeclassros2_easy_pub:"""publish_ros2_msg"""@staticmethoddefinternal_state():returnOgnROS2CustomPythonPubInternalState()@staticmethoddefcompute(db)->bool:"""Computetheoutputsfromthecurrentinput"""state=db.per_instance_statetry:ifnotstate.initialized:state.initialize_ros2_node('easy_ros2_pub')rclpy.spin_once(state.node,timeout_sec=0.01)db.outputs.index=state.indexexceptExceptionaserror:#IfanythingcausesyourcomputetofailreporttheerrorandreturnFalsedb.log_error(str(error))returnFalse#Evenifinputswereedgecaseslikeemptyarrays,correctoutputsmeansuccessreturnTrue@staticmethoddefrelease(node):try:state=OgnROS2CustomPythonPubInternalState.per_instance_internal_state(node)exceptException:state=NoneifstateisnotNone:state.custom_reset()classOgnROS2CustomPythonPubInternalState(BaseResetNode):def__init__(self):self.node=Noneself.index=0super().__init__(initialize=False)definitialize_ros2_node(self,node_name):try:rclpy.init()except:carb.log_error("initros2nodefailed!")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=Truedeftimer_callback(self):msg=String()msg.data='HelloWorld:{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}")#OverridingafunctionfromBaseResetNode.#Thisisautomaticallycalledwhensimulationisstopped.#ThisiswillalsobecalledwhentheOmniGraphnodeisreleased.defcustom_reset(self):ifself.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插件依赖,我们打开isaacsim,在里启动这个新建好的插件。可以看到自己创建的插件都在User目录下。然后打开 Actiongraph,搜索自己定义的graph关键词就能看到创建的graph了 下面创建一个具体的ActionGraph来测试: ros消息可以顺利发布出来了,并且索引值也正常打印和输出传给前端界面四、其它一些pythonros2 OmniGraph的例子官方为了我们更好理解摄像头和雷达的OmniGraph,开源了几个例子,在isaac_sim目录 exts\omni.isaac.ros2_bridge 里面以及exts\omni.isaac.sensor里面有激光等传感器,如 OgnIsaacPrintRTXLidarInfo可以处理并打印原始RTX激光雷达数据,OgnROS2RtxLidarHelper可以看到如何使用 replicator发布激光点云数据,如果不会创建 OmniGraph,也可以直接在这些例程上修改。可以看到创建定义和描述节点所需的两个文件.py和.ogn
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 会员注册

本版积分规则

QQ|手机版|心飞设计-版权所有:微度网络信息技术服务中心 ( 鲁ICP备17032091号-12 )|网站地图

GMT+8, 2025-1-3 03:53 , Processed in 0.448912 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表