1.无人机起飞/下降
import airsim
# 与airsim建立连接
client = airsim.MultirotorClient()
client.confirmConnection()
# 确定是否要用API控制
client.enableApiControl(True)
# 解锁无人机转起来
client.armDisarm(True)
# join()等任务结束再进行下个任务
# 起飞
client.takeoffAsync().join()
# 降落
client.landAsync().join()
# 上锁
client.armDisarm(False)
# 释放控制权
client.enableApiControl(False)
2.无人机按固定位置飞行
import airsim
# 与 airsim 建立连接
client = airsim.MultirotorClient()
client.confirmConnection()
# 确定是否要用API控制
client.enableApiControl(True)
# 解锁无人机转起来
client.armDisarm(True)
# join()等任务结束再进行下个任务
# 起飞
client.takeoffAsync().join()
# 正方形飞行
client.moveToZAsync(-3, 1).join() # 飞到3m高
client.moveToPositionAsync(5, 0, -3, 1) .join() # 飞到(5,0)点坐标
client.moveToPositionAsync(5, 5, -3, 1) .join() # 飞到(5,5)点坐标
client.moveToPositionAsync(0, 5, -3, 1) .join() # 飞到(0,5)点坐标
client.moveToPositionAsync(0, 0, -3, 1) .join() # 飞到(0,0)点坐标
# 降落
client.landAsync().join()
# 上锁
client.armDisarm(False)
# 释放控制权
client.enableApiControl(False)
3.无人机按固定速度飞行
import airsim
import time
# 与 airsim 建立连接
client = airsim.MultirotorClient()
client.confirmConnection()
# 确定是否要用API控制
client.enableApiControl(True)
# 解锁无人机转起来
client.armDisarm(True)
# join()等任务结束再进行下个任务
# 起飞
client.takeoffAsync().join()
# 正方形飞行
client.moveToZAsync(-3, 5).join() # 飞到3m高
client.moveByVelocityZAsync(1, 0, -3, 5) .join() # 以1m/s的速度向前飞5秒
client.moveByVelocityZAsync(0, 1, -3, 5) .join() # 以1m/s的速度向前飞5秒
client.moveByVelocityZAsync(-1, 0, -3, 5) .join() # 以1m/s的速度向前飞5秒
client.moveByVelocityZAsync(0, -1, -3, 5) .join() # 以1m/s的速度向前飞5秒
# 悬停2秒钟
client.hoverAsync().join()
time.sleep(2)
# 降落
client.landAsync().join()
# 上锁
client.armDisarm(False)
# 释放控制权
client.enableApiControl(False)
4.用键盘控制无人机飞行
import sys
import time
import airsim
import pygame
# ---------- Pygame Settings ---------- #
pygame.init()
screen = pygame.display.set_mode((320, 240)) # 设置屏幕大小
pygame .display .set_caption('keyboard ctrl') # 设置窗口标题
screen .fill((0, 0, 0)) # 屏幕填充RGB颜色
# ---------- AirSim Settings ---------- #
vehicle_name = "Drone"
client = airsim.MultirotorClient()
client.confirmConnection()
client.enableApiControl(True, vehicle_name=vehicle_name)
client.armDisarm(True, vehicle_name=vehicle_name)
client.takeoffAsync(vehicle_name=vehicle_name).join()
# 基础的控制速度(m/s)
vehicle_velocity = 2.0
# 设置加速度
speedup_ratio = 10.0
# 设置临时加速
speedup_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 = speedup_ratio
else:
scale_ratio = 1
# 根据"A"和"D"设置yaw轴速率
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轴速率
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轴速率
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轴速率
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
# 设置速度控制以及设置偏航控制
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)
# ESC to quit #
if scan_wrapper[pygame.K_ESCAPE]:
pygame.quit()
sys.exit()