课程概述

学习目标

在本课程中,我们将:

1.探索 Isaac Sim 界面​: 熟悉 Isaac Sim 界面的关键组件,包括面板、上下文菜单和工具栏。这一基础知识将帮助您高效导航并利用仿真环境构建和管理机器人模型。

2.构建简单机器人模型​: 通过组装底盘、轮子和关节等组件,构建一个基础机器人。这包括创建视觉网格并配置物理属性,以在 Isaac Sim 环境中模拟真实的交互。

3.​配置物理属性​: 设置物理场景并应用必要的属性,确保机器人与环境真实交互。这包括添加碰撞网格和地平面,以精确模拟重力和其他力。

4.实现控制机制​: 使用 OmniGraph 和 ROS 2 为机器人创建控制系统,实现动态运动与交互。这包括设置差速控制器和关节系统,以有效管理轮子运动。

5.​集成传感器​: 通过添加 RGB 摄像头和 2D 激光雷达等传感器,增强机器人的能力。配置这些传感器以捕获环境数据,使机器人能够智能感知并响应周围环境。

6.​将传感器数据流传输到 ROS 2​: 建立从 Isaac Sim 到 ROS 2 的数据流管道,以便在 RViz 中进行实时可视化和分析。这包括设置 ActionGraph 和使用 ROS 2 Bridge 扩展,促进平台之间的无缝通信。

本课程专为机器人技术初学者和有一定经验的学员设计,为您提供在项目中有效使用 Isaac Sim 的知识和技能。我们鼓励您积极参与实践操作和练习,以提升学习体验。

引用来源1

创建一个简单的机器人

模块概述

在本初始模块中,您将学习如何使用 ​Isaac Sim​ 构建一个简单的机器人。您将熟悉其界面、创建并配置诸如底盘和车轮之类的基础组件,并设置物理属性以模拟真实运动。完成此模块后,您将对构建一个能与环境交互的机器人模型有一个基础性的理解。

学习目标
•导航 Isaac Sim 界面以有效管理模拟。

•为基本形状创建视觉网格体并启用物理属性。

•​配置层级结构以组织机器人组件。

•应用旋转关节以实现车轮运动。

•通过添加驱动力来模拟机器人的运动​

​补充信息​:
Isaac Sim 基于 NVIDIA Omniverse,提供了强大的物理模拟和机器人学工具。在实际操作中,构建机器人通常涉及在 Stage面板中组织组件(如创建立方体作为机身、圆柱体作为轮子),为它们添加刚体物理和碰撞预设,并通过关节连接部件。其界面支持通过视图口 (Viewport)、属性面板 (Property panel) 和层级结构 (Stage) 进行灵活的交互和配置。

Isaac Sim界面

本文将引导您启动 Isaac Sim 并探索其用户界面,包括面板、上下文菜单和工具栏等关键组件。您将学习如何浏览视口(Viewport),并理解默认场景设置中的基本对象(prims),如世界(World)​和默认光源(Defaul tLight)​​。此外,您还将探索创建(Create)菜单以添加新资产,并访问展示 Isaac Sim 功能的 ​Isaac 示例(Isaac Examples)​​。

通过学习本模块,您将能够高效地管理仿真,并为在后续模块中构建第一个机器人模型做好准备。

组件名称 (英文) 组件名称 (中文) 主要功能与描述
Viewport 视口 显示和操作3D场景的主区域,支持多视图观察和场景导航。
Stage 舞台 以树形结构管理场景的逻辑结构和所有资产(assets)。
Properties Panel 属性面板 显示和编辑选定对象(如位置、旋转、物理属性)的详细信息。
Create Menu 创建菜单 创建几何体、物理对象、光源等,并可访问Isaac Sim预置案例。
Toolbar 工具栏 提供选择、移动、旋转、缩放以及仿真播放控制等快捷工具。

关键操作与技巧

•浏览视口​:在视口中,您可以按住 ​Alt + 鼠标左键​ 进行旋转,​Alt + 鼠标右键​ 进行缩放,​鼠标中键​ 进行平移。按 ​F​ 键可将视图聚焦到选中的对象上。

•​理解场景结构​:默认场景通常包含 /World和 /World/defaultLight等基本对象(Prims)。/World是其他对象的常见父级容器,Default Light则提供场景照明。

•​使用创建菜单​:通过顶部菜单栏的 ​Create​ 菜单,您可以添加各种形状(立方体、球体等)、灯光、物理组件以及从 Isaac Examples 中导入预定义的机器人模型和演示场景,这是快速了解软件功能的绝佳方式。

•​运行仿真​:通过工具栏中的播放按钮启动仿真,​暂停按钮临时停止,​停止按钮则结束当前仿真并重置。

启动 Isaac Sim
首先在终端中定位到 Isaac Sim 的安装目录。
在这里插入图片描述

Windows端运行:isaac-sim.selector.bat

./isaac-sim.selector.bat

Linux端运行:isaac-sim.selector.sh

./isaac-sim.selector.sh

请注意​:在本模块中,请确保不要启用​ ROS Bridge 扩展。我们将在后续章节深入探讨如何访问数据时再涉及此部分。

点击 ​Start ​(启动)。

用户界面(UI)框架

Isaac Sim 的界面由几个核心组件构成:

•​面板 (Panels)​​:这些组件的布局可高度自定义,您可以根据需要调整其大小、停靠、取消停靠、添加或移除。主要的面板包括:

•​场景层级 (Stage)​​:以树形结构显示场景中的对象和其层次关系。

