【AirSim】脚本控制无人机
目标一、运行示例程序1
Blocks.sln
操作:AirSim安装
参考博客【Windows 10】AirSim基础配置 (v1.3.1 + Visual Studio 2019 + UE 4.24)
安装过程中,遇到2个问题:
“Eigen/Dense”: No such file or directory
解决:下载eigen,复制其中的Eigen文件夹到相应目录;见github中相应的Issuse。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个问题:
- AirSim运行
HelloDrone.py
依赖哪些包;
msgpack-rpc-python
,matplotlib
,opencv-python
- 命令行报错
pip不是内部或外部命令,也不是可运行的程序或批处理文件
解决:在环境变量
的PATH
中,添加python和pip的路径,如D:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\python.exe
和D:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\Scripts
备注:
- 先启动UE4并打开项目
Blocks
,然后在VS2019运行HelloDrone.py
,程序会与UE4进行ConfirmConnection
,并控制四旋翼执行相应的运动。 - 决定使用python编写后续算法。
有待明确的点:
- 尝试在
添加python环境
中,创建了conda环境
,但是未能成功搜索到msgpack-rpc-python
;
感觉原因出在,该新建的conda环境
无法使用pip install
安装第三方库? - 新建的
conda环境
如何删除?目前在C:\Users\HP\.conda\envs\airsimenv37
路径。 - 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
中定义的三个类:
- 程序运行结果
程序运行过程中,在窗口输出的结果,以截图的形式在附录部分展示。
目标四、可视化
可视化的详细描述:
- 绘制出四旋翼的飞行运动轨迹,保存为图片;
目标五、四旋翼程序控制
程序控制的详细描述:
- 通过阅读AirSim提供的官网文档,明确用户可使用的四旋翼程序控制API,并梳理为表格;
附录
HelloDrone.py
程序运行的部分结果展示:
【AirSim】脚本控制无人机相关推荐
- ue4和Airsim仿真无人机,键盘控制无人机运动
代码 #键盘测试 import keyboard import airsimclient = airsim.MultirotorClient() client.confirmConnection()d ...
- Java控制无人机程序_深入了解ROS之编写无人机控制程序包
深入了解ROS之编写无人机控制程序包 这篇教程来详细介绍一下如何编写出一个控制无人机的ROS程序包 编写ROS程序包推荐roboware-studio,这款软件是在开源的vscode基础上二次开发,用 ...
- [Unity][ShaderGraph][FlowCanvas] SetFloat 无效:通过脚本控制 shader 的动态参数时需要使用参数的引用名
我的 shader 很简单,就是一个 tiling and offset 制作滚动效果 然后我想用一个脚本控制 speed 但是实际运行没有起效果 一开始我看的这个,然后用的 sharedmateri ...
- html列自动变高,HTML_CSS三行三列DIV高度自适应的设置,用脚本控制三行三列div高度自 - phpStudy...
CSS三行三列DIV高度自适应的设置 用脚本控制三行三列div高度自适应的设置方法,其实不必如此麻烦,只要给父div设置一个固定高度,比如10px,其子div的height:100%就可实现高度自适应 ...
- 【安卓】电脑执行脚本控制安卓手机
电脑执行脚本控制安卓手机 一.通过安卓的ADB(需要会安卓开发) 二.Total Control(推荐/简单) http://tc.sigma-rt.com.cn/index.php 三.待补充
- 小米登录协议分析_小米智能家居设备流量分析及脚本控制
原标题:小米智能家居设备流量分析及脚本控制 *本文作者:scu-igroup,本文属 FreeBuf 原创奖励计划,未经许可禁止转载. 前言 万物互联的时代即将来临,而现阶段,我们能感触到的,当属智能 ...
- ros机器人编程实践(7)- turtlebot3仿真与脚本控制!!!史上最全,入门最简
文章目录 前言 (1)创建工作区以及包 创建wanderbot_ws工作区 创建wanderbot包 (2)安装过程 安装turtlebot3以及仿真环境 安装gmapping包 编译 (3)仿真 准 ...
- Unity视频播放的脚本控制
本文在完成基于VideoPlayer组件的视频播放基础上再加上脚本控制,实现对视频播放的切换.暂停及继续播放功能. 视频播放的准备工作可参考我的博文:https://blog.csdn.net/cs8 ...
- TIA博途WinCC PRO中通过脚本控制图层的显示和隐藏
TIA 博途WinCC PRO中通过脚本控制图层的显示和隐藏 WinCC Professional 项目中,可以使用脚本来控制画面上某个层的隐藏和显示,一旦设置该层隐藏,那么层中的对象也将隐藏,显示同 ...
最新文章
- Hash索引和B+树索引
- mysql数据库一些可能会用到的命令
- Python中用dict统计列表中元素出现的次数
- 几款开源的图形化Redis客户端管理软件推荐
- vs2005添加live555工程
- Jupiter黑客松——IPFS开发者大赛火热报名中!
- MySQL中采用类型varchar(20)和varchar(255)对性能上的影响
- flume package遇到的问题
- 利用Vivado封装DCP文件基本流程
- 多态(Polymoph)
- 理工大学统考计算机在线作业,北京理工在线作业-现代远程学习技术-20210417121542.pdf-原创力文档...
- POJ NOI0105-33 计算分数加减表达式的值
- 死锁示例代码_Java示例中的死锁
- java+cache使用方法_JVM代码缓存区CodeCache原理及用法解析
- [LeetCode] Reverse Linked List 倒置链表
- Unix/Linux环境C编程入门教程(24) MySQL 5.7.4 for Red Hat Enterprise 7(RHEL7)的安装
- 关系数据库理论:范式判断、函数依赖、无损分解、正则覆盖
- SQL SERVER STATISTICS
- 赶紧学会--特别好玩的系统小游戏
- Spring框架——基于xml文件的相关配置
热门文章
- 【Python技能树共建】python selectolax 模块
- 快速生成 MySQL 数据库关系图
- Visual Studio 2017 设定包含目录和库目录(对所有项目有效)
- 【炒鸡萌新向】关于C语言头文件的解释
- Anaconda+spyder安装教程
- Unity Shader ASE——输出面板详情
- uni-app上传图片遇到TypeError: e.split is not a function at view.umd.min.js:1
- 喝啤酒喝出的数学问题
- 前端模块化iife、CJS、AMD、UMD、ESM的区别
- 晶体结构与对称群Lecture0