博客地址: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)