AirSim学习(1)-介绍,安装,unity测试

2023-05-16

home

AirSim是一款基于虚幻引擎的无人机、汽车等模拟器(我们现在也有一个实验性的Unity版本)。它是开源的,跨平台的,支持使用流行的飞行控制器(如PX4和ArduPilot)进行软件在环模拟,并支持使用PX4进行物理和视觉逼真模拟的硬件在环模拟。它是作为一个虚幻插件开发的,可以简单地放入任何虚幻环境中。类似地,我们有一个Unity插件的实验版本。

我们的目标是将AirSim开发为人工智能研究的平台,以试验用于自动驾驶汽车的深度学习、计算机视觉和强化学习算法。为此,AirSim还公开了api,以平台独立的方式检索数据和控制车辆。

build环境

window(其他不做说明)

一、安装虚幻引擎,确保4.27为当前版本。

二、安装AirSim

  • 安装Visual Studio 2022。确保选择Desktop Development with c++ and Windows 10 SDK 10.0.19041(默认选择),并在安装VS 2022时,在“个别组件”选项卡下选择最新的.NET Framework SDK
  • 启动 Developer Command Prompt for VS 2022
  • 克隆repo: git克隆https://github.com/Microsoft/AirSim.git,通过cd AirSim进入AirSim目录

注意:在C盘中安装AirSim通常不是一个好主意。这可能会导致脚本失败,并且需要在管理模式下运行VS。相反,克隆在不同的驱动器,如D或E。

  • 运行在cmd命令行build.cmd。这将在unreal\Plugins 文件夹下创建项目所需文件
    在这里插入图片描述

三、创建虚幻项目

最后,您将需要一个虚幻项目,为您的工具托管环境。在构建你的第一个环境之前,如果你还没有这样做,请确保关闭并重新打开虚幻引擎和Epic Games启动器。重新启动Epic Games启动器后,它会要求您将项目文件扩展名与虚幻引擎关联,单击“立即修复”来修复它。AirSim有一个内置的“块环境”,你可以使用,或者你可以创建自己的。

四创建远程控制

如果你想手动飞行就需要一个远程控制,远程控制设置细节:

当然,你也可以使用api进行编程控制,或者使用所谓的计算机视觉模式来使用键盘移动。

1.RC设置默认配置

默认情况下,AirSim使用simple_flight作为它的飞行控制器,它通过USB端口连接到RC到你的电脑。

注意:简单飞行模式 是AirSim 有一个名为 simple_flight 的内置飞行控制器,它是默认使用的。您无需执行任何操作即可使用或配置它。AirSim 还支持PX4作为高级用户的另一个飞行控制器。未来,我们还计划支持ROSFlight和Hackflight。

详细说明及配置见:https://microsoft.github.io/AirSim/simple_flight/
你可以使用XBox控制器或FrSky Taranis X9D Plus。注意XBox 360的控制器不够精确,如果你想要更多真实世界的体验,不建议使用。

2. AirSim Api(使用遥控器条件不允许时)

AirSim 公开 API,因此您可以通过编程方式与模拟中的车辆进行交互。您可以使用这些 API 来检索图像、获取状态、控制车辆等。
注意:对于汽车官方文档中只有汽车的键盘控制,没有飞机键盘控制,如果想要飞机被控制,只能自己写套控制触发脚本,或者使用他给的python或者c++的api控制,进行模拟飞行。

主要介绍:Python方式

要求安装Anaconda 和Python 3.5 以上版本

在创建的虚拟环境下,安装两个库(或者在cmd进入虚拟环境中使用pip安装或者在pycharm引擎中安装)

pip install msgpack-rpc-python

pip install airsim

创建虚拟环境的过程可见虚拟环境创建文章
控制car的python脚本:

# ready to run example: PythonClient/car/hello_car.py
import airsim
import time

# connect to the AirSim simulator
client = airsim.CarClient()
client.confirmConnection()
client.enableApiControl(True)
car_controls = airsim.CarControls()

while True:
    # get state of the car
    car_state = client.getCarState()
    print("Speed %d, Gear %d" % (car_state.speed, car_state.gear))

    # set the controls for car
    car_controls.throttle = 1
    car_controls.steering = 1
    client.setCarControls(car_controls)

    # let car drive a bit
    time.sleep(1)

    # get camera images from the car
    responses = client.simGetImages([
        airsim.ImageRequest(0, airsim.ImageType.DepthVis),
        airsim.ImageRequest(1, airsim.ImageType.DepthPlanar, True)])
    print('Retrieved images: %d', len(responses))

    # do something with images
    for response in responses:
        if response.pixels_as_float:
            print("Type %d, size %d" % (response.image_type, len(response.image_data_float)))
            airsim.write_pfm('py1.pfm', airsim.get_pfm_array(response))
        else:
            print("Type %d, size %d" % (response.image_type, len(response.image_data_uint8)))
            airsim.write_file('py1.png', response.image_data_uint8)

