Nvidia Isaac Sim搭建仿真环境 入门教程 2024(4)

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 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中仿真对象的创建与处理
  • 熟悉Isaac Sim中USD文件的创建与处理

难度级别

初级中级高级

预计耗时

50 mins

学习前提

对象类型状态
Ubuntu22.04操作系统软件已确认
Isaac Sim环境软件已配置
Isaac Sim基本概念知识已了解
Isaac Sim基本使用知识已了解

在进行机器人仿真时,搭建一个相对真实的仿真环境是很重要的。一个完整的仿真环境不仅能提高仿真的精确度,还能提供更为直观的可视化效果。
接下来,我们将讨论如何创建这样一个场景。

物理环境

添加物理场景

在仿真中,物体通常受到各种物理力,时间也在不断地流逝,通常来说,世界需要一般的物理模拟属性,例如重力和物理时间的步进,依次点击Create->Physics->Physics scene来添加物理场景
在这里插入图片描述

随后,在Property->Physics里修改这个物理环境的基本属性,因为这是简单的测试,所以不需要GPU的强大能力,取消选中Enable GPU Dynamics,并将Broadphase Type改为MBP

注意:如果你对这些概念感到疑惑,可以参考相关知识章节。

在这里插入图片描述

添加地面

与其他仿真软件类似,Isaac Sim 也需要在仿真场景中添加地面。即使设置了重力等物理环境参数,并在开始仿真前将物体置于合适的位置,如果场景中缺乏地面,物体将会穿过地平面持续坠落。

依次点击Create->Physics->Ground Plane来添加一个地面
在这里插入图片描述

可以看到地面被添加了,通过鼠标中间缩放,发现地面只有一部分,这是因为超出范围的地面不需要渲染,以此减少性能开销,但即使是在不可视的地面,依然会有碰撞属性,物体在坠落到地面时不会再继续向下坠落。
在这里插入图片描述

添加光照

每个Stage都带有默认的环境光照(defaultLight),否则看不见东西。
此时我们来尝试添加另一个光照,来感受光照对于环境和物体的影响。
依次选择Create->Light->Dome Light来添加一个均匀环境光
DomeLight 模拟了从所有方向照射到场景中的均匀光源,类似于天空光。
DomeLight 通常用于创建自然的、全方位的环境照明效果,以提升场景的真实感。

在这里插入图片描述

因为默认光照较强,此时在属性面板中将新添加的均匀环境光的颜色更改为浅绿色,这样可以使得测试对比更清晰明了。
在这里插入图片描述

仿真对象

添加仿真物体

在菜单中创建一个普通的立方体(Cube Mesh)作为搭建仿真环境中的测试仿真对象。

在这里插入图片描述
再添加一些其他的物体,并且将这些物体随意放置,可以让其中一些悬空,方便观察在重力作用下从初始位置坠落到地面,和地面发生接触的过程。

在这里插入图片描述

添加刚体和碰撞体属性

尝试点击Isaac Sim左侧的工具栏中的Play来使仿真开始步进。

在这里插入图片描述

令人疑惑的是,这些物体并没有按预料中的方式下坠,这是因为虽然设置了物理环境,但并没有设置仿真物体自身的物理属性,因此它们并不遵循物理规律。

接下来,为这些物体添加带有预设碰撞体配置的刚体属性(Rigid Body with Colliders Preset)

Stage中批量选中物体,并添加Physics里的Rigid Body with Colliders Preset
在这里插入图片描述

观察添加完刚体和碰撞体的方块的属性面板,在Physics下能够发现新增的RigidBodyCollider属性,可以发现刚体属性所带来的一些更细的如角速度、线速度的新属性,以及以Covex Hull(凸包)等方式进行碰撞体近似的碰撞体属性。
在这里插入图片描述
依次选中GUI界面中的眼睛->Show By Type->Physics->Colliders->All来在视口Viewport中启用碰撞体可见模式,观察绿色线条,这是Isaac Sim对于仿真对象的碰撞体的可视化。
在这里插入图片描述
此时再次点击Isaac Sim左边的Play按钮,将会观察到悬空的物体在时间开始流动时不断下坠,直到撞击地面。
在这里插入图片描述

