首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

NVIDIA Isaac Sim安装步骤及仿真系统整体框架讲解

  • 25-02-15 07:20
  • 2856
  • 6854
blog.csdn.net

在开始学习 NVIDIA Isaac SIM 的过程中,我发现许多网上的教程和资料通常是针对具体的操作步骤或特定的问题点进行讲解,缺乏系统性和连贯性。这些内容可能只聚焦于某个细小的功能或特定场景的应用,例如如何设置某个传感器、控制某个机器人模块,或者解决某些常见的报错问题。然而,这些碎片化的信息并没有帮助我构建一个全面的、清晰的关于 Isaac SIM 仿真环境的整体认知。换句话说,我很难从中建立起 Isaac SIM 的完整“世界观”,包括它的核心框架、工作原理以及如何将其作为一个有机系统来开发复杂的仿真项目。所以,希望通过这篇博文,帮助大家建立起对该仿真软件的整体理解,然后再深入实践。

NVIDIA Isaac Sim简要介绍及Windows系统环境下的安装步骤

NVIDIA Omniverse 是一个基于物理真实感的实时 3D 设计协作和仿真平台,专为 3D 工作流和内容创作者设计,旨在促进跨团队、跨工具的协作以及 AI 和物理仿真在 3D 场景中的应用。该平台利用 NVIDIA 的 GPU 加速能力和 RTX 实时光线追踪技术,提供高保真度的实时渲染,确保虚拟世界具有物理真实感。此外,Omniverse 构建于开源的 USD(通用场景描述)框架之上,这一框架允许不同的创意工具和软件之间无缝互操作,从而支持多种 3D 设计软件(如 Autodesk、Adobe、Unreal Engine 等)在同一项目中协同工作。

USD(Universal Scene Description)是一种文件格式和框架,主要用于3D场景的描述、存储和交换。它由皮克斯动画工作室开发,用于满足复杂场景管理和跨应用兼容的需求。通常以 usd、usda、usdc 或 usdz 结尾。能够描述复杂的场景,包括几何、材质、灯光、相机、动画等。感兴趣的话大家可以尝试用Solidworks和Blender去制作这样的模型文件。

Omniverse 的关键组件包括 Omniverse Nucleus、Omniverse Kit 和 Omniverse Connectors 等。Nucleus 提供协作的数据库,存储和管理项目文件;Kit 是一个可编程的模块化开发框架,支持定制化应用程序开发;Connectors 则允许第三方软件与 Omniverse 实现数据交换。这些组件共同构成了一个强大的协作环境,使设计师、工程师和研究人员能够在虚拟空间中实时进行设计、仿真和迭代。

Omniverse 平台的应用场景广泛,包括建筑、制造、媒体娱乐、机器人和自动驾驶等行业。在机器人和自动驾驶领域,Omniverse 与 Isaac Sim 等仿真工具集成,旨在为开发者提供一个高保真度的虚拟环境,用于设计、模拟、测试和训练基于 AI 的机器人和自主机器。该工具利用 NVIDIA PhysX 5 实现高级 GPU 物理模拟,并通过实时光线追踪和路径追踪技术提供逼真的渲染效果。Isaac Sim 采用模块化设计,支持机器人操作、导航和合成数据生成等多种应用场景,方便用户根据需求进行定制和扩展。其支持 ROS 和 ROS 2 接口、全功能的 Python 脚本,并提供导入机器人和环境模型的插件,实现了机器人大脑与虚拟世界的无缝连接。主要应用包括机器人设计与测试、AI 模型训练和强化学习,其中虚拟环境能降低实际部署前的风险和成本,通过合成数据生成提升 AI 感知模型性能,并加速控制策略的学习过程。总之,NVIDIA Isaac Sim 为机器人开发者提供了一个强大且灵活的仿真平台,加速了机器人从设计到部署的全流程。

安装步骤如下图所示,点击链接可以下载:NVIDIA Isaac Sim | NVIDIA 开发者

根据自己系统情况自行安装对应的Omniverse Launch

本主机基于Windows系统,点击链接首先安装Omniverse Launch,这里建议大家养成良好的安装习惯,这样后期维护起来会相当轻松,下面是我的安装位置:

  1. 路径全英文大写
  2. 有效分类

