机器人学的研究充满了令人兴奋和有趣的问题,但也有一些令人沮丧的问题,如传感器校准、构建转换树、管理分布式系统以及调试脆弱系统中的奇异故障。
我们在 QUT’s Centre for Robotics (QCR) 构建了 BenchBot 平台 ,使机器人学家能够将时间集中在研究机器人学中令人兴奋和有趣的问题上。
我们最近还升级到了 由 NVIDIA Omniverse 助力的 NVIDIA ISAAC Sim ,该公司对 BenchBot 平台进行了大量重大改进。无论机器人是你的爱好、学术追求还是工作, BenchBot 和 NVIDIA ISAAC Sim 功能都能让你只需几行 Python 就可以跳入机器人的奇妙世界。在这篇文章中,我们分享了我们是如何创建 BenchBot 的,它的功能,我们计划在未来在哪里使用它,以及您可以在自己的工作中使用它。我们的目标是通过介绍如何使用 BenchBot ,为您提供开始从事自己的机器人项目和研究的工具。我们还分享了与新的 NVIDIA ISAAC Sim 集成时所学到的知识。
这篇文章还为我们的 机器人视觉场景理解( RVSU )挑战 提供了上下文,目前它正在进行第三次迭代。RVSU挑战是一个动手解决家用机器人一个基本问题的机会:他们如何理解自己的环境中有什么,在哪里。通过竞争,您可以获得包括 NVIDIA A6000 GPU 和2500美元现金在内的奖品份额。
BenchBot 背后的故事
BenchBot 解决了我们语义场景理解研究中的一个需求。我们主持了一个 目标检测挑战 并制作了 新的评估指标 ,但需要将这项工作扩展到机器人领域:
- 什么是理解场景?
- 如何评估理解水平?
- 代理在理解场景中扮演什么角色?
- 模拟中的理解能转移到真实世界吗?
- 为了理解如何转移到现实世界,模拟需要什么?
我们制作了 BenchBot 平台,使您能够专注于这些重大问题,而不会迷失在机器人系统通常带来的挑战的海洋中。 BenchBot 由许多活动部件组成,这些部件将这些操作复杂性抽象出来(图 2 )。
以下是 BenchBot 架构的一些关键组件和功能:
- 您可以通过编写一个调用 BenchBot API 的 Python 脚本来创建机器人问题的解决方案。
- 您可以使用 可定制的评估工具 轻松了解您的解决方案执行给定机器人任务的情况。
- supervisor 代理了典型机器人系统的高级API和低级接口之间的通信。
- 主管是后端不可知的。机器人可以是真实的,也可以是模拟的,它只需要运行 ROS 。
- 所有配置都存在于 模块化附加系统 中,允许您使用自己的任务、机器人、环境、评估方法、示例等轻松扩展系统。
我们所有的代码都是 MIT 许可下的开源代码。有关更多信息,请参阅 BenchBot :评估真实感 3D 仿真和真实机器人的机器人学研究 ( PDF )。
如果移动部件使用户体验复杂化,那么很多移动部件不一定是件好事,因此设计用户体验也是开发 BenchBot 的一个中心重点。
控制系统有三个基本命令:
benchbot_install --help benchbot_run --help benchbot_submit --help
以下命令有助于跨多个环境构建强大的评估工作流:
benchbot_batch --help
下面是一个简单的 Python 命令,用于与机器人的感觉运动能力交互:
python from benchbot_api import Agent, BenchBot class MyAgent(Agent): def is_done(self, action_result): … def pick_action(self, observations, action_list): … def save_result(self, filename, empty_results, results_format_fns): … BenchBot(agent=MyAgent()).run()
有了一个简单的 Python API ,世界级的真实感模拟,以及管理整个系统所需的少量命令,我们已经准备好将 BenchBot 应用到我们的第一个大输出: RVSU 挑战。
RVSU 挑战
RVSU 挑战 促使研究人员开发出能够理解周围环境的语义和几何方面的机器人视觉系统。挑战包括六项任务,具有基于对象、语义、同步定位和映射( SLAM )和场景变化检测( SCD )的多个难度级别。
挑战还集中在家用机器人的一个核心要求上:它们需要了解其环境中的物体以及它们在哪里。这个问题本身就是语义 SLAM 任务中遇到的第一个挑战,机器人必须探索环境,找到所有感兴趣的对象,并将它们添加到 3D 地图中。
SCD 任务更进一步,要求机器人在不同的时间点报告环境中对象的变化。我的同事 David Hall 在下面的视频中出色地概述了这一挑战。
使用 NVIDIA ISAAC Sim 将 RVSU 挑战带入生活
最近,我们将 BenchBot 从使用旧的基于虚幻引擎的 NVIDIA ISAAC Sim 升级为新的 Omniverse-powered NVIDIA ISAAC Sim 。这给 BenchBot 带来了许多关键好处,让我们对未来 Omniverse 仿真的发展感到兴奋。我们看到显著好处的领域包括:
- 质量:NVIDIA RTX 渲染生成了美丽的真实照片级模拟,所有这些都与我们之前使用的资产相同。
- 性能:我们获得了强大的动态照明效果,以及复杂的映射反射,所有这些都是实时生成的,用于真实物理的实时模拟。
- 可定制化:在 Python API 对于 Omniverse 和 NVIDIA ISAAC , Sim 可以完全控制模拟器,允许我们重新启动模拟、交换环境和以编程方式移动机器人。
- 简约 :我们将 整个 C ++接口库 替换为 单个 Python 文件 .
qcr/benchbot_sim_omni 存储库收集了我们在向新的 NVIDIA ISAAC Sim 过渡过程中的经验教训,还可以作为 BenchBot 生态系统之外的独立软件包使用。该软件包是一个可定制的 HTTP API ,用于加载环境、放置机器人和控制仿真。它是使用 NVIDIA ISAAC Sim 以编程方式运行仿真的一个很好的起点。
我们欢迎关于如何扩展此包功能的请求和建议。我们还希望它能为您使用 NVIDIA ISAAC Sim 启动自己的项目提供一些有用的示例,例如以下示例。
NVIDIA ISAAC Sim 中的开放环境
开放环境首先需要一个正在运行的模拟器实例。通过实例化SimulationApp
类创建一个新实例,使用open_usd
选项可以选择初始打开的环境:
python from omni.isaac.kit import SimulationApp inst = SimulationApp({ "renderer": "RayTracedLighting", "headless": False, “open_usd”: MAP_USD_PATH, })
值得注意的是,每个 Python 脚本只能运行一个仿真实例,初始化实例后必须导入 NVIDIA ISAAC Sim 组件。
使用 NVIDIA ISAAC Sim API 中的帮助程序在运行时选择不同的阶段:
python from omni.isaac.core.utils.stage import open_stage, update_stage open_stage(usd_path=MAP_USD_PATH) update_stage()
在环境中放置机器人
在开始模拟之前,在环境中加载并放置机器人。使用Robot
类和以下代码行执行此操作:
python from omni.isaac.core.robots import Robot from omni.isaac.core.utils.stage import add_reference_to_stage, update_stage add_reference_to_stage(usd_path=ROBOT_USD_PATH, prim_path=ROBOT_PRIM_PATH) robot = Robot(prim_path=ROBOT_PRIM_PATH, name=ROBOT_NAME) robot.set_world_pose(position=NP_XYZ * 100, orientation=NP_QUATERNION) update_stage()
控制模拟
NVIDIA ISAAC Sim 中的仿真由 SimulationContext 类控制:
python from omni.isaac.core import SimulationContext sim = SimulationContext() sim.play()
然后, step 方法对以 60Hz 运行的模拟进行细粒度控制。我们使用此控件来管理传感器发布、转换树和状态检测逻辑。
我们偶然发现的另一个有用的代码示例是使用dynamic_control
模块在模拟过程中获取机器人的地面真实姿势:
python from omni.isaac.dynamic_control import _dynamic_control dc = _dynamic_control.acquire_dynamic_control_interface() robot_dc = dc.get_articulation_root_body(dc.get_object(ROBOT_PRIM_PATH)) gt_pose = dc.get_rigid_body_pose(robot_dc)
结果
希望这些代码示例对您开始使用 NVIDIA ISAAC Sim 有所帮助。除此之外,我们还取得了一些令人印象深刻的成果:
- 我们的照片级真实感模拟的显著改进
- 强大的实时照明效果
- 通过基本 Python 代码完全定制
图 3 、 4 和 5 显示了从 Omniverse 过渡到 Omniverse 的一些我们最喜欢的视觉改进。
更进一步:其他领域的 BenchBot
虽然语义场景理解是我们研究的重点,也是我们在研究中使用语义场景的起源,但 BenchBot 的应用并不局限于这一领域。 BenchBot 使用丰富的 add-on architecture 构建,允许对系统进行模块化添加和调整,以适应不同的问题领域。
QCR 的 视觉学习和理解研究计划 已经开始利用这种灵活性将 BenchBot 及其全方位模拟应用于一系列有趣的问题。图 6 显示了我们正在考虑使用 BenchBot 的几个领域:
- 致力于将最先进的语义 SLAM 与 QuadricSLAM 和我们的 开源 GTSAM 二次曲面扩展 结合使用。
- 使用 定制 BenchBot 附加组件 在 Omniverse 的照片级真实感模拟中收集合成数据集。
- 探索神经辐射场( NeRFs )如何帮助增强场景理解和 使用噪声数据构建更好的对象贴图 。
我们制作了 BenchBot ,重点是使其适合您的研究问题。虽然我们很喜欢将其应用于我们的研究问题,但我们很高兴看到其他人将其应用于何处。 add-ons repository 中记录了创建您自己的加载项,我们希望在 官方附加组件组织 中添加一些第三方加载项。
结论
我们希望这篇深入的评论具有深刻的见解,并帮助您进入机器人领域,解决令我们机器人专家兴奋不已的问题。
我们欢迎参加 RVSU 挑战赛,无论您对语义场景理解的兴趣是随意的还是正式的、学术的还是工业的、竞争的还是迭代的。我们认为,您会发现与 BenchBot 系统竞争是一种丰富的体验。您可以 注册挑战 ,并通过 EvalAI 挑战页面 提交条目。
如果您正在寻找 BenchBot 和 Omniverse 的下一步发展方向,以下是一些建议:
- 按照 我们的教程 开始使用 BenchBot 。
- 创建一些 custom add-ons 并和 官方 BenchBot 频道 共享。
- 使用 wrapping library 开始以编程方式运行 Omniverse 和 NVIDIA ISAAC Sim .
- 如果你有研究协作的想法或你想将其应用到的问题,请联系 BenchBot 的作者。
在QCR,我们很高兴看到机器人技术的发展方向。有了 BenchBot 和新的 Omniverse-powered NVIDIA ISSAC Sim等工具,现在是加入并开始玩机器人的最佳时机。