添加物理材质

对于需要涉及到摩擦力等的问题,例如箱子在斜坡上滑动,机器人夹爪夹取物体,仿真器给定的物理材质在其中起到了重要的作用。

依次点击Create->Physics->Physics Material来创建一个物理材质
在这里插入图片描述

在添加物理材质时会提示不同类型材质的选项,"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
在新引入的PhysicsMaterialProperty面板里的Physics里将会发现刚体材料相关的一些属性,例如动摩擦力、静摩擦力等,这些属性可以被设置。

在这里插入图片描述

随后我们将新引入的PhysicsMaterial赋予给方块Cube,找到方块Cube的属性面板Physics下的Physics Materials on selected models,并选中新引入的PhysicsMaterial,这样,方块就具备了刚体的物理材质属性。

在这里插入图片描述

添加外观材质

除了物理材质,物体也可以添加用于外观展示的材质
依次选中Create->Material->OmniPBR来添加一个OmniPBR材质,可以理解为普通的外观材质。

注意:类似OmniPBR材质的术语,将在相关知识章节部分补充

在这里插入图片描述

OmniPBR材质的Property里有海量的可调选项,此处就以简单地修改颜色为例。
选中OmniPBR->Property->Albedo->Albedo color修改为你喜欢的颜色。
在这里插入图片描述
随后将Stage中这个材质拖动到场景物体或者通过选中物体并在属性面板的Materials on selected models中选择材质,即可赋予外观的材质。

在这里插入图片描述
同理,你可以利用MDL语言或者现有的Omniverse材质包,为物体添加更为真实的外观材质。

在这里插入图片描述

文件的保存与使用

保存/打开USD文件

在菜单的File->Save可以保存和打开USD文件,现在试试保存刚才所创建的仿真场景。

在这里插入图片描述

保存地址可以放在诸如本地Nucleus服务器上或者本机的其他位置。
在这里插入图片描述

对于使用了多个外部素材的USD文件,建议将它所涉及的素材全部打包到一个文件夹内
通过右键USD文件并选中Collect Asset来收集相关素材并打包,以免在迁移时发生部分素材的缺失,这方便了在其他机器环境下使用情况。

在这里插入图片描述

使用USD文件

在这里插入图片描述

在Nvidia Isaac Sim中,官方提供了许多USD资产,将其他USD文件作为引用的步骤如下图所示:

  • 选择菜单栏中的 File
  • 在下拉菜单中选择 Add Reference 选项
    添加引用图片
    一旦加载完成,引用的USD文件将以与文件名相同的Prim名称加载到舞台上。这意味着整个USD文件的内容,包括PhysicsScene、defaultLight和GroundPlane等内容,都会被加载到新的舞台上。
    使用 Reference 的主要优势在于文件的可复用性和场景的模块化管理。多个场景可以引用同一个 USD 文件,当引用的 USD 文件被更新时,所有引用它的场景都会自动反映这些变化。

注意: 这可能导致混淆,特别是当您需要加载多个USD引用时,每个引用包含自己的PhysicsScenes和defaultLights。由于这些内容是通过Add Reference加载的,被视作是一个整体,您不能直接在新的Stage上删除它们。
同时,在原始USD文件中删除PhysicsScene、defaultLight和GroundPlane等内容也不是一个理想的解决方案,因为这可能会导致在创建USD文件时更加复杂。

为了更好地管理加载的USD文件和避免加载原始世界的环境内容,USD中存在名为defaultPrim的概念,在一个USD文件被其他USD文件引用时,只有defaultPrim部分会被拉取。
因此,在制作USD时,可以考虑当它被引用时,您希望它的哪些内容被引出(例如机器人本体),哪些内容不被引出(例如测试机器人本体时所用的周遭环境),具体的步骤类似:

  1. 创建一个名为 my_robot 的新 Xform,用于容纳机器人的相关组件。
  2. 将所需的机器人的所有组件拖动到 my_robot 这个 Xform 下。
  3. 在舞台中点击对象,右键将 my_robot 设置为新的defaultPrim

