Part1前言

airsim是微软开源的一款基于虚幻引擎的无人机、汽车的模拟器。可以使用主流的飞行控制器进行软件仿真模拟。其基于虚幻引擎插件开发,可以简单的放置在任意虚幻引擎场景中。本文主要对其使用和结构进行了简单研究。

Part2初次使用

我们可以直接下载虚幻引擎提供的编译好的场景,地址如下:

https://github.com/Microsoft/AirSim/releases

之后随便选择一个场景即可,这里选择了最小的场景。

通过启动命令,可以开启场景。

start CityEnviron -ResX=640 -ResY=480 -windowed

之后即可通过python代码对场景需要模拟的车辆进行模拟仿真。安装python环境。

pip install msgpack-rpc-python
pip install airsim

测试demo可以在github的下面地址找到。这里是车辆模拟的示例。

https://github.com/microsoft/AirSim/blob/main/PythonClient/car/hello_car.py

运行python hello_car.py即可控制车辆进行运行。

Part3python接口研究

python控制通过msgpack的rpc通信接口来进行。这里对无人机的demo进行研究,做一些简单的解释。连接无人机模拟器

client = airsim.MultirotorClient()
client.confirmConnection()
client.enableApiControl(True)

获取无人机的状态

state = client.getMultirotorState()

获取惯性数据,惯性测量单元(英文:Inertial measurement unit,简称IMU)是测量物体三轴姿态角(或角速率)以及加速度的装置。

imu_data = client.getImuData()

获取气压数据

barometer_data = client.getBarometerData()

获取磁场数据

magnetometer_data = client.getMagnetometerData()

获取gps数据

gps_data = client.getGpsData()

移动到指定位置

client.moveToPositionAsync(-10, 10, -10, 5).join()

悬停效果

client.hoverAsync().join()

回归原位

client.reset()
client.armDisarm(False)# that's enough fun for now. let's quit cleanly
client.enableApiControl(False)

Part4多个无人机模拟

airsim支持多个无人机的模拟操作。参考https://microsoft.github.io/AirSim/multi_vehicle/ 即通过配置文件即可生成多个无人机,然后通过名字进行控制。配置示例如下,保存为settings.json

{"SettingsVersion": 1.2,"SimMode": "Multirotor","Vehicles": {"Drone1": {"VehicleType": "SimpleFlight","X": 4, "Y": 0, "Z": -2,"Yaw": -180},"Drone2": {"VehicleType": "SimpleFlight","X": 8, "Y": 0, "Z": -2}}
}

启动的时候,需要指定配置文件

start MSBuild2018 -ResX=1280 -ResY=720 -windowed  -settings="settings.json"

Part5插件编译

如果需要更换场景,就需要自己编译插件,目前最新的版本,需要vs2022才能编译。

Note: Unreal 4.27 will auto-generate the .sln file targetting Visual Studio 2019. Visual Studio 2022 will be able to load and run this .sln, but if you want full Visual Studio 2022 support, you will need to explicitly enable support by going to 'Edit->Editor Preferences->Source Code' and selecting 'Visual Studio 2022' for the 'Source Code Editor' setting.

下载vs2022社区版https://visualstudio.microsoft.com/zh-hans/vs/安装内容如下 Install Visual Studio 2022. Make sure to select Desktop Development with C++ and Windows 10 SDK 10.0.19041 (should be selected by default) and select the latest .NET Framework SDK under the 'Individual Components' tab while installing VS 2022.

之后编译遇到了错误提示如下

CMake Error: Could not create named generator Visual Studio 17 2022

下载安装最新的cmake程序即可,下载路径https://cmake.org/download/

之后编译又遇到错误。原来UE4.27默认使用vs2019编译,但是我们的airsim只能vs2022编译,导致引用的库对不上了。解决方案如下:
尝试修改把依赖Airsim的都去掉,编辑器可以打开,然后修改 设置'Edit->Editor Preferences->Source Code' and selecting 'Visual Studio 2022' for the 'Source Code Editor' setting. 之后便可以完美编译

Part6rpc调用流程

针对无人机的初始化流程如下

rpc的调用流程如下

整个rpc调用其实有两种状态,一种是和无人机模拟没关系的调用,例如设置全局参数,如天气,风速等,通过ASimModeWorldMultiRotor类来处理。另外一类接口是处理无人机状态的,通过无人机的名称转到各自的无人机处理函数中,这里的rpc统一在MultirotoPawnSimApi进行管理。

Part7总结

本文主要介绍了airsim的功能以及源码编译以及rpc的调用流程。

Part8关于IN VETA

IN VETA是一支由建模、美术、UE5组成的年轻团队。

我们的开源项目:
https://github.com/inveta

我们致力于三维数字孪生技术分享与研发。
欢迎与各界朋友一起探讨技术与商务合作,一起推动数字孪生的发展。

