模拟器功能
本节概述了重要的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状态。
../../_images/unity_differential_base.jpg
监控
姿势和碰撞脚本发布从Unity Simulation到Isaac的真实状态。
姿势
IsaacPose和RigidBodiesSink帮助程序脚本从Unity发布地面真实的姿势和运动状态。
IsaacPose脚本发布包含其GameObject姿势的PoseTreeEdge原型消息。可以使用
PoseMessageInjector小
码将其添加到接收Isaac应用程序的姿势树中。
../../_images/unity_pose_scripts.jpg
RigidBodiesSink脚本在同一参考框架中发布GameObjects列表的刚体状态(姿势,速度和加速度)。如果游戏对象具有刚体分量, 则使用
Rigidbody.velocity
–否则,根据帧之间的位置变化来估算速度。
../../_images/unity_rigidbodiessink_script.jpg
碰撞
当刚体
进入碰撞
时,将CollisionMonitor脚本附加到刚体上以发布CollisionProto消息。
../../_images/unity_collision_script.jpg