这样,当您在其他舞台上将机器人作为引用导入时,只会导入机器人的主体,而不会包含原始世界的环境内容。这一步确保了您只加载了所需的机器人部分,而不会混淆或加载多余的内容。

在这里插入图片描述

结尾语

恭喜你,已经学习了Isaac Sim的仿真场景的相关内容,了解了如何创造一个带有物理环境、材质、光照之类的更加真实的世界,并能够自主搭建一个简单的物理仿真场景。
在下一章节,你将学习Isaac Sim的机器人和传感器组装。
本章在后面的部分还提供了可选的个人练习和相关知识小章节,如果你希望更深入地掌握本章节学习的内容,请查看后面的内容。

如需企业内训定制、项目开发合作或个人学习支持,请联系:hermanye233@icloud.com

个人练习(可选的)

练习目标

制作出一个简单的两轮机器人,由一个Cube通过拉伸操作得到身体,两个Cylinder作为左右轮,并为这个机器人制作出简单的测试环境,并将他们保存作为USD文件
在这里插入图片描述

练习参考

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

相关知识(可选的)

注意: 限于作者所涉及的领域,以下内容可能存在不准确或者谬误,仅供参考,欢迎指正。

  • Rigid Body 刚体
    刚体(Rigid Body)在物理学和工程学中,是指一种理想化的物体,其内部任意两点之间的距离无论受到什么外力都保持不变。换句话说,刚体不会变形,不会弯曲、拉伸或压缩。刚体是经典力学中的一个基本概念,用于描述和分析物体的运动和力学行为。
    刚体可以由无数个质点组成,每个质点的位置相对于刚体的质心都是固定的,它的运动可以分解为平移运动和旋转运动。平移运动是刚体的所有点都以相同的速度和方向移动;旋转运动是刚体绕着某个固定轴旋转。它的惯性矩描述了其对旋转运动的抵抗能力,取决于刚体的质量分布和旋转轴的位置。
    在游戏引擎中,如Unity或Unreal Engine或者仿真器中,将刚体属性添加到对象,可以使其具备一些物理性质。

  • Collider 碰撞体
    碰撞体(Collider)是一种用于物理模拟的组件,它定义了物体的形状和物理特性,使物体在模拟环境中能够发生碰撞和相互作用。Collider通常用于确保虚拟物体不会互相穿透,并能产生现实中的物理行为,如碰撞、反弹等。
    碰撞体预设(Colliders preset)是预定义的碰撞体配置,包含了常用形状和物理参数设置。使用碰撞体预设可以简化碰撞体的创建过程,让用户快速应用常见的碰撞体类型,比如Box Collider(盒子碰撞体)、Sphere Collider(球形碰撞体)、Mesh Collider(网格碰撞体)等。

  • Collsion Approximation 碰撞体近似
    碰撞体近似指的是使用简化的几何形状来近似物体的实际形状,以便于更高效地进行碰撞检测和物理模拟。直接使用Mesh计算碰撞虽然精度高,但是对于复杂物体开销非常大,碰撞体近似方法通过减少计算复杂度,提高模拟的性能,同时保持合理的物理行为。

  • Convex Hull 凸包近似法
    Convex Hull(凸包)是计算几何中的一个基本概念。它是指一个给定点集的最小凸多边形或多面体,包含了点集中所有的点,并且任何两点之间的连线都在这个凸多边形或多面体的内部或边界上。
    凸形状的碰撞检测算法简单高效,比非凸形状快得多,并且在物理模拟中有较小的误差积累。但凸包仅能提供一个粗略的外部近似,对于复杂形状或内部凹陷较多的物体,精度较低,比如机器人的夹爪,可能会被试做一团夹爪,从而在精细灵巧操作上表现不佳。
    想象一下你有一堆钉子随机地插在平面上的一个木板上,每个钉子代表一个点。然后你用一根橡皮筋围绕这些钉子,把橡皮筋拉紧,使其尽可能地包住所有的钉子。橡皮筋最终形成的形状就是这个点集的凸包。
    在三维空间中,凸包就像是你用一张伸展的薄膜包裹住一堆散落的球(代表点)。薄膜在各个方向上紧紧包住这些球,形成的就是三维点集的凸包。

  • Convex Decomposition 凸分解近似法
    Convex Decomposition (凸分解)是一种将复杂的几何形状分解成一组较小的凸形状的方法。通过将一个复杂的非凸形状分解成多个凸多边形或凸多面体,可以更高效地进行物理模拟和碰撞检测。
    将复杂形状分解为多个凸形状,凸形状的碰撞检测算法简单且高效。
    但对于非常复杂或高度不规则的形状,凸分解可能仍然无法完美近似。
    想象一下你有一块形状复杂的大饼干(复杂的非凸形状),上面有许多凹陷和凸起,它不是一个典型的整体的适合用粗略的凸包解决的三维结构。
    于是你使用小刀持续切割,直到把整个大饼干分解成许多小块,并且使得每一块都是规则的形状(凸形状),这些均为小块凸形状的饼干块能够近似地代表大饼干的复杂形状。

  • SDF 符号距离场近似法
    SDF Mesh的近似方法(Signed Distance Function Mesh Approximation)是一种用于表示复杂几何形状的方法,主要在计算机图形学、物理模拟和碰撞检测中使用。SDF Mesh通过符号距离函数(Signed Distance Function, SDF)来描述几何体的表面和体积信息,使得在处理复杂形状时能够获得更高的精度和效率。
    SDF Mesh可以精确描述复杂几何体的表面和体积,但生成和优化SDF网格需要大量的预处理时间和计算资源,在使用时也有较大的内存占用。
    符号距离函数是一个数学函数,对于三维空间中的每一个点,该函数返回该点到最近表面的有符号距离,通过正/负/零值来代表点在表面的外部/内部/表面上。

  • PCM 碰撞系统算法
    PCM(Persistent Contact Manifold)是一种基于接触持久化的算法,它在物体碰撞时,通过保持接触信息来提高后续碰撞检测的效率。它保留了物体之间的接触信息,后续的碰撞检测可以利用这些信息,从而减少计算量。对于持续接触的物体,如堆叠的物体或滑动接触,能够提供更加稳定的模拟结果。

  • SAT 碰撞系统算法
    SAT(Separating Axis Theorem)是一种基于分离轴的碰撞检测算法,通过检查可能的分离轴来确定两个凸多边形是否发生碰撞。算法相对简单且直观,适合处理凸形物体的碰撞检测。对于复杂场景或非凸多边形,SAT 可能需要更多的计算资源。

  • TGS 求解算法
    TGS(Timewarp Gauss-Seidel)求解器是一种改进的Gauss-Seidel方法,它在处理动力学系统中的时间步进时更为稳定和高效。TGS求解器的核心思想是通过时间扭曲(timewarp)技术来处理时间步长,从而减少数值误差和模拟不稳定性。它适用于需要高精度和高稳定性的模拟,如复杂的刚体动力学系统。它适用于需要高度稳定性和精度的模拟场景,如高精度物理引擎和复杂机械系统的仿真。

  • PGS 求解算法
    PGS(Projected Gauss-Seidel)求解器是一种迭代方法,用于解决带有不等式约束的线性互补问题(LCP)。在刚体动力学中,PGS求解器常用于处理碰撞、摩擦和关节约束等问题。PGS求解器通过迭代逐步逼近解,并在每一步中投影到可行域内,从而满足约束条件。它的优点是简单易实现,且在大多数情况下收敛速度较快。它常用于实时应用和游戏引擎中,因其计算效率较高且实现简单,适合处理大量的碰撞和约束。

  • CCD 连续碰撞检测
    连续碰撞检测(Continuous Collision Detection)是一种方法,用于在仿真中精确检测物体在连续时间步长内是否发生碰撞,而不仅仅是在离散的时间步长上进行检测。这样可以避免快速运动的物体“穿越”其他物体的问题,提供更精确和真实的模拟效果。启用CCD可以大幅提高碰撞检测的准确性,但也可能增加计算开销。

  • Broad Phase 粗略阶段
    在物理引擎和碰撞检测系统中,Broad Phase(粗略阶段)是碰撞检测过程的第一个阶段。其主要目的是快速筛选出可能发生碰撞的物体对,抛弃不可能发生碰撞的情况,减少后续需要进行详细碰撞检测的物体对数量,从而提高整体碰撞检测的效率,这对于处理大量物体的仿真非常重要,因为详细碰撞检测是计算密集型的操作。
    Broad Phase的任务是识别可能碰撞的物体,而不是确认它们是否确实碰撞。
    Broad Phase常见的方法包括基于空间分区的算法(如网格法)、层次包围体法(如八叉树或四叉树)、基于排序和剔除的算法(如 Sweep and Prune)等。
    举例来说,如果你想模拟整个世界的人口,就需要检查每个代表人的对象是否与其他人发生碰撞。但显然,伦敦的人不可能与北京的人发生碰撞,因此没有必要检查这两个城市的所有人之间的碰撞。Broad Phase阶段会尝试将世界分成离散的区域,其中我们知道这些区域不会重叠,因此区域内的物体也不会发生碰撞。这样可以大大减少需要进行详细碰撞检测的对象数量,从而提高性能。
    具体细节可参考Nvidia physX 中的说明。
    对于Broad Phase更深入的理解可参考Newcastle University相关研究。

  • Narrow Phase 精细阶段
    Narrow Phase(精细阶段)是碰撞检测过程的第二个阶段,紧随 Broad Phase(粗略阶段)之后。在 Narrow Phase 中,对在粗略阶段筛选出的可能发生碰撞的物体对进行精确的碰撞检测。其主要目的是计算物体之间的实际接触点、碰撞深度和碰撞响应,由于Broadphase已经大大减少了需要检测的物体对的数量,这一步通常较为高效。
    Narrow Phase使用更复杂和精细的算法,如 GJK(Gilbert-Johnson-Keerthi)算法、EPA(Expanding Polytope Algorithm)、SAT(Separating Axis Theorem)等。

  • GPU 粗略阶段算法
    PhysX 中 GPU 加速的 Broad Phase 算法通常采用的是基于栅格化的策略。这种算法的核心思想是将整个场景划分成多个小的栅格单元,然后在每个栅格单元内进行碰撞检测。
    更细地说,它将三维空间划分成一系列小的栅格单元。每个单元包含一定数量的物体,物体的位置决定了它们被分配到哪个栅格,随后将所有物体根据其位置分配到对应的栅格单元中,并在每个栅格单元内,进行细粒度的碰撞检测。
    对于跨越栅格边界的物体,这些物体可能与多个栅格单元中的物体发生碰撞。需要对这些物体进行额外的检测以确保碰撞检测的准确性。

  • MBP 粗略阶段算法
    MBP (Multi Box Pruning)是一种基于轴对齐包围盒(AABB)的碰撞检测算法,通过多重剔除法进行 Broadphase 处理。
    MBP 将物理世界划分为多个轴对齐的包围盒(AABB,Axis-Aligned Bounding Boxes),并对这些包围盒进行管理和检测。
    它在常规场景中表现良好,特别是在动态场景中,能够快速剔除不可能碰撞的物体。但在极大规模的场景中,例如成百上千机器人与刚体的场景,可能不如 GPU 加速效果好。

  • SAP 粗略阶段算法
    SAP(Sweep and Prune)是一种常用的 Broadphase 碰撞检测算法,通过在各个坐标轴上排序和检查重叠来进行碰撞检测。
    SAP将所有物体的轴对齐包围盒(AABB)的起始和结束点(即最小和最大坐标)分别投影到某个坐标轴上。随后对这些投影点进行排序,通常按 X 轴进行排序。可以对每个轴进行排序以提高精度,但通常一个轴就足够了。然后依次检查排序后的投影点,找出所有重叠区间。
    它在物体移动不频繁或物体分布较为均匀的场景中表现良好。但在物体频繁移动的动态场景中,性能可能不如 MBP 或 GPU。

  • Omni PBR材质
    Omni PBR材质是一种基于物理的渲染(Physically-Based Rendering,PBR)材质,用于实现更逼真的图形渲染效果。PBR是一种图形渲染技术,旨在模拟光线如何与物体表面交互以产生更真实的视觉效果。这种技术考虑了光的物理特性,包括漫反射、镜面反射、折射等,以在虚拟环境中模拟材质的外观和光照交互。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/355341.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