控制模拟四旋翼飞行器

# ready to run example: PythonClient/multirotor/hello_drone.py
import airsim
import os

# connect to the AirSim simulator
client = airsim.MultirotorClient()
client.confirmConnection()
client.enableApiControl(True)
client.armDisarm(True)

# Async methods returns Future. Call join() to wait for task to complete.
client.takeoffAsync().join()
client.moveToPositionAsync(-10, 10, -10, 5).join()

# take images
responses = client.simGetImages([
    airsim.ImageRequest("0", airsim.ImageType.DepthVis),
    airsim.ImageRequest("1", airsim.ImageType.DepthPlanar, True)])
print('Retrieved images: %d', len(responses))

# do something with the images
for response in responses:
    if response.pixels_as_float:
        print("Type %d, size %d" % (response.image_type, len(response.image_data_float)))
        airsim.write_pfm(os.path.normpath('/temp/py1.pfm'), airsim.get_pfm_array(response))
    else:
        print("Type %d, size %d" % (response.image_type, len(response.image_data_uint8)))
        airsim.write_file(os.path.normpath('/temp/py1.png'), response.image_data_uint8)

五.在运行ue4或者unity插件后进行基本场景测试:

在这里插入图片描述

  • 点击play

  • 运行pycharm中的hello car.py模拟文件

-ue4或者unity中选择car,即可观察汽车被程序所控制
在这里插入图片描述

同理飞机的效果图如图:
在这里插入图片描述

注意:hello_drone代码部分卡在airsim.wait_key(‘Press any key to takeoff’) 在pycharm中无法触发,需要进行如下图的配置,才能在run界面触发。
在这里插入图片描述在这里插入图片描述
c++方式:略
总体官方案例能跑起来就是完成了第一步。
接下来会有很多章,来记录和解决诸多问题(此处主要用unity作为前端模拟器,ue后期转换问题会有统计)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