打开后进入交易所,可以找到ISAAC SIM(仿真软件本体)和ISAAC SIM COMPATIBILITY(可以先运行这个软件进行环境检测,判断是否符合SIM仿真要求,建议显卡显存16G以上,电脑内存至少32G以上)。

需要满足的安装配置如下:

演示主机的配置如下,本机是自行组装的台式机,搭配的七彩虹橘猫B760M主板,i7-14700KF和4060 TI 16G OC,运行内存64G:

安装后,可以打开ISAAC SIM,进入如下画面,那么接下来就是分享一下关于这个仿真框架的学习过程和我的个人经验。大家经常搞技术的话都知道,想要快速上手一个技术,掌握扎实,最快的方式不是先阅读手册和教程,而是通过构建开发环境,在示例的展示下直接摸索,遇到不解的地方再针对性查阅手册或其他资料。

基于示例的仿真系统整体框架讲解

进入系统后,这是我们后面要经常打交道的仿真界面。别的先不管,这里我们先打开一个示例,通过这个示例来了解整个系统,可以通过Isaac Examples里面的manipulation->Follow Target打开一个GUI的对话框。

这个对话框实际上是官方写好的一个Python脚本代码控制的,可以看如下伪代码流程。打开项目文件夹后后,可以看到一个follow_target_extension的脚本文件,这个脚本实现了一个名为 Follow Target Extension 的扩展模块,用于 NVIDIA Isaac Sim 中的机器人目标跟踪任务。它通过交互式用户界面,提供了任务控制和数据记录的功能,包括启动或停止目标跟踪、动态添加或移除障碍物、开始或暂停数据记录,并将数据保存到指定目录。界面由 Task Controls 和 Data Logging 两部分组成,通过按钮和文本字段实现直观操作。大家可以用VSCODE等工具自己改一下代码看看效果,不过记得先备份一下原文件。

  1. Class FollowTargetExtension(BaseSampleExtension):
  2. on_startup(ext_id):
  3. - 调用父类启动方法
  4. - 初始化扩展,配置菜单、文档链接、任务名称等
  5. - 构建用户界面,包括:
  6. - 任务控制界面
  7. - 数据记录界面
  8. _on_follow_target_button_event(val):
  9. - 启动或停止目标跟踪任务
  10. _on_add_obstacle_button_event():
  11. - 添加障碍物
  12. - 启用“移除障碍物”按钮
  13. _on_remove_obstacle_button_event():
  14. - 移除障碍物
  15. - 如果当前任务中没有障碍物,禁用“移除障碍物”按钮
  16. _on_logging_button_event(val):
  17. - 启动或暂停数据记录
  18. - 启用“保存数据”按钮
  19. _on_save_data_button_event():
  20. - 保存数据到指定目录
  21. post_reset_button_event():
  22. - 重置界面按钮状态,例如:
  23. - 启用目标跟踪按钮
  24. - 禁用“移除障碍物”和“保存数据”按钮
  25. post_load_button_event():
  26. - 设置加载任务后的按钮状态
  27. post_clear_button_event():
  28. - 清除任务时禁用所有按钮
  29. shutdown_cleanup():
  30. - 清理资源(无操作)
  31. build_task_controls_ui(frame):
  32. - 构建任务控制界面:
  33. - 目标跟踪按钮(开始/停止)
  34. - 添加障碍物按钮
  35. - 移除障碍物按钮
  36. build_data_logging_ui(frame):
  37. - 构建数据记录界面:
  38. - 输出目录文本框
  39. - 数据记录按钮(开始/暂停)
  40. - 保存数据按钮

