博客地址:https://www.cnblogs.com/zylyehuo/

具体效果可以关注博主的小红书,上面有效果视频

起飞与降落

fly_up&down.py

import airsim

# 和 airsim 建立连接
client = airsim.MultirotorClient()
client.confirmConnection() # 使用 API 进行控制
client.enableApiControl(True) # 解锁
client.armDisarm(True) client.takeoffAsync().join()
client.landAsync().join() # 上锁
client.armDisarm(False) # 释放控制
client.enableApiControl(False)

位置控制

Position_Control.py

import airsim

client = airsim.MultirotorClient()
client.enableApiControl(True)
client.armDisarm(True)
client.takeoffAsync().join() client.moveToZAsync(-3, 1).join() # 以 1 m/s 的速度飞到 3m 高度 # 飞正方形
client.moveToPositionAsync(5, 0, -3, 1).join() # 以 1 m/s 的速度飞到 (5, 0, -3) 的位置
client.moveToPositionAsync(5, 5, -3, 1).join()
client.moveToPositionAsync(0, 5, -3, 1).join()
client.moveToPositionAsync(0, 0, -3, 1).join() client.landAsync().join()
client.armDisarm(False)
client.enableApiControl(False)

速度控制

Velocity_Control.py

import airsim
import time client = airsim.MultirotorClient() client.enableApiControl(True) client.armDisarm(True) client.takeoffAsync().join() client.moveToZAsync(-2, 1).join() # 以 1 m/s 的速度飞到 2m 高度 # 飞正方形
client.moveByVelocityZAsync(1, 0, -2, 8).join() # 以 1 m/s 的速度往前飞 8s
client.moveByVelocityZAsync(0, 1, -2, 8).join()
client.moveByVelocityZAsync(-1, 0, -2, 8).join()
client.moveByVelocityZAsync(0, -1, -2, 8).join() # 悬停 2 秒钟
client.hoverAsync().join()
time.sleep(2) client.landAsync().join()
client.armDisarm(False)
client.enableApiControl(False)

Pygame检测鼠标

pygame_鼠标.py

import pygame
import sys pygame.init()
screen = pygame.display.set_mode((640, 480))
pygame.display.set_caption('mouse control') # 设置屏幕标题
screen.fill((0, 0, 0)) # 用黑色填充屏幕 flag = 1 while flag:
for event in pygame.event.get():
if event.type == pygame.QUIT: # 点击窗口的关闭按钮 ×
sys.exit() if event.type == pygame.MOUSEBUTTONDOWN:
print("Mouse Down", event)
if event.type == pygame.MOUSEBUTTONUP:
print("Mouse Up", event)
if event.type == pygame.MOUSEMOTION:
print("Mouse is moving now: ", event) if event.type == pygame.KEYDOWN:
if event.key == pygame.K_ESCAPE:
print("Keyboard event: ", event)
flag = 0

Pygame检测键盘

pygame_键盘.py

import pygame
import sys pygame.init()
screen = pygame.display.set_mode((640, 480))
pygame.display.set_caption('keyboard control') # 设置屏幕标题
screen.fill((0, 0, 0)) # 用黑色填充屏幕 while True:
for event in pygame.event.get():
if event.type == pygame.QUIT: # 点击窗口的关闭按钮 ×
sys.exit() scan_wrapper = pygame.key.get_pressed()
print("pressed keys is : ", scan_wrapper) if scan_wrapper[pygame.K_ESCAPE]:
pygame.quit()
sys.exit()

Pygame检测26个英文字母和方向键

pygame_检测26个英文字母和上下左右.py

import pygame
import sys pygame.init()
screen = pygame.display.set_mode((640, 480))
pygame.display.set_caption('keyboard control') # 设置屏幕标题
screen.fill((0, 0, 0)) # 用黑色填充屏幕 while True:
for event in pygame.event.get():
if event.type == pygame.QUIT: # 点击窗口的关闭按钮 ×
sys.exit() keys = pygame.key.get_pressed()
for i in range(26):
if keys[pygame.K_a + i]:
print(chr(pygame.K_a + i)) if keys[pygame.K_UP]:
print("Up arrow")
if keys[pygame.K_DOWN]:
print("Down arrow")
if keys[pygame.K_LEFT]:
print("Left arrow")
if keys[pygame.K_RIGHT]:
print("Right arrow") if keys[pygame.K_ESCAPE]:
pygame.quit()
sys.exit()

使用键盘控制 Airsim 中的无人机运动

Control_AirSim_Drone_With_Keyboard.py

