IsaacSim Unity3D - 模拟器功能
模拟器功能
本节概述了重要的IsaacSim Unity3D功能并描述了如何使用它们。
传感器
IsaacSim Unity3D支持相机,激光雷达和IMU传感器数据的仿真:
相机
IsaacSim Unity3D可以生成彩色和深度相机图像,也可以对其进行标记。

核心软件包在“预制件”>“传感器”目录中包含“彩色摄像机”和“分段摄像机”预制件 。

-
如果启用“ 捕获深度”选项,则预制件还将生成深度图像。
-
使用Width和Height变量指定输出图像的大小(以像素为单位)。
-
您可以在“ 相机”组件中指定相机****的视野(垂直)。
-
<dl class="first docutils" style="box-sizing: border-box; margin: 0px 0px 24px; padding: 0px; list-style: none none;">
<dt style="box-sizing: border-box; font-weight: bold;">如果您想在游戏视图中查看相机图像而不是发布它</dt>
<dd style="box-sizing: border-box; margin: 0px 0px 12px 24px;">到Isaac,请禁用“ 捕获”选项。您可能还需要将“游戏”视图的显示切换为“相机”组件的“目标显示”。</dd>
</dl>
-
<dl class="first docutils" style="box-sizing: border-box; margin: 0px 0px 24px; padding: 0px; list-style: none none;">
<dt style="box-sizing: border-box; font-weight: bold;">由于OpenGL框架从下到上排列数据,因此“ 垂直翻转”选项必须为</dt>
<dd style="box-sizing: border-box; margin: 0px 0px 12px 24px;">已启用将数据发布到Isaac。如果要在“游戏”视图中查看摄像机图像,请禁用此选项。</dd>
</dl>
RGB(D)相机
该UnityCamera.cs
脚本发布RGB图像(24位)和可选的深度图像(32位浮动)。
分割相机
该SegmentationCamera.cs
脚本发布标签图像(8位)和实例图像(16位)。
要生成以上图像,请将BasicClassLabelManager预制添加到“ medium_warehouse”场景中,并启用Carter> robot> SegmentationCamera。在这种情况下,地板由网格图块组成,因此每个图块具有不同的实例值但具有相同的标签值。
标签管理器和标签设置器
要生成分割图像,请将BasicClassLabelManager预制添加到场景中。

如果将LabelSetter.cs
组件附加到GameObject,则将标签和实例值分配给该GameObject及其子代的所有渲染器。标签值是根据ClassLabelManager脚本的“ 类标签规则”分配的,该规则标签是用于与LabelSetter脚本中的“ 标签名称”相匹配的正则表达式。发布SegmentationCameraProto消息后,ClassLabelManager脚本中的“ 类标签 ”将转换为标签列表。每个渲染器的实例值都会增加。

上图显示了ClassLabelManager脚本和两个带有LabelSetter脚本的游戏对象。该ClassLabelRules脚本分配标记值“1”与LabelSetter脚本 标签名称的“地板”,“0” LabelSetter脚本与标签名称的“墙”,“2”到所有其他LabelSetter用脚本标签名称的一个或多个字符(例如,带有“ shelves_back”对象)。
Flatscan激光雷达
RaycastFlatscanLidar脚本使用Unity Physics.Raycast()_方法实现了模拟的一维激光雷达。此外,使用Isaac中的FlatscanNoiser小代码在管道中添加范围。由于Raycast()方法基于Collider类,因此必须在GameObject上配置一个网格或其他碰撞器,以使它对激光雷达可见。

国际货币联盟
惯性测量单元(IMU)模拟是通过IsaacSDK中的ImuSim 小码执行的。要启用IMU仿真,请添加带有刚体组件的“ imu”游戏对象,并通过固定关节将其附加到机器人刚体上。RigidBodiesSink脚本发布“ imu”游戏对象的刚体状态,Isaac中的ImuSim小代码使用它来模拟IMU数据。


模拟线性加速度和角速度的原始IMU输出
执行器
IsaacSim Unity3D支持使用Unity Wheel Colliders进行差速器基座的仿真。UnityDifferentialBaseSimulation脚本接收DiffBase命令,根据命令计算所需的车轮转速,并使用简单的比例控制器将扭矩施加到车轮上。该脚本还从Rigidbody.velocity 属性检索机器人的当前速度,并根据当前帧和上一帧的速度计算加速度。然后,它发布DiffBase状态。

监控
姿势和碰撞脚本发布从Unity Simulation到Isaac的真实状态。
姿势
IsaacPose和RigidBodiesSink帮助程序脚本从Unity发布地面真实的姿势和运动状态。
IsaacPose脚本发布包含其GameObject姿势的PoseTreeEdge原型消息。可以使用PoseMessageInjector小 码将其添加到接收Isaac应用程序的姿势树中。

RigidBodiesSink脚本在同一参考框架中发布GameObjects列表的刚体状态(姿势,速度和加速度)。如果游戏对象具有刚体分量, 则使用Rigidbody.velocity –否则,根据帧之间的位置变化来估算速度。

碰撞
当刚体进入碰撞时,将CollisionMonitor脚本附加到刚体上以发布CollisionProto消息。
