NSDT工具推荐: Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 可编程3D场景编辑器 - REVIT导出3D模型插件 - 3D模型语义搜索引擎 - AI模型在线查看 - Three.js虚拟轴心开发包 - 3D模型在线减面 - STL模型在线切割 - 3D道路快速建模
随着机器人处理越来越复杂的任务,使用硬件原型开发机器人变得不切实际、危险或不可能。机器人专家越来越多地转向仿真,以获取有价值的数据,用于为其机器人设计硬件和软件组件,以及测试和验证其控制算法。
模拟具有能够扩展到许多并行流程以及运行成本低廉的优势,但它带来了高昂的前期开发成本。为了进行有效的模拟,有必要开发许多基本组件,例如物理引擎、渲染引擎、机器人中所有传感器的模型,以及模拟机器人所需的所有技术艺术和资产,然后使用Unity或Unreal 来运行机器人场景的模拟。
乍一看,这似乎是一个有吸引力的选择,原因有很多:
- 视频游戏引擎具有机器人模拟所需的许多相同基础,例如图形渲染管道和物理引擎。此外,由于视频游戏消费者要求他们的游戏具有越来越逼真的行为,因此它们通常针对性能和逼真度进行了微调。
- 视频游戏引擎是高度可定制的,因此可以轻松地使用自定义功能扩展引擎。
- 许多大型视频游戏引擎,例如 Unity 和 Unreal,都提供“资产商店”,用户可以在其中以象征性的费用下载地图、艺术或代码插件等技术资产,以添加到他们的自定义设计中。例如,用户可以在 Unreal Store 中搜索“鲜花”,然后下载包含数百种不同鲜花的包,这些鲜花可以简单地拖放到场景中,而不是花费开发时间来创建虚拟鲜花。 . 这节省了大量的开发时间,因为几个月的工作可以简单地购买和下载。事实上,这些包中的许多都包含(理论上)应该准备好开箱即用的真实地图,根本不需要开发工作!
我目前正在开发机器人的任务之一是西雅图机器人协会的RoboMagellan 竞赛。在这场比赛中,机器人需要能够在未知的室外环境中在不同航路点之间自主导航,同时通过一些轻障碍。在之前的练习中,我使用 Unreal 引擎开发了一个模拟框架UrdfSim,在这篇文章中,我将看看使用这个框架来模拟真实任务有多么困难,以及在开发过程中发现的使用视频游戏引擎的一些问题和注意事项。
在博文结束时,我们将为 RoboMagellan 竞赛提供一个功能齐全的模拟环境,可用于验证控制算法或收集机器学习算法的训练数据。
1、预制地图
起初,模拟的设计看起来很简单。去虚幻商店,找几张合适的贴图,用UrdfSim编译,编写python脚手架代码运行模拟。不过这种方法很快遇到了一些问题。
首先,虚幻商店中提供的大多数包都不是完整的地图,而是较小的资产集合。例如,可能有一组纹理、一组网格或一组可以下载的代码插件。这些资产很重要,但不是一个完整的级别。一旦可用的包被过滤到只有地图,就会发现其他问题:
- 太小了。许多可用的地图都非常小,主要用于显示包中包含哪些资产。此外,它们中的许多都显示了地图的边缘,这会导致模拟伪影。例如,在下面的地图中,边缘清晰可见。
- 太大了。在剩下的地图中,有些地图太大了。例如,一些地图包含跨越数英里地形的广阔景观。虽然很好,但运行这些地图会非常且不必要地占用大量资源,从而限制了模拟的实用性。
- 太统一了。在机器人设计过程中使用仿真的主要价值主张之一是捕捉边缘情况的能力。为了做到这一点,地形需要有足够的多样性来练习可能发现机器人的所有场景。许多地图非常统一,例如巨大的草地。尽管地图会很大,但额外的空间不会为机器人带来新的有趣场景。例如,下面的地图很大(数百平方公里),但纹理非常均匀,使得大部分空间变得多余。
- 不切实际的造型。一些地图的纹理和设计与机器人所处的环境并不相似。例如,纹理可能是卡通或未来主义的,从而使地图毫无用处。
- 不是为机器人设计的。大多数电子游戏都有一个人形大小的角色在这些世界中互动。这将导致包含妨碍机器人系统的草或短灌木等效果。例如,试图在此应用程序中模拟的机器人有一英尺高,通常比这些场景中使用的草短几倍。这意味着从机器人获取的所有图像或传感器读数都将是草的,如下图所示。
- 没有预览就贵。在查看资产包时,不可能事先知道地图的质量。没有提供“预览”的机制 - 需要先购买和下载包,然后才能使用它。也没有退款的可能。虽然每个单独的包并不昂贵(大多数不到 100 美元),但通常需要预览多个包才能确定哪些是有用的。
- 缺少注释。在训练算法时,一般需要知道地图的信息。例如,如果需要验证机器人的路径跟踪能力,那么就需要知道路径的位置。但是,预览的任何地图中均未提供此信息。虽然这些特性是设计在关卡中的,但程序员不可能知道这些特性在哪里,使得地图的使用变得非常困难。
在查看了上面的地图包之后,似乎没有多少可以按原样使用的。尽管有一些不错的候选者,例如DevTon Spring Landscape或模块化社区包,但它们都没有真正适合这个项目的需求。经过多次辩论,决定创建可用于模拟的自定义地图。地图的标准如下:
- 地图应该代表一个大型的户外场景,但不能太大而占用资源。
- 地图应该有多个具有不同纹理的区域。它应该有一个山区、一个森林区、水、草地、湖泊、海滩和河流。
- 地图应包括天然植物,但不应不必要地干扰较短机器人的传感器。例如,地图的大部分不应该被茂密的高草覆盖。
- 该地图应允许模拟多种场景,并包含各种密度的障碍物。
- 应该对地图进行大量注释,以便所有主要障碍物和特征的坐标和边界都是已知的,并且可以通过 API 获得。
2、设计自定义地图
由于对虚幻世界的设计知之甚少,第一步是找到一个好的教程。没有很多好的、全面的基于文本的 Unreal 教程,但是 Shane Whittington(Youtube 上的“GameDev Academy”)提供了一个很棒的视频系列,涵盖了Youtube 上免费提供的基础知识。除了免费提供的虚幻入门内容外,我还在项目中使用了一些额外的内容包。首先,我将DevTon Spring Landscape资产包用于其植物资产。资产包中有很多树木、灌木和鲜花。此外,我使用Flowers and Nature 包添加了一些额外的花卉类型。
地图的设计以一条河流为中心,将地图一分为二,三座不同风格的桥梁在不同的点交叉。这将允许进行各种有趣的路径规划练习,因为可以创建彼此靠近但相隔很远的起点和终点。此外,一些桥梁通过路径连接,可用于支持路径跟踪场景。最后,地图被划分为三个不同的生物群系:森林、草地和海滩。这将迫使任何能够在这些不同区域工作的机器人能够处理各种各样的纹理,从而开发出更强大的算法。除了传统的户外场景外,还添加了树篱迷宫,以便将地图用于高级路径规划场景。
地图设计和布局后,有必要对地图进行注释。注释的问题之一是使注释与地图更改保持同步。例如,如果路径的位置在地图的未来迭代中发生更改,那么注释也需要更改。此外,使用虚幻编辑器的拖放界面对地图进行注释将符合人体工程学,而不必使用某些单独的界面来注释地图。使用的解决方案包含两个部分。首先,在关卡的关键点放置一些演员。演员没有碰撞和不可见的纹理,因此它们不会影响游戏玩法。此外,演员遵循特定的命名约定,以便以后轻松识别。最后,虚幻引擎 python 脚本插件可用于收集这些演员的位置并创建注释。该管道非常易于使用,并提供有关注释质量的即时视觉反馈。下面显示了注释地图的照片:
一旦开发了地图,剩下的模拟组件的开发就变得微不足道了。首先,创建了一个python 包来读取模拟注释。然后,创建了一个单独的python 包来处理运行 RoboMagellan 竞赛运行的机制(例如产卵锥、测量经过的时间等)。为了开发此功能,需要向引擎添加一些功能,例如生成对象的API 或将 XYZ 点转换为 GPS 航路点的 API 。最后将整个项目打包上传到GitHub进行发布。这是在新模拟器中运行的简短比赛的 GIF(注意:视频在 youtube 上重播时似乎有点颗粒感)!
3、其他思路
使用游戏引擎模拟机器人肯定会带来介绍中描述的好处。但是,在选择此选项时应考虑一些注意事项:
- 游戏引擎的组件是为视频游戏设计的。. 这似乎很明显,但当机器人模拟的目标与视频游戏的目标不同时,就会成为一个问题。物理引擎设计中的一个很好的例子。通常,视频游戏物理引擎旨在产生具有出色性能的合格物理。这允许游戏在低端设备上运行。对于机器人模拟,你通常需要非常精确地模拟复杂的物理约束,而普通物理引擎无法很好地处理这些约束。这将产生一个没有简单解决方案的问题。另一个例子是渲染引擎——它们旨在以合理的帧速率(例如 60 FPS)生成漂亮的图形。然而,对于许多机器学习应用程序,你更喜欢高帧率的可通过图形,从而减少训练时间。来自 Facebook AI Research (FAIR)的 Habitat-Sim 展示了后面这种方法是如何实现的。
- 虽然资产可用,但不太可能不需要完成手动设计工作。. 至少,需要开发一种注释策略。通常,可能需要开发自定义地图才能正确模拟适当的场景。“下载和插入”的承诺在实践中似乎并没有得到很好的支持。
- 开发模拟最困难和最昂贵的部分不是代码,而是技术资产。. 好的技术艺术来之不易,设计也不容易。为了开发这些资产,需要掌握各种工具,例如blender 等。Unreal Store 或TurboSquid等网站上的免费资源通常无法用于高质量的模拟。这与大多数其他软件项目不同,其中大部分开发时间都花在编写代码上。
- 投资一台好电脑。虚幻引擎非常耗费资源。大部分开发时间都花在了编译着色器和编译代码上,即使是在高端台式机上也是如此。
4、结束语
在这篇文章中,我们利用虚幻引擎和 UrdfSim 为 SRS RoboMagellan 竞赛创建了一个模拟程序。尽管最初的意图是重新打包现有资产,但最终开发了一个自定义地图,将用于在本博客中探索机器人技术的未来概念。在开发过程中,发现了一些注意事项,说明为什么使用游戏引擎开发机器人模拟并不是没有缺点的捷径。
下载链接如下:
- UrdfSim:基于 UE4 的机器人模拟插件的代码。这可以编译到自定义地图中以创建自己的场景。
- 三桥注释虚幻地图:为机器人模拟明确构建的自定义地图。它与 UrdfSim 一起预先打包。有关如何下载地图、运行模拟和使用注释的信息,请查看自述文件
- RoboMagellan Orchestrator:这个 python 脚本处理运行 robomagellan 竞赛运行的机制。它允许您确定性或随机地为每个航点设置生成点,并将根据比赛规则监控和运行模拟(例如生成机器人,让它运行一段时间,记录航点何时达到,并计算最终分数)。考虑到兴趣,这甚至可以用来创建比赛的“虚拟”版本,这可以让那些没有能力制造机器人的人有机会参加比赛。
原文链接:Using Unreal For Robotic Simulation
BimAnt翻译整理,转载请标明出处