import sys
import time
import airsim
import pygame pygame.init()
screen = pygame.display.set_mode((320, 240))
pygame.display.set_caption('keyboard control') # 设置屏幕标题
screen.fill((0, 0, 0)) # 用黑色填充屏幕 vehicle_name = "Drone" # 和 settings 中的对应
AirSim_client = airsim.MultirotorClient()
AirSim_client.confirmConnection()
AirSim_client.enableApiControl(True, vehicle_name=vehicle_name)
AirSim_client.armDisarm(True, vehicle_name=vehicle_name)
AirSim_client.takeoffAsync(vehicle_name=vehicle_name).join() vehicle_velocity = 2.0 # 基础的控制速度 m/s
speed_up_ratio = 10.0 # 设置临时加速度比例
speed_up_flag = False # 用来设置临时加速
vehicle_yaw_rate = 5.0 # 基础的偏航速率 while True:
yaw_rate = 0.0
velocity_x = 0.0
velocity_y = 0.0
velocity_z = 0.0 time.sleep(0.02) for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit() scan_wrapper = pygame.key.get_pressed() # 按下空格键加速 10 倍
if scan_wrapper[pygame.K_SPACE]:
scale_ratio = speed_up_ratio
else:
scale_ratio = speed_up_ratio / speed_up_ratio # 根据 A 和 D 来设置偏航速率变量
if scan_wrapper[pygame.K_a] or scan_wrapper[pygame.K_d]:
yaw_rate = (scan_wrapper[pygame.K_d] - scan_wrapper[pygame.K_a]) * scale_ratio * vehicle_yaw_rate # 根据 UP 和 DOWN 来设置 pitch 轴速度变量 (NED 坐标系, x 为机头向前)
if scan_wrapper[pygame.K_UP] or scan_wrapper[pygame.K_DOWN]:
velocity_x = (scan_wrapper[pygame.K_UP] - scan_wrapper[pygame.K_DOWN]) * scale_ratio # 根据 LEFT 和 RIGHT 来设置 roll 轴速度变量 (NED 坐标系, y 为正右方)
if scan_wrapper[pygame.K_LEFT] or scan_wrapper[pygame.K_RIGHT]:
velocity_y = -(scan_wrapper[pygame.K_LEFT] - scan_wrapper[pygame.K_RIGHT]) * scale_ratio # 根据 W 和 S 来设置 Z 轴速度变量 (NED 坐标系, z 轴向上为负)
if scan_wrapper[pygame.K_w] or scan_wrapper[pygame.K_s]:
velocity_z = -(scan_wrapper[pygame.K_w] - scan_wrapper[pygame.K_s]) * scale_ratio # 设置速度控制以及设置偏航控制
AirSim_client.moveByVelocityBodyFrameAsync(vx=velocity_x, vy=velocity_y, vz=velocity_z,duration=0.02,
yaw_mode=airsim.YawMode(True, yaw_or_rate=yaw_rate),
vehicle_name=vehicle_name) if scan_wrapper[pygame.K_ESCAPE]:
pygame.quit()
sys.exit()
client.landAsync().join()
client.armDisarm(False)
client.enableApiControl(False)

