多机器人仿真
IsaacSim Unity3D支持模拟同一世界中的多个机器人,每个机器人都由独立的Isaac SDK导航大脑驱动。这是使用具有多个模拟实例的服务器-客户端结构实现的,以允许扩展到大量的机器人。
下图描述了仿真实例与Isaac机器人大脑之间的通信。蓝色框代表Unity3D实例,绿色框代表Isaac SDK导航应用程序实例:
-
该
SIM服务器
接收基地命令所有机器人,进行物理的更新,并发布每个机器人到其对应的客户端辛的基本状态。它还使用Teleport消息向所有Sim Client广播所有机器人的姿势。
-
所述
辛客户端
接收该瞬间移动消息并传送自我机器人和其他机器人到其对应的位置两者。然后,它执行传感器模拟(相机+激光雷达),并将传感器数据发布到机器人的大脑。
-
Sim服务器/客户端结构完全被机器人的大脑所遮盖:无论连接的模拟器是独立模式还是客户端模式,都可以使用相同的导航应用程序(navsim_navigate)。
Sim Server和Sim Client使用
navsim.app.json
模拟运行的应用程序变体以及
ScenarioFromFile.cs
支持从文件加载方案的脚本来实现。在这种情况下,方案文件指定机器人的数量,它们的Isaac节点,预制变体和生成姿势。Isaac SDK提供了示例应用程序和配置,用于在该
apps/navsim/multirobot
文件夹中最多运行六个机器人。
运行演示应用
请按照以下步骤在“ medium_warehouse”场景中启动模拟器和机器人大脑:
-
按照“
构建”
部分中的步骤构建“ medium_warehouse”场景。
-
//apps/navsim/multirobot:navsim-pkg
使用“ medium_warehouse”场景进行部署:
<pre style="box-sizing: border-box; font-family: Consolas, "Andale Mono WT", "Andale Mono", "Lucida Console", "Lucida Sans Typewriter", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Liberation Mono", "Nimbus Mono L", Monaco, "Courier New", Courier, monospace; font-size: 12px; white-space: pre; margin: 0px; padding: 12px; line-height: normal; display: block; overflow: auto; color: rgb(64, 64, 64);">bob @ desktop:〜
./engine/build/deploy.sh -p // apps / navsim / multirobot:navsim-pkg \ -d x86_64 -h localhost --deploy_path〜/ deploy / bob / medium_warehouse_Data / StreamingAssets
</pre>
上面的命令假定
medium_warehouse.x86
场景位于中
~/deploy/bob
。
-
启动Sim Server:
<pre style="box-sizing: border-box; font-family: Consolas, "Andale Mono WT", "Andale Mono", "Lucida Console", "Lucida Sans Typewriter", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Liberation Mono", "Nimbus Mono L", Monaco, "Courier New", Courier, monospace; font-size: 12px; white-space: pre; margin: 0px; padding: 12px; line-height: normal; display: block; overflow: auto; color: rgb(64, 64, 64);">bob @ desktop:〜
./medium_warehouse.x86_64 \ --app apps / navsim / multirobot / navsim_server.app.json - 场景0-模式服务器\ --scenarioFiles apps / navsim / multirobot / scenarios / multirobot_server.json
</pre>
您应该看到“ medium_warehouse”场景的俯视图,右侧有六个机器人。
-
启动Sim Client 0和1:
<pre style="box-sizing: border-box; font-family: Consolas, "Andale Mono WT", "Andale Mono", "Lucida Console", "Lucida Sans Typewriter", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Liberation Mono", "Nimbus Mono L", Monaco, "Courier New", Courier, monospace; font-size: 12px; white-space: pre; margin: 0px; padding: 12px; line-height: normal; display: block; overflow: auto; color: rgb(64, 64, 64);">bob @ desktop:〜
./medium_warehouse.x86_64 \ --app apps / navsim / multirobot / navsim_client.app.json \ --more apps / navsim / multirobot / configs / navsim_client_00.json \ --scenario 0 --mode client --clientIndex 0 \ --scenarioFile apps / navsim / multirobot / scenarios / multirobot_client.json & bob @ desktop:〜/ deploy / bob $ ./medium_warehouse.x86_64 \ --app apps / navsim / multirobot / navsim_client .app.json - 更多apps / navsim / multirobot / configs / navsim_client_01.json - 方案0-模式客户端--clientIndex 1 \ --scenarioFiles apps / navsim / multirobot / scenarios / multirobot_client.json
</pre>
-
等待所有模拟器启动:您现在应该打开三个Unity窗口。主摄像头在客户端模式下被禁用,因此两个Sim Client的Unity窗口为黑色。
-
启动机器人0和1的机器人大脑:
<pre style="box-sizing: border-box; font-family: Consolas, "Andale Mono WT", "Andale Mono", "Lucida Console", "Lucida Sans Typewriter", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Liberation Mono", "Nimbus Mono L", Monaco, "Courier New", Courier, monospace; font-size: 12px; white-space: pre; margin: 0px; padding: 12px; line-height: normal; display: block; overflow: auto; color: rgb(64, 64, 64);">bob @ desktop:〜
bazel运行// apps / navsim:navsim_navigate---more apps / navsim / multirobot / configs / navsim_navigate_00.json,packages / navsim / maps / medium_warehouse.json,packages / navsim / robots / carter.json 和 bob @ desktop:〜/ isaac $ bazel run // apps / navsim:navsim_navigate---more apps / navsim / multirobot / configs / navsim_navigate_01.json,packages / navsim / maps / medium_warehouse.json,packages / navsim / robots / carter.json 和
</pre>
两个应用程序启动后,前两个机器人将开始移动。您可以
localhost:3000
为机械手0和
localhost:3001
机械手1 打开Sight 。
-
使用以下命令杀死所有模拟器和机器人脑进程:
<pre style="box-sizing: border-box; font-family: Consolas, "Andale Mono WT", "Andale Mono", "Lucida Console", "Lucida Sans Typewriter", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Liberation Mono", "Nimbus Mono L", Monaco, "Courier New", Courier, monospace; font-size: 12px; white-space: pre; margin: 0px; padding: 12px; line-height: normal; display: block; overflow: auto; color: rgb(64, 64, 64);">bob @ desktop:〜
( pidof engine / alice / tools / main ); 做 杀 -9
for
PID ; 做完了
</pre>
使用步骤4-6中的命令启动其他机械手。机械手的最大数量取决于您的系统硬件以及Unity场景的复杂性。对于Titan V上的“ medium_warehouse”场景,您最多可以运行三个机器人(Sim Client +机器人大脑)和Sim Server。
调试Sim Server或Sim Client
为了进行调试,您可以在Unity Editor中运行Sim Server或Sim Client。在Unity Editor中打开“ medium_warehouse”场景,然后执行以下步骤:
模拟服务器
-
将部署
//apps/navsim/multirobot:navsim-pkg
到样本项目
StreamingAssets
文件夹中:
<pre style="box-sizing: border-box; font-family: Consolas, "Andale Mono WT", "Andale Mono", "Lucida Console", "Lucida Sans Typewriter", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Liberation Mono", "Nimbus Mono L", Monaco, "Courier New", Courier, monospace; font-size: 12px; white-space: pre; margin: 0px; padding: 12px; line-height: normal; display: block; overflow: auto; color: rgb(64, 64, 64);">bob @ desktop:〜
./engine/build/deploy.sh -p // apps / navsim / multirobot:navsim-pkg \ -d x86_64 -h localhost --deploy_path〜/ isaac_sim_unity3d / projects / sample / Assets / StreamingAssets
</pre>
-
在方案管理器中,将“活动方案”设置为子GameObjects中“ ScenarioFromFile”方案的索引(在本例中为0)。
../../_images/unity_debugging_scenario_1.jpg
-
单击“ ScenarioFromFile”游戏对象。在“文件中的脚本场景”组件中,将“模式”从“独立”更改为“服务器”,然后将“文件名”设置为“ apps / navsim / multirobot / scenarios / multirobot_server.json”。
../../_images/unity_debugging_scenario_2.jpg
-
单击“ isaac.alice”,然后将“ Isaac应用程序”组件的“应用程序文件名”更改为“ apps / navsim / multirobot / navsim_server.app.json”
-
点击“运行”。您应该看到场景右侧产生了六个机器人,激活了“ ScenarioFromFile”游戏对象,并且所有六个机器人已添加到“传送”脚本的“对象”中,如下所示:
../../_images/unity_debugging_server.jpg
如果检查每个机器人的IsaacComponents,则节点名称应为“ carter_0”的“ robot_0”,依此类推。
如果遇到问题,请首先检查步骤3和4中的文件名正确,并且不包含特殊字符。然后查看下面的“
故障排除”
部分。
模拟客户
要测试Sim Client实例,请按照与上述
Sim Server
部分相同的步骤进行操作,但将步骤3和4替换为以下内容:
-
单击“ ScenarioFromFile”游戏对象。在“文件中的脚本场景”组件中,将“模式”从“独立”更改为“客户端”,并将“文件名”设置为“ apps / navsim / multirobot / scenarios / multirobot_client.json”
-
单击“ isaac.alice”,然后将“ Isaac应用程序”组件的“应用程序文件名”更改为“ apps / navsim / multirobot / navsim_client.app.json”。
../../_images/unity_debugging_client.jpg
如果检查每个机械手的IsaacComponents,则节点名称应为“ navsim”。第一个机器人“ carter_0”应该具有用于传感器的IsaacComponent,而其他机器人是“假人”:未连接IsaacComponents的网格。
注意
调试后,将默认值部署
//package/navsim/apps:navsim-pkg
到项目的StreamingAssets中,以便您可以使用独立模式恢复:
<pre style="box-sizing: border-box; font-family: Consolas, "Andale Mono WT", "Andale Mono", "Lucida Console", "Lucida Sans Typewriter", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Liberation Mono", "Nimbus Mono L", Monaco, "Courier New", Courier, monospace; font-size: 12px; white-space: pre; margin: 0px; padding: 12px; line-height: normal; display: block; overflow: auto; color: rgb(64, 64, 64);">bob @ desktop:〜
./engine/build/deploy.sh -p // package / navsim / apps:navsim-pkg \ -d x86_64 -h localhost --deploy_path〜/ isaac_sim_unity3d / projects / sample / Assets / StreamingAssets
</pre>
使用自定义场景
请按照以下步骤在您自己的场景中启用多机器人仿真:
-
将ScenarioFromFile预制件(在
Core包> Prefabs中
)添加到场景中。如果您已经在场景中有场景经理,则将评估预制件添加为子级;否则,将其添加为顶级GameObject。
-
更新中的机器人姿势,
apps/navsim/multirobot/scenarios/multirobot_server.json
以便所有机器人的初始姿势都是有效的,例如,在场景内并且不与场景中的对象或其他机器人发生碰撞。
现在,您可以运行多机器人仿真,如您自己的场景中所述,只需用“ medium_warehouse”替代即可。您还可以按照上面的“
调试Sim Server或Sim Client”
步骤在Unity Editor中运行调试 。
Running the Demo App
使用自己的机器人
如果要用自己的机器人替换Carter,请为您的机器人创建以下预制件:
-
“ MyRobot_Dummy”:这是基础预制件,应仅包含机器人的网格渲染器和对撞机,而没有传感器或执行器。在非英雄机器人的客户端模式下使用。请参见
示例包>机器人
中的“ Carter_Dummy.prefab” 。
-
“ MyRobot_Sensor”:这是“ Robot_Base”的预制变体。它还包含用于激光雷达和彩色相机等传感器的IsaacComponents。在英雄模式的客户端模式下使用。请参见
示例包>机器人
中的“ Carter_Sensor.prefab” 。
-
“ MyRobot_Base”:这是“ Robot_Base”的预制变体。它还包含差动基座执行器脚本和IMU。在服务器模式下,所有机械手均使用此功能。请参见
示例包>机器人
中的“ Carter_Base.prefab” 。
将所有三个预制件添加到
Samples包> Robots中
的“ Robots” GameObjectAssetGroup中。
在中打开
multirobot_client.json
和
multirobot_server.json
文件
apps/navsim/multirobot/scenarios/
。替换为 。
"prefab": "Carter"``"prefab": "MyRobot"
请按照“
运行演示应用程序”中
详细说明的步骤进行操作。您应该在场景中看到自己的机器人。
命令行参数
运行构建时,在IsaacSim Unity3D脚本中使用以下命令行参数。
<colgroup style="box-sizing: border-box;"><col width="28%" style="box-sizing: border-box;"><col width="24%" style="box-sizing: border-box;"><col width="48%" style="box-sizing: border-box;"></colgroup>
选项
|
脚本
|
描述
|
–场景
名称
|
场景加载器
|
要加载的场景名称(例如“ small_warehouse”)
|
–scenarioFile
路径
|
ScenarioFromFile
|
方案文件的路径
|
–scenarioFile
索引
|
场景经理
|
要设置为活动的方案的索引
|
–timeScale
编号
|
时间缩放器
|
Unity的时间刻度(仅适用于> = 1)
|
–根
路径
|
IsaacNative
|
Isaac应用程序根文件夹(navsim-pkg)的路径
|
–app
路径
|
Isaac应用
|
相对于root的Isaac应用程序JSON文件的路径
|
–更多
文件
|
Isaac应用
|
以逗号分隔的相对于root的其他JSON文件列表,供Isaac应用程序加载
|
–buildTarget
路径
|
BuildHelper
|
生成的输出文件名
|
–sceneFile
路径
|
BuildHelper.BuildFrom文件
|
Isaac应用程序根文件夹(navsim-pkg)的路径
|
–mode
[客户端/服务器/独立]
|
ScenarioFromFile
|
从模拟器运行哪种模式
|
Unity还支持一组
命令行参数
。有用的参数包括:
-
“ -logFile”:将Unity日志转储到控制台。
-
“ -screen-fullscreen 0 [1]”:禁用/启用全屏。