20.Isaac教程--Python接口(Python API)

news2025/2/6 9:52:52

Isaac Python接口(Python API)

在这里插入图片描述

ISAAC教程合集地址: https://blog.csdn.net/kunhe0512/category_12163211.html

虽然 Isaac SDK 的大部分部分都是用 C++ 编码的,但您可以选择使用 Python 构建您的应用程序。 本文档介绍了 Isaac SDK 的 Python API。 Python API 允许您执行以下操作:

  • 在 Python 中创建、管理和运行 Isaac 应用程序。

  • 在 Python 中访问记录的 Isaac 日志数据。

  • 使用 Python 中的行为树实现复杂的机器人行为。

在 Python 中创建应用程序

Isaac SDK 包括几个使用 Python API 编码的示例应用程序,例如 packages/flatsim/apps:flatsim。 下面的示例以一个 Python 应用程序框架开始。

首先,需要一个 Bazel 目标以及 Python 代码本身:

load("@com_nvidia_isaac_sdk//bzl:py.bzl", "isaac_py_app")

isaac_py_app(
    name = "foo_app",
    srcs = [ "foo_app.py" ],
    data = [ "foo_subgraph" ],
    modules=[ 'viewers' ],
    deps = [ "//packages/pyalice" ],
)

除了 src 和数据等通用定义外,模块还引入了 Isaac SDK 附带的指定模块。

要在 PC 上运行该应用程序,请使用以下命令:

bazel run //apps/foo_app:foo_app

要在 Jetson 设备上运行它,首先使用 deploy.sh 脚本(来自 sdk/ 子目录)部署它:

./../engine/engine/build/deploy.sh -h <jetson_ip> -p //apps/foo_app:foo_app-pkg -d jetpack45

其中 jetson_ip 是 Jetson 设备的 IP。

然后,在 Jetson 设备上运行这个应用程序:

./run ./apps/foo_app/foo_app.py

要使用 Python API 创建 Isaac 应用程序实例,请使用“engine.pyalice.Application”导入并创建实例。 与 C++ 一样,init 函数可以将应用程序 JSON 文件的路径作为参数:

from engine.pyalice import Application

app = Application(name="foo_app")

使用应用程序实例,您可以像使用 *.app.json 文件一样加载 Isaac 子图:

app.load("apps/foo_app/foo.subgraph.json", prefix="foo")

除了加载预先编写的计算图外,Python API 还可以使事情变得更加灵活。 例如,Isaac SDK 中的许多小码都是由位于 packages 文件夹中的模块提供的,这些模块必须通过 *.app.json*.subgraph.json 文件加载,就像在 C++ 应用程序中一样:

{
  "name": "foo_app",
  "modules": [
    "message_generators",
    "viewers"
  ]
}

此处 message_generators 模块提供虚拟小码,用于发布预配置消息以用于测试目的。 查看器模块提供在 Sight 中可视化消息的小码。

使用 Python API,除了在 JSON 文件中指定模块外,您还可以在创建应用程序和认为有必要时加载模块:

app = Application(name="foo_app", modules=["message_generators"])
app.load_module('viewers')

注意

确保在从模块提供的小码创建实例或加载任何使用小码的子图之前加载模块。

与其 C++ 对应物一样,应用程序使用由组件组成的节点来管理计算图。 现在,让我们创建一个节点,并从我们刚刚在上面加载的查看器模块提供的 ImageViewer codelet 中附加一个组件:

node = app.add(name='viewer')
component = node.add(name='ImageViewer',
                     ctype=app.registry.isaac.viewers.ImageViewer)

在这里,app.add() 函数返回一个节点实例,而 node.add() 函数返回一个组件实例。 这些实例也可以按如下方式检索:

node = app.nodes['viewer']
component = node['ImageViewer']

现在将 target_fps 的配置参数设置为 15fps。 有关其配置参数的详细信息,请参阅 isaac.viewers.ImageViewer API 条目。

component.config.target_fps = 15.0

同样,您可以从发布消息的 CameraGenerator codelet 创建一个组件,并按如下方式配置它。 注意CameraGeneratormessage_generators模块提供的,需要提前加载。

image_node = app.add(name='camera')
camera_generator = node.add(name='CameraGenerator',
                            ctype=app.registry.isaac.message_generators.CameraGenerator)
camera_generator.config.rows = 480
camera_generator.config.cols = 640
camera_generator.config.tick_period = '15Hz'

现在我们有一个发布消息的生成器组件和一个可视化消息的查看器组件。 我们可以连接这些组件,以便将生成的消息发送到查看器组件:

app.connect(camera_generator, "color_left", component, "color")
app.connect('camera/CameraGenerator', 'color_left', 'viewer/ImageViewer', 'image')

在这里,可以使用上述实例或它们的名称来指定组件。