AirSim基础使用【Python】的更多相关文章

  1. <-0基础学python.第一课->

    初衷:我电脑里面的歌曲很久没换了,我想听一下新的歌曲,把他们下载下来听,比如某个榜单的,但是一首一首的点击下载另存为真的很恶心 所以我想有没有办法通过程序的方式来实现,结果还真的有,而且网上已经有有人 ...

  2. 2017寒假零基础学习Python系列之 印子

    今日为2017年2月6日,据在慕课网上学习廖雪峰Python教程也快一周左右了,完全是零基础入门Python,大一上学期粗浅的接触学习了C语言,早就听说过Python语言的大名,又想把Python的爬 ...

  3. 二十一. Python基础(21)--Python基础(21)

    二十一. Python基础(21)--Python基础(21) 1 ● 类的命名空间 #对于类的静态属性:     #类.属性: 调用的就是类中的属性     #对象.属性: 先从自己的内存空间里找名 ...

  4. [零基础学python]为什么要开设本栏目

    这个栏目的名称叫做"零基础学Python". 如今网上已经有不少学习python的课程.当中也不乏精品.按理说,不缺少我这个基础类型的课程了.可是,我注意到一个问题.无论是课程还是 ...

  5. python爬虫-基础入门-python爬虫突破封锁

    python爬虫-基础入门-python爬虫突破封锁 >> 相关概念 >> request概念:是从客户端向服务器发出请求,包括用户提交的信息及客户端的一些信息.客户端可通过H ...

  6. D17——C语言基础学PYTHON

    C语言基础学习PYTHON——基础学习D17 20181014内容纲要: 1.jQuery介绍 2.jQuery功能介绍 (1)jQuery的引入方式 (2)选择器 (3)筛选 (4)文本操作 (5) ...

  7. D16——C语言基础学PYTHON

    C语言基础学习PYTHON——基础学习D16 20180927内容纲要: 1.JavaScript介绍 2.JavaScript功能介绍 3.JavaScript变量 4.Dom操作 a.获取标签 b ...

  8. D15——C语言基础学PYTHON

    C语言基础学习PYTHON——基础学习D15 20180926内容纲要: 1.CSS介绍 2.CSS的四种引入方式 3.CSS选择器 4.CSS常用属性 5.小结 6.练习 1 CSS介绍 层叠样式表 ...

  9. D14——C语言基础学PYTHON

    C语言基础学习PYTHON——基础学习D14 20180919内容纲要: 1.html认识 2.常用标签 3.京东html 4.小结 5.练习(简易淘宝html) 1.html初识(HyperText ...

  10. D13——C语言基础学PYTHON

    C语言基础学习PYTHON——基础学习D13 20180918内容纲要: 堡垒机运维开发 1.堡垒机的介绍 2.堡垒机的架构 3.小结 4.堡垒机的功能实现需求 1 堡垒机的介绍 百度百科 随着信息安 ...

随机推荐

  1. 操作系统综合题之“按要求是个进程协调完成任务,补充完整下列程序,将编号①~⑩处空缺的内容填写(Buffer缓冲区问题-代码补充)”

    1.问题:假设某系统有四个进程.input1和input2进程负责从不同设备读取数据,分别表示为data1和data2,存放在缓冲区Buffer中,output1和output2进程负责从Buffer ...

  2. C#之使用线程池

    简述 创建线程是昂贵的操作,所以为每个短暂的异步操作创建线程会产生显著的开销,线程池就是该问题的解决方案,我们事先分配一定的资源,将这些资源放入资源池,每次需要新的资源,只需从池中获取一个,而不用创建 ...

  3. Elemnet-ui实现自定义上传图片

    1.该组件是基于Element-ui与Vue实现的,主要运用到了Element-ui的Upload组件的几个钩子函数,其中按照element ui官网的说法,http-request 覆盖原默认的上传 ...

  4. 装在U盘或移动固态硬盘里的系统——适用于Ventoy和VirtualBox的Win to go 和 Linux to go 系统制作教程

    写在前面 前段时间, 突然想起了大学期间折腾过的双系统, 又恰逢最近学习工作需要用到Linux系统环境, 用虚拟机又感觉性能跟不上, 因此萌生了一个用移动固态硬盘安装双系统的想法. 照着网络上各位老师 ...

  5. 第三届LitCTFmisc详解

    Misc Cropping 随波逐流伪加密,得到一堆图片,把图片拼接起来 脚本 import os from PIL import Image def stitch_tiles_horizontall ...

  6. 你了解ConcurrentHashMap吗?ConcurrentHashMap九连问

    多线程环境下,使用Hashmap进行put操作会造成数据覆盖,应该使用支持多线程的 ConcurrentHashMap. HashMap为什么线程不安全 put的不安全 由于多线程对HashMap进行 ...

  7. 【中英】【吴恩达课后测验】Course 5 - 序列模型 - 第三周测验 - 序列模型与注意力机制

    [中英][吴恩达课后测验]Course 5 - 序列模型 - 第三周测验 - 序列模型与注意力机制 上一篇:[课程5 - 第二周编程作业]※※※※※ [回到目录]※※※※※下一篇:[待撰写-课程5 - ...

  8. JavaWeb 中的 HTTP 基础知识

    概念:超文本传输协议,规定了浏览器和服务器之间数据传输的规则. 特点: 基于TCP协议,面向连接,更安全 基于请求-响应模型,一次请求对应一次响应 是无状态的协议,对事务处理没有记忆能力.每次请求-响 ...

  9. Java并发利器:CountDownLatch深度解析与实战应用

    Java并发利器:CountDownLatch深度解析与实战应用 多线程编程中,让主线程等待所有子任务完成是个常见需求.CountDownLatch就像一个倒计时器,当所有任务完成后,主线程才继续执行 ...

  10. HyperWorks练习:使用Batch Mesher 批量划分网格

    通过此前章节的学习,我们已经对基于 Batch Mesher 的复杂模型几何清理及网格剖分技术的基本原理和方法有了初步的了解.在这一节,我们将通过一个具体的实例,向用户演示如何使用这一强有力的几何清理 ...