今天看啥  ›  专栏  ›  YottaYuan

IsaacSim Unity3D - 模拟器功能

YottaYuan  · 简书  ·  · 2020-03-20 12:24

模拟器功能

本节概述了重要的IsaacSim Unity3D功能并描述了如何使用它们。

传感器

IsaacSim Unity3D支持相机,激光雷达和IMU传感器数据的仿真:

相机

IsaacSim Unity3D可以生成彩色和深度相机图像,也可以对其进行标记。

选择Isaac相机预制件

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

配置Isaac相机组件
  • 如果启用“ 捕获深度” 选项,则预制件还将生成深度图像。

  • 使用 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预制添加到场景中。

选择Isaac标签管理器预制件

如果将 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上配置一个网格或其他碰撞器,以使它对激光雷达可见。

Unity Flatscan激光雷达组件

国际货币联盟

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

Unity IMU组件
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



原文地址:访问原文地址
快照地址: 访问文章快照