使用 Isaac Sim 模拟机器人
前言
将 2D 激光雷达数据从 Isaac Sim 流式传输至 ROS 2,并通过 RViz 进行可视化。通过激光雷达数据监控机器人与环境的交互,从而在仿真环境中提升机器人的感知能力。
概览
欢迎来到 入门指南:在 Isaac Sim 中模拟您的第一个机器人 课程。我们将一起探索机器人模拟的世界,使用 NVIDIA Isaac Sim 在模拟环境中动手实践构建、控制机器人并访问数据的全过程。
在本课程中,您将会:
- 探索 Isaac Sim 界面:熟悉 Isaac Sim 界面的关键组成部分,包括面板、上下文菜单和工具栏。掌握这些基础知识后,您将能高效地在模拟环境中构建和管理机器人模型。
- 构建一个简单的机器人模型:通过组装底盘、轮子和关节等组件来构建一个基础机器人。这包括创建可视网格并配置物理属性,以在 Isaac Sim 中模拟真实的物理交互。
- 配置物理属性:设置物理场景并应用必要的属性,确保机器人能够真实地与环境交互。这包括添加碰撞网格和地面平面,以准确模拟重力等物理力。
- 实现控制机制:使用 OmniGraph 和 ROS 2 创建机器人的控制系统,使其能够动态移动和交互。这涉及设置差分控制器和关节结构,以有效管理轮子运动。
- 集成传感器:通过添加如 RGB 摄像头和 2D lidar 等传感器来增强机器人的感知能力。配置这些传感器以捕捉环境数据,使机器人能够智能地感知和响应周围环境。
- 将传感器数据流传输到 ROS 2:建立从 Isaac Sim 到 ROS 2 的数据流传输工作流,以便在 RViz 中实时可视化与分析。这包括设置 ActionGraphs 并使用 ROS 2 Bridge 扩展,实现平台之间的无缝通信。
本课程面向初学者和具备一定机器人经验的学习者,帮助您掌握使用 Isaac Sim 的关键知识和技能。我们鼓励您积极参与课程中的实践活动和练习,以加深学习体验。
搭建一个简单的机器人
模块概览
在本模块中,您将学习如何使用 Isaac Sim 构建一个简单的机器人。您将学会浏览界面、创建并配置基础组件(如底盘和轮子),并设置物理属性以模拟真实的运动。完成本模块后,您将掌握构建能与环境交互的机器人模型的基础知识。
学习目标
- 掌握 Isaac Sim 界面的导航操作,便于高效管理模拟过程。
- 创建可视网格并为基础几何体启用物理属性。
- 配置层级结构以组织机器人组件。
- 应用旋转关节以实现轮子的转动。
- 通过添加驱动力来模拟机器人的运动。
浏览 Isaac Sim 界面
我们将从引导您启动 Isaac Sim 开始,带您熟悉其用户界面,包括面板、上下文菜单和工具栏等关键组成部分。您将学习如何浏览视口,并了解默认场景的设置,包括像 World 和 defaultLight 这样的原始元素(prims)。此外,您还将探索 Create 菜单,学习如何添加新资产,并访问 Isaac 示例,了解 Isaac Sim 的各种功能。
完成本模块后,您将能够高效管理模拟内容,并为后续模块中构建第一个机器人模型做好准备。
在开始之前,请确保您已在工作站上安装了 Isaac Sim。
从 Launcher 启动
- 首先打开 Omniverse Launcher,然后在 Library 标签页中选择 Isaac Sim 应用。
提示
如果您尚未安装 Isaac Sim,可以在 Launcher 的 Exchange 标签页中进行安装。
- 点击 Launch 按钮启动应用程序。
- 在本模块中,请确保未启用 ROS Bridge 扩展。
- 我们将在后续章节中讲解如何访问数据时再启用此功能。
界面结构
Isaac Sim 的界面由几个关键组成部分构成:
-
- 面板:这些面板是可自定义的,可以调整大小、停靠、取消停靠、添加或移除。主要面板包括 Stage(场景树)、Properties(属性面板)和 Viewport(视口)。
- 右键菜单:在视口或场景中右键点击,可以访问多种操作和工具。
- 工具栏:位于顶部,提供快捷方式用于创建新对象、运行模拟以及访问扩展管理器等常用功能。
场景中的默认原始体(Prims)
启动 Isaac Sim 后,默认场景中已经包含了一些原始体(prim),例如 World 和 defaultLight,您可以在 Stage 面板中看到它们。
提示
Isaac Sim 使用的是 OpenUSD(通用场景描述)文件框架。如果您还不熟悉 OpenUSD,可以通过我们的 OpenUSD 学习课程 了解核心概念,例如 prim、stage 和 xform 等。
Create 菜单
这个菜单可以让我们向场景中添加新的原始体(prim)和资产。它包含了创建基础形状(如立方体、球体)、导入机器人模型,以及设置如平面网格等环境选项。
Isaac 示例
Examples 菜单中包含了一系列演示示例,展示了 Isaac Sim 的实际用法。
-
- 这些示例涵盖了如使用 ROS/ROS 2、操控对象、以及包含多个机器人的场景等功能。
浏览视口
- 移动:按住鼠标右键并使用 WASD 键在视口中控制相机前后左右移动。
- 按住鼠标右键并使用 Q 和 E 键可以控制相机上下移动。
- 旋转:按住鼠标右键并拖动,可旋转相机视角。
- 缩放:滚动鼠标滚轮,或按住 Alt 键同时点击右键可实现场景的放大和缩小。
- 平移:按住鼠标中键并拖动,可水平或垂直平移相机视角。
通过理解这些组件以及如何操作 Isaac Sim 界面,您将能够高效地创建和管理模拟场景。
构建一个简单的机器人
现在我们已经能够熟练操作 Isaac Sim 界面,接下来将在 Isaac Sim 中构建一个基础的机器人模型。本节将引导您创建机器人底盘的可视网格,并添加轮子和关节等基本组件。您将学习如何启用物理属性,以模拟真实的运动和交互,从而使机器人能够有效地在环境中移动。
完成本节后,您将拥有一个可运行的机器人模型,为后续模块中的功能拓展和控制机制打下基础。
创建可视网格
首先在场景中创建一个立方体。
- 选择 Create > Mesh > Cube 来在场景中生成一个立方体。
提示
此立方体是一个可视网格,也就是我们在视口中看到的对象。但它目前还不是一个物理对象。
启用场景中的物理效果
- 点击 Play 按钮以开始物理模拟。
- 您会发现什么都没有发生,这是因为立方体还不是物理对象,也没有添加碰撞体。
- 要启用物理效果,请前往 Create > Physics > Physics Scene。
- 这将为模拟提供重力等必要的物理机制。
- 查看物理场景的默认属性,可以看到重力设置为
Earth Gravity
,在 Isaac Sim 中,上下方向对应的是Z
轴。- 您可以参考视口左下角的坐标轴指示器来确认方向。
为立方体添加物理属性
- 再次点击 Play,您会发现依然没有反应。
- 这是因为场景中虽然已经启用了物理效果,但立方体本身仍然不是一个物理对象。
- 为了解决这个问题,在 Stage 窗口中右键点击 cube,然后选择 Add > Physics > Rigid Body with Colliders Preset。
- 可视网格与碰撞网格的区别在于:可视网格是我们在视口中看到的形状,而碰撞网格用于定义物体如何与其他物体交互,以及其他物体如何响应它。
- 点击 Show 图标,然后选择 Show by Type > Physics > Colliders > Selected。
- 此时我们就可以看到立方体上的绿色网格,它表示碰撞网格的范围。
使用地面平面进行物理模拟
- 点击 Play 观察发生了什么。
- 您会看到立方体无限下落,因为场景中还没有地面平面来阻止它。
- 为了防止立方体一直下落,我们需要添加一个地面平面。这个平面会无限延伸,能阻止所有物理对象穿过它。
- 通过 Create > Physics > Ground plane 添加地面平面。
- 您会注意到可视网格有边界,但碰撞网格是无限延伸的。
- 展开 GroundFloor 的 xform,找到其中的 CollisionMesh 和 CollisionPlane。
- 将 cube 移动到地面平面上方。请记住 Isaac Sim 中的默认单位是米(m),所以可以将立方体上移 1 米。
- 最终模拟:再次点击 Play。
- 您会看到立方体在接触地面平面时停止下落,这就是我们在物理模拟中所期望的交互效果。
其他说明
-
- 尝试更改物理场景属性中的重力方向,观察它对模拟结果的影响。
关于导入资产的提示:
在将资产导入 Isaac Sim 时,不同的导入器会带入不同的数据。例如,URDF 导入器会包含预设的物理属性数据,而 Isaac Sim 导入器只会导入可视数据。在使用不同类型资产时,务必牢记这一点。
添加四个轮子
接下来,我们将为简单机器人添加轮子,并配置它们以实现运动。您将从准备底盘开始,了解层级结构在组织机器人组件中的重要性。然后,您将创建并放置轮子,确保它们正确对齐并附着在机器人本体上。您还将为轮子添加物理属性,使其能够与环境交互。最后,您将配置旋转关节以实现转动,并施加驱动力来模拟轮子的推进效果。
完成本节后,您的机器人将配备可运作的轮子,准备好在后续模拟中实现动态移动。
准备底盘
-
- 确保立方体位于世界原点
(0, 0, 0)
。这个立方体将作为我们机器人的主底盘。 - 将立方体缩放为
2, 1, 0.5
。X 方向设置为 2,是为了容纳前后轮子。
- 确保立方体位于世界原点
理解层级结构在构建复杂模型中的重要性,有助于更好地组织对象,也方便后续的变换与修改。
创建机器人 Xform 并添加底盘
-
- 在 Stage 面板中右键点击,选择 Create > Xform 创建一个 xform,它将作为我们机器人的父节点。
- 双击新建的 xform,将其重命名为 SimpleRobot。
- 将底盘(立方体)拖拽到 Stage 中的 SimpleRobot xform 下,使其成为其子元素。
- 选中 SimpleRobot xform,在 Properties 标签页中找到 Transform 属性。
- 将 SimpleRobot 在 Z 方向上抬高 1。
- 您会看到底盘随 xform 一起抬升,这是因为变换会作用于 SimpleRobot xform 中的所有 prim,它起到了容器的作用。
- 将底盘本体的高度值设置为 0,以校正位置。
亲子层级关系 (Child-Parent Relationships)
如前一步骤所述,SimpleRobot 的变换节点 (xform) 是一个容器。它在场景层级 (stage) 中创建了一种父子层级关系。请理解层级结构中父子关系的重要性。这种关系使得层级内对象的管理和变换操作更加便捷。
创建并定位车轮 (Creating and Positioning the Wheels)
- 创建车轮: 在场景 (Stage) 面板中,右键点击 SimpleRobot,选择 创建 (Create) > 网格 (Mesh) > 圆柱体 (Cylinder) 来创建一个车轮。
- 调整方向与大小: 在变换属性 (transform properties) 下,将其绕 X 轴旋转 90 度,并将其缩放比例设置为 0.75, 0.75, 0.25。
- 定位车轮: 将车轮平移 (Translate) 至位置 0.5, 0.75, 0。此操作将该车轮相对于世界坐标轴和机器人主体进行定位。
- 重命名车轮: 在场景面板 (Stage panel) 中右键点击该圆柱体,选择 重命名 (Rename),将其命名为 Front_Left_Wheel(左前轮)。
- 复制车轮: 复制 Front_Left_Wheel 以创建另外三个车轮。可以通过右键点击并选择 复制 (Duplicate),或在选中该图元 (prim) 时按键盘快捷键 Ctrl+D 来实现。
- 重命名其他车轮: 根据各自的位置将每个车轮重命名为 Front_Right_Wheel(右前轮)、Rear_Left_Wheel(左后轮)、Rear_Right_Wheel(右后轮)。
- 确保父子关系: 确保所有车轮都是 SimpleRobot 变换节点 (xform) 的子对象 (children)。
为车轮添加物理属性并进行模拟 (Adding Physics to the Wheels and Simulating)
- 添加刚体物理: 选中所有车轮,右键点击,在 添加 (Add) 菜单下选择 带碰撞预设的刚体 (Rigid Body with Collision Preset)。
- 确认碰撞网格: 选中车轮后,可以看到碰撞网格 (collision meshes) 现在已显示出来。
- 运行模拟: 按下 播放 (Play) 按钮,观察车轮如何在重力作用下也掉落至地面。
准备关节 (Preparing the Joints)
车轮设置完成后,我们可以通过配置使车轮能够运动的关节来增强 SimpleRobot。本节将指导您选择和设置旋转关节 (revolute joints),这种关节允许旋转运动,非常适合车轮。您将学习如何通过调整轴线和旋转来正确配置这些关节,确保它们与车轮的方向对齐。此外,您将为后轮创建角驱动 (angular drives) 以模拟推进力,并设置速度和阻尼等参数以实现稳定控制。
完成本节后,您的机器人将拥有功能齐全的关节,准备好在仿真中动态移动。
创建旋转关节 (Creating Revolute Joints)
- 选择一个车轮。 注意我们需要将关节放置在 Y 轴上。
- 旋转关节允许围绕单轴进行旋转运动,这非常适合车轮。
- 创建旋转关节:
- 首先选择父物体 Cube。
- 然后,按住 Ctrl 键选择子图元 (Front_Left_Wheel)。
- 右键单击并选择 创建 (Create) > 物理 (Physics) > 关节 (Joint) > 旋转关节 (Revolute joint)。
- 提示: 按住 Ctrl 键可以同时选择两者。
- 重要: 请记住先选择 Cube,然后再选择车轮,以便关节能够正确设置自身。
配置旋转关节 (Configuring the Revolute Joint)
- 注意: 默认值是不正确的。默认轴线设置为 X,但我们需要将其更改为 Y。
- 将关节轴线更改为 Y。 观察可视化效果现在指向上方。
- 我们需要手动设置关节的局部旋转 0 (local rotation 0),使其与图元 (prim) 的方向匹配。
- 将 local rotation 0 设置为 0, 0, 0。
- 观察: 旋转关节现在与车轮的方向对齐了。放大关节并注意红色的 X 箭头已正确对齐,但蓝色的 Z 箭头没有对齐。
- 将局部旋转 1 (Local Rotation 1) 的值设置为 -90, 0, 0 以纠正不匹配。
- 取消选择并重新选择关节以查看更新。
- 确保所有线条都沿其正确的方向。
- 注意: 我们可以忽略箭头的指向方向。
- 重命名旋转关节 (RevoluteJoint),使其与所连接车轮的名称相匹配,例如 Front_Left_Joint。
创建剩余关节 (Creating the Remaining Joints)
- 一次创建一个关节。
- 首先选择主体 (body),然后选择下一个车轮。
- 使用与第一个关节相同的参数创建新关节。
- 完成后,将机器人向下移动到地平面 (ground plane)。
为后轮添加驱动力 (Adding a Drive Force to the Rear Wheels)
我们将只为后轮添加驱动力,因为后轮是驱动机器人的两个轮子。
- 右键单击后轮的关节,选择 添加 (Add) > 物理 (Physics) > 角驱动 (Angular Drive)。
- 设置驱动的速度 (velocity)。 这里重要的属性是阻尼 (damper)。将其设置为 10,000。
- 为后轮选择较大的阻尼值 10,000 是为了实现精确的速度控制、减少振荡并确保稳定性。
- 将目标速度 (target velocity) 设置为 50。
- 为另一个后轮重复此操作。
模拟机器人 (Simulating the Robot)
- 按下 Play 按钮,观察机器人向前移动。
- 挑战:
- 如何让机器人准备转弯?尝试将一个车轮的目标速度设置为正值,另一个设置为负值。
故障排除 (Troubleshooting)
- 如果出现问题,请检查车轮是否低于主体 (body) 以及关节是否设置正确。否则,机器人会被拖行。
- 调试时,请仔细检查您的参数以确保数值正确。一个数值错误就可能导致奇怪的结果。
复习
在本模块中,您已经成功在 Isaac Sim 中构建了一个简单的机器人。您学习了如何操作界面,创建底盘的可视网格,并启用了物理效果来模拟真实的交互。您还学会了配置层级结构,并为轮子添加了转动关节,最终完成了一个功能完整的机器人模型。
学习目标
- 掌握 Isaac Sim 的界面导航,熟悉各个面板和工具。
- 创建可视网格,并添加物理属性来模拟交互。
- 配置机器人模型中的层级结构。
- 应用转动关节
Quiz
5/5 points (graded)
以下哪种操作可以让您在 Isaac Sim 的视图中向前移动摄像机?
按住右键并拖动
按住右键的同时使用 WASD 键
按住左键的同时使用 Q 和 E 键
按键盘上的向上键
正确
解释
在 Isaac Sim 中,按住右键并使用 WASD 键可以让摄像机在视图中前后左右移动,这是在模拟环境中导航的关键方式。
为了让一个立方体在物理模拟中与其他物体发生交互,必须为其添加什么?
可视网格
碰撞网格
纹理
光源
正确
解释
碰撞网格定义了物体在模拟中如何与其他物体发生物理交互。虽然可视网格负责呈现外观,但只有碰撞网格才能让物体在场景中产生实际的物理作用。
在 Isaac Sim 中构建机器人时,使用层级结构的重要性是什么?
它确保所有组件在视图中可见。
它会自动将物理属性应用到所有子对象。
它可以减少模拟时间。
它有助于组织组件并简化变换操作。
正确
解释
在 Isaac Sim 中,层级结构对于组织复杂的机器人组件至关重要。通过将相关组件归在父对象下,可以更方便地进行缩放、移动等变换操作。
在 Isaac Sim 中,将转动关节应用到机器人的轮子上,主要作用是什么?
允许轮子绕固定点旋转
使轮子上下移动
锁定轮子
在模拟中改变轮子的形状
正确
解释
转动关节允许物体围绕单一轴旋转,这是实现轮子运动的关键。该类型的关节常用于模拟车辆或机器人轮子的旋转行为。
为了模拟后轮驱动机器人的前进运动,需要对后轮进行什么设置?
增加后轮的重力
改变轮子尺寸以增加摩擦力
移除前轮的碰撞网格
添加带有速度控制的角驱动
正确
解释
要模拟轮子驱动,需要在后轮上添加角驱动,通过控制其旋转速度实现前进或后退,从而模拟现实中的驱动机制。
Show answer
控制机器人
模块概览
在本模块中,您将学习如何使用 Isaac Sim 的 OmniGraph 来控制您的 SimpleRobot,并为其配置键盘输入控制功能。您将设置一个差速控制器来管理轮子运动,并探索关节机制的概念,以确保物理交互的准确性。
完成本模块后,您将能够动态且高效地控制机器人运动。
学习目标
- 使用 OmniGraph 实现差速控制器 来管理机器人的移动。
- 配置关节机制,以实现准确的物理交互。
- 整合键盘控制,实现对机器人的手动操控。
- 分析 OmniGraph 节点,理解它们在控制机器人中的作用。
- 模拟机器人运动,并排查出现的问题。
差速控制器
虽然 SimpleRobot 已经能动了,但现在还只能靠手动控制。接下来我们将实现并配置一个差速控制器,用于在 Isaac Sim 中管理机器人的运动。本模块将引导您完成关节机制的设置,确保物理交互能够准确模拟。您将使用 OmniGraph 来创建差速控制器,并设置轮子的半径和间距,以优化移动效果。此外,您还将探索用于控制的 OmniGraph 节点,调整参数以实现更灵活的机器人行为。
完成本节后,您将拥有一个完整可用的控制系统,使机器人能够在模拟中精确导航。
提示
本课程不会深入讲解 OmniGraph,但如果您想了解更多内容,请参考 OmniGraph 官方文档。
关节机制的概念
关节机制(Articulations)使物理系统能够正确地与机器人的网格和关节进行交互。它对于模拟真实的运动和交互非常关键。
设置控制器
在创建控制器之前,必须先确保关节机制(articulations)已经创建,这是非常重要的。这样才能确保控制器能正确地与已建立关节的机器人进行交互。
- 要为机器人添加关节机制,请右键点击 SimpleRobot 的 xform,选择 Add > Physics > Articulation Root。
- 在菜单栏中,打开 Isaac Utils,选择 Common Omnigraphs,然后点击 Differential Controller。
我们将使用 OmniGraph —— Omniverse 的编程框架,来控制机器人。
配置差速控制器
一个新的 差速控制器(Differential Controller) 窗口将会显示出来。
- 保留 路径(path) 为默认值,并将 SimpleRobot 添加到 RobotPrim。
- 根据轮子的直径设置 轮子半径(wheel radius)(例如,直径为 0.75,则半径为 0.375)。
- 将两个轮子之间的 间距(distance) 设置为 1.5。
- 指定我们希望控制器控制的具体关节。由于我们希望由后轮驱动机器人,因此请在对应字段中填入那两个后轮关节的名称。
- 点击 OK。
理解 OmniGraph
您会在 Stage 窗口中看到一个新的 Graphs 文件夹,里面包含了名为 differential_controller 的 OmniGraph。
- 右键点击该 graph 并将其打开。图中包含四个节点,我们来逐一了解它们的作用:
- On Playback Tick: 这个节点会在每一帧执行,向后续节点发送信号,驱动它们进行设定的计算。
- Differential Controller: 这个节点会根据输入值计算机器人的速度指令。左侧的 pin 可以接入其他节点输出的值,右侧是该节点计算后的输出结果。
- Articulation Controller: 这个节点根据 Differential Controller 的输出结果控制机器人的关节向前或向后移动。
- MakeArray: 这个节点允许我们为关节名称添加任意数量的值。
测试控制器
- 点击 播放(play),您会发现机器人保持静止,因为在 差速控制器(Differential Controller) 中设置的 期望线速度(Desired Linear Velocity) 是 0。
- 打开 Differential Controller,调整 Desired Linear Velocity 或 Angular Velocity 来让机器人移动。
- 保持数值较小,例如设置为 1 可以前进,-1 则向后移动。
关于物理材质的提示:
在控制机器人移动时,您可能会注意到它像是碾过东西一样颠簸,这是因为轮子在地面上打滑。这是由于还没有设置物理材质,当前轮子和地面使用的是相同的材质。这个部分将在后续课程中讲解。
为了避免每次都手动输入这些数值,我们将在下一节设置键盘控制机器人移动。
使用 ActionGraph 配置键盘输入
在差速控制器配置完成之后,我们可以通过整合键盘输入进一步增强机器人的控制系统,使其具备动态控制能力。本节将引导您使用一个预设的包含键盘控制功能的 OmniGraph 开始配置。我们将对差速控制器进行设置,使其支持使用 W、A、S、D 键对机器人进行手动操作。
通过在 ActionGraph 中设置输入节点,我们可以让机器人响应键盘指令,从而实现在模拟环境中的精准导航与交互。完成本节后,您将拥有一个强大的控制系统,能够通过键盘输入直观地操作机器人。
为机器人添加键盘控制
- 删除之前创建的简单 OmniGraph。我们将用一个包含键盘控制功能的全新预设图替代它。
- 导航到 Isaac 菜单,选择 Common OmniGraphs,然后点击 Differential Controller。
配置差速控制器
- 将 SimpleRobot 添加到 robot prim 中。
- 这一步非常关键,就像 articulation root 一样重要。differential controller 会在这里寻找关节,以便为其提供速度数值。
- 将 轮子半径(wheel radius) 设置为 0.375,两个轮子之间的 距离(distance) 设置为 1.5。
- 将 rear_right_joint 和 rear_left_joint 添加到可控制的关节列表中。
- 将 Use Keyboard Control 设置为 true(启用键盘控制)。
探索新的 OmniGraph
- 右键点击新创建的 OmniGraph,然后打开它。
虽然这个图中包含了更多节点,但右侧的终端节点与之前介绍的相同。新增的部分包括:
-
- 输入节点(Input Nodes): 左侧新增了四个输入节点,分别监听键盘上的 W、A、S 和 D 键的按下操作。
- 每个输入节点都可以添加一个主键和一个组合键。当您按下这些键或组合键时,数据将被发送到后续节点,生成不同的数值供控制器使用。
模拟场景
- 点击 播放(play) 以开始模拟场景。现在,您可以通过键盘来控制机器人的移动。
提示
您可以通过修改 Constant Double 节点来调整每次按下键盘时增加的线速度和角速度数值。
回顾
在本模块中,您成功使用 OmniGraph 设置了一个差速控制器,从而实现了对 SimpleRobot 的移动控制。您配置了关节结构,以确保物理交互的真实感,并整合了键盘控制以实现手动操作。通过分析 OmniGraph 节点,您深入了解了它们在管理机器人行为中的作用。
学习目标
- 实现差速控制器来控制轮子的移动。
- 配置关节结构以实现真实的物理交互。
- 整合键盘控制以实现手动操作机器人。
- 分析 OmniGraph 节点及其功能。
- 模拟并排查机器人运动问题。
在下一个模块中,您将为 SimpleRobot 添加传感器,使其能够更智能地与环境交互。
Quiz
5/5 points (graded)
在 Isaac Sim 中,差速控制器的主要作用是什么?
用来调整机器人的外观
用来模拟重力作用在机器人上
用来管理机器人的轮子旋转与移动
用来控制模拟中的摄像机移动
正确
解释
差速控制器用于计算并管理机器人轮子的速度,根据输入值实现可控的移动。它通过控制轮子转动,确保机器人协调移动。
为什么在 Isaac Sim 中,在设置控制器之前需要先配置关节结构?
关节结构允许对机器人进行手动控制。
关节结构确保关节与网格之间的物理交互是准确的。
关节结构可以让机器人移动更快。
关节结构只用于视觉效果。
正确
解释
关节结构定义了关节与网格之间的物理交互方式,这对实现逼真的模拟至关重要。如果没有正确配置关节结构,控制器将无法准确管理机器人的运动。
如何通过键盘在 Isaac Sim 中控制机器人?
在差速控制器中将 "Use Keyboard Control" 设置为 true
给机器人添加一个新的碰撞网格
增大轮子的半径以提升操控性
在设置菜单中启用 "Use Keybaord Control"
正确
解释
要通过键盘实现手动控制,需在差速控制器中将 "Use Keyboard Control" 设置为 true。这样,按下 W、A、S、D 等按键时就能在模拟中控制机器人的移动。
在 OmniGraph 中,哪个节点根据输入值计算机器人的速度指令?
On Playback Tick
Articulation Controller
Differential Controller
MakeArray
正确
解释
Differential Controller 节点负责根据诸如线速度或角速度等输入值计算速度指令,并将这些指令发送给像 Articulation Controller 这样的节点以控制机器人移动。
如果按下播放后机器人没有移动,可能的原因是什么?
差速控制器中的线速度值设为 0
轮子没有添加碰撞网格
没有将关节根节点添加到 SimpleRobot 中
没有创建地面平面
正确
解释
以下每个问题都可能导致机器人无法移动:
A) 如果线速度设置为 0,轮子不会前进,机器人将停在原地。
B) 如果轮子没有碰撞网格,就无法与环境交互,因此不会移动。
C) 如果没有添加关节根节点,控制器就无法正确管理机器人的关节,导致运动失败。
D) 如果没有地面平面,机器人可能会无限下坠,或无法与环境正常交互。
Show answer
添加传感器
模块概览
在本模块中,您将为 SimpleRobot 增加传感器,使其具备与环境交互的能力。您将学习如何添加 RGB 和二维激光雷达(2D lidar)传感器,配置它们以进行数据采集,并设置可视化工具来观察传感器输出。
完成本模块后,您的机器人将具备先进的感知能力,为更智能的交互打下基础。
学习目标
- 安装 RGB 传感器,并配置其参数以实现最佳数据采集效果。
- 集成 2D 激光雷达传感器,并设置可视化工具以监控其输出。
- 配置传感器安装方式,确保位置正确、功能正常。
- 使用多视图窗口 实时分析传感器数据。
- 排查常见问题,包括传感器位置和数据可视化相关问题。
准备 SimpleRobot
现在我们已经可以使用键盘操控机器人在环境中移动了。接下来,我们要为集成高级传感器打好基础,在 SimpleRobot 上设置一个专门用于安装传感器的空间。本节将指导您创建一个 xform,作为各个传感器组件的父级,从而确保它们可以跟随机器人移动,并作为一个整体进行管理。您会将这个 xform 安装在机器人机身的前上方,以便优化数据采集效果。此外,您还将添加一个缩小比例的立方体作为传感器位置的可视化表示,确保不会被其他组件遮挡。
完成本节后,您的 SimpleRobot 将为传感器集成做好充分准备,为后续模块中的环境交互与数据采集奠定基础。
创建并放置新的 Xform
- 右键点击 SimpleRobot,创建一个新的 xform。
- 将其重命名为 Front_Sensor。
- 这个 Xform 将作为传感器组件的父级,使其可以跟随机器人移动,并便于统一管理。
- 将 Front_Sensor xform 移动到机器人机身的前上方。
- 这个位置对需要朝前采集数据的传感器来说非常关键。
- 右键点击新的 Front_Sensor xform,添加一个 Rigid Body。
- 我们之所以要为这个 xform 添加 Rigid Body,是为了让它的子级原语能够随之一起移动。
已知问题
如果您无法将 Rigid Body 添加到某个 xform 上,请尝试以下解决方法:
- 先将所有子级原语从该 Xform 下移除。
- 在所有子级原语移除后,再尝试为该 Xform 添加 Rigid Body。
- 添加成功后,再将子级原语移回该 Xform。
添加可视化表示
- 为了直观表示传感器的位置,在
Front_Sensor
xform 下添加一个立方体。 - 将立方体缩放至
0.1, 0.1, 0.1
。- 这个小尺寸可以确保它仅作为视觉标记存在,不会影响其他组件。
按照上述步骤操作后,您的 SimpleRobot 就已为传感器集成做好准备了。这将让您在仿真环境中轻松地添加和管理传感器。
在接下来的部分中,我们将添加一个 RGB 传感器,并在场景中引入障碍物来测试传感器的功能。这个设置将帮助我们可视化机器人所“看到”的内容,以及它如何与环境进行交互。
添加 RGB 传感器
在标准安装座就位后,我们来添加一个 RGB 摄像头传感器,使其能够从环境中捕获视觉数据。本节将指导您完成传感器安装座的设置以及摄像头的配置,以实现最佳放置位置和功能。您将学习如何正确放置摄像头,确保其面向前方并捕捉机器人的行进路径。此外,您还将探索可视化摄像头视场角的方法,并通过在场景中添加障碍物来测试其功能。
至此,您的机器人将配备一个 RGB 传感器,为后续模拟中更高级的交互提供宝贵的视觉输入。
设置传感器安装底座
- 将之前添加的 立方体(cube)重命名为 Sensor_Mount。
- 它将作为安装传感器的基础组件。
- 右键点击 Sensor_Mount,添加一个 Rigid Body with Colliders Preset。
- 这一步确保传感器底座可以在物理模拟中正确交互。
创建并定位摄像头
- 右键点击 Sensor_Mount 立方体,选择 Create,然后创建一个新的 Camera。
- 这个摄像头将作为 RGB 传感器使用。
- 将摄像头在 Y 轴方向上旋转 -90 度,以确保其朝向前方。
- 将摄像头重命名为 Robot_Camera,并将其放置在 Sensor_Mount 立方体的边缘位置。
通过传感器查看画面
- 在视图窗口顶部,打开 视角选择(view selection) 菜单,在 cameras 下选择 Robot_Camera,即可查看传感器所捕捉到的画面。
- 由于一开始画面中内容不多,可以先切换回 Perspective 视角继续操作。
添加障碍物
- 在场景中添加各种 原语(prims)(例如立方体、圆锥体、圆柱体)作为障碍物,以便通过传感器观察。
- 可以根据您的喜好随意摆放它们!
- 添加完原语后,切换回 Robot_Camera 视角,观察这些障碍物从机器人的视角是如何呈现的。
双视口增强可视化效果
为了同时查看两个视角,可以添加第二个视口。
- 在菜单栏中选择 Window > Viewport > Viewport 2。
- 将一个视口设置为 Perspective 视角,另一个保持为 Robot_Camera。这样您就可以异步查看两个不同视图。
完成以上步骤后,您的 SimpleRobot 现在已经安装了一个基础的 RGB 传感器,您可以同时查看机器人本身的视角和传感器的视角。接下来,我们将创建一个 2D 激光雷达传感器。
配置2D激光雷达传感器
在查看RGB传感器生成的视角后,让我们集成一个2D激光雷达传感器,使机器人能够更智能地感知环境并与之互动。本节将指导您完成为机器人添加激光雷达传感器、正确安装定位、以及设置可视化工具来监测其输出的全过程。您将学习如何配置传感器参数以实现最佳性能,并确保其能精准探测场景中的障碍物。
完成本节内容后,您的机器人将具备先进的感知能力,为未来仿真中更复杂的交互与数据分析做好准备。
警告:
本视频包含频闪效果或快速闪烁的图像。
添加激光雷达传感器
- 选中 Front_Sensor xform 后,右键点击或在顶部打开 Create 菜单。
- 在 Isaac 下选择 Sensors,然后在 PhysXLidar 下选择 Rotating。
- 这将为您的 SimpleRobot 添加一个二维激光雷达传感器。
- 将 lidar 移动到 Sensor_Mount 立方体的顶部位置。
- 在场景中,激光雷达和摄像头会显示在同一个位置。
- 摄像头有视野的可视化表示,而激光雷达只通过变换工具(transform gizmo)显示其位置。
设置可视化
为了确认激光雷达是否正常工作,先停止仿真。
- 选中 lidar 后,向下滚动找到 Raw USD Properties,启用 "Draw Lines" 和 "Draw Points"。
- 再次点击 播放(play) 开始仿真。
- 您应该能看到调试用的线条围绕传感器旋转,这说明它正在正常运行。
确保物体被传感器检测到
如果传感器没有检测到任何物体,请记住我们使用的是物理型激光雷达(Physics lidar),它依赖于场景中的物体具有物理属性。
- 在 Stage 窗口中选中所有障碍物 prims。
- 右键点击并选择 Add > Rigid Body with Colliders Preset。
- 再次点击 播放(play)。
- 您现在应该能看到障碍物挡住了调试线,说明它们已被激光雷达成功检测到。
调整激光雷达参数
如有需要,您可以在 Raw USD Properties 窗口中调整参数来减慢激光雷达的旋转速度。减速有助于更清晰地观察激光束打到哪些物体,但请记住,高效运行的激光雷达通常需要较快的旋转。
在上方视频中,您可以看到,减速后我们发现激光束打在了轮子上。我们可以将激光雷达稍微上移,再次运行仿真以避免这种情况。
保存场景
您的 SimpleRobot 现在已经安装了 RGB 传感器和 2D 激光雷达,并且已经在场景中进行了测试,确保它们能够正常工作。
- 保存您的场景,然后关闭 Isaac Sim,准备在下一个模块中重新打开以启用 ROS 2。
通过以上步骤,您已经成功为 SimpleRobot 添加了 2D 激光雷达传感器。这将使它能够更好地利用高级感知能力与环境进行交互。
回顾
在本模块中,您成功为 SimpleRobot 添加了传感器,使其更容易“看到”并与环境交互。您安装了一个 RGB 传感器和一个 2D 激光雷达传感器,配置了它们的设置,并设置了可视化工具来有效监控输出。
学习目标
- 安装了 RGB 传感器并配置其用于数据采集。
- 整合了 2D 激光雷达传感器并使用可视化工具监控其输出。
- 配置了传感器的安装支架以确保合适的位置与功能。
- 通过双视口分析实时传感器数据。
- 排查与传感器位置和可视化相关的问题。
在下一个模块中,您将学习如何在 ROS 2 中访问数据,使您能够将 Isaac Sim 中的传感器信息传输到外部应用程序进行进一步处理与分析。
Quiz
5/5 points (graded)
在 Isaac Sim 中,您应使用哪个菜单为机器人添加 RGB 相机传感器?
Create > Camera
Edit > Preferences > Sensors
Tools > Add Sensor
Isaac > Sensors > Camera
正确
解释
在 Isaac Sim 中添加 RGB 相机传感器时,您需要右键点击 "Front_Sensor" 的 XForm,然后选择 Create > Camera。这会创建一个新的相机,用作 RGB 传感器,从环境中捕捉视觉数据。
在 Isaac Sim 中,要可视化 2D 激光雷达传感器的输出,必须启用什么?
在视口中启用相机视角
增加轮子半径以提升检测能力
在 Raw USD 属性中启用 Draw Points 和 Draw Lines
添加一个检测平面
正确
解释
为了可视化 2D 激光雷达传感器的输出,您需要在该传感器的 Raw USD 属性中启用 "Draw Points" 和 "Draw Lines"。这样可以显示表示已检测物体的调试线条。
为什么在 Isaac Sim 中为传感器组件创建 XForm 很重要?
它能通过调整视场角提升传感器精度。
它允许传感器作为一组跟随机器人移动。
它可以防止传感器受到重力影响。
它能自动为所有传感器配置最佳性能。
正确
解释
为传感器创建 XForm 可以确保它们随着机器人一起移动,便于成组管理传感器,并保持它们相对于机器人的正确位置。
如何在 Isaac Sim 中同时查看机器人的视角和透视视图?
打开两个 Isaac Sim 实例
提高屏幕分辨率以获得更清晰画面
仅使用一个视口并手动切换视角
添加第二个视口,一个设置为 "Robot_Camera",另一个为 Perspective 视图
正确
解释
通过添加第二个视口,您可以让一个视口显示机器人 RGB 传感器所见的画面("Robot_Camera" 视角),另一个保持透视视图,从而同时监控两个不同视角。
如果激光雷达传感器没有检测到障碍物,可能的原因是什么?
激光雷达传感器安装位置过高
障碍物没有启用物理属性
场景中物体太多
激光雷达旋转太快以至于无法检测物体
正确
解释
为了让激光雷达传感器能检测到障碍物,场景中的物体必须启用物理属性。否则,激光雷达无法将它们识别为可交互的物理对象。
Show answer
访问数据
安装 ROS 2 Humble
在本模块中,您将学习如何将 Isaac Sim 的传感器数据流式传输至 ROS 2,从而实现高级的数据处理与可视化。您将搭建 ROS 2 环境,集成 ROS 2 Bridge 扩展,并配置 ActionGraphs 以实现数据流传输。完成本模块后,您将能够在 RViz 中可视化传感器数据,并确保 Isaac Sim 与 ROS 2 之间的通信无缝衔接。
提示
本课程采用 原生 ROS 启动方式(Running Native ROS),在 Ubuntu 系统上进行。请依照以下路径的安装指南操作:Running Native ROS > ROS 2 > Ubuntu 22.04 > Humble。
学习目标
- 安装并配置 ROS 2 Humble 以实现与 Isaac Sim 的集成。
- 创建 ActionGraphs,用于将 RGB 和激光雷达数据流式传输至 ROS 2。
- 配置 ROS 2 Bridge 扩展,实现数据通信。
- 使用 RViz 可视化传感器数据,实现实时监控。
- 排查常见问题,例如数据流传输与可视化相关的问题。
连接 Isaac Sim 与 ROS 2
我们现在需要稍作准备,为仿真环境集成 ROS 2 打下基础,从而实现更强大的数据流传输与控制功能。本节将引导您配置工作空间,并以支持 ROS 2 的方式启动 Isaac Sim,为机器人仿真与 ROS 2 应用之间的无缝通信做好准备。
完成本节后,您将可以通过 ROS 2 实现传感器数据的流式传输与机器人控制,为更复杂的机器人项目奠定基础。
为 ROS 2 集成做准备
现在我们已经在 SimpleRobot 上添加了传感器,接下来要将数据从 Isaac Sim 流式传输到 ROS 2。在重新启动 Isaac Sim 之前,我们需要确认系统中已正确安装 ROS 2 Humble。
- 检查 ROS 2 安装情况:
- 访问 ROS 2 Humble 安装页面,确认安装步骤。
- 本课程使用的系统版本为 22.04。
- 请使用最适合您系统的安装方式,通常在 Ubuntu 22.04 上建议使用 Debian 软件包进行安装。
- 请参考我们的 Isaac Sim 安装文档,了解更多安装说明。
- 在安装完 ROS 2 后,请安装 vision_msgs_package,这是 ROS 2 Bridge 所必需的依赖包。
重新启动 Isaac Sim 并启用 ROS 2
- 在确认已安装 ROS 2 后,重新打开 Isaac Sim,以便更改环境设置并启用向 ROS 2 的数据流。
- 启动 Isaac Sim 后,从 App Selector 打开一个终端。
- 通过运行以下命令来 source 您的 ROS 工作空间: source /opt/ros/humble/setup.bash。
- 这条命令确保 ROS 2 环境被正确配置,从而能够使用 ROS 2 命令。
- 在终端中运行一个简单的
ros2
命令,以验证 ROS 2 是否安装成功。- 例如运行
ros2 topic list
,您将看到一些默认的主题。我们将在后续课程中详细介绍该命令。
- 例如运行
- 使用终端通过以下命令启动 Isaac Sim:
./isaac-sim.sh
,加载过程可能稍久。
加载您的项目
- Isaac Sim 启动后,通过菜单栏选择 File > Open Recent 打开您在上一模块中保存的项目文件。
- 如有需要,可以通过菜单栏选择 Window > Viewport > Viewport 2 打开第二个视口。
- 根据项目需要设置您的视角视图。
启用 ROS 2 Bridge 扩展
- 前往 Window > Extensions 打开 Extension Manager(扩展管理器)。
- 搜索 "ROS2"。ROS 2 Bridge 扩展通常是默认启用的,但如果尚未启用,请现在启用它。
- ROS 2 Bridge 扩展提供适用于机器人任务的 OmniGraph 节点。
- 启用此扩展后,Isaac Sim 将能与 ROS 2 实现通信。
通过以上步骤,您已经完成 Isaac Sim 与 ROS 2 集成环境的准备工作,现可通过 ROS 2 实现传感器数据流传输并控制机器人。
访问 2D 激光雷达数据
在本课程的最后一节中,我们将把激光雷达传感器的数据从 Isaac Sim 流式传输至 ROS 2,以实现更高级的可视化与分析。本节将指导您创建一个专门用于激光雷达数据的 ActionGraph,配置节点以读取并发布激光束数据,并将数据与仿真的时间戳同步。您将连接这些节点以确保数据流的准确性,并调整相关设置,在 RViz 中高效可视化雷达输出。
完成本节后,您将能够通过激光雷达数据监控机器人与环境的交互,从而在仿真环境中提升机器人的感知能力。
设置激光雷达数据流
<div class="
设置激光雷达数据流
提示
在继续之前,请确保 Isaac Sim 中的仿真已停止。
- 创建一个新的 ActionGraph,并将其重命名为 ROS2_LidarStream。
- 向图中添加以下 节点(Nodes):
- Isaac Read lidar Beams Node: 搜索并添加该节点,用于读取激光雷达传感器的数据。
- ROS 2 Publish Laser Scan Node: 添加该节点,将激光雷达数据发布到 ROS 2。
- Isaac Read Simulation Time Node: 添加该节点,用于同步仿真时间戳。
- <
配置节点
首先,我们来配置 Isaac Read Lidar Beams Node。
- 通过点击 "Add Target" 并搜索 "lidar",将 LidarPrim 目标设置为您的激光雷达传感器。该节点将计算激光雷达的所有必要信息。
- 接着,将 Isaac Read Lidar Beams Node 的相关输出连接至 ROS 2 Publish Laser Scan 节点的输入:
- 将 "On Playback Tick" 连接至 Isaac Read Lidar Beams 节点。
- 将 "Isaac Read Simulation Time" 连接到 ROS 2 Publish Laser Scan 节点中的 Timestamp 输入端。
- 在 ROS 2 Publish Laser Scan 节点中,如果您有多个传感器,可以通过修改 TopicName 来更改所发送的传感器名称。
- 将 TopicName 改为
scan_lidar
请记下 FrameID,例如 “sim_lidar”,它将在 RViz 可视化时使用。
警告:
本视频包含频闪效果或快速闪烁的图像。
运行并在 RViz 中进行可视化
- 启动仿真:在 Isaac Sim 中点击 Play 开始数据流传输。
- 接下来验证数据流是否正常。打开一个 终端 并运行以下命令以 source 工作空间:
source /opt/ros/humble/setup.bash
- 运行
ros2 topic list
查看当前活跃的话题,包括激光雷达数据的 topic。 - 在终端中运行
rviz2
启动 RViz。 - 在 RViz 中将 Fixed Frame 设为之前设置的 Topic 名称(例如 "scan_lidar")。
- 在左下角窗口中点击 Add,切换到 By Topic 标签页,选择 "laser scan",点击 OK 添加激光雷达可视化。
- 最后,观察激光
驾驶与观察
提示
在 RViz 中,您看到的是环境在静止的机器人周围移动,而不是机器人在环境中移动。
- 在 Isaac Sim 中使用键盘控制机器人移动,并观察环境中的障碍物变化。
完成以上步骤后,您已成功实现将 2D 激光雷达数据从 Isaac Sim 流式传输至 ROS 2,并通过 RViz 进行可视化。这使您能够在机器人移动过程中实时监控其与环境的交互情况。
回顾
在本模块中,您成功将 Isaac Sim 与 ROS 2 集成,实现了传感器数据的流式传输以进行高级处理。您安装并配置了 ROS 2 Humble,创建了用于 RGB 和 激光雷达数据传输的 ActionGraph,并在 RViz 中可视化这些数据。
学习目标
- 安装并配置了 ROS 2 Humble 以配合 Isaac Sim 使用。
- 创建了 ActionGraph 来将 RGB 和激光雷达数据传输至 ROS 2。
- 配置了 ROS 2 Bridge 扩展 以实现无缝通信。
- 在 RViz 中可视化传感器数据,增强了实时监控能力。
- 排查了与数据流和可视化相关的问题。
Quiz
5/5 points (graded)
要在终端验证 ROS2 Humble 是否正确安装,应运行哪个命令?
'ros2 --checkInstall'
'ros2 launch isaac_sim.launch'
'ros2'
'source /opt/ros/humble/setup.bash'
正确
解释
运行简单的命令 'ros2' 可以确认系统中是否已安装 ROS2 Humble。这是在将其与 Isaac Sim 集成之前验证 ROS2 是否设置正确的快速方法。
在 ActionGraph 中,哪个节点负责将机器人摄像头的 RGB 数据传输到 ROS2?
Isaac Create Render Product
ROS2 Camera Helper
On Playback Tick
Isaac Read Simulation Time
正确
解释
ROS2 Camera Helper 节点负责将机器人摄像头的 RGB 数据流传输到 ROS2。它将摄像头画面连接到 ROS2,实现实时数据传输以供后续处理或可视化。
ROS2 Bridge 扩展在 Isaac Sim 中的作用是什么?
它直接控制机器人的移动。
它提升了模拟的视觉质量。
它通过 OmniGraph 节点实现 Isaac Sim 与 ROS2 之间的通信。
它允许向机器人添加更多传感器。
正确
解释
ROS2 Bridge 扩展提供了必要的 OmniGraph 节点,使 Isaac Sim 与 ROS2 之间能够进行数据通信,从而实现像传感器数据流传输这样的无缝集成任务。
如何在 RViz 中可视化来自 Isaac Sim 的 RGB 摄像头数据?
在终端使用 'ros2 topic echo /rgb'
在 RViz 中通过 By Topic 选项卡选择 "Image",添加 Camera Display
在相机传感器的 Raw USD 属性中启用 "Draw Points"
提高相机画面的分辨率
正确
解释
要在 RViz 中可视化 RGB 摄像头数据,需要在显示设置中通过 "By Topic" 选项卡选择 "Image",添加 Camera Display。这可以实现对传感器输出的实时监控。
如果激光雷达数据在 RViz 中未正确显示,可能的原因是什么?
相机的视场与激光雷达传感器重叠
激光雷达传感器朝向不正确
RViz 中的 FrameID 与 Isaac Sim 中激光雷达配置的 FrameID 不匹配
激光雷达旋转速度太慢
正确
解释
如果激光雷达数据在 RViz 中无法正确显示,一个常见的问题是 RViz 中使用的 FrameID 与 Isaac Sim 中配置激光雷达时设置的 FrameID 不一致。确保两者匹配对于正确可视化至关重要。
Show answer
总结
本课程教会了您在 Isaac Sim 中进行机器人仿真的基础技能。继续探索 Isaac Sim 中的各种可能性,不断提升您的机器人相关知识。
学习目标
在本课程中,我们:
-
探索了 Isaac Sim 界面:熟悉了 Isaac Sim 界面的关键组件,包括面板、右键菜单和工具栏。这些基础知识帮助您高效地在仿真环境中操作、构建和管理机器人模型。
-
构建了一个简单的机器人模型:通过组装底盘、轮子和关节等组件,构建了一个基础机器人。这一过程包括创建视觉网格并配置物理属性,以在 Isaac Sim 环境中实现真实交互。
-
配置了物理属性:设置了物理场景并应用必要的属性,确保机器人能与环境真实互动。这包括添加碰撞网格和地面平面,以准确模拟重力和其他力。
-
实现了控制机制:使用 OmniGraph 和 ROS 2 创建了机器人的控制系统,实现动态移动与交互。包括设置差速控制器和关节结构来有效管理轮子运动。
-
集成了传感器:通过添加 RGB 相机和 2D 激光雷达等传感器增强了机器人的感知能力。配置这些传感器以采集环境数据,使机器人能智能地感知与响应周围环境。
-
将传感器数据流传输到 ROS 2:建立了 Isaac Sim 到 ROS 2 的数据传输工作流,实现了在 RViz 中的实时可视化与分析。包括设置 ActionGraph 及使用 ROS 2 Bridge
参见:
NVIDIA 深度学习培训中心(DLI)| 在线实战培训