目标一、运行示例程序1

Blocks.sln

操作:AirSim安装

参考博客【Windows 10】AirSim基础配置 (v1.3.1 + Visual Studio 2019 + UE 4.24)
安装过程中,遇到2个问题:

  1. “Eigen/Dense”: No such file or directory
    解决:下载eigen,复制其中的Eigen文件夹到相应目录;见github中相应的Issuse。
  2. Install a version of .NET Framework SDK at 4.6.0 or higher.
    解决:启动VS的Installer,选择相应的组件安装。

备注:

  • F5运行示例程序后,UE4自动打开。
  • 遇到新问题时,多查阅AirSim的wiki和Issuse。


目标二、运行实例程序2

HelloDrone.py

操作:安装依赖包,配置python环境

通过管理python程序包完成依赖包的安装。安装过程中,遇到的1个问题:

  1. AirSim运行HelloDrone.py依赖哪些包;
    msgpack-rpc-python, matplotlib, opencv-python
  2. 命令行报错pip不是内部或外部命令,也不是可运行的程序或批处理文件
    解决:在环境变量PATH中,添加python和pip的路径,如D:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\python.exeD:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\Scripts

备注:

  • 先启动UE4并打开项目Blocks,然后在VS2019运行HelloDrone.py,程序会与UE4进行ConfirmConnection,并控制四旋翼执行相应的运动。
  • 决定使用python编写后续算法。

有待明确的点:

  1. 尝试在添加python环境中,创建了conda环境,但是未能成功搜索到msgpack-rpc-python
    感觉原因出在,该新建的conda环境无法使用pip install安装第三方库?
  2. 新建的conda环境如何删除?目前在C:\Users\HP\.conda\envs\airsimenv37路径。
  3. Microsoft VS2019 官方文档>>管理python环境


目标三、梳理HelloDrone.py中的程序控制

约90行,梳理其中关键函数的功能、参数及使用,建立一个初步的印象。

操作:

行号 代码 功能、参数
11 client = airsim.MultirotorClient() 实例化一个类对象
12 client.confirmConnection() 确认连接
13 client.enableApiControl(True) 使能API控制
14 client.armDisarm(True) arm表示什么?
16 state = client.getMultirotorState() 获取四旋翼状态
20 imu_data = client.getImuData() 获取IMU的数据
24 barometer_data = client.getBarometerData() 获取气压表数据
28 magnetometer_data = client.getMagnetometerData() 获取磁力计数据
32 gps_data = client.getGpsData() 获取GPS数据
36 airsim.wait_key('Press any key to takeoff') airsim模块的函数
37 client.takeoffAsync().join() 有待细看
43 client.moveToPositionAsync(-10, 10, -10, 5).join() 有待细看
45 client.hoverAsync().join()
52 responses = client.simGetImages([...]) 获取图像
59 tmp_dir = os.path.join(tempfile.gettempdir(), "airsim_drone") 图片保存的位置
69 filename = os.path.join(tmp_dir, str(idx)) 生成路径
71 if response.pixels_as_float: 判断图片类型
73 airsim.write_pfm(os.path.normpath
(filename + '.pfm'), airsim.get_pfm_array(response))
存储pfm图片
74 elif response.compress: #png format 判断图片类型
76 airsim.write_file(os.path.normpath(filename + '.png'),
response.image_data_uint8)
压缩png格式
77 else: #uncompressed array 无压缩png格式
处理见代码
85 client.armDisarm(False) disarm何意?
86 client.reset() 重置为初始状态
89 client.enableApiControl(False) 关闭使能

备注:

  • 明确armDisarm()的含义;
  • 明确***Async().join()的含义;
  • airsim.py中的全部代码:
from .client import *
from .utils import *
from .types import *
  • client.py中定义的三个类:
  • 程序运行结果
    程序运行过程中,在窗口输出的结果,以截图的形式在附录部分展示。


目标四、可视化

可视化的详细描述:

  1. 绘制出四旋翼的飞行运动轨迹,保存为图片;


目标五、四旋翼程序控制

程序控制的详细描述:

  1. 通过阅读AirSim提供的官网文档,明确用户可使用的四旋翼程序控制API,并梳理为表格;


附录

  • HelloDrone.py程序运行的部分结果展示:


