【AirSim+Python】无人机简单API控制-Python代码

  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()

你可能感兴趣的:(无人机,python)