•​属性 (Properties)​​:用于查看和编辑当前所选对象的各项参数。

•视口 (Viewport)​​:主视图区域,用于显示和交互3D场景。

•上下文菜单 (Context Menu)​​:在视口或场景层级面板中右键点击,可以呼出包含各种操作和工具的快捷菜单。

•工具栏 (Toolbar)​​:位于界面顶部,提供常用功能的快速访问,例如创建新对象、运行模拟、访问扩展管理器 (Extension Manager) 等。

场景中的默认基元 (Default Prims)
启动 Isaac Sim 时,默认场景已包含多个基元 (prims),例如世界 (World)​​ 和默认光源 (defaultLight)​,您可以在舞台 (Stage) 面板中看到它们。

​注意:​​
Isaac Sim 使用 ​OpenUSD​(通用场景描述,Universal Scene Description)文件框架。如果您不熟悉 OpenUSD,可以通过 Learn OpenUSD curriculum 了解基元 (prims)​、舞台 (stages)​​ 和变换 (xforms)​​ 等核心概念。

创建菜单(Create Menu)
Toolbar:
Toolbar
Stage组件下鼠标右键:
鼠标右键
允许我们向场景中添加新的图元(prims)​和资产(assets)​​。它包括创建基本形状(例如立方体、球体)、导入机器人以及设置环境(如平坦网格或地平面)的选项。

​"示例"菜单(Isaac Examples)
在这里插入图片描述
​"示例"菜单中收集了一系列样本,用以展示 Isaac Sim 的工作方式。
这些样本包含了诸如使用 ​ROS/ROS 2、操作物体以及包含多个机器人的场景等功能。

视口导航

​移动​: 按住鼠标右键,同时使用 WASD 键可在视口中向前、向后、向左或向右移动相机。按住鼠标右键,同时使用 Q 和 E 键可上下移动相机。

​旋转​: 按住鼠标右键并拖动以旋转相机视图。

​缩放​: 单独使用鼠标滚轮,或按住 Alt 键和鼠标右键,可放大或缩小场景。

平移​: 按住鼠标中键并拖动可水平或垂直平移相机视图。

构建一个简单的机器人

既然我们已经能够熟练操作 Isaac Sim 的界面,接下来让我们在 Isaac Sim 中构建一个基础的机器人模型。本节将指导您为机器人底盘创建视觉网格,并添加轮子和关节等关键组件。您将学习如何启用物理属性来模拟逼真的运动与交互,确保您的机器人能够在环境中有效移动。

完成本节学习后,您将获得一个功能完整的机器人模型,为后续模块中添加更多高级功能和控制机制做好准备。

在Isaac Sim中创建视觉网格并设置物理模拟
以下是关于如何在NVIDIA Isaac Sim中创建视觉网格、启用物理特性并进行基础仿真的步骤说明。

创建视觉网格
首先在场景中创建立方体:

1.选择 ​Create > Mesh > Cube​ 在场景中创建立方体。
在World选中下点击鼠标右键

​注意​:此时创建的立方体只是一个视觉网格(visual mesh)​,即我们在视口中能看到的部分。但它尚未被定义为物理对象,因此不具备任何物理特性。

启用场景物理
2.按下播放(Play) ​按钮模拟场景中的物理效果。
在这里插入图片描述

你会发现没有任何事情发生。这是因为立方体还不是物理对象,并且没有碰撞体(colliders)。

3.要启用场景物理,请转到 ​Create > Physics > Physics Scene
在World选中下点击鼠标右键

这将提供诸如重力和其他仿真所需的作用力机制。

4.查看物理场景的默认属性。可以看到重力设置为地球重力(Earth Gravity),并且在Isaac Sim中,上下轴是Z轴。
在这里插入图片描述

可以参考视口左下角的轴指示器以确定方向。

为立方体添加物理属性
5.再次按下**播放(Play)**​按钮,仍然没有任何反应。

这是因为场景虽然知道存在物理规则,但立方体本身仍然不是一个物理对象。

6.要解决此问题,请在 ​Stage​ 窗口中的立方体上右键点击,选择 ​Add > Physics > Rigid Body with Colliders Preset
在这里插入图片描述

理解视觉网格与碰撞网格的区别:
•视觉网格是我们在视口中看到的。
•​碰撞网格则定义了该物体如何与其他物体交互,以及其他物体如何对其作出反应。

7.打开 ​Show​ 图标,然后选择 ​Show by Type > Physics > Colliders > Selected
在这里插入图片描述

现在,我们可以看到显示立方体上的碰撞网格的绿色线框。

配合地平面进行物理仿真
8.选择播放(Play) ​查看会发生什么。

立方体会无限下落,因为没有地平面来阻止它。

9.为了防止立方体无限下落,我们需要添加一个地平面(Ground Plane) ​。这是一个无限延伸的平面,可以防止所有物理对象掉落到其下方。

通过 ​Create > Physics > Ground plane​ 添加地平面。
在这里插入图片描述

注意,其视觉网格有边界,但碰撞网格是无限延伸的。

10.展开 ​GroundFloor​ 变换(xform),可以找到 ​CollisionMesh​​CollisionPlane
在这里插入图片描述

11.将立方体移动到地平面之上。请记住,Isaac Sim中的默认单位是米(m),因此将立方体向上移动到1米的高度。
在这里插入图片描述

12.​最终仿真​:再次按下播放(Play) ​按钮。
在这里插入图片描述

注意观察立方体在碰到地平面时就停止下落。这正是我们在物理仿真中所期望的交互效果。

补充说明

