OceanSim: 基于Isaac Sim GPU 加速水下机器人感知仿真框架
系列文章目录
前言
水下模拟器为建立强大的水下感知解决方案提供支持。最近,人们在开发新的模拟器和提高现有水下模拟器性能方面做了大量工作。然而,基于物理的水下传感器建模和渲染效率仍有改进空间。在本文中,我们提出了一个高保真 GPU 加速水下模拟器 OceanSim,以填补这一研究空白。我们提出了先进的基于物理的渲染技术,以缩小水下图像模拟的模拟与真实之间的差距。我们开发的 OceanSim 充分利用了 GPU 的加速计算优势,实现了实时成像声纳渲染和快速合成数据生成。我们利用真实世界的数据对 OceanSim 的功能和真实性进行了评估,以提供定性和定量结果。
@misc{song2025oceansim, title={OceanSim: A GPU-Accelerated Underwater Robot Perception Simulation Framework}, author={Jingyu Song and Haoyu Ma and Onur Bagoren and Advaith V. Sethuraman and Yiting Zhang and Katherine A. Skinner}, year={2025}, eprint={2503.01074}, archivePrefix={arXiv}, primaryClass={cs.RO}, url={https://arxiv.org/abs/2503.01074}, }
一、概述
OceanSim 采用先进的基于物理的渲染技术,对水下视觉和声学传感器进行精确建模。
与其他模拟引擎相比,OceanSim 的渲染速度要快得多。
作为 NVIDIA Issac Sim 的扩展,OceanSim 采用了多功能设计。通过融入快速发展的 NVIDIA Omniverse 生态系统,我们的模拟器自然而然地在机器人学习和水下机器人技术之间架起了一座桥梁,从而促进了水下应用中体现型人工智能技术的开发和部署。
OceanSim 将以开放源码的方式提供,使研究界能够以合作的模式作出贡献。
OceanSim 是一个高保真水下仿真框架,旨在加速开发强大的水下感知解决方案。利用 GPU 加速渲染和先进的基于物理的技术,OceanSim 可对视觉和声学传感器进行精确建模,大大缩小了模拟与真实之间的差距。
- GPU 加速: OceanSim 充分利用了基于 GPU 的并行计算能力。OceanSim 基于 NVIDIA Isaac Sim 构建,是 NVIDIA Omniverse 生态系统的一部分,可提供高性能和实时渲染。
- 基于物理的水下传感器渲染: 利用先进的物理模型体验逼真的模拟效果,在各种条件下准确复制水下传感器数据。
- 🎨 高效的 3D 工作流程: OceanSim 用户可以享受 OpenUSD 支持的高效 3D 工作流。
- 由社区构建,面向社区: OceanSim 是一个开源项目,我们邀请社区与我们一起不断改进它!
二、安装
我们将 OceanSim 设计为英伟达 Isaac Sim 的扩展包。这种设计可以更好地与 Isaac Sim 集成,用户可以将 OceanSim 与其他 Isaac Sim 扩展程序配对使用。本文档提供了安装 OceanSim 的分步指南。
2.1 前提条件
除 Isaac Sim 要求的先决条件外,OceanSim 不强制执行任何其他先决条件。有关先决条件,请参阅 Isaac Sim 官方文档。
OceanSim 是使用 Isaac Sim 4.5 开发的。由于 Isaac Sim 4.5 与之前的版本相比有所改动,OceanSim 可能无法与旧版本的 Isaac Sim 兼容。
我们已在 Ubuntu 20.04、22.04 和 24.04 上测试了 OceanSim。我们还使用各种 GPU 测试了 OceanSim,包括英伟达™(NVIDIA®)RTX 3090、RTX A6000 和 RTX 4080 Super。
2.2 安装
安装 NVIDIA Isaac Sim 4.5。我们按照官方工作站安装指南安装 Isaac Sim。
将该版本库克隆到本地计算机。我们建议将软件源克隆到 Isaac Sim 工作区目录下。
cd /path/to/isaacsim/extsUser
git clone https://github.com/umfieldrobotics/OceanSim.git
从 Google Drive 下载 OceanSim_assets,其中包含机器人和环境的 USD 资产。
修改 ~/isaacsim/extsUser/OceanSim/isaacsim/oceansim/utils/assets_utils.py 中的 get_oceansim_assets_path() 函数,返回已安装资产文件夹的路径。
def get_oceansim_assets_path() -> str:
return "/path/to/downloaded/assets/OceanSim_assets"
按照本指南启动 Isaac Sim。
2.3 启动 OceanSim
OceanSim 是一个扩展程序,无需单独的构建过程。要加载 OceanSim:
- IsaacSim,请按照窗口 -> 扩展
- 在显示的窗口中,移除默认的 @feature 过滤器
- 激活 OCEANSIM
- 现在您可以退出扩展窗口,OceanSim 应成为 IsaacSim 面板上的一个选项
三、在 OceanSim 中运行示例
在本文档中,我们将提供使用 OceanSim 和 Nvidia Isaac Sim 中现有功能的简单指南,以方便在我们的框架中构建水下数字孪生体。以下是您可以运行的示例说明:
3.1 传感器示例
OceanSim 提供了一个扩展格式的示例,用于演示水下传感器的使用并修改其参数。
导航至 OceanSim - 示例 - 传感器示例,打开该模块。选择您希望模拟的传感器,并将 “Path to USD ”指向您自己的 USD 场景或 OceanSim_assets 目录中的 MHL 示例场景。
该模块提供不言自明的用户界面,您可以选择要使用的传感器,相应的数据可视化将自动提供。用户可以在自己的 USD 场景中测试该模块,否则将使用默认场景。
我们不建议用户在此扩展上进行数字孪生实验。本示例涉及模板代码,仅供演示之用。
3.2 使用说明
有关使用本示例的更多说明,请参阅以下内容,您也可以在扩展用户界面的信息面板中找到:
- 这是一个统一的示例,演示了各种 OceanSim UW 传感器。
- 对于有兴趣编辑传感器参数的用户,请单击 “打开源代码 ”图标,该图标看起来也像 “编辑 ”图标。这样就可以调出源代码,在源代码中可以编辑许多参数,例如
- 水面高度
- 声纳视角
- 相机渲染参数
- 开发自己的数字孪生的指南。
- 用户可以在自己的场景上测试该演示,方法是将 USD 文件路径复制到 Path to USD,否则将加载默认路径。
- 对于 DVL 传感器,必须在场景中切换静态对撞机以实现光束互动!
- 手动控制:
Key Control W/w +x S/s -x A/a +y D/d -y Up key +z Down key -z I/i +pitch K/k -pitch J/j +yaw L/l -yaw Left key +roll Right key -roll - 自动控制:
- 直线: 机器人将以 v=0.5m/s 的速度向本地 x 方向移动
- 无控制: 机器人将保持静止。
3.3 运行示例
要在选择传感器及其配置后运行示例,首先要加载,然后单击运行。
3.4 颜色选择器
OceanSim 提供了一个方便的用户界面工具,通过选择适当的图像形成参数,可加速重现与机器人实际工作环境类似的水下柱状效果(Akkaynak, Derya, and Tali Treibitz. "A revised underwater image formation model")。
导航至 OceanSim - 颜色选择器,打开该模块。
该小工具允许用户在任何 USD 场景中可视化渲染结果,同时实时调整参数。
有关使用此示例的更多说明,请参阅扩展用户界面中的信息面板。
3.5 调整成像声纳的物体反射率
用户可以通过为对象添加语义标签来调整声纳感知中对象的反射率。
语义类型必须是字符串 “反射率”。相应的语义数据必须是浮点数,例如 0.2。
语义配置可以在场景设置时通过代码执行:
from isaacsim.core.utils.semantics import add_update_semantics
add_update_semantics(prim=<object_prim>,
type_label='reflectivity',
semantic_label='1.0')
或者使用semantics.schema.editor(语义模式编辑器)中提供的用户界面(Semantic Schema Editor(语义模式编辑器)应在Isaac Sim启动时自动加载)。
简单的教程如下:
如本工作流程所示,开发人员可以自由添加更多建模参数,作为一种新的语义类型,以提高声纳保真度。
3.6 添加水蚀效果
请注意,在 USD 场景中添加水的浮灰效果仍在开发中,因此可能会导致模拟过程中出现性能问题和崩溃。
要打开渲染浮夸效果,需要打开 “渲染设置”-“光线跟踪”-“浮夸效果”,并在支持浮夸效果的 UsdLux 中打开光源的 “启用浮夸效果”。
接下来,我们将透明材料(如水、玻璃)分配到任何希望偏转光子并产生浮灰的网格表面。
最后,为了模拟水的腐蚀效果,我们将根据现实中的水面变形来对表面进行变形。
在我们发布的 OceanSim assets ~\OceanSim_assets\collected_MHL\mhl_water.usd 文件中,可以找到包含由 Warp 内核驱动的苛化设置和表面变形的 USD 文件。
下面是相应的演示视频:
四、在 OceanSim 中构建自己的数字孪生体
在本文档中,我们将展示一个为 OceanSim 构建数字孪生的示例。希望本示例能帮助您了解如何在 OceanSim 中构建自己的数字孪生。
4.1 环境 3D 扫描
我们使用 ZED 立体相机扫描环境。ZED 相机是一种立体相机,可以捕捉深度信息和 RGB 图像。我们使用该相机扫描环境,并生成一个 RGB 图像文件夹,用于创建环境的 3D 模型。
下一步是使用 RGB 图像创建环境的 3D 模型。在各种三维重建软件中,我们使用 Metashape 来创建环境的三维模型。具体过程如下
- 将 RGB 图像导入 Metashape。
- 对齐图像,创建稀疏点云。
- 根据稀疏点云创建密集点云。
- 根据密集点云创建网格。
- 为模型创建纹理。
建议查看 Metashape 的在线教程了解更多详情。
请注意,Metashape 重建的三维模型没有度量比例。要恢复正确的度量比例,请在三维扫描过程中测量环境中明显标记之间的参考距离。在 Metashape 中,您可以使用 “比例条 ”工具来设置模型的比例。请按照本视频中的步骤操作。
4.2 导入 3D 扫描
我们测试了将 Metashape 中的 3D 模型导出为 .obj 文件并将其导入 NVIDIA Isaac Sim 的过程。如果您更喜欢 .usd 格式,我们建议您在 Isaac Sim 中进行转换,以获得更好的兼容性。
然后您就可以在 OceanSim 中使用该 3D 模型了。请参考所提供的示例并根据您的需要进行修改。