使用IsaacSim创建Unity项目
本节介绍如何使用IsaacSim创建自己的Unity项目。假定您具有Unity编辑器的基本知识。如果您不熟悉Unity,请先阅读Unity学习资源和教程。
创建一个新项目
IsaacSim Unity3D具有自定义项目设置和程序包依赖性。创建具有艾萨克一个新项目最简单的方法是将复制Assets
,Packages
和ProjectSettings
文件夹从样本项目:
bob@desktop:~/isaac_sim_unity3d$ mkdir projects/test
bob@desktop:~/isaac_sim_unity3d$ cp -r projects/sample/Assets projects/sample/Packages projects/sample/ProjectSettings projects/test/
接下来,打开新项目:
bob@desktop:~/isaac_sim_unity3d$ ~/Unity/Hub/Editor/2018.3.11f1/Editor/Unity -projectPath projects/test -logfile
注意
2018.3.11f1
如果您安装了其他版本的Unity,则上述命令中的目录可能会有所不同。
等待项目加载(大约需要10分钟)。完成后,您应该在编辑器中看到一个空的场景:
创建一个新场景
首先,您需要创建一个新场景:
- 用鼠标右键单击项目选项卡。
- 选择“ 创建”>“场景”。
- 将场景重命名为“测试”。
- 打开场景。
- 创建一个空的GameObject并将其命名为“ world”。
- 添加一个平面作为地面,并添加几个立方体作为墙。
- 将“ Map Camera”预制件添加到场景中。
- 将地图另存为“ /tmp/test.png”。
- 卸下“地图相机”。
添加随机障碍
接下来,您可以向场景添加随机障碍:
- 创建一个新的空GameObject并将其命名为“随机场景”。
- 使用检查器中的“ 添加组件 ”来添加“随机性”和“随机化器组”脚本。
- 将“ Randomness”组件拖到“ Randomizer Group”脚本的“ Randomness”字段中。
- 添加一个名为“ random box”的空子GameObject。
- 添加一个对撞机并将其放置在右上角的空白处。
- 使用“ 添加组件”按钮添加“对撞机资产扳手”脚本和“变换随机化器”脚本。
- 修改以下设置:
- 转到项目> NVIDIA IsaacSim for Unity3D(示例)>仓库>道具>组
- 将“ CardboardBoxProps”拖到“ Collider Asset Spawner”的“ Asset Group”中。
- 将“变换随机化器”组件拖到“对撞机资产生成器”的“变换随机化器”字段中。
- 将“对撞机资产扳手”的“最大计数”更改为6,将“变换随机化器”的“旋转-均匀范围-Y”更改为180。
- 转到“随机场景” GameObject,然后按“ 随机化”按钮。您应该看到从“ CardboardBoxProps”组中抽出的6个纸箱,它们是在箱子中随机产生的。
- 再次按随机化以重新生成框。
- 复制“随机框” GameObject。
- 将游戏对象重命名为“随机垃圾桶”。
- 将BoxCollider移动到左下角的空白处。
- 将“对撞机资产扳手”的“资产组”更改为“无”。
- 转到。
Project > NVIDIA IsaacSim for Unity3D (Samples) > Warehouse > Props
- 将“ TrashCan01”拖到“ Collider Asset Spawner”的“ Prefab”中。
- 转到“随机场景” GameObject,然后按“ 随机化”按钮>您应该看到随机放置了6个垃圾桶。
您也可以在场景中放置自己的模型。确保模型附有对撞机并且最小高度为0.7m,以便卡特上的模拟激光雷达可以看到它们。
如下所示更改主相机的位置和旋转角度,以鸟瞰场景。如果按立即播放,您应该在游戏视图中看到一个静态场景。按停止。
添加Carter和Isaac应用程序
现在您可以将机器人添加到场景中了:
- 转到。
Project > NVIDIA IsaacSim for Unity3D (Samples) > Robots
- 将“ Carter_Wheeled”预制件拖到场景中。现在,您应该在场景中心看到Carter。
- 转到“ 控制台”选项卡,然后启用“错误暂停”。
注意
如果按立即播放,您将看到游戏立即暂停,并显示错误消息“唤醒前访问IsaacNative单身人士”,因为您尚未添加用于加载Isaac SDK C API并运行NavSim应用程序的“ isaac.alice”预制件。
- 停止游戏,然后转到。
Project > NVIDIA IsaacSim for Unity3D (Core) > Prefabs
- 将“ isaac.alice”预制件添加到场景中。
- 在现场添加“ isaac.minisight”预制件,以可视化全球和本地计划。
现在,当您按Play时,模拟应该开始而没有错误。
打开一个终端,转到Isaac SDK文件夹,然后使用我们之前为该场景保存的地图运行导航应用程序:
bob@desktop:~/isaac$ bazel run apps/navsim:navsim_navigate -- --more /tmp/test.json,packages/navsim/robots/carter.json
在Chrome浏览器中打开Isaac Sight,网址为http://localhost:3000/
:
您应该看到Carter正确定位并接收Lidar和RGBD摄像机数据。但是,由于目标行为设置为“姿势”,但是没有从Simulation中发布目标姿势,因此它保持静止。
在Sight中,转到,将“ desired_behavior”从“ pose”更改为“ random”,然后按Submit。您应该看到目标姿势以红色显示在“地图视图”中,卡特沿计划路径移动。Application Configuration > goals.goal_behavior
故障排除
我在Sample包中双击Unity场景以打开该场景,然后弹出此消息:
选择取消。而是将场景图标拖到层次结构中并删除上一个场景。
我按Play键,Unity编辑器崩溃
在“ Unity编辑器控制台”选项卡中,单击 “播放”之前检查是否有任何错误。启用错误暂停,如果Unity捕获任何错误,这将暂停游戏。最后,如果您使用-logFile
标志启动Unity Editor,则Unity将日志输出到终端。检查终端日志中是否有任何错误:一个常见的原因是Unity中运行的Isaac SDK应用程序由于缺少配置文件而崩溃。
我按Play并收到很多类似于“无法调用IsaacIsaacCreateApp”的错误
Unity无法加载isaac sdk c api lib。您需要//packages/navsim/apps:navsim-pkg
从Isaac SDK 部署到中。例如,您将使用此命令部署到示例项目:[your project]/Assets/StreamingAssets
bob@desktop:~/isaac$ ./engine/build/deploy.sh -p //packages/navsim/apps:navsim-pkg -d x86_64 -h localhost --deploy_path ~/isaac_sim_unity3d/projects/sample/Assets/StreamingAssets
我在Unity中添加了一个IsaacComponent,但是我没有从模拟器接收数据
检查Unity中IsaacComponent中的Isaac频道名称是否与接收方Isaac应用程序上的频道名称匹配。另外,有时特殊字符/x13
会被Unity编辑器插入通道名称字符串中。/x13
在*.unity
场景文件或*.prefab
文本编辑器/ IDE中的文件中搜索并删除的任何实例。