13.尝试调整物理场景属性中的重力方向,观察其对仿真效果的影响。
在这里插入图片描述

关于资产导入的注意事项​:
在 Isaac Sim 中导入资产时,不同的导入器会引入不同类型的数据。例如,URDF 导入器会包含已定义的物理数据,而 Isaac Sim 导入器仅导入视觉数据。在处理多样化资产时,需特别注意这一差异。

💾 ​保存操作
在这里插入图片描述
请通过菜单栏 ​File > Save​ 保存您的工作!

添加四个轮子

接下来,我们将通过安装车轮并配置其运动功能来增强我们的简易机器人。您首先需要准备底盘,并理解组件层级结构在组织机器人部件中的重要性。随后,您将创建并定位车轮,确保它们与机器人主体正确对齐和连接。您还需要为车轮添加物理属性,使它们能够与环境互动。最后,您将为车轮配置旋转关节以实现旋转运动,并施加驱动力来模拟车轮的推进。

完成本部分后,您的机器人将配备功能齐全的车轮,为后续仿真中的动态运动做好准备。

**准备底盘 (Chassis)**​​
1.确保立方体 (cube) 位于世界原点 (0, 0, 0)。此立方体将成为我们机器人的主底盘 (chassis)。

2.将立方体缩放 (Scale) 至 2, 1, 0.5X 维度上的值 2 为前后轮预留了空间。
在这里插入图片描述

理解层级结构 (hierarchies) 对于构建复杂模型的重要性,将有助于组织对象,并使变换 (transformations) 和修改 (modifications) 更容易。

创建机器人变换节点并添加底盘​
3.在场景 (Stage) 面板中右键单击,选择 ​创建 (Create) > Xform​ 以创建一个变换节点 (xform)。这将作为我们机器人的父级。

4.双击新创建的 xform 并将其重命名为 SimpleRobot
在这里插入图片描述

5.通过将底盘(即立方体)拖动到场景中的 SimpleRobot xform 上,将其添加到 SimpleRobot xform 中。

6.选中 SimpleRobot xform,在属性 (Properties) 选项卡中找到变换属性 (Transform properties)。

7.将 SimpleRobot在 Z 方向向上抬高 1 个单位。
在这里插入图片描述

观察底盘如何随 xform 一起向上移动。这是因为变换应用在了 SimpleRobot 这个 xform 容器内的每一个 图元 (prim) 上。

8.将主体 (body) 的高度值 (height value) 修正为 0。
在这里插入图片描述

确保Cube的刚体中线速度、角速度各项参数为0,否则点击Play 会不按正常重力运行。

子级-父级关系 (Child-Parent Relationships)​
•如前一步骤所述,SimpleRobot xform 是一个容器。它在场景中创建了子级-父级关系 (child-parent relationship)。请明确子级-父级关系在层级结构中的重要性。这种关系使得层级结构内的对象更易于管理和变换。

核心概念提示:
•​Xform: 在 USD 中通常指一种基本的变换节点,用于对其子级进行定位、旋转和缩放。
•​Prim: USD 场景描述中的基本对象。
•​层级 (Hierarchy)​: 通过父子关系组织对象,父节点的变换会继承影响其所有子节点,这对于管理复杂装配(如机器人)至关重要。

创建与设置车轮

9.在 ​舞台(Stage)​​ 中,右键单击 ​SimpleRobot,然后选择 ​**创建(Create)​​ > ​网格(Mesh)​​ > ​圆柱体(Cylinder)**​​ 来创建一个车轮。
在这里插入图片描述

10.在 ​变换属性(transform properties)​​ 下,将其在 X 维度上旋转 ​90 度,并缩放至 ​0.75, 0.75, 0.25

11.将车轮 ​移动(Translate)​​ 到 ​0.5, 0.75, 0​ 的位置。这将相对于世界轴和机器人主体定位车轮。
在这里插入图片描述

12.在 ​舞台(Stage)​​ 面板中右键单击此圆柱体,选择 ​重命名(Rename) ​,将其命名为 ​Front_Left_Wheel​(左前轮)
在这里插入图片描述
左前轮

13.复制 ​Front_Left_Wheel​ 以创建另外三个车轮。您可以通过右键单击并选择 ​复制(Duplicate)​,或在选中该prim的情况下按键盘上的 ​Ctrl+D​ 来完成。

14.根据每个车轮的位置对其进行重命名(Front_Right_Wheel​(右前轮), ​Rear_Left_Wheel​(左后轮), ​Rear_Right_Wheel​(右后轮))
右前轮
左后轮
右后轮

确保所有车轮都是 ​SimpleRobot​ xform 的 ​子级(children)​。

为车轮添加物理特性并进行模拟​

15.选中所有车轮,右键单击,在 ​添加(Add) 选项下,选择 刚体与碰撞预设(Rigid Body with Collision Preset)
在这里插入图片描述
在这里插入图片描述

选中车轮后,可以看到碰撞网格现已显示。

16.按下 ​播放(Play) 按钮,观察车轮如何因重力也落到地面。
在这里插入图片描述

💾 ​保存(SAVE) ​​
转到 ​文件(File)​​ > ​保存(Save) ​​ 来保存您的工作!

关节准备

在完成轮子的设置后,接下来我们需要通过配置关节来增强 SimpleRobot 的运动能力。本节将指导您选择并设置旋转关节(Revolute Joints),这种关节类型非常适合实现轮子的旋转运动。您将学习如何通过调整轴和旋转参数来正确配置这些关节,确保它们与轮子的方向对齐。此外,您还将为后轮创建角驱动(Angular Drives)以模拟推进力,并设置诸如速度和阻尼等参数来实现稳定的控制。
完成本节后,您的机器人将拥有功能完整的关节, ready 在仿真中动态运动。