AirSim学习(1)-介绍,安装,unity测试 的相关文章

  • Unity3D之Rigidbody

    目录 常用的Rigidbody属性和方法 rigidbody AddForce rigidbody AddTorque rigidbody velocity rigidbody angularVelocity rigidbody Sleep
  • 蒙特卡洛积分、重要性采样、低差异序列

    渲染公式 渲染的目标在于计算周围环境的光线有多少从表面像素点反射到相机视口中 要计算总的反射光 每个入射方向的贡献 必须将他们在半球上相加 为入射光线 与法线 的夹角 为方便计算可以使用法线向量和入射向量 单位化 的乘积表示 对于基于图像的
  • unity制作一个可以自由滑动收缩的历史记录功能。

    公司在做一款模拟经营类的卖车游戏 需要一个简单的历史记录功能 放在左上角 记录最近20条的收入 支出记录 超过2秒不动则收起 收起时展示最近的一个消息记录 用到的组件是ScrollView 使用方法可以参考我写过的一篇博客 ScrollVi
  • Unity中级客户端开发工程师的进阶之路

    上期UWA技能成长系统之 Unity高级客户端开发工程师的进阶之路 得到了很多Unity开发者的肯定 通过系统的学习 可以掌握游戏性能瓶颈定位的方法和常见的CPU GPU 内存相关的性能优化方法 UWA技能成长系统是UWA根据学员的职业发展
  • FBX导入Unity中模型没有材质的处理

    一 3dMax导出FBX时的注意事项 导出时 确保maps文件存在 里面放着fbx用到的image 二 在Unity中的设置 1 文件拖入Unity的Assets文件夹中 2 查看模型的材质是否存在 如下所示 材质为None 此时拖入sce
  • Unity中按钮检测鼠标状态

    改方法主要是用于按钮检测鼠标的进入 滑出 点击 抬起 长按 长按停止 1 先将下面这个脚本挂载到需要检测鼠标状态的按钮上 using System Collections using System Collections Generic u
  • Unity中实现倒计时的几种方式

    1 Time time using UnityEngine public class TimeTest MonoBehaviour public float secound 10 void Update Timing private flo
  • Unity与Android的Back键冲突解决

    Unity与Android的Back键冲突解决 上一篇的最后留下了两个问题 Unity视图下横屏闪退 Unity视图下Android无法响应back返回上一activity 对于第一个问题 应该是Unity横屏下视图的某些设置跟Androi
  • GooglePlay提审警告(com.google.android.gms:play-services-safetynet:17.0.0)

    1 Goole在今年6月份出的新政策 不在使用safetynet 而使用Play Integrity API 2 项目本身没有使用过safetynet 3 使用了firebase 查阅资料 解决方案如下 implementation pla
  • unity中创建询问弹出窗口

    在开发过程中进程会遇到需要弹出一个窗口询问用户是否进行的操作 今天就来制作一个这样弹出窗口 然后根据弹出窗口的选择内容不同进行不同的操作 本例中主要是为了删除一个数据 而在删除数据操作前需要得到用户的一个确认操作 这里面主要用到了Notif
  • unity工程崩溃资源找回

    1 Unity死机未保存场景 当你在Unity中编辑场景 突然死机时 可以在项目文件目录中找到Temp文件夹 双击文件夹 找到 Backupscenes文件夹 把后缀为 backup的文件后缀改为 unity 然后拖进Unity的Proje
  • 【IMGUI】 各种辅助类 EditorGUIUtility、EditorUtility、GUIUtility、GUILayoutUtility

    EditorGUIUtility class in Editor 继承自 GUIUtility EditorGUI 的各种辅助程序 EditorGUIUtility currentViewWidth 我尝试打印了下这个值和position
  • Unity 键盘控制人物移动——之输入方式代码的编写

    键盘输入 控制人物移动 在我们制作游戏中最常见的需求之一就是使用键盘移动游戏角色 那么我们首先需要获取键盘输入 以下提供两种方法获取键盘 这里尽量通过截图解释让大家理解代码的含义 GetInput void FixedUpdate Move
  • unity3d切换场景Application.LoadLevel(1)含义

    Application LoadLevel 1 场景ID
  • Unity万向节死锁解决方案(2023/12/4)

    1 万向节死锁无法解决 这是因为它的特性就是如此 就像玻璃杯就是玻璃 这不可否认 别钻牛角尖昂 2 大多数情况下欧拉角足够用 例如 CF 摄像机不可能绕z轴旋转 x轴旋转也不会超过九十度 因为那样人物的腰子会被扭断 塔防游戏 保卫萝卜 吃鸡
  • unity3d image组件不显示

    需要将UI组件放到画布下面
  • 【Unity】运行时创建曲线(贝塞尔的运用)

    Unity 运行时创建线 贝塞尔的运用 1 实现的目标 在运行状态下创建一条可以使用贝塞尔方法实时编辑的网格曲线 2 原理介绍 2 1 曲线的创建 unity建立网格曲线可以参考 Unity程序化网格体 的实现方法 主要分为顶点 三角面 U
  • Unity学习笔记

    一 旋转欧拉角 四元数 Vector3 rotate new Vector3 0 30 0 Quaternion quaternion Quaternion identity quaternion Quaternion Euler rota
  • Unity中URP下的指数雾

    文章目录 前言 一 指数雾 雾效因子 1 FOG EXP 2 FOG EXP2 二 MixFog 1 ComputeFogIntensity 雾效强度计算 2 lerp fogColor fragColor fogIntensity 雾效颜
  • Unity中URP下的指数雾

    文章目录 前言 一 指数雾 雾效因子 1 FOG EXP 2 FOG EXP2 二 MixFog 1 ComputeFogIntensity 雾效强度计算 2 lerp fogColor fragColor fogIntensity 雾效颜