airsim:体验在虚幻世界中“自由飞行”相关推荐

  1. 天才程序员的灵魂-现实与虚幻世界中的极客精神

    在我的上一篇文章中(不朽传奇-云计算技术背后的那些天才程序员:Qemu的作者法布里斯贝拉) 提到了Bellard是一个极具黑客气质的天才程序员,从某种意义上来说,只有黑客精神能完美阐述Bellard那 ...

  2. 在虚拟的世界中,自由、平等永远是真正的程序员永久的追求

    知乎上有人问:"一个人生前活的凄惨无比,但死后闻名于世.这样的名声意义何在?对他自己有什么意义吗?" 于是想起了 Philip Katz 的故事,我 2008 年写的第一篇博客就是 ...

  3. 《巫师 3:狂猎》:传统叙事在开放世界中的水土不服

    鉴于我并没有去关注当时<巫师3>的宣发过程(因为对于这个系列我是"出必入",所以没有关心宣发--),我对这个游戏所拥有的热度感到有点惊讶.我是从初代就开始玩起了,在二代 ...

  4. 数字世界中的纸张——理解 PDF (转载)

    转载自 https://type.cyhsu.xyz/2018/09/understanding-pdf-the-digitalized-paper/ 引言 PDF 是我们打交道最多的文件格式之一.提 ...

  5. 虚幻4 python_技术前瞻:虚幻引擎中的 Python

    原标题:技术前瞻:虚幻引擎中的 Python 在Autodesk University上,我们简单展示了最新的研究,它将解决CAD数据导入虚幻引擎这一复杂问题.这是Datasmith研发过程中的重大突 ...

  6. 修仙道轩辕仙剑java,第一卷 :仙剑世界中的黑化张四 089 仙道魔途

    转瞬之间,已到蜀山之巅,蜀门之前. 酒剑仙跳下葫芦,抿了一下嘴:"乖徒儿,你跟我去见掌门即可,两位姑娘在此稍等." 灵儿月如虽然不爽这怪老头,但人家本事摆那儿呢,这又是人家的地盘, ...

  7. 元宇宙开发:你在虚幻引擎中的第一个虚拟现实游戏

    了解如何开发零编程背景的Oculus Quest游戏 你会学到什么 为Oculus Quest构建应用程序 设计和开发虚拟现实游戏 在虚幻引擎中工作 使用材料和纹理 优化内容,实现移动和虚拟现实游戏的 ...

  8. 12个现实世界中的机器学习真相

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 作者:Delip 编译:ronghuaiyang 导读 当你在现实 ...

  9. 多云世界中的SD-WAN—Vecloud

    对于许多开始采用多云体系结构IT组织而言,SD-WAN已成为与云环境进行分支和边缘通信的主要入口.对于客户而言,关键是购买可检查所有可能路径的技术,然后直接从分支机构选择最佳运输选项以实现最佳性能.这 ...

最新文章

  1. (C++)1021 个位数统计
  2. 形势说变就变!机器学习工程师恐在十年内消失?
  3. spark spark streaming + kafka receiver方式消费消息
  4. nitrous.io mysql_云IDE:Nitrous.io的介绍以及活用手段
  5. 洛谷P3694 邦邦的大合唱
  6. 一篇文章教你学会Java基础JDBC
  7. 网络爬虫入门系列(3) httpClient
  8. 钉钉轻松顶住信息洪流的原因,竟然是它
  9. 网络编程释疑之:TCP协议的“流”特性
  10. C# 窗口全屏 隐藏任务栏 (代码)
  11. android基础知识之一
  12. go语言实战_字节跳动年薪50W抢Go开发人才,你还在问该不该学?
  13. hdu 3592 差分约束
  14. 微信多开软件(Java版)
  15. html海报源码,8款好用的Html5海报制作工具,让你一分钟做出风靡朋友圈海报
  16. 网络打印机拒绝访问,无法连接处理方法汇总
  17. phpstorm 报 expecting statement
  18. “不老时代”:细说nmn是什么产品?nmn功效与作用是真的吗?
  19. 静态函数只能调用静态变量
  20. 跟我一起从零学习安卓逆向分析

热门文章

  1. 基于LM334芯片的恒流源调试
  2. Android SearchView基本用法
  3. TSINGSEE车载监控平台的城市渣土车监管解决方案
  4. Vultr CentOS主机无法登录/循环登录/SSH拒绝连接以及使用Finnix恢复系统
  5. sql 数据库前两列值乘_SQL | SQL 必知必会笔记 (一 )
  6. 关于两个数相乘, 求其为多少进制
  7. 鸿蒙系统研究之五:替换 AOSP 预编译库,关闭 SELinux
  8. 在js中实现新窗口打开页面
  9. 多线程有几种实现方法?同步有几种实现方法
  10. CentOS之vim操作