通过上面的代码,我们现在有了一个完整的应用程序图。 您可以使用 run() 函数运行它。 调用不带参数的 run() 允许它无限期地运行。 您还可以指定它运行一段时间(以秒为单位)或在特定节点不再运行时停止:

app.run()

app.run(10.0)

app.run('foo_node')

在所有情况下,按 Ctrl-C 将停止应用程序。

访问Cask Logs

Cask 是 Isaac SDK 中使用的记录格式。 记录和回放日志请参考:记录和回放。 可以在 apps/samples/camera/record_dummy.py 中找到用于记录日志的示例应用程序。

假设你在/path/to/log/文件夹下有记录的日志,你可以用Python加载日志,如下:

from isaac import Cask, Message
cask = Cask('/path/to/log/')

# List all channels recorded
series = cask.channels['foo_channel']:    # Looks for channel named 'foo_channel'
for msg in series:                        # Goes through every messages one by one in recorded order
   print(msg.proto)
   print(msg.uuid)
   print(msg.acqtime)
   print(msg.pubtime)

行为树

Isaac SDK 具有一个称为行为树的特殊模块,它提供了不同的小码,可用于管理复杂应用程序行为的其他小码。 例如,TimerBehavior 可以启动一个特定的小代码,并在关闭它之前让它运行指定的持续时间。 另一方面,SwitchBehavior 可用于在预配置模式之间切换行为。

在创建和操作 Behavior codelet 之前,确保模块已加载:

app.load_module('behavior_tree')

行为小码也可以由其他行为小码管理——您可以通过堆叠行为来创建相当复杂的功能。

您可以通过使用 Python API 创建和配置这些行为代码来实现更大的灵活性。

使用Python开发Codelet的示例请参考:Developing Codelets in Python。

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

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

相关文章

Day859.高性能队列Disruptor -Java 并发编程实战

高性能队列Disruptor Hi&#xff0c;我是阿昌&#xff0c;今天学习记录的是关于高性能队列Disruptor的内容。 并发容器 中Java SDK 提供了 2 个有界队列&#xff1a; ArrayBlockingQueueLinkedBlockingQueue 它们都是基于 ReentrantLock 实现的&#xff0c;在高并发场景下&…

人工智能的过去与未来——萌芽

1943年—M-P模型 美国神经生理学家Warren McCulloch和数理逻辑学家Walter Pitts在合作的《A logical calculus of the ideas immanent in nervous activity》论文中对生物神经元进行建模&#xff0c;并提出了一种形式神经元模型&#xff0c;命名为McCulloch-Pitts模型。 生物…

65. Python __init__方法

65. __init__方法 文章目录65. __init__方法1. 知识回顾在类的方法中调用类的属性2. 知识回顾调用方法时传值3.体验__init__方法4. __init__的作用5. __init__方法的写法6. __init__方法调用类的属性7. 课堂实操1. 知识回顾在类的方法中调用类的属性 【目标任务】 创建一个类…

C++程序设计——类的六个成员函数

类的六个成员函数 空类中真的什么都没有吗&#xff1f; 事实上任何一个类&#xff0c;在我们不写的情况下&#xff0c;都会自动生成6个默认的成员函数。 1.构造函数 概念&#xff1a; 构造函数是一个特殊的成员函数&#xff0c;名字与类名相同&#xff0c;实例化对象时由编译器…

【基于机械臂触觉伺服的物体操控研究】几种轨迹规划的算法及代码实现

我的毕设题目定为《基于机械臂触觉伺服的物体操控研究》&#xff0c;这个系列主要用于记录做毕设的过程。 轨迹规划是机器人绕不过去的话题&#xff0c;其目的是为了让机器人的运动更加的平滑。对于四足机器人&#xff0c;贝赛尔曲线的应用比较普遍。而对于机械臂&#xff0c;…

【C++】C++ 入门(一)

目录 一、前言 1、什么是C 2、C关键字(C98) 二、第一个C程序 三、命名空间 1、存在意义 2、命名空间定义 3、命名空间的使用 3.1、指定命名空间访问 3.2、全局展开访问 3.3、部分展开访问 四、C输入&输出 五、缺省参数 1、缺省参数概念 2、缺省参数分类 2.…

【Day4】24两两交换链表中的节点、19删除链表的倒数第N个节点、链表相交、142环形链表Ⅱ

【Day4】24两两交换链表中的节点、19删除链表的倒数第N个节点、160链表相交、142环形链表Ⅱ24.两两交换链表的点19.删除链表的倒数第N个节点160链表相交 面试题02.07142 环形链表Ⅱ判断链表是否有环若链表有环&#xff0c;如何找到环的入口24.两两交换链表的点 题目链接&#…

Spacedesk 安装教程及连接后黑屏解放方法