随机推荐

  • org.apache.catalina.LifecycleException: Protocol handler initialization failed

    JavaWeb项目中 xff0c 在测试Tomcat时总是会报出下面的异常 xff1a org apache catalina LifecycleException Protocol handler initialization faile
  • VS 2017 无法打开 kernel32.lib问题解决办法

    首先问题 是这样的 xff1a 我设置属性管理器 xff1a 配置Opencv xff0c 然后 xff0c 不知道怎么弄的 xff0c 出现这个问题 xff1a 出现这个问题 xff1a 我看了一下我的库目录 xff1a 是这样子的 xf
  • 程序员新人刚入职该怎么做?

    下面是从博客上找到的 xff0c 一个前辈对程序员新人如何快速融入到团队中给出的建议 自己作为新人需要仔细体会这些建议 xff0c 并将自己的一些感受添加到了下面 xff0c 同时 xff0c 记录这些建议和体会传递给需要帮助的人 1 解决
  • Java的Map中的map.keySet()方法

    该方法返回map中所有key值的列表 今天再代码中看到了Map集合中的HashMap的map keySet 方法 xff0c 首先看一下这个方法的定义 Returns a 64 link Set view of the keys conta
  • iOS集成七牛云(上传图片,视频,音频等文件)

    用的CocoaPods导入SDK platform ios 39 9 0 39 target 39 项目名 39 do pod 39 AFNetworking 39 pod 39 Qiniu 39 end 导入头文件 import lt Q
  • windows10 RDP 桌面远程 linux桌面 centos7 ghome

    windows系统桌面远程协议是RDP协议 xff0c 而linux的是VNC协议 xff0c 所以windows要远程Linux需要先安装XRDP协议 注 xff1a linux centos 系统不能是最小化安装 xff0c 需要有GN
  • 手把手教你获取x信本地数据库(利用Sqlcipher查看)

    最近一直在研究Xposed等一些hook框架 xff0c 进行学习做一些demo xff0c 这次就正好拿x信练练手 xff0c 学习学习 xff0c 也可以学习x信手机本地数据库的表结构设计等 好 xff0c 废话不多说 xff0c 直接
  • netperf使用笔记

    一 netperf是什么 netperf是一个基于client server模式的网络测试工具 xff0c 可以测量TCP和UDP传输的吞吐量 时延 CPU占用率等性能参数 它可以测试以下几种模式的TCP核UDP网络性能 xff1a TCP
  • 程序的几种常用格式文件

    span class hljs keyword int span span class hljs keyword global span span class hljs keyword int span calculate span cla
  • 2020年北航计算机学院面向对象第一单元总结

    文章目录 一 基于度量来分析自己的程序结构第一次作业第二次作业第三次作业 二 分析自己程序的bug三 分析自己发现别人程序bug所采用的策略四 应用对象创建模式来重构五 对比和心得体会 一 基于度量来分析自己的程序结构 第一次作业 第一次作
  • keil调试模式下能运行 烧录到板子中不能运行

    一 程序中使用了printf函数 1 现象 在debug模式下可以运行 xff0c 脱离debug模式无法运行 2 原因 在程序中使用了printf函数 xff0c 但是却没有包含keil的微库 xff0c 或者对于printf函数没有进行
  • 洛谷P4180 次小生成树学习

    题目链接 BJWC2010 严格次小生成树 洛谷 严格次小生成树是指第二小的生成树 总的思路是先求最小生成树 xff08 设最小生成树的总花费sum xff09 xff0c 把每条边都标记 xff0c 再遍历没被标记的边 xff0c 此时这
  • Codeforces 758D 贪心

    Ability To Convert time limit per test 1 second memory limit per test 256 megabytes input standard input output standard
  • Docker入门

    官网地址 概述 场景1 xff1a 不同语言开发的应用程序部署到同一操作系统上 xff0c 往往操作系统需要根据相应的语言来配置 xff0c 如果配置发生冲突就无法完成部署 这时候我们需要对这2个应用进行隔离 xff0c 使它们运行所依赖的
  • Debian11系统安装

    下载 下载地址 VMware创建虚拟机 1 Host only模式 xff1a 所有虚拟机可以相互访问 xff0c 但和真实的物理网络环境是隔离开的 xff0c 此模式下的IP信息是由host only虚拟网络的DHCP服务器来分配的 xf
  • Debian11之Jdk安装

    参考这里
  • Debian11之 Containerd1.7.x 安装及配置

    官网 介绍 1 K8S发布的CRI xff08 Container Runtime Interface xff09 统一了容器运行时接口 xff0c 凡是支持CRI的容器运行时的皆可作为K8S的底层容器运行时 xff0c 而Docker 没
  • Debian11之基于kubeadm安装K8S(v1.26.0) 集群

    硬件要求 1 Master主机 xff1a 2核CPU 4G内存 20G硬盘 2 Node主机 xff1a 4 43 核CPU 8G 43 内存 40G 43 硬盘 2 集群中的所有机器的网络彼此均能相互连接 xff08 公网和内网都可以
  • Debian11之Rancher2.7.x安装

    前言 Rancher 是一个为开源容器打造的容器管理平台 Kubernetes 管理工具 xff0c 使得开发者可以随处运行 Kubernetes xff08 Run Kubernetes Everywhere xff09 xff0c 满足
  • AirSim学习(1)-介绍,安装,unity测试

    home AirSim是一款基于虚幻引擎的无人机 汽车等模拟器 我们现在也有一个实验性的Unity版本 它是开源的 xff0c 跨平台的 xff0c 支持使用流行的飞行控制器 如PX4和ArduPilot 进行软件在环模拟 xff0c 并支