AirSim基础使用【Python】

博客地址:https://www.cnblogs.com/zylyehuo/
具体效果可以关注博主的小红书: 42891122102,上面有效果视频

起飞与降落

fly_up&down.py

python 复制代码
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

python 复制代码
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

python 复制代码
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

python 复制代码
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

python 复制代码
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

python 复制代码
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

python 复制代码
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)
相关推荐
独行soc6 小时前
2025年渗透测试面试题总结-18(题目+回答)
android·python·科技·面试·职场和发展·渗透测试
S01d13r6 小时前
gunicorn + flask 处理高并发请求
python·flask·gunicorn
杜子不疼.7 小时前
《Python列表和元组:从入门到花式操作指南》
开发语言·python
pan0c237 小时前
数据处理与统计分析 —— numpy入门
python·numpy
max5006007 小时前
基于桥梁三维模型的无人机检测路径规划系统设计与实现
前端·javascript·python·算法·无人机·easyui
秋氘渔8 小时前
综合案例:Python 函数知识整合 — 学生成绩管理系统
开发语言·python
AI 嗯啦9 小时前
SQL详细语法教程(三)mysql的函数知识
android·开发语言·数据库·python·sql·mysql
databook9 小时前
把数学对象画出来:Manim Mobject类库速查手册
python·数学·动效
图灵学术计算机论文辅导9 小时前
傅里叶变换+attention机制,深耕深度学习领域
人工智能·python·深度学习·计算机网络·考研·机器学习·计算机视觉
ruleslol10 小时前
python30-正则表达式
python·正则表达式