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

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

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

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: python