【AirSim】脚本控制无人机相关推荐

  1. ue4和Airsim仿真无人机,键盘控制无人机运动

    代码 #键盘测试 import keyboard import airsimclient = airsim.MultirotorClient() client.confirmConnection()d ...

  2. Java控制无人机程序_深入了解ROS之编写无人机控制程序包

    深入了解ROS之编写无人机控制程序包 这篇教程来详细介绍一下如何编写出一个控制无人机的ROS程序包 编写ROS程序包推荐roboware-studio,这款软件是在开源的vscode基础上二次开发,用 ...

  3. [Unity][ShaderGraph][FlowCanvas] SetFloat 无效:通过脚本控制 shader 的动态参数时需要使用参数的引用名

    我的 shader 很简单,就是一个 tiling and offset 制作滚动效果 然后我想用一个脚本控制 speed 但是实际运行没有起效果 一开始我看的这个,然后用的 sharedmateri ...

  4. html列自动变高,HTML_CSS三行三列DIV高度自适应的设置,用脚本控制三行三列div高度自 - phpStudy...

    CSS三行三列DIV高度自适应的设置 用脚本控制三行三列div高度自适应的设置方法,其实不必如此麻烦,只要给父div设置一个固定高度,比如10px,其子div的height:100%就可实现高度自适应 ...

  5. 【安卓】电脑执行脚本控制安卓手机

    电脑执行脚本控制安卓手机 一.通过安卓的ADB(需要会安卓开发) 二.Total Control(推荐/简单) http://tc.sigma-rt.com.cn/index.php 三.待补充

  6. 小米登录协议分析_小米智能家居设备流量分析及脚本控制

    原标题:小米智能家居设备流量分析及脚本控制 *本文作者:scu-igroup,本文属 FreeBuf 原创奖励计划,未经许可禁止转载. 前言 万物互联的时代即将来临,而现阶段,我们能感触到的,当属智能 ...

  7. ros机器人编程实践(7)- turtlebot3仿真与脚本控制!!!史上最全,入门最简

    文章目录 前言 (1)创建工作区以及包 创建wanderbot_ws工作区 创建wanderbot包 (2)安装过程 安装turtlebot3以及仿真环境 安装gmapping包 编译 (3)仿真 准 ...

  8. Unity视频播放的脚本控制

    本文在完成基于VideoPlayer组件的视频播放基础上再加上脚本控制,实现对视频播放的切换.暂停及继续播放功能. 视频播放的准备工作可参考我的博文:https://blog.csdn.net/cs8 ...

  9. TIA博途WinCC PRO中通过脚本控制图层的显示和隐藏

    TIA 博途WinCC PRO中通过脚本控制图层的显示和隐藏 WinCC Professional 项目中,可以使用脚本来控制画面上某个层的隐藏和显示,一旦设置该层隐藏,那么层中的对象也将隐藏,显示同 ...

最新文章

  1. Hash索引和B+树索引
  2. mysql数据库一些可能会用到的命令
  3. Python中用dict统计列表中元素出现的次数
  4. 几款开源的图形化Redis客户端管理软件推荐
  5. vs2005添加live555工程
  6. Jupiter黑客松——IPFS开发者大赛火热报名中!
  7. MySQL中采用类型varchar(20)和varchar(255)对性能上的影响
  8. flume package遇到的问题
  9. 利用Vivado封装DCP文件基本流程
  10. 多态(Polymoph)
  11. 理工大学统考计算机在线作业,北京理工在线作业-现代远程学习技术-20210417121542.pdf-原创力文档...
  12. POJ NOI0105-33 计算分数加减表达式的值
  13. 死锁示例代码_Java示例中的死锁
  14. java+cache使用方法_JVM代码缓存区CodeCache原理及用法解析
  15. [LeetCode] Reverse Linked List 倒置链表
  16. Unix/Linux环境C编程入门教程(24) MySQL 5.7.4 for Red Hat Enterprise 7(RHEL7)的安装
  17. 关系数据库理论:范式判断、函数依赖、无损分解、正则覆盖
  18. SQL SERVER STATISTICS
  19. 赶紧学会--特别好玩的系统小游戏
  20. Spring框架——基于xml文件的相关配置

热门文章

  1. 【Python技能树共建】python selectolax 模块
  2. 快速生成 MySQL 数据库关系图
  3. Visual Studio 2017 设定包含目录和库目录(对所有项目有效)
  4. 【炒鸡萌新向】关于C语言头文件的解释
  5. Anaconda+spyder安装教程
  6. Unity Shader ASE——输出面板详情
  7. uni-app上传图片遇到TypeError: e.split is not a function at view.umd.min.js:1
  8. 喝啤酒喝出的数学问题
  9. 前端模块化iife、CJS、AMD、UMD、ESM的区别
  10. 晶体结构与对称群Lecture0