在这篇文章中,我们将探讨这个特性,并分享如何使用 Python 构建您自己的 ISAAC 应用程序的分步指南。我们在 ISAAC SDK 中介绍 Python 编程,并举例说明如何创建应用程序;如何使用代码、模块和数据流;以及如何处理不同的数据类型。我们用示例来总结文章,将子图添加到同一个应用程序中,并将其部署到 Jetson 上。我们还将向您展示如何使用 Jupyter 笔记本电脑,这是一个面向 Python 开发人员的强大 UI 工具。对于更高级的 Python 开发人员,我们还提供了在移动机器人上部署 ISAAC 应用程序以及在 ISAAC Sim 中部署协作机器人手臂的例子。
在 ISAAC SDK 中,数据由传感器生成,并在代码实例之间流动,直到它们被执行器消耗。要从加载的 codelet 创建实例,请在调用之前将以下代码添加到 Python 应用程序应用程序运行.
数据应该在代码之间流动。但是,必须在它们之间建立连接才能使数据流动。从文档中可以看出, CameraGenerator 有三个输出通道。选择 ColorCameraProto 消息发布到的 color _ left 频道。类似地,您可以看到 ColorCameraViewer 代码从 color_listener 通道读取消息。连接它们(称为“边缘”):
ISAAC SDK 允许您在应用程序中使用多个数据源:
在本节中,我们将解释如何在 Python 应用程序中使用这些数据类型。
如前所示, PythonAPI 提供了处理不同环境的灵活性。
使用真实的传感器数据是直观的,但是这样做并不总是实际可行的。木桶能帮上忙。 Cask 是用于记录 ISAAC SDK 中的消息的格式。在 ISAAC SDK 中,可以记录一个消息流,并在以后回放以用于调试或分析。要从 Realsense 摄像头录制图像流,请尝试在 //apps/samples/camera:record_realsense 运行示例应用程序。
有了录音桶,你可以在没有真正的传感器的情况下随时随地重放和播放消息流。假设记录的容器位于 /home/bob/cask/ 的文件夹中。您可以使用 Replay 代码来检索消息:
类似地,您可以向 Python 应用程序添加一个 cask 作为一个可能的选项,就像您使用 realseness camera 一样。这里,名称 color 是用于记录彩色相机图像流的通道名称。然后你就可以查看视频流,就好像它来自真实的摄像机一样。
如前所述,您已经有了一个 Python 应用程序,可以在记录的传感器数据( cask )和真实传感器数据( camera )之间切换。现在再添加一个可能的数据源:来自 ISAAC Sim Unity3D 的模拟传感器。将 Sim 选项添加到命令行参数源,并将模拟相机消息流连接到查看器以进行可视化,如以下代码示例所示:
启动 ISAAC 是 Unity3D :
镜头来自安装在模拟机器人上的模拟摄像机。试着在模拟图形用户界面( GUI )上玩一些可移动的物体,比如纳米盒子,看看模拟相机的工作原理和真相机一样。
正如您所注意到的,组件(从代码创建的实例)和连接它们的边组成了一个图形。这样的图可以从 JSON 文件加载,也可以根据需要从 Python 应用程序加载。有关详细信息,请参阅 MIG 。
在 Python 应用程序中,可以使用以下命令加载它:
当加载多个子图时,命名冲突 MIG ht 会发生,因为在任何应用程序中,节点都需要具有唯一的名称。若要避免此类冲突,请使用另一个参数加载子图:
现在有了一个 Python 应用程序。在真正的 Jetson 板上运行只需要一个命令:
使用 SSH 连接到您的 Jetson 板或从 GUI 打开一个终端并检查文件夹 /home/nvidia/deploy/bob/mybot-pkg 。如果您在 Jetson 和开发设置上使用不同的用户名,请将 nvidia 替换为 Jetson 板上的用户名,将 bob 替换为开发设置上的用户名。
使用以下命令在 Jetson 上运行应用程序:
如果您在 PC 机上使用 ISAAC Sim Unity3D ,则可以正常通信。
以类似于 Jetson 板或 X86 工作站的方式部署应用程序,并使用以下命令启动 Jupyter :
你现在可以走了。 run 函数被阻塞,只有在 robotic 应用程序停止时才返回。要以交互方式使用 robotics 应用程序,请相应地使用 start 和 stop 函数。
以下是应用程序中发生的情况。第一件事是加载一个子图,允许通过 TCP 与模拟器通信。
若要为关节生成平滑运动,请为节点加载另一个子图:
该子图封装 LQR 规划器的节点,生成当前关节状态和目标关节位置的命令。将仿真节点与规划器的节点连接起来,以使机械臂关节状态消息和命令消息在它们之间流动:
用 Python 编码的代码集 PyCodelet JointPositionControl 从滑块读取目标关节位置值,并将这些值作为 CompositeProto 消息发布:
然后, JointPositionControl 代码集连接到一个节点,并连接到 LQR planner 的目标输入通道:
启动应用程序应用程序启动你可以随意使用手臂。
与之前的应用程序一样,您可以将模拟摄影机通道连接到 ColorCameraViewer 代码板以可视化画面,并将 DepthCameraViewer 连接到可视化模拟深度传感器数据。
启动应用程序,模拟的摄像机镜头应该会出现在眼前:
在本文中,您使用 pythonapi 从头创建了一个机器人应用程序。您使应用程序可以使用真实的摄影机、录制的摄影机数据和模拟摄影机。我们还向您展示了如何使用 pythonapi 处理模拟移动机器人和模拟机械臂。做机器人玩得开心!