创建旋转关节

1.​选择一个车轮。注意到我们想要放置关节的轴是Y轴。

旋转关节允许绕单轴旋转运动,这对车轮来说非常理想。

2.要创建旋转关节,请首先选择父刚体 (Cube)​,然后,​按住 Ctrl 键​ 的同时选择子模型 (Front_Left_Wheel) ​。​右键单击并选择 ​创建 (Create) > 物理属性 (Physics) > 关节 (Joint) > 旋转关节 (Revolute joint) ​。
在这里插入图片描述
在这里插入图片描述

按住 Ctrl键允许您同时选择两者。
记住先选择立方体 (Cube),然后再选择车轮,以便关节能正确设置自身。选择的顺序确立了它们之间的相对运动关系,但这之后也可以更改。

配置旋转关节
请注意,默认值是不正确的。​默认轴设置为 X,但我们需要将其更改​Y
在这里插入图片描述

3.将 关节轴 (Joint axis) ​​ 更改为 ​Y。观察到可视化指示现在指向上方。
在这里插入图片描述

我们需要手动设置关节的局部旋转 0 (local rotation 0)​​ 以匹配模型 (prim) 的方向。

4.将 局部旋转 0 (Local Rotation 0)​​ 设置为 ​0, 0, 0
在这里插入图片描述

在这里插入图片描述

可以看到旋转关节现在与车轮的方向对齐了。​放大观察关节,注意到红色的 ​X​ 箭头方向已正确对齐,但蓝色的 ​Z​ 箭头方向仍然不对。

5.将 局部旋转 1 (Local Rotation 1) ​​设置为​​ -90, 0, 0​ 以修正不匹配。
在这里插入图片描述

此操作旨在调整子模型(车轮)相对于关节的初始姿态,确保其旋转轴(Y轴)与父刚体指定的关节Y轴完全一致。
PS:博主不知道为何我改了local rotation0就让Y轴对齐了,不过没什么影响,只要保证旋转轴Y轴关节和车轮一致即可(无所谓方向正反)

6.​取消选择然后重新选择关节以查看更新。

确保所有的轴线都沿着正确的方向。
我们可以忽略箭头的指向​(正负方向)

7.将 旋转关节 (RevoluteJoint) ​重命名,以与其连接的车轮名称相匹配,例如 ​Front_Left_Joint

创建剩余的关节
​一次一个地创建接下来的关节。

8.首先选择车体 (body)​,然后是下一个车轮。使用与第一个关节相同的参数来创建新关节。
在这里插入图片描述
在这里插入图片描述

这意味着每个车轮关节的轴(Y轴)和根据需要调整的局部旋转值(如步骤4和5)都应保持一致。

9.完成后,将机器人移动到地平面上。
在这里插入图片描述

此步骤是为了将整个装配好的机器人模型放置到场景中的地面上,以便进行后续的模拟或测试。

为后轮添加驱动力
由于后轮是驱动机器人的两个轮子,因此我们将仅为后轮添加驱动力。

  1. 右键单击后轮的关节,然后选择 “添加(Add)> 物理(Physics)> 角驱动(Angular Drive)”
  2. 将驱动的阻尼(damping) 设置为 10000。为后轮选择 10000 这一较大的阻尼值,是为了实现精确的速度控制、减少振荡并确保稳定性。
  3. 目标速度(target velocity) 设置为 50。由于这是角驱动,速度单位为度 / 秒(degrees/second)。
  4. 对另一个后轮重复上述操作。

机器人仿真

按下 “播放(Play)” 按钮,观察机器人向前移动。

保存(SAVE)
前往 “文件(File)> 保存(Save)” 以保存你的工作成果!

回顾

在本模块中,您已成功在 Isaac Sim 中构建了一个简单的机器人。您熟悉了界面操作,为底盘创建了视觉网格,并启用了物理属性以模拟真实的交互。您还学习了配置层级结构,为轮子运动应用了旋转关节,最终完成了一个可用的机器人模型。

学习目标

•​熟悉 Isaac Sim 界面​:导航 Isaac Sim 界面,熟悉其各种面板和工具。
•​创建视觉网格与添加物理属性​:创建视觉网格,并为其添加物理属性以模拟交互。
•​配置机器人模型的层级结构​:在机器人模型内配置层级结构。
•​应用旋转关节​:应用旋转关节,实现轮子的旋转运动。
•​模拟机器人运动​:通过为后轮添加驱动 force 来模拟机器人的运动。

在下一个模块中,您将探索如何使用键盘准备和控制机器人,并进一步增强其功能。

控制机器人

模块概述

在本模块中,您将学习如何使用 Isaac Sim 的 OmniGraph 来控制您的 SimpleRobot,并为其配置键盘输入控制。您将设置一个 差速控制器(differential controller) 来管理轮子的运动,并探索关节(articulations)的概念以确保物理交互的正确性。

通过学习本模块,您将能够动态且高效地控制机器人的运动。

学习目标

•​实现差速控制器​: 运用 OmniGraph 来实现管理机器人运动的差速控制器。
•​配置关节以实现精确物理交互​: 配置关节(Articulation)以确保准确的物理交互。
•​集成键盘控制​: 集成键盘控制以实现机器人的手动操作。
•​分析 OmniGraph 节点​: 分析 OmniGraph 节点以理解它们在控制机器人过程中的作用。
•​模拟运动与故障排除​: 模拟机器人运动并对出现的任何问题进行故障排除。

