多智能体强化学习仿真环境Unreal Engine和Unity3D

AirSim多智能体强化学习仿真环境Unreal Engine和Unity3D

  • 选择多智能体强化学习仿真平台的准则
  • Unreal Engine与AirSim的关系
  • AirSim与Python之间的通信
  • Airsim无人机的仿真效果
  • Unity3D与ml-agents

参考教程https://www.zhihu.com/column/multiUAV

选择多智能体强化学习仿真平台的准则

仿真有一个优势就是能比现实世界更快,我们可以通过设置帧率等参数来实现快速训练。多智体仿真环境需要支持多智能体,能拥有良好的物理引擎和环境渲染,多视角观察而不是只有第一人称视角,能构建复杂层级性任务,这些都是为了缩小reality-gap。训练数据收集方便,拥有与Python连接的API,多智能体的创建和控制比较灵活。目前满足这些要求的就有支持多玩家的游戏引擎,如Unreal Engine和Unity3D。

Unreal Engine与AirSim的关系

Unreal Engine通常与Airsim配合使用,作为无人机,无人车的仿真环境。Unreal Engine是一个3D游戏引擎,AirSim是微软开发的一个仿真平台,可以仿真无人车,无人机。用法是把Airsim放在UE虚拟引擎中作为插件,可以方便人们在虚拟场景中添加无人车,无人机等。有了这些对象,我们就要想办法控制这些对象,Airsim提供了API接口,可以方便Python,c++对这些无人机或无人车进行控制。其实就是其他语言脚本中插入对应airsim的扩展包,调用控制无人机姿态,速度等函数。

AirSim与Python之间的通信

小字部分引用自win10配置airsim仿真环境(2021.8.12更新),https://zhuanlan.zhihu.com/p/267321662

AirSim API 使用的是 TCP/IP 中的 msgpack-rpc 协议,这是一种网络通信协议,所以如果设置正确,其实可以用两台不同的电脑来做仿真,一台跑 AirSim 和 Unreal,另一台跑 python程序。

当 AirSim 开始仿真的时候,会打开 41451 端口,并监听这个端口的需求。python 程序使用 msgpack serialization 格式向这个端口发送 RPC 包,就可以与AirSim进行通信了。如果你的计算机的41451 端口已经被其他程序使用了,那么可以通过 settings 文件改变AirSim使用的端口号。

使用这种网络通信协议的方式,可以将 AirSim 和 python程序隔离,互不干扰。所以不需要修改 AirSim 的任何源代码,就可以满足非常多的仿真需求;而且即使python程序中断了,AirSim 的仿真也可以继续进行。

关于rpc的类似于protobuf序列化再反序列化,和zmq类似的传递消息。
多智能体强化学习仿真环境Unreal Engine和Unity3D_第1张图片

多智能体强化学习仿真环境Unreal Engine和Unity3D_第2张图片

Airsim无人机的仿真效果

多智能体强化学习仿真环境Unreal Engine和Unity3D_第3张图片
图片来着Airsim的论文,场景是Unreal Engine渲染出来的,无人机是Airsim插件提供的。
如果你对无人机样式,环境没什么要求的话,就不再需要去学习无人机,环境的建模,直接验证你的算法,当然还是需要学习接口API的。
无人机自带了五个相机分别是:小字部分转自博主「南乔枝6060」-AirSim 无人机模式----修改相机位置及角度

编号0 = front_center
编号1 = front_right
编号2 = front_left
编号3 = bottom_center
编号4 = back_center

每个相机都对应五种状态(黑白景深,彩色目标分割,正常图像用的较多)

“depth”: airsim.ImageType.DepthVis, 黑白景深图像
“segmentation”: airsim.ImageType.Segmentation, 彩色目标分割图像
“seg”: airsim.ImageType.Segmentation, 彩色目标分割图像
“scene”: airsim.ImageType.Scene, 正常图像
“disparity”: airsim.ImageType.DisparityNormalized
“normals”: airsim.ImageType.SurfaceNormals

Unity3D与ml-agents

Unity3D也是目前比较火的一个实时3D拓展平台,由渲染和物理引擎组成,它不仅可以用来做游戏,还能用于建筑,汽车,电影行业的建模。Unity Engine 拥有高保真图形渲染效果,支持预渲染和实时光照,能通过编程或者可视化的界面来操作unity里面的物体以及其对应的组件。目前已有Unity-ml-agent toolkit可以像Airsim一样利用5004端口完成python与unity3D的通信。这个插件目前是依靠pytorch,里面也提供了ppo,sac等算法和多个强化学习的仿真环境,具体可以看这里–>https://github.com/Unity-Technologies/ml-agents。
多智能体强化学习仿真环境Unreal Engine和Unity3D_第4张图片

这是用ppo训练3DBall的截图。

你可能感兴趣的:(unity,虚幻,3d)