Nvidia Isaac Sim 入门教程 2024
版权信息
Copyright 2023-2024 Herman Ye@Auromix. All rights reserved. This course and all of its associated content, including but not limited to text, images, videos, and any other materials, are protected by copyright law. The author holds all rights to this course and its contents. Any unauthorized use, reproduction, distribution, or modification of this course or its contents is strictly prohibited and may result in legal action. This includes, but is not limited to: Copying or distributing course materials without express written permission. Reposting, sharing, or distributing course content on any platform without proper attribution and permission. Creating derivative works based on this course without permission. Permissions and Inquiries If you wish to use or reproduce any part of this course for purposes other than personal learning, please contact the author to request permission. The course content is provided for educational purposes, and the author makes no warranties or representations regarding the accuracy, completeness, or suitability of the course content for any specific purpose. The author shall not be held liable for any damages, losses, or other consequences resulting from the use or misuse of this course. Please be aware that this course may contain materials or images obtained from third-party sources. The author and course creator diligently endeavor to ensure that these materials are used in full compliance with copyright and fair use regulations. If you have concerns about any specific content in this regard, please contact the author for clarification or resolution. By enrolling in this course, you agree to abide by the terms and conditions outlined in this copyright notice.
学习目标
- 熟悉Isaac Sim中机器人的关节及关节驱动配置
- 了解Isaac Sim中关节树的概念
- 熟悉Isaac Sim中的传感器配置
- 熟悉Isaac Sim的视口调整
难度级别
初级 | 中级 | 高级 |
---|---|---|
√ |
预计耗时
25 mins
学习前提
对象 | 类型 | 状态 |
---|---|---|
Ubuntu22.04操作系统 | 软件 | 已确认 |
Isaac Sim环境 | 软件 | 已配置 |
Isaac Sim基本概念 | 知识 | 已了解 |
Isaac Sim图形界面 | 知识 | 已了解 |
组装机器人
在Isaac Sim中组装一个带传感器的机器人需要一些基本的步骤:
- 创建各部件的3D模型
- 将各部件组建起来
在本章节中,我们将学习如何组装最简单的一个两轮差速机器人,下图中的机器人可以视作由三个杆件(links)和两个转动关节(revolute joints)组成的。
导入测试环境
机器人组装需要一个带有正常光照和物理的环境,因此我们导入Isaac Sim自带的Small Warehouse作为基本的测试环境。
注意:该地图可能需要一定的资源导入时间,测试环境并非重要性的决定因素,你可以使用诸如FlatGrid或者此前你制作的地图更简单的环境。
注意: 为避免误操作环境中的对象,例如地板等,你可以在舞台中右键将环境及其子项设置为锁定状态。
创建各部件的3D模型
创建机器人的3D模型是机器人设计过程中的关键步骤。你可以使用专业的3D建模软件,例如SolidWorks来创建和导出机器人的各个部件。
在本章节中我们不使用从其他专业软件中制作的机器人部件,而是使用Isaac Sim自带的一些基础模型(立方体、圆柱)来作为机器人的零部件。
这里我们创建三个杆件作为机器人的零部件,分别是身体body
,左轮left_wheel
,右轮right_wheel
,他们都作为fqnvidia
机器人的一部分,并且为他们添加材质、刚体和碰撞体等属性。
prim | translation | rotation | scale | visual material | physics material |
---|---|---|---|---|---|
body | 0,0,0.5 | 0,0,0 | 1.5,1.0,0.5 | OmniGlass | default |
left_wheel | 0,1,0.5 | -90,0,0 | 1.0,1.0,1.0 | OmniPBR | default |
right_wheel | 0,-1,0.5 | -90,0,0 | 1.0,1.0,1.0 | OmniPBR | default |
此时启动PLAY
,按下shift
并鼠标左键按下
来拖拽机器人运动,观察效果。
创建关节joint
机器人和人类相似,人类手臂的伸展需要上臂、前臂和肘部的协调工作。同样地,机器人的两个相邻活动杆件(link)也需要通过关节(显式的约束)进行旋转、平移等动作。
在Stage
中,按下Ctrl
,先选中父杆件Parent Link
(此处为body)再选中子杆件Child Link
(此处为right_wheel),随后选中Create
->Physics
->Joint
->Revolute Joint
,创建一个新的Joint对象,并重命名为right_wheel_joint
,并修改转动轴系(通常修改到Z)使得轮子的旋转正确。
同理,再创建身体到左轮的关节。
随后,点击左侧工具栏中的Play
检查,会发现此时身体和两个轮子已经正确地绑定了。
注意:除了关节,Isaac Sim还提供了肌腱(Tendons),它对于灵巧手来说更有意义,因此此处不讨论肌腱相关内容,如果您需要,请参考Isaac Sim 肌腱。
创建关节树Articulation
从数学上讲,关节可以在全局(相对于世界空间)或简化(相对于其他物体)坐标中建模。
使用全局法相对简单直观,特别是在处理全局运动和碰撞检测时,但在处理复杂的关节约束时可能更加困难,例如人形机器人,因为需要考虑到世界坐标系中的旋转和平移以及一些计算上忽略的微小量在长链路时带来的影响。
使用局部坐标系会更容易处理相对运动,尤其是在需要多个物体相对运动时,可以减少复杂性,并且在数值上更加精确,比如关节。
但可能需要更多的计算来转换坐标系,特别是在需要将局部坐标系转换为全局坐标系时。
这也就引入了关节树Articulation的概念,关节树的根部被称为关节根(Articulation root),当一个基本对象(prim)被标记为关节根时,这告知仿真系统,在它的子树中找到的任何关节应优先使用简化坐标方法进行仿真,实现了两种方法的折中。
将机器人组织成关节树可以实现更高的模拟保真度,减少关节误差,并能够处理关节体之间更大的质量差异。这些设计具有零关节误差,同时能够处理关节体之间更大的质量比。
Any prim of the USD scene graph hierarchy may be marked with an UsdPhysicsArticulationRootAPI. This informs the simulation that any joints found in the subtree should preferentially be simulated using a reduced coordinate approach.
要使用关节树,需要指定关节根(Articulation root),指定关节根的标准是:
对于固定的机器人,它应当是和世界直接连接的根关节的父对象(root joint’s parent prim)或根关节(root joint)上,此处推荐将属性添加到根关节(root joint)上,例如固定在桌面上的单个机械臂的基座和世界相连的关节。
对于移动的机器人,它应当是根杆件对象(root link prim),例如四旋翼无人机的机身,移动小车的底盘,人形机器人的头或者脚。
对于更深入的内容,可参考关节树、Omniverse刚体动力学和USDPhysics。
在这个小车的案例中,body
是根杆件对象(root link prim),因此可以作为Articulation Root
。
选中Primbody
并依次点击Add
->Physics
->Articulation Root
来将关节链转化为关节树
创建关节驱动joint drive
添加关节会添加机械上的连接。但为了能够控制和驱动关节,必须添加关节驱动的属性 API。
按下Ctrl
选中Stage
里的两个joint
并依次点击Add
->Physics
->Angular Drive
来添加角度驱动器。
对于关节的位置控制模式,应当设置高刚度和相对低(或零)阻尼。
对于关节的速度控制模式,应当设置高阻尼和零刚度。
驱动力的公式是:
stiffness * (position - target_position) + damping * (velocity - target_velocity)
你可以根据实际体验来给出经验值,也可以使用此处给出的测试值:
关节驱动 | 阻尼Damping | 刚度Stiffness | 目标速度Target Velocity |
---|---|---|---|
left_wheel_joint | 10000 | 0 | 200 |
right_wheel_joint | 10000 | 0 | 200 |
随后按下Play
查看效果,应该发现小车开始以指定的目标速度运动(在给定测试值下是原地转动)。
添加传感器
Omniverse Isaac Sim 提供了多种传感器,可用于感知环境和机器人的状态,例如激光雷达、深度相机。此处以最为常见的Camera
为例。
确定传感器轴系
在添加以相机为例的传感器前需要先确定轴系,参考Isaac、USD、ROS的传感器轴系说明。
添加相机
依次点击Create
->Camera
来添加相机,并重命名为robot_camera
,将他拖动到body
下新创建的Xformcamera_link
下,来和机器人的身体绑定,并通过调整Xformcamera_link
的位置和姿态来感受合适的位置,你也可以使用测试的姿态。
prim | translation | rotation | scale |
---|---|---|---|
camera_link | -0.7,0,2 | 0,15,180 | 1,1,1 |
robot_camera | 0,0,0 | 90,90,0 | 1,1,1 |
添加一个视口(Viewport),使得共计有两个视口(Viewport),设置其中一个为Perspective视角,另一个是相机视角,方便进行观察。
修改第二个视口的相机为robot_camera
。
此时点击PLAY
,观察两个画面中的机器人。
结尾语
恭喜你,已经学习了Isaac Sim的机器人组装以及添加传感器的相关内容,能够自主搭建一个简单的双轮差速机器人。
在下一章节,你将学习Isaac Sim中的OmniGraph图编程,对在本章节中的机器人进行控制。
如需企业内训定制、项目开发合作或个人学习支持,请联系:hermanye233@icloud.com
参考资料
USDPhysics
Isaac Sim 肌腱
关节树Omniverse刚体动力学
Isaac、USD、ROS的传感器轴系说明
USDPhysics
Isaac激光雷达传感器
Isaac 相机