差速控制器

SimpleRobot 虽然能够移动,但目前是一个手动过程。接下来,我们将实现并配置一个差速控制器 (differential controller)​,来管理您在 Isaac Sim 中的机器人运动。本模块将指导您完成关节结构 (articulations)​​ 的设置,以确保物理交互得到准确模拟。您将使用 ​OmniGraph​ 来创建一个差速控制器,并通过配置轮子半径 (wheel radius)​​ 和轮距 (wheel distance)​​ 等参数来优化运动。此外,您还将探索 OmniGraph 中用于实现控制的节点 (nodes)​,这些节点允许您调整参数以实现动态的机器人行为。
完成本部分后,您将拥有一个功能完整的控制系统,能够在仿真中实现机器人的精确导航。

​关节结构 (Articulations) 的概念​
​关节结构 (Articulations)​​ 使得物理引擎能够正确地与机器人的网格 (meshes)​​ 和关节 (joints)​​ 进行交互。这对于模拟逼真的运动和交互至关重要。

控制器设置流程
在Isaac Sim中为机器人设置控制器需要遵循特定的顺序,先创建关节系统(Articulation Root)再创建控制器,这个顺序非常关键。它能确保控制器能够正确地与已赋予关节的机器人模型进行交互,从而避免控制指令无法生效或出现错误行为。

以下是基本操作步骤:

Isaac Sim 4.2:
1.​首先创建关节系统​:右键单击SimpleRobot的xform,选择 “Add > Physics > Articulation Root” 为机器人添加关节根节点。这一步至关重要,因为它确保了机器人具有正确的物理和运动学属性。
2.​然后添加差速控制器​:在菜单栏中,打开 “Isaac Utils”,选择 “Common Omnigraphs”,然后选择 “Differential Controller”

Isaac Sim 4.5:

PS:博主使用的为4.5版本,后续将不再赘述

1.要为机器人添加关节,请右键单击 “SimpleRobot” xform,然后选择 “添加(Add) > 物理(Physics) > 关节根(Articulation Root)”
在这里插入图片描述

2.​在菜单栏中,打开 “工具(Tools) > 机器人(Robotics) > OmniGraph 控制器(OmniGraph Controllers)” 并选择 “差速控制器(Differential Controller)”
在这里插入图片描述

我们将使用 Omniverse 的可视化编程框架 OmniGraph 来控制机器人。机器人也可以通过 Isaac Sim 文档中所述的 Python API 进行控制。

配置差速控制器 (Configuring the Differential Controller)
将会显示一个新的 “差速控制器”(Differential Controller) 配置窗口。
在这里插入图片描述

3.将“机器人基元”(Robot Prim)的路径保留为默认值,并把 “SimpleRobot” 添加进去。
在这里插入图片描述