spacedesk 安装教程1. Spacedesk 概述2. Spacedesk 安装教程2.1 下载 Spacedesk2.2 连接计算机的 Spacedesk3. 被拓展的设备连接后黑屏的解决方法结束语1. Spacedesk 概述 Spacedesk 是一款低延迟的免费显示器拓展软件&#xff0c;且不需要线材将不同设备连接&#xff1b; Spa…

MySQL中的普通索引和唯一索引实际开发中的选择

文章目录前言一、普通索引和唯一索引介绍二、查询语句的比较三、更新语句的比较四、索引的选择和实践前言 本文我们将会从针对普通索引与唯一索引的增删改查的具体执行流程&#xff0c;来看看效率的对比。以便让我们在实际业务开发中可以进行更好的选择。 一、普通索引和唯一索…

动态规划系列 —— 背包问题

什么是背包问题 背包问题是有N件物品&#xff0c;容量为V的背包 每个物品有两个属性&#xff1a;体积&#xff0c;价值&#xff0c;分别用数组v&#xff0c;w表示 第i件物品的体积为v[i]&#xff0c;价值为w[i] 计算在背包装得下的情况下&#xff0c;能装的最大价值是多少&…

MATLAB 图像处理大作业

1、基础知识利用 MATLAB 提供的 Image file/IO 函数完成以下处理&#xff1a;&#xff08;a&#xff09;以测试图像中心为圆心&#xff0c;图像长宽中较小值一半为半径画一个红颜色的圆&#xff1b;&#xff08;b&#xff09;将测试图像涂成国际象棋状的‘黑白格’样子&#xf…

华芯片特微 M33内核 KEIL5环境配置不上问题

1 JFLASH连接不上问题 官方手册有说解决这个问题 2 JFLASH能连接上KEIL提示no found sw-dp 在替换keil下载算法后还是提示no found sw-dp 1 怀疑是keil 527版本太高了, 就换了518 还是不行 2 怀疑是keil检测到盗版了就不让下, 替换Jlink为以前老版本还是不行 解决方案: 下…

聊天气泡图片的动态拉伸、适配与镜像

聊天气泡图片的动态拉伸、适配与镜像前情提要创建.9.png格式的图片从资源文件夹加载.9.png图片从本地文件加载“.9.png”图片项目痛点进阶探索iOS中的方式Android中的探索构造chunk数据构造padding数据镜像翻转功能屏幕的适配简单封装演示示例一条线段控制的拉伸两条线段控制的…

Pandas 安装与教程

前言Pandas 是 Python 语言的一个扩展程序库&#xff0c;用于数据分析。Pandas 是一个开放源码、BSD 许可的库&#xff0c;提供高性能、易于使用的数据结构和数据分析工具。Pandas 名字衍生自术语 "panel data"&#xff08;面板数据&#xff09;和 "Python data…

[apidoc]Apidoc-文档生成工具

Apidoc主要是用于生成API文档的工具&#xff0c;可以用于多种语言&#xff0c;包括java、javascript、php等 这里主要是为了写前端的APIDOC&#xff0c;方便交互是双方的使用; 工具的安装 工具包的安装 npm i apidoc [-g|-D]可以-g全局安装&#xff0c;或者-D局部安装,因为…

网盘系统|基于SpringBoot的网盘系统的设计与实现

作者主页&#xff1a;编程指南针 作者简介&#xff1a;Java领域优质创作者、CSDN博客专家 、掘金特邀作者、多年架构师设计经验、腾讯课堂常驻讲师 主要内容&#xff1a;Java项目、毕业设计、简历模板、学习资料、面试题库、技术互助 收藏点赞不迷路 关注作者有好处 文末获取源…

【无功优化】考虑泄流效应的光伏并网点电压系统侧无功优化(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

软考中级,【软件评测师】经验分享

&#xff0c;以下是我的考试成绩&#xff0c;一次通过很是幸运&#xff0c;希望把我的好运传递给大家&#xff0c;大家都能一次通过谈经验之前&#xff0c;先和大家说说考试的题型以及考试的内容&#xff0c;根据往年的考试题目我们可以很容易得知&#xff0c;软件评测师考试分…

Cisco(62)——PBR策略路由案例

场景1-单下一跳: 拓扑: 需求: R1和R2均连接100.100.100.100,R4看做一台PC,当PC访问100.100.100.100的时候优先走左边,当左边down掉之后切换到右边链路,使用PBR操作。 实现: 1.IP地址等基本配置 R4: R4(config)#no ip routingR4(config)#int e0/0 R4(config-if)#ip add…

Typora自动上传文章图片太难折腾?十三行JavaScript代码足矣

前言 Typora是我用过最爽的markdown文本编辑器了。但是有一点很让人难受&#xff0c;就是在写文章的时候&#xff0c;粘贴上的图片是本地路径。这就导致在复制文章到各大博客平台时发表&#xff0c;图片无法显示。然后需要各种办法去处理文章中的图片&#xff0c;不仅要手动上传…