怎么添加网页到桌面快捷方式?

推荐用过最棒的学习网站!https://offernow.cn 添加网页到桌面快捷方式? 很简单,仅需要两步,接下来以chrome浏览器为例。 第一步 在想要保存的网页右上角点击设置。 第二步 保存并分享-创建快捷方式,保存到桌面即可…

【Unity】AssetBundle打包策略

【Unity】AssetBundle打包策略 在游戏开发过程中,AssetBundle(AB)打包策略的重要性不容忽视。游戏开发者往往手动设置游戏资源包名进行管理,难免会造成资源确实或导致冗余,因此对于AB包的打包流程来说,进行策略管理显得十分重要。…

【2024最新华为OD-C/D卷试题汇总】[支持在线评测] API集群访问频次统计(100分) - 三语言AC题解(Python/Java/Cpp)

🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解 💻 ACM银牌🥈| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢💗 &#x1f…

IOS逆向分析—终极详细(三)

IOS逆向分析—终极详细(三) 前言一、逆向分析是什么?二、IDA分析1.下载并安装IDA2.安装插件3.加载二进制4.代码分析5.其它 总结 前言 本文是个人完成对IOS上APP分析的整个过程,当然对于不同的机型还会遇到不同的情况,谨…

RabbitMQ 开发指南