那么接下来,Load加载该场景,运行后点击左侧的Start,机械臂会跟踪目标(如果点击后场景没有立刻加载出来,需要先等一等不要着急),下面是项目文件夹下,另一个follow_target脚本的伪代码,大家可以看一下都包括什么功能与逻辑,不需要现在就都掌握,而是要知道这些脚本在仿真环境中可以实现什么,主要作用是什么。

  1. Class FollowTarget(BaseSample):
  2. __init__():
  3. - 初始化控制器和相关参数
  4. setup_scene():
  5. - 获取仿真世界
  6. - 向世界中添加目标跟踪任务
  7. setup_pre_reset():
  8. - 在重置仿真前清除物理回调
  9. - 重置控制器
  10. world_cleanup():
  11. - 清理控制器资源
  12. setup_post_load():
  13. - 获取当前任务和任务参数
  14. - 初始化机器人和目标跟踪控制器
  15. - 配置机器人关节控制器
  16. _on_follow_target_event_async(val):
  17. - 如果启用目标跟踪:
  18. - 开始仿真
  19. - 添加目标跟踪物理回调
  20. - 如果停止目标跟踪:
  21. - 移除物理回调
  22. _on_follow_target_simulation_step(step_size):
  23. - 获取当前观察数据
  24. - 根据目标位置和方向计算控制器动作
  25. - 应用计算出的控制动作
  26. _on_add_obstacle_event():
  27. - 获取当前任务
  28. - 添加一个障碍物到任务中
  29. - 将障碍物添加到控制器中
  30. _on_remove_obstacle_event():
  31. - 获取当前任务
  32. - 删除任务中的障碍物
  33. - 从控制器中移除对应的障碍物
  34. _on_logging_event(val):
  35. - 获取数据记录器
  36. - 如果记录器未启动,配置记录函数以收集关节位置和目标位置等数据
  37. - 启动或暂停数据记录器
  38. _on_save_data_event(log_path):
  39. - 保存记录的数据到指定路径
  40. - 重置数据记录器

实现目标跟随算法的部分并未完全暴露在这个脚本中。这是因为该脚本将控制逻辑委托给了 RMPFlowController 控制器。所以,我们需要知道的就是,这个脚本主要负责管理任务的生命周期、环境动态调整(如障碍物)、数据记录等,与具体控制算法解耦。

所以,到这里为止,我们可以明确,本示例的Python脚本并不涉及核心控制算法,它目前主要是对仿真世界中的事物进行调控,确保仿真世界可以按任务目标运行,控制是由仿真环境中的其他模块实现的。但这并不意味着我们所有项目都需要这样去做,既然Python脚本可以控制这个仿真环境,同样,我们也可以不使用官方提供的控制器,直接写一个控制算法去控制机器人各个模块关节的运动,比如用PID追踪目标物体。

特性官方Controller自行实现控制算法
开发难度简单,封装良好,快速上手较高,需要深入理解机器人控制和动力学原理
适应复杂环境优秀,支持动态避障和多任务控制较差,需自行实现动态调整和优化逻辑
灵活性较低,受框架限制较高,可以完全自定义控制策略
稳定性高,内置数值稳定处理取决于实现和参数调节
性能和效率高效,集成了优化算法和路径规划可能较低,尤其在处理复杂环境时
学习和研究适合工程项目和快速部署更适合用于研究和深入理解机器人控制
维护成本低,依赖官方支持的封装模块高,自行开发和维护复杂控制逻辑

仿真环境的整体构成大致如下图所示,对各个区域的功能做了一些简单的描述,这里需要明确的一点就是,本仿真软件是基于这种节点树的结构设计的,层次化非常清晰,更适合研究多体交互式运动控制,该仿真环境是可以集成多种传感器,比如激光雷达,视觉探头等,然后各独立的物体拥有不同的运动方式和物理参数,最后,机器人可以通过传感器与模拟世界交互学习,实现机器人的具身智能训练。

  1. World
  2. ├── Robot (机器人节点)
  3. │ ├── Arm (机械臂)
  4. │ │ ├── Joint1 (关节1)
  5. │ │ ├── Joint2 (关节2)
  6. │ │ └── EndEffector (末端执行器)
  7. │ └── Base (机器人底座)
  8. ├── Table (桌子)
  9. └── Light (光源)

在节点树的结构中,我标注了这个机械臂示例中,各个节点的功能和作用,做了简要说明,具体如下图所示,这些节点组成了整个仿真世界、机器人、交互物体、物理碰撞、显示渲染。

这里,我们以机械臂的panda_link0为示例,对其具有的属性配置进行展开,下面是该节点具有的属性的整体情况一览,可以看到这里包含节点定位坐标、材质、可视化、物理参数等。