4.根据轮子的直径设置轮子半径(wheel radius)(例如,直径0.75意味着半径是0.375)。
5.将轮距(即左右轮之间的距离 distance betweenwheels) 设置为1.5
6.定义我们希望控制器控制的特定关节。由于我们希望由后轮来驱动机器人,请将这两个关节的名称填入相应的字段中。
![![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/ac1d6b8977314faf94a61b6429d4f0d1.png)

7.点击 “确定”(OK)
在这里插入图片描述

OmniGraph 概述
在Stage窗口中发现了一个新的 “Graphs” 文件夹,其中包含名为 “differential_controller”OmniGraph图。

OmniGraph是Omniverse中的可视化编程框架,它通过节点和连接的方式允许用户以非代码方式创建复杂的行为和交互。
在这里插入图片描述

图中节点功能解析
8.右击该图并打开,可以看到图内部包含四个节点,每个节点都有其特定功能:
在这里插入图片描述
在这里插入图片描述
On Playback Tick(播放时逐帧执行)​​: 此节点每一帧都会执行,通过Tick执行端口向后续节点发送执行信号,触发连接的计算操作。它基于屏幕刷新率工作,在刷新率的某个倍数时执行一次输出。
Differential Controller(差动控制器)​​: 此节点负责轮式机器人的差速运动驱动。它根据输入值计算机器人的速度命令,左侧的引脚允许连接其他节点计算的值,右侧输出的是通过该节点计算后的结果。它需要配置参数如轮距(wheelDistance)、轮半径(wheelRadius)、最大角速度(maxAngularSpeed)和最大线速度(maxLinearSpeed)。
Articulation Controller(关节树控制器)​​: 此节点用于控制采用关节树结构的机器人的关节。它根据Differential Controller计算出的值,​指示机器人的关节向前或向后移动。需要为其指定要控制的机器人Prim路径(如"/World/fqnvidia")和关节名称列表(jointNames),关节名称的顺序应与差动控制器的控制输出序列匹配。
MakeArray​: 此节点允许根据需要添加任意数量的值,用于指定关节名称等数组型参数。

下表总结了OmniGraph中各节点的功能:

节点名称​​ 主要功能 关键配置/输入 输出
On Playback Tick​ 每帧触发执行信号 Tick执行信号
​Differential Controller ​计算轮式机器人速度命令 期望线速度、角速度、轮距、轮半径等 速度命令​
Articulation Controller​ 控制机器人关节运动 速度命令、关节名称列表 关节控制信号​
MakeArray ​构建数组 任意数量的输入值 数组

控制器测试方法

9.点击Play播放仿真。由于Differential Controller中的 “Desired Linear Velocity”(期望线速度) 设置为 0,机器人会保持静止。
在这里插入图片描述

10.打开 Differential Controller 节点,调整 “Desired Linear Velocity”(期望线速度)“Angular Velocity”(角速度) 的数值,​观察机器人的运动。例如,设置为 1 可使机器人前进,-1 则后退 。

建议保持较低的数值​(如1或-1),以避免机器人运动过快或不稳定。

关于物理材质的说明
驱动机器人时,您可能会注意到车轮在地面上发生打滑或颠簸,仿佛轧过什么东西。这通常是因为尚未设置物理材质,车轮和地面共享相同的材质属性。物理材质的相关内容将在后续课程中详细介绍。
为了避免手动输入这些控制值,我们将在下一节中设置键盘来控制机器人的运动。

使用ActionGraph配置键盘输入

在设置好差速控制器后,我们可以通过集成键盘输入来动态管理机器人的运动,从而增强机器人的控制系统。本节将指导您从包含键盘控制功能的预构建 OmniGraph 开始,并配置差速控制器,实现使用 W、A、S、D 等按键手动操作机器人。

通过在 ActionGraph 中设置输入节点,我们将使机器人能够响应键盘命令,从而在仿真环境中实现精确导航和交互。本节结束时,您将拥有一个强大的控制系统,该系统利用键盘输入实现直观的机器人操作。

为机器人添加键盘控制 (Adding Keyboard Control to the Robot)​
1.删除先前创建的简单 OmniGraph。我们将用一个包含键盘控制功能的新预构建图来替换它。
在这里插入图片描述

Isaac Sim 4.2
2.导航到 ​Isaac​ 菜单,选择 ​Common OmniGraphs,然后选择 ​Differential Controller

​Isaac Sim 4.5​
2.在菜单栏中,打开 ​工具(Tools) > 机器人(Robotics) > OmniGraph 控制器(OmniGraph Controllers) 菜单,然后选择 ​差速控制器​ (Differential Controller)
在这里插入图片描述

差速控制器配置
3.将 SimpleRobot 添加到 Robot Prim(Prim​ 是 Omniverse 场景中的基本对象)。

​这一步至关重要,​刚体结构根节点​ (Articulation Root) 的设定也同样关键,因为差速控制器会在此处寻找关节以提供速度值。

4.设置车轮半径​ (wheel radius) 为 ​0.375,​车轮间距​ (distance between the wheels) 为 ​1.5​。

5.将 ​rear_right_joint​(右后关节)和 ​rear_left_joint​(左后关节)添加到可控制关节​ (controllable joints) 列表中。

6.将 ​Use Keyboard Control​(使用键盘控制)设置为 ​true​(启用)。
在这里插入图片描述
探索新创建的 OmniGraph
7.右键单击新创建的 ​OmniGraph​ 并打开它。
在这里插入图片描述

虽然此图中有更多的节点​ (nodes),但其右侧的端点​ (endpoints) 与之前介绍的相同。新增部分包括:
•​输入节点​ (Input Nodes):左侧有四个输入节点,每个节点都设置为监听​ (listen for) 键盘上 ​W、A、S 或 D​ 键的按下事件。
•​每个输入节点允许添加一个按键​ (key) 和一个修饰键​ (modifier key) 来监听。当您按下某个键或组合键时,数据将被发送到后续节点。这将为控制器提供它将使用的不同值​ (values)。

模拟场景
8.按下 ​Play​(播放)按钮开始模拟场景。现在,您可以使用键盘控制机器人的移动。
在这里插入图片描述

回顾

在本模块中,您成功使用 OmniGraph 设置了差速控制器,实现了对 SimpleRobot 运动的控制。您配置了关节系统以确保物理交互的正确性,并集成了键盘控制功能实现手动操作。通过分析 OmniGraph 节点,您深入了解了它们在管理机器人行为中的作用。

学习目标

•实现了差速控制器来管理车轮运动
•配置了关节系统以实现真实的物理交互
•集成了键盘控制以实现机器人手动操作
•分析了 OmniGraph 节点及其功能
•对机器人运动进行了模拟和故障排除

在下一个模块中,您将为 SimpleRobot 添加传感器,使其能够更智能地与周围环境进行交互。

添加传感器

模块概述

在本模块中,您将通过集成传感器来增强 SimpleRobot 的环境交互能力。您将学习如何添加 RGB 传感器和 2D 激光雷达传感器,配置数据采集参数,并设置可视化工具来观察传感器输出。
完成本模块后,您的机器人将具备先进的感知能力,为实现更智能的交互奠定基础。

学习目标

•安装 RGB 传感器并优化配置以实现最佳数据采集
•集成 2D 激光雷达传感器并设置可视化工具监测输出
•配置传感器支架确保正确安装和功能实现
•使用多视口实时分析传感器数据
•排查传感器安装和数据可视化常见问题

准备SimpleRobot

通过键盘,我们现在可以驱动机器人在环境中移动。接下来,我们将通过在 SimpleRobot 上设置一个专用的传感器安装空间,为集成高级传感器奠定基础。本节将指导您创建一个 xform(变换节点),作为传感器组件的父级,确保它们能跟随机器人移动,并能作为一个组进行管理。您需要将这个 xform ​策略性地放置在机器人主体的前上方,以优化数据采集。此外,您还需要通过添加一个缩小版的立方体作为传感器位置的视觉表示,该立方体将作为一个代表物,并确保传感器不会被其他组件遮挡。
在此部分结束时,您的 SimpleRobot 将完全准备好进行传感器集成,为后续模块中增强环境交互和数据收集奠定基础。

创建并放置新的Xform

1.​创建Xform​:在**“SimpleRobot”**上右键点击,选择创建新的 Xform
在这里插入图片描述

2.​重命名​:将此Xform重命名为 “Front_Sensor”
在这里插入图片描述

该Xform将作为传感器组件的父级,使它们能跟随机器人移动,并便于统一管理。

3.​调整位置​:将 “Front_Sensor” Xform移动至机器人主体的前上方。
在这里插入图片描述

此位置对于需要面向前方并捕获机器人路径数据的传感器至关重要。

4.​添加刚体​:在 “Front_Sensor” Xform上右键点击,添加一个 刚体(Rigid Body) ​。
在这里插入图片描述

为此Xform添加刚体是为了让其子Prim(基本对象)能随之移动。

5.​创建固定关节​:创建一个 固定关节(Fixed Joint) ​,将 “Front_Sensor”的刚体 连接到 “Cube” 主体上。
在这里插入图片描述

•​首先选择 “Cube”
•​然后摁住Ctrl选择 “Front_Sensor”
•右键点击 “Front_Sensor” ,选择 ​Create(创建)-> Physics(物理)-> Joint(关节)-> Fixed Joint(固定关节) ​。
•选择新创建的关节,确认 “Cube”Body0“Front_Sensor”Body1。如果顺序反了,可以通过点击文件夹图标并选择正确的Prim来重新分配。​创建关节时的选择顺序决定了Body0和Body1的设定。
在这里插入图片描述

已知问题与解决方法

如果无法向Xform添加刚体,可以尝试以下变通方案​:
1.将Xform下的所有子Prim移出。
2.当所有子Prim都被移除后,再次尝试向Xform添加 刚体(Rigid Body)
3.刚体添加成功后,即可将子Prim移回Xform下。

添加视觉表示
6为了直观显示传感器的位置,可以向 “Front_Sensor” Xform添加一个立方体(Cube):
在这里插入图片描述

7.将立方体的尺寸缩放(Scale)​​ 到 0.1, 0.1, 0.1
在这里插入图片描述

这样的小尺寸确保了它仅作为视觉标记,而不会干扰其他组件。

通过遵循以上步骤,你已为“SimpleRobot”做好了添加传感器的准备。这将便于你在仿真环境中添加和管理传感器。

在接下来的部分,我们将添加一个RGB传感器并在场景中引入障碍物以测试传感器功能。此设置将有助于可视化机器人“看到”的内容以及它如何与环境互动。

添加RGB传感器

在安装好具有代表性的底座后,让我们添加一个RGB摄像头传感器,使其能够从周围环境捕获视觉数据。本节将指导您完成传感器底座的设置,并配置摄像头以实现最佳放置和功能。您将学习如何正确定位摄像头,确保其面向前方并能捕捉机器人的行进路径。此外,您还将探索可视化摄像头视野范围的方法,并通过在场景中添加障碍物来测试其功能性。

到此部分结束时,您的机器人将配备一个RGB传感器,为未来仿真中更复杂的交互提供宝贵的视觉输入。
🛠️ 设置传感器支架
1.将先前添加的立方体重命名为 ​Sensor_Mount

这将作为连接传感器的基座。

2.右键单击 Sensor_Mount,添加一个具有 ​Colliders Preset​(碰撞体预设)的 ​Rigid Body​(刚体)即(Rigid Body with Colliders Preset)
在这里插入图片描述

此步骤可确保传感器支架与物理模拟正确交互。

PS:该步骤与上一小节的第四步创建刚体有冲突,可以移除Front_Sensor的刚体后再为Sensor_Mount添加
在这里插入图片描述

📷 创建和定位摄像头
3.右键单击 ​Sensor_Mount​ 立方体,选择 ​Create > Camera
在这里插入图片描述

此摄像头将充当 ​RGB 传感器。

4.将摄像头绕 Y 轴旋转 ​​-90 度以确保其面向前方。
在这里插入图片描述

5.将摄像头重命名为 ​Robot_Camera,并将其放置在 Sensor_Mount 立方体的边缘​。

PS:博主改名报错,这里就不改了
在这里插入图片描述

👁️ 通过传感器查看
6.在视口顶部,打开视图选择菜单,在摄像头下选择 ​Robot_Camera,以查看传感器正在捕获的内容。
在这里插入图片描述

7.由于最初没有太多内容可看,请切换回透视视图​

⛰️ 添加障碍物
8.向场景中添加各种基本几何体​(Prims)(例如,立方体、圆锥体、圆柱体)作为障碍物,可通过传感器进行观察。
在这里插入图片描述

请根据意愿随意放置它们!
PS:新建的Cube不要和小车车身Cube重名!会导致小车无法移动,物理学不存在了,博主踩坑找了很久才找到原因…
在这里插入图片描述

9.添加基本几何体后,切换回 ​Robot_Camera​ 视图,以从机器人的视角观察这些障碍物的呈现方式。
在这里插入图片描述

增强可视化:双视口同步查看

在 Isaac Sim 中,通过启用第二个视口,您可以同时观察场景的全局透视视图与机器人相机传感器的第一人称视角,从而实现更高效的可视化分析与机器人调试。

为了同时查看两个相机视角,您可以启用第二个视口。以下是操作步骤:

Isaac Sim 4.2:
10.​添加第二个视口​:
在菜单栏中,选择 ​Window > Viewport > Viewport 2​。这将打开一个新的视口窗口。

Isaac Sim 4.5:
10.在菜单栏中,选择 ​窗口(Window) > 视口(Viewports)​,并确保 ​视口1(Viewport 1)​​ 和 ​视口2(Viewport 2)​​ 处于勾选状态。
在这里插入图片描述

11.​配置视口视角​:
•将一个视口(例如 Viewport 1)设置为 ​Perspective​ 视图。这通常是默认的场景全局视角。
•将另一个视口(例如 Viewport 2)设置为 ​Robot_Camera​ 视图。这是您安装在机器人上的相机传感器的视角。
在这里插入图片描述

完成此设置后,您便可以同步查看场景的全局透视视图和机器人相机的实时画面。

通过以上步骤,您的 SimpleRobot 便安装了一个基本的 RGB 传感器,并允许您同时观察机器人自身的视角和其传感器所“看”到的点云世界。
接下来,我们将为其创建一个 2D 激光雷达传感器。

配置2D激光雷达传感器

在查看RGB传感器的视角结果后,接下来我们集成一个2D激光雷达传感器,使机器人能够更智能地检测环境并与之交互。本节将指导您完成将激光雷达传感器添加到机器人上的过程,包括正确放置它、设置可视化工具以监控其输出,并学习如何配置传感器参数以优化性能,确保其能准确检测场景中的障碍物 。

到本节结束时,您的机器人将具备先进的感知能力,为后续仿真中更复杂的交互和数据分析做好准备。

添加激光雷达传感器

Isaac Sim 4.2:
1.选中 Front_Sensor 变换节点后,右键单击或从顶部打开 ​Create​ (创建) 菜单。
2.在 ​Isaac​ 下选择 ​Sensors​ (传感器),然后在 ​PhysXLidar​ 下选择 ​Rotating​ (旋转)

这将会向您的 SimpleRobot 添加一个 2D 激光雷达传感器。

3.移动该激光雷达(lidar),将其定位在 Sensor_Mount 立方体的顶部。

激光雷达和相机在场景中显示在同一位置。
相机有其视野的可视化表示,而激光雷达仅通过变换操控器 (transform gizmo) 显示。

Isaac Sim 4.5:
1.选择 Front_Sensor 的 xform 后,打开顶部菜单栏中的 “Create”(创建) 菜单。
2.在 “Sensors”>“PhysXLidar” 下,选择 “Rotating”(旋转式)
在这里插入图片描述

这会将一个 2D 激光雷达传感器添加到您的 SimpleRobot 中。

3.移动激光雷达,使其定位在 Sensor_Mount 立方体的顶部。
在这里插入图片描述

激光雷达和相机在场景中的同一位置显示。
相机有其视野的可视化表示,而激光雷达仅通过变换控制器(transform gizmo)显示。

设置可视化
要检查激光雷达 (Lidar) 是否正常工作,首先停止仿真。
4.选中激光雷达后,向下滚动找到 ​Raw USD Properties​(原始 USD 属性),并启用 ​​“Draw Lines”​​(绘制线条)和 ​​“Draw Points”​​(绘制点)。
在这里插入图片描述

5.再次按下播放按钮以继续仿真。
在这里插入图片描述

此时应看到调试线条围绕传感器旋转,这表明传感器已正常运行。

确保物体检测
如果传感器未检测到任何物体,请记住我们添加的是 ​Physics Lidar​(物理激光雷达),其功能依赖于场景中的物体具有物理属性。
6.在 ​Stage​ 窗口中选择所有障碍物图元 (obstacle prims)。
7.右键点击并选择 ​Add > Rigid Body with Colliders Preset​(添加 > 刚体与碰撞器预设)。
在这里插入图片描述

8.再次按下播放按钮。

现在应看到物体阻挡了调试线条,这表示它们已被激光雷达检测到。

调整激光雷达参数
如有需要,您可以通过调整原始USD属性窗口​(Raw USD Properties window)中的参数来减慢激光雷达的旋转速度。这样做有助于更清晰地了解激光束击中了哪些物体,但请注意,激光雷达的有效操作通常需要快速旋转。
在这里插入图片描述

减慢速度后我们能观察到激光束击中了车轮。因此,我们可以将传感器位置稍微向上调整以避免这种情况,然后再次进行仿真。

保存场景
您的SimpleRobot现在已同时配备了一个RGB传感器和一个2D激光雷达。这些传感器已在场景中经过测试,确保了其正常工作。
9.​请保存您的场景,然后关闭Isaac Sim,以便为下一个模块中启用ROS 2做好准备。

通过以上步骤,您已成功为SimpleRobot添加了2D激光雷达传感器。这将借助先进的传感能力,帮助机器人更好地与环境进行交互。

回顾

在本模块中,您已成功为SimpleRobot添加了传感器,使其能够更便捷地感知环境并实现交互。您安装了RGB传感器与2D激光雷达传感器,完成参数配置,并设置了可视化方案以有效监测其输出数据。

学习目标

•完成RGB传感器的安装与数据采集配置
集成2D激光雷达传感器并运用可视化工具监测输出
配置传感器支架确保精准定位与功能实现
•通过双视口实时分析传感器数据
排查传感器定位与可视化相关的问题

下一模块将重点介绍如何在ROS 2中访问数据,实现将传感器信息从Isaac Sim流式传输至外部应用,进行深度处理与分析。

PS:下一模块需要安装ROS2,后续博主再更,太长了…

现已更新后面的部分:[Isaac Sim4.5]在Isaac Sim中模拟你的第一个机器人(二)


  1. Getting Started: Simulating Your First Robot in Isaac Sim↩︎

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