连接RabbitMQ 连接方式一: 也可以选择使用URI的方式来实现 连接方式二: Connection接口被用来创建一个Channel,在创建之后,Channel可以用来发送或者接收消息。 Channel channel conn.createChannel();使用交换器和队列 声明…

android在线阅读代码网站

android在线阅读代码社区: Android 1.6 到 Android 10 的源码: Android OS 在线源代码 - https://www.androidos.net.cn10.0.0_r6 - Android社区 - https://www.androidos.net.cn/ AndroidXRef https://cs.android.com/ https://cs.android.com/android…

《梦醒蝶飞:释放Excel函数与公式的力量》4.1if函数

第4章:逻辑与条件函数 第一节4.1 if函数 在Excel中,逻辑函数用于处理基于特定条件的真假判断,它们是构建复杂公式和进行高级数据分析的基础。本章将深入探讨逻辑函数的使用方法,特别是IF函数,这是Excel中最为常用的条…

win10免安装配置MySQL8.4.0

注:此教程基于win10 22H2 版本 1、下载最新版本MySQL压缩包 下载链接:MySQL官网下载地址 点击第二行的 ZIP Archive 后面的Download(当前时间2024-06-19最新版本是8.4.0) 2、解压并添加配置文件 下载完毕后,解压缩…

