Isaac Sim教程04 Isaac Sim的高级使用
Isaac Sim 高级使用
版权信息
Copyright 2023 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 InquiriesIf 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中添加材质的步骤
难度级别
初级 | 中级 | 高级 |
---|---|---|
√ |
预计耗时
25 mins
学习前提
对象 | 类型 | 状态 |
---|---|---|
Ubuntu22.04操作系统 | 软件 | 已确认 |
Isaac Sim | 软件 | 已配置 |
Isaac Sim基本概念 | 知识 | 已了解 |
Isaac Sim基本使用 | 知识 | 已了解 |
添加物理环境
在仿真中,物体通常受到各种物理力,时间也在不断地流逝,为了尝试实现这样的仿真效果,请完成以下步骤:
通常来说,世界需要一般的物理模拟属性,例如重力和物理时间的步进,依次点击Create
->Physics
->Physics scene
来添加物理环境
随后,在Property
->Physics
里修改这个物理环境的基本属性,因为这是简单的测试,所以不需要GPU的强大能力,取消选中Enable GPU Dynamics
,并将Broadphase Type改为MBP
multi box pruning (MBP)是一种Broadphase(广相位)的算法,具体细节可参考Nvidia physX 中的说明。
“Broadphase”(广相位)是物理引擎中的一个阶段,它用于加速物体之间的碰撞检测。 Broadphase的目标是减少需要进行详细碰撞检测的物体数量,从而提高碰撞检测的效率。这对于处理大量物体的仿真非常重要,因为详细碰撞检测是计算密集型的操作。
在Broadphase之后,只有被Broadphase算法认为可能发生碰撞的物体对才会进行详细的碰撞检测。这包括精确的形状相交检测,如球体、多边形、网格等。由于Broadphase已经大大减少了需要检测的物体对的数量,这一步通常较为高效。
更详细地说,在物理引擎中,碰撞检测通常分为广相位(Broad Phase)和窄相位(Narrow Phase)两个阶段,这有助于有效地处理大量物体之间的碰撞。以下是对这两个阶段的详细解释:
-
广相位(Broad Phase):
在广相位中,物理引擎会确定哪些物体可能会发生碰撞,并将这些潜在碰撞对象存储在一个列表中,通常被称为碰撞对(collision pair)。这一阶段的目标是减少需要在窄相位进行详细碰撞检测的物体数量,从而提高碰撞检测的效率。广相位的任务是识别可能碰撞的物体,而不是确认它们是否确实碰撞。举例来说,如果你想模拟整个世界的人口,就需要检查每个代表人的对象是否与其他人发生碰撞。但显然,伦敦的人不可能与大连的人发生碰撞,因此没有必要在广相位中检查这两个城市的所有人之间的碰撞。广相位会尝试将世界分成离散的区域,其中我们知道这些区域不会重叠,因此区域内的物体也不会发生碰撞。这样可以大大减少需要进行详细碰撞检测的对象数量,从而提高性能。
-
窄相位(Narrow Phase):
在窄相位中,引擎会迭代广相位中识别的潜在碰撞对列表,并对每对物体进行详细的碰撞检测,以确定它们是否确实发生了碰撞。如果两个物体在窄相位中被确认为发生碰撞,那么引擎将执行碰撞解决过程,即使物体之间的碰撞也会得到处理。
总而言之,广相位负责快速识别可能碰撞的物体,将它们存储在一个列表中,而窄相位则负责对这些潜在碰撞对进行详细的碰撞检测和解决。通过这种两阶段的碰撞检测方法,可以显著减少需要检测的对象数量,从而提高物理引擎的性能和效率。
对于广相位更深入的理解可参考Newcastle University相关研究
添加地面
和其他仿真软件一样,Isaac Sim也需要添加地面,这是因为即使有了重力等物理环境,物体在开始仿真前也被摆放好了位置,如果没有地面,那么物体可能会处在一直坠落的状态。
依次点击Create
->Physics
->Ground Plane
来添加一个地面
可以看到地面被添加了,通过鼠标中间
缩放,发现地面只有一部分,这是因为超出范围的地面不需要渲染,以此减少性能开销,但即使是在不可视的地面,依然会有碰撞属性,物体在坠落到地面时不会再继续向下坠落。
添加物体
按照Isaac Sim基本使用中的办法,添加一个普通的立方体,并将它的位置设置在[0,0,0.5],这是因为默认的物体中心将在[0,0,0]出现,默认立方体的边长是1m,内嵌在了地面中,这显然和地面冲突了。
添加光照
每个Stage都带有默认的环境光照(defaultLight),否则看不见东西。
此时我们来尝试添加另一个光照,来感受光照对于环境和物体的影响。
依次选择Create
->Light
->Sphere Light
来添加一个球状光源
因为默认环境光照比较强,会导致新的光照看着似乎没有生效,因此在Stage中将defaultLight
设为不可视
随后将这个新添加的球状光照的颜色
改为红色
使得它更加显眼,Radius
改为1
使得它不再是添加时默认的非常大的半径,同时将这个球光源的Z轴位置
设置为5
,便于观察。
添加更多物体
随意地从Create
->Shape
里找一些物体,将他们悬空放置
随后点击Isaac Sim左侧的Play来使仿真开始步进
令人疑惑的是,这些物体并没有按预料中的方式下坠,这是因为虽然设置了物理环境,但并没有设置物体自身的物理属性,接下来在Propetry
中为物体添加刚体和碰撞器
添加刚体和碰撞器
在Stage
中选中物体,并在Property
中添加Physics
里的Rigid Body with Colliders Preset
。
-
刚体 Rigid Body
刚体可以具有质量、惯性、速度、角速度等属性,这些属性决定了物体如何响应外力和碰撞。
刚体可以是动态的(可以受到外力和碰撞的影响)或静态的(不会移动)。
在游戏引擎中,如Unity或Unreal Engine或者其他仿真器,将刚体属性添加到对象,可以使其具备物理性质。 -
碰撞器 Collider
碰撞器是用于定义物体的碰撞形状和边界的组件,通常与刚体一起使用。
碰撞器没有质量、速度等物理属性,它们仅用于检测物体之间的碰撞。
碰撞器可以是各种形状,如盒状碰撞器、球形碰撞器、网格碰撞器等,以适应不同形状的物体。
当两个具有碰撞器的物体发生碰撞时,游戏引擎会检测碰撞并触发相应的事件,例如碰撞检测、碰撞响应等。
在添加完后会发现物体多了这些属性,以Cube
为例,它有各种各样的Property
,包括Geometry
、Visual
、Physics
等,在Physics
中可以发现刚才新添加的Rigid Body
和Collider
检查碰撞体情况
依次选中GUI界面中的眼睛
->Show By Type
->Physics
->Colliders
->All
来启用碰撞体可见模式。
开始仿真
此时再次点击Isaac Sim左边的Play按钮,将会观察到悬空的物体在时间开始流动时不断下坠,直到撞击地面
添加物理材质
对于特定的仿真,比如箱子在斜坡上滑动,需要涉及到摩擦力等问题,物理材质在其中起到了重要的作用。
依次点击Create
->Physics
->Physics Material
来创建一个物理材质
在添加物理材质时会提示不同材质的选项,这也是Isaac Sim的强大之处,"rigid body material"
、"deformable body material"
和"PBD Particle Material"
是可选的三种类型。
-
Rigid Body Material(刚体材质)
- 刚体材质用于模拟刚性物体,这些物体不会发生形变,其形状在运动过程中保持不变。
- 刚体通常用于模拟硬物体,如石头、金属、木头等。
- 物体之间的碰撞会产生弹性反应,而且刚体通常不会发生变形。
-
Deformable Body Material(可变形材质)
- 可变形材质用于模拟具有弹性的物体,它们可以发生形变,如橡胶、布料、软泥等。
- 这些物体在受到外部力或碰撞时可以发生形状的变化,通常会遵循弹性和塑性行为。
- 通常需要更复杂的物理模型来模拟可变形物体的行为,如有限元分析。
-
PBD Particle Material(基于粒子的动力学材质)
- PBD(Position-Based Dynamics)是一种用于模拟可变形和弹性物体的方法,通常用于模拟细粒度的物体,如液体、布料等。
- PBD通过在模拟中使用一组粒子来表示物体,并应用基于位置的动力学来模拟其行为,可以处理大变形和复杂物体。
- PBD通常比传统的有限元分析更高效,但也可能缺少精确性。
因为这里只是普通的刚体,因此在PhysicsMaterial
的资产中选择Rigid Body Material
,随后在Property
里的Physics
里修改摩擦力的选项
随后为Cube
添加这个摩擦力的属性。
添加外观材质
除了物理材质,物体也可以添加用于外观展示的材质
依次选中Create
->Material
->OmniPBR
来添加一个OmniPBR材质,可以理解为普通的外观材质。
- Omni PBR材质
Omni PBR材质是一种基于物理的渲染(Physically-Based Rendering,PBR)材质,用于实现更逼真的图形渲染效果。PBR是一种图形渲染技术,旨在模拟光线如何与物体表面交互以产生更真实的视觉效果。这种技术考虑了光的物理特性,包括漫反射、镜面反射、折射等,以在虚拟环境中模拟材质的外观和光照交互。
OmniPBR材质的Property里有海量的可调选项,这也是Isaac Sim的强大之处,此处就以简单地修改颜色为例。
选中OmniPBR
->Property
->Albedo
->Albedo color
修改为你喜欢的颜色,随后将Stage
中这个材质拖动到场景物体上即可赋予视觉的颜色。
另一种更准确的方式是在对应Prim
的Property
->Material on selected model
中选择刚才添加的OmniPBR
现在,你已经学会了如何创造一个更加真实的世界,带有物理环境、物体、地面、光照、刚体与碰撞、物理材质、外观材质等内容。
USD文件的保存与使用
保存USD文件
在localhost/Library
下新建文件夹isaac_learning
用于存放Isaac练习的相关文件
在GUI界面的File
->Save
保存USD文件
对于使用了多个外部素材的USD文件,建议将它所涉及的素材全部打包到一个文件夹内
通过右键USD文件并选中Collect Asset
来收集相关素材并打包。
使用USD文件
在Nvidia Isaac Sim中使用USD文件作为参考的步骤如下图所示:
- 选择菜单栏中的
File
。 - 在下拉菜单中选择
Add Reference
选项
一旦加载完成,引用的USD文件将以与文件名相同的Prim名称加载到舞台上。这意味着整个USD文件的内容,包括PhysicsScene、defaultLight和GroundPlane等内容,都会被加载到新的舞台上。
注意: 这可能导致混淆,特别是当您需要加载多个USD参考,每个参考包含自己的PhysicsScenes和defaultLights。由于这些内容是通过Add Reference
加载的,您不能直接在新的Stage
上删除它们。同时,在原始USD文件中删除PhysicsScene、defaultLight和GroundPlane等内容也不是一个理想的解决方案,因为这可能会导致在创建USD文件时更加复杂。
为了更好地管理加载的USD文件和避免加载原始世界的环境内容,您可以按照以下步骤修改原始USD文件:
- 创建一个名为
my_robot
的新Xform
,用于容纳机器人的相关组件。 - 将机器人的所有组件从原始USD文件拖动到
my_robot
这个Xform
下。 - 将
my_robot
设置为新的defaultPrim
。这样,当您在其他舞台上将机器人作为参考导入时,只会导入机器人的主体,而不会包含原始世界的环境内容。这一步确保了您只加载了所需的机器人部分,而不会混淆或加载多余的内容。
练习
练习目标
制作出一个两轮机器人,由一个Cube
拉伸得到身体,两个Cylinder
作为左右轮,并保存作为USD文件
练习参考
相关文章:
Isaac Sim教程04 Isaac Sim的高级使用
Isaac Sim 高级使用 版权信息 Copyright 2023 Herman YeAuromix. 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…...
《数据结构、算法与应用C++语言描述》-线索二叉树的定义与C++实现
_23Threaded BinaryTree 可编译运行代码见:GIithub::Data-Structures-Algorithms-and-Applications/_24Threaded_BinaryTree 线索二叉树定义 在普通二叉树中,有很多nullptr指针被浪费了,可以将其利用起来。 首先我们要来看看这空指针有多少…...
删除误提交的 git commit
背景描述 某次的意外 commit 中误将密码写到代码中并且 push 到了 remote repo 里面, 本文将围绕这个场景讨论如何弥补. 模拟误提交操作 在 Gitee 创建一个新的 Repo, clone 到本地 git clone https://gitee.com/lpwm/myrepo.git创建两个文件, commit 后 push 到 remote 作…...
机器学习---pySpark案例
1、统计PV,UV 1.if __name__ __main__: 2. conf SparkConf() 3. conf.setMaster("local") 4. conf.setAppName("test") 5. sc SparkContext(confconf) 6. 7. #pv 8. sc.textFile("./pvuv").map(lambda line:(l…...
【链表Linked List】力扣-24 两两交换链表中的节点
目录 题目描述 解题过程 题目描述 给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。 示例 1: 输入:he…...
企业微信协议开发,API接口调用
产品说明 一、 hook版本:企业微信hook接口是指将企业微信的功能封装成dll,并提供简易的接口给程序调用。通过hook技术,可以在不修改企业微信客户端源代码的情况下,实现对企业微信客户端的功能进行扩展和定制化。企业微信hook接口…...
代码随想录算法训练营 ---第五十五天
今天是 动态规划:编辑距离问题。 第一题: 简介: 动态规划五部曲: 1.确定dp数组的含义 dp[i][j] 表示以下标i-1为结尾的字符串s,和以下标j-1为结尾的字符串t,相同子序列的长度为dp[i][j]。 2.确定递推公…...
【Intel/Altera】 全系列FPGA最新汇总说明,持续更新中
前言 2023年11月14日英特尔 FPGA中国技术日,Intel刚发布了新的FPGA系列,官网信息太多,我这里结合以前的信息,简单汇总更新一下,方便大家快速了解Intel/Altera FPGA家族。 目录 前言 Altera和Intel 型号汇总 1. Agi…...
利用flask将yolov5算法封装成在线推理服务
本脚本主要参考了yolov5工程文件夹下面的detect.py,将yolov5算法封装成了一个在线的推理服务,可以接受app请求,然后推理图片,并将检测结果以json返回,该服务可以供数据标注平台请求。 from flask import * import shutil import json import os import pynvml import pand…...
vue3父子传值实现弹框功能
在Vue3中,我们可以通过 provide 和 inject 来实现父子组件之间的数据传递,这也适用于实现弹框功能。下面是一个简单的例子: 父组件代码: <template><div><button click"showDialog">打开弹框</b…...
C++入门【2-C++ 数据类型】
C 数据类型 使用编程语言进行编程时,需要用到各种变量来存储各种信息。变量保留的是它所存储的值的内存位置。这意味着,当您创建一个变量时,就会在内存中保留一些空间。 您可能需要存储各种数据类型(比如字符型、宽字符型、整型…...
按照官网文档 通过useExtendedLib扩展库 引入WeUI,报错 组件未定义 | 解决办法
检查开发者工具版本是否过老 参考博客 不要使用 游客模式,游客模式不支持,请注册Appid 使用。 注意 扩展库方式 和 npm 方式不能同时使用,会有相应报错...
Chat-GPT原理
Chat-GPT原理核心:基于Transformer 架构 以下是参考文献的部分截图原文说明: Transformers are based on the “attention mechanism,” which allows the model to pay more attention to some inputs than others, regardless of where they show up in t…...
GODOC命令无效,原因是需要手动安装
在看《GO程序设计语言》这本书,按照其中的内容,想看下GO自带的包的文档。 书中讲,可以直接输入GoDOC命令来打开一个服务器,从而可以用浏览器访问文档库。输入命令后,系统提示找不到该命令。 查了资料后才发现ÿ…...
忽略python运行出现的大量警告
添加以下代码即可 import warnings warnings.filterwarnings(ignore)...
【Polar靶场WEB签到】
题目: <?phperror_reporting(0);$file $_GET[file];if(!isset($file))$file 1;$file str_replace(../, , $file);include_once($file.".php");highlight_file(__FILE__); ?>解答:1、进入index页面,说让你加弟弟&#x…...
Linux详解——常用命令(二)
目录 一、常用命令 1.进程相关命令 2.vi命令 3.软件相关命令 RPM命令 YUM命令 4.用户和组相关命令 5.权限相关命令 一、常用命令 1.进程相关命令 # 1.ps 询在当前控制台上运行的进程 ps -aux 说明:查询系统中所有运行的进程,包括后台进程,其…...
TCP首部格式_基本知识
TCP首部格式 表格索引: 源端口目的端口 序号 确认号 数据偏移保留 ACK等 窗口检验和紧急指针 TCP报文段首部格式图 源端口与目的端口: 各占16位 序号:占32比特,取值范围0~232-1。当序号增加到最后一个时,下一个序号又回到0。用来指出本TCP报文段数据载…...
MIT线性代数笔记-第23讲-微分方程,exp(At)
目录 23.微分方程, e x p ( A t ) exp(At) exp(At)用矩阵求解微分方程矩阵指数二阶常微分方程 打赏 23.微分方程, e x p ( A t ) exp(At) exp(At) 用矩阵求解微分方程 例: { d u 1 d t − u 1 2 u 2 d u 2 d t u 1 − 2 u 2 \left \{ \b…...
windows下安装配置kafka
一、安装zookeeper 在使用Kafka之前,通常需要先安装和配置ZooKeeper。ZooKeeper是Kafka的依赖项之一,它用于协调和管理Kafka集群的状态。 ZooKeeper是一个开源的分布式协调服务,它提供了可靠的数据存储和协调机制,用于协调分布式…...
TV遥控器模拟鼠标键
需求 : tv上部分app不支持光标选中,如亚马逊,插上鼠标不方便,即可以用遥控器模拟鼠标滚动和点击 1.拦截上下左右键 在WMS::PhoneWindowManager::interceptKeyBeforeQueueing中监听上下左右左右键,进行拦截。 Overrid…...
检测判断IP合法性API接口
检测判断IP合法性API接口 一、检测判断IP合法性API接口二、使用步骤1、接口2、请求参数3、请求参数示例4、接口 返回示例 三、 如何获取appKey和uid1、申请appKey:2、获取appKey和uid 四、重要说明 一、检测判断IP合法性API接口 一款免费的帮助你检测判断IP合法性API接口 二、…...
Linux swatch命令教程:如何监控系统活动(附案例详解和注意事项)
Linux swatch命令介绍 Swatch,全称为Simple Watcher,是一个简单的监视器,设计用于监控系统活动。为了使Swatch有用,它需要一个配置文件,该文件包含要查找的模式和在找到每个模式时要执行的操作。 Linux swatch命令适…...
加州大学伯克利分校研究人员推出Starling-7B:一款通过人工智能反馈强化学习(RLAIF)训练的开源大型语言模型(LLM)
每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…...
腾讯面试真题(C语言)
一.题目 求123...n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。 二.题目剖析 首先题目要求不能用乘除,那么(首相末项)*项数/2就不能用,其次不…...
JavaScript 函数
JavaScript 函数 函数就是封装起来可以被重复使用的代码块 函数的优点 使代码更加简洁方便代码的修改和维护使程序运行更加高效 函数的封装(创建 声明)和调用 封装 通过function关键字封装 function 函数名(参数) {函数体:被封装的代码 }匿名函数 将一个函数直接赋值给一…...
数据结构 | 查漏补缺之DFS、BFS、二次探测再散列法、完全二叉树、深度计算
目录 DFS&BFS 哈希表-二次探测再散列法 完全二叉树&深度计算 排序 快速排序-挖坑法 插入、选择、冒泡、区别 DFS&BFS 哈希表-二次探测再散列法 完全二叉树&深度计算 排序 快速排序-挖坑法 插入、选择、冒泡、区别 插入从第一个元素开始,…...
用python实现单链表的基础操作
1 问题 用python实现单链表的基础操作:插入,删除,遍历,判空,清空链表,求长度,获取元素,判断元素是否存在。 2 方法 解决问题的步骤采用如下方式: 使用函数和类的方法来实…...
[头歌系统数据库实验] 实验3 MySQL的DDL语言
目录 第1关:将P表中的所有红色零件的重量增加6 第2关:把P表中全部红色零件的颜色改成蓝色 第3关:将SPJ表中由S5供给J4的零件P6改为由S3供应 第4关:将SPJ表中所有天津供应商的QTY属性值减少11(用子查询方式&#x…...
系统运维安全之病毒自检及防护
一、前言 Linux勒索病毒(Linux ransomware)是一种最令人恶心的计算机恶意病毒,它以侵入Linux系统,捆绑文件并要求支付赎金才能释放文件为主要目的,破坏用户的数据,造成数据讹诈。Linux勒索病毒它们的存在已…...
北碚区网站建设/厦门人才网最新招聘信息网
Tengine是由淘宝网发起的Web服务器项目。它在Nginx的基础上,针对大访问量网站的需求,添加了很多高级功能和特性。Tengine的性能和稳定性已经在大型的网站如淘宝网,天猫商城等得到了很好的检验。它的最终目标是打造一个高效、稳定、安全、易用…...
怎么在网站做推广/网站加速器
Redis有自己的内存分配器,当key-value对象被移除时,Redis不会马上向操作系统释放其占用内存。redis之所以这样的设计有两个原因。 OS可能会将释放内存交换到虚拟内存,但OS的虚拟内存又是物理文件,其IO读写效率较低,从而…...
两个电脑的wordpress/免费的推文制作网站
导读:拖拖拉拉,机房的合作也算是接近了尾声了。在这个过程中,真心是感谢我的两个组员。这个机房合作,看似简单,但我的组员给我的帮助和感动,都是不可忽略的。记得刚开始的时候,我就说过…...
做网站所需要的代码6/流量平台有哪些
前面在“数字调制系列:IQ 基本理论”一文中介绍了 IQ 的概念、常用数字调制方式及映射星座图等内容,当完成数字比特流到 IQ 坐标系的映射后,便可以得到数字 I 和 Q 信号,然后分别经过 DAC 变换为模拟 I 和 Q 信号,最后…...
网站建设flash/站长工具查询网
很累,很想早点休息,可是,还是有点不开心。 学习、修改,一晃又到了一点,我终于决定睡了。 有种绝望的伤感!转载于:https://www.cnblogs.com/cole2295/archive/2009/07/11/1521101.html...
中国科技成就的例子/阿里巴巴seo排名优化
这是第一个类:publicclassStudents{//定义身高属性floatheight;}这是第二个类:publicclassHeight{publicfloatgetAvgHeight(Students[]stu){floatavgHeight0;floatall0;//所有学生身...这是第一个类:public class Students {//定义身高属性float height;}这是第二个类:public c…...