针对该机械臂的节点,主要关注的属性是Physics,这里展开看一下,如下图所示

其中Rigid Body就是设置物体的刚性参数的,高级设置主要是调整模拟求解过程,Mass主要是物体的质量、惯性等参数设置。这里都是对模型各模块部分的物理参数设置,而在控制过程中,我们还需要关注模块之间的连接和运动方式,比如自由度、驱动力等,接下来继续分析panda_link0与panda_link1之间的关节panda_joint1,如下图所示,其他部分都差不多,主要集中在物理参数设置这里。

目前为止,我们通过脚本了解到机器人的目标任务规划、仿真世界交互方式。通过这些节点树和属性参数了解到基本的物理仿真参数设定。那么也就是说,当我们想要实现仿真时,当我们想要实现仿真时,可以通过脚本实现机器人的任务规划、路径控制以及仿真逻辑的动态交互,同时借助节点树结构和属性参数对仿真场景中的物体(如机器人、环境、关节等)的物理属性进行详细配置。这种方式既可以实现高层任务逻辑的灵活编排,又能通过细粒度的参数调整确保仿真行为符合实际需求,例如精确设置关节的运动范围、碰撞检测、物理特性(如质量和惯性)以及环境中的光照和材质渲染效果。通过结合脚本控制与物理参数设定,我们能够搭建一个功能完整且高度定制化的机器人仿真环境,用于测试算法、优化设计或模拟真实场景操作。

机械臂自动跟踪目标的运动控制算法仿真实现

该示例采用的RMPFlowController是NVIDIA Isaac Sim中的一种高级控制器,基于Riemannian Motion Policies (RMP) 理论设计,用于控制机器人在复杂动态环境中的运动。它能够实现目标跟踪、障碍物避让、多任务协调等功能,同时保证运动的柔顺性、安全性和高效性。

RMP理论是一种用于机器人运动生成的数学框架,通过引入黎曼几何和动力学一致性,能够将不同的任务需求(如目标跟踪、避障等)统一到一个优化问题中。它的核心思想是:将任务分解为多个子任务(目标吸引、障碍物回避等),然后为每个子任务定义一个独立的动力学政策,根据优先级和任务关联性,将这些政策融合为全局的运动策略。下面是简单的介绍:

在RMP中,运动策略由一个加速度向量a和一个正定权重矩阵M表示:

f = M \cdot a

a是策略的加速度(表示物体的运动方向),M是权重矩阵(表示策略的重要性和空间变化),f是策略对应的力。RMP 使用坐标变换函数将不同任务的运动策略映射到统一的空间,障碍物回避策略可能在笛卡尔坐标系中定义,而关节角度限制策略在关节空间中定义。通过变换函数将各个坐标变换到同一空间。最后再在黎曼空间中进行合并,生成综合的运动策略,求解不同情况下的a来控制物体运动。

x' = \phi(x)

M = \sum_i M_i, \quad f = \sum_i f_i

如果说RMP是“方法论”,提供了底层的理论支持,那么RMPFlow就是“工具箱”,让 RMP更容易应用于工程实践。

在该示例中,仿真环境可以直接获得目标的位置方向

  1. observations = self._world.get_observations()
  2. target_position = observations[self._task_params["target_name"]["value"]]["position"]
  3. target_orientation = observations[self._task_params["target_name"]["value"]]["orientation"]

将目标的位置和方向传递给控制器的forward方法,生成机械臂需要执行的关节动作

  1. actions = self._controller.forward(
  2. target_end_effector_position=observations[self._task_params["target_name"]["value"]]["position"],
  3. target_end_effector_orientation=observations[self._task_params["target_name"]["value"]]["orientation"],)
  4. self._articulation_controller.apply_action(actions)

总结

本文主要介绍了NVIDIA ISAAC SIM软件的安装过程,然后借助官方示例带大家深入了解仿真界面、参数界面、节点树和机器人运动控制方式,方便大家后续使用过程中按需求对每个模块进行深度开发。

注:本文转载自blog.csdn.net的ESCracker的文章"https://blog.csdn.net/qq_24253277/article/details/143637529"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2024 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top