修复 pprof ---node_exproter访问漏洞(go-pprof-leak)

前言: ** 在Go语言中,pprof和debug包是用来检测和避免goroutine泄漏,避免导致goroutine泄漏,进而消耗大量系统资源。不过对于安全而言确又存在一定风险,** 风险: 通过node_exporter web发现 190.168.46.1…

数据结构之“算法的时间复杂度和空间复杂度”

🌹个人主页🌹:喜欢草莓熊的bear 🌹专栏🌹:数据结构 目录 前言 一、算法效率 1.1算法的复杂度概念 1.2复杂度的重要性 二、时间复杂度 2.1时间复杂度的概念 2.2大O的渐进表示法 2.3常见的时间复杂度…

【人机交互 复习】第1章 人机交互概述

人机交互的知识点碎,而且都是文字,过一遍脑子里什么都留不下,但是背时间已经来不及了,最好还是找题要题感吧,加深印象才是做对文科的关键 一、概念 1.人机交互(Human-Computer Interaction,HCI)&#xff1…

Blazor的SSR服务端渲染是不是交互式的

从.NET8开始,Blazor引入了SSR服务端渲染,归功于MVC和RazePage的沉淀,虽然来得晚,但一经发布,就将Blazor推向了新的高度。从今年开始,Youtube上关于Blazor的优质教学视频,以肉眼可见的速度在增加…

【机器学习】机器的登神长阶——AIGC

目录 什么是AIGC 普通用户接触AIGC网站推荐 通义千问 白马 普通用户如何用好AIGC 关键提示词的作用 AIGC的影响 就业市场: 教育领域: 创意产业: 经济活动: 社交媒体与信息传播: AIGC面临的挑战 什么是AIGC…

python离线安装第三方库、及其依赖库(单个安装,非批量移植)

文章目录 1.外网下载第三方库、依赖库2.内网安装第三方库3.补充附录内网中离线安装python第三方库,这时候只能去外网手动下载第三方库,再传回内网进行安装。 问题是python第三方库往往有其前置依赖包,你很难清楚某个第三方库依赖的是哪些依赖包,更难受的是依赖包可能还有其…

从零开始:使用ChatGPT快速创作引人入胜的博客内容

随着科技的飞速发展,人工智能逐渐渗透到我们生活的各个领域。无论是商业、教育还是娱乐,AI技术都在以惊人的速度改变着我们。特别是在内容创作领域,人工智能正发挥着越来越重要的作用。今天,我将和大家分享如何从零开始&#xff0…

【漏洞复现】极限OA video_file.php 任意文件读取漏洞

免责声明: 本文内容旨在提供有关特定漏洞或安全漏洞的信息,以帮助用户更好地了解可能存在的风险。公布此类信息的目的在于促进网络安全意识和技术进步,并非出于任何恶意目的。阅读者应该明白,在利用本文提到的漏洞信息或进行相关测…

2024年快手短视频带货教程,操作简单易上手

课程下载:https://download.csdn.net/download/m0_66047725/89389478 更多资源下载:关注我。 课程内容: 10-为什么做快手短视频带货 11-0粉丝开通小黄车 12-怎么挂小黄车,小黄车掉了怎么办 13-如何选品?好的选品成功率60% …

Github生成Personal access tokens及在git中使用

目录 生成Token 使用Token-手工修改 使用Token-自动 生成Token 登录GitHub,在GitHub右上角点击个人资料头像,点击Settings → Developer Settings → Personal access tokens (classic)。 在界面上选择点击【Generate new token】,填写如…

腾讯云API安全保障措施?有哪些调用限制?

腾讯云API的调用效率如何优化?怎么使用API接口发信? 腾讯云API作为腾讯云提供的核心服务之一,广泛应用于各行各业。然而,随着API应用的普及,API安全问题也日益突出。AokSend将详细探讨腾讯云API的安全保障措施&#x…

HarmonyOS之自选股App

支持在 鸿蒙、安卓、苹果设备上运行。 1.界面效果展示 2.数据存储 数据存储采用的是官方的 ohos.data.relationalStore.relationalStore stock_code表用来存储A股市场5000多家公司的股票代码和名称等信息 const TAB_STOCK_CODE "stock_code" const CREATE_TABL…