【AirSim 教程指南】Part 2:控制 API 全面解析
本文是AirSim无人机控制API的全面指南,适合零基础学习者。文章系统介绍了四大类控制方式:动作控制(Movement API)、速度控制(Velocity API)、位姿控制(Pose API)和路径规划控制(Path API),详细讲解了各类API的特点、适用场景及具体使用方法。内容包含Python代码示例、坐标系说明和常见错误解决方法,并提供了一个"画正方形"的完整飞行
AirSim 教程指南 — Part 2:控制 API 全面解析
✈ 适合零基础初学者的无人机控制核心章节
🎯 目标:完全理解 AirSim 的动作控制、速度控制、位姿控制与路径规划 API
💡 本篇结束后,你将能通过 Python 代码让无人机随心所欲移动
📅 最后更新:2025年12月
📋 目录
- 1. AirSim 控制 API 总览
- 2. 基础准备:连接模拟器
- 3. 动作控制:最常用、最灵活的方式
- 4. 速度控制:以速度为主的精准移动
- 5. 位姿控制:像机械臂一样“指定坐标点”
- 6. 路径规划控制:自动飞一条路线
- 7. 组合应用:写一个“画正方形”的无人机程序
- 8. 常见错误与调试技巧
1. AirSim 控制 API 总览
AirSim 的控制 API 可以分四大类:
| 控制方式 | API 例子 | 难度 | 特点 | 适合场景 |
|---|---|---|---|---|
| 动作控制(Movement API) | moveByVelocity(), moveByAngleThrottle() |
⭐⭐ | 以速度与角度为核心,灵活强大 | RL、无人机基础动作 |
| 速度控制(Velocity API) | moveByVelocityZ() |
⭐ | 初学者最容易上手 | 平移、定高飞行 |
| 位姿控制(Pose API) | simSetVehiclePose() |
⭐⭐⭐⭐ | 类似机械臂控制:直接给坐标 | 精确控制、拍照任务 |
| 路径控制(Path API) | moveOnPath() |
⭐⭐⭐ | 自动飞路径 | 导航、巡逻、任务飞行 |
💡 初学者建议从 速度控制 → 动作控制 → 路径控制 → 位姿控制 顺序学习。
2. 基础准备:连接模拟器
所有控制都必须先 连接 AirSim。
2.1 Python 连接代码(通用模板)
import airsim
import time
# 连接AirSim模拟器
client = airsim.MultirotorClient()
client.confirmConnection()
# 解锁 & 起飞
client.enableApiControl(True)
client.armDisarm(True)
print("Taking off...")
client.takeoffAsync().join()
print("Ready to fly!")
你几乎在所有示例中都会写:
client = airsim.MultirotorClient()
client.confirmConnection()
client.enableApiControl(True)
client.armDisarm(True)
client.takeoffAsync().join()
记住这段模板即可。
3. 动作控制:最常用、最灵活的方式
动作控制就是通过“动作指令”控制飞行,例如:
- 前进多少秒
- 以某个角速度旋转
- 以某个速度上升
- 改变俯仰、横滚、油门
AirSim 提供几个核心函数:
3.1 moveByVelocity()
以 3D 速度(vx, vy, vz)飞指定时间
示例:
# 前方 5 m/s 飞 2 秒
client.moveByVelocityAsync(
vx=5, vy=0, vz=0, duration=2
).join()
坐标系回顾(非常重要):
AirSim NED 坐标
─────────────────────────────
x:前方
y:右方
z:向下(注意是负值向上)
例如:
想往上飞 → vz=-1
想右移 → vy=+2
3.2 moveByVelocityZ()
保持高度,只以速度移动。
client.moveByVelocityZAsync(
vx=3, vy=0, z=-5, duration=3
).join()
用途:
- 自动巡逻
- 室内定高导航
- 跟随移动物体
3.3 moveByAngleThrottle()
直接操控俯仰角、横滚角、油门:
client.moveByAngleThrottleAsync(
pitch=0.1, roll=0, throttle=0.6, yaw_rate=0, duration=1
).join()
用途:
- RL 强化学习控制
- 纯动作级飞行(不建议新手使用)
4. 速度控制:以速度为主的精准移动
速度控制比动作控制更“高层”,适合想快速实现“飞到那边”的初学者。
最常用 API:
moveByVelocityZ()
保持高度 + 平移:
# 保持 z=-5 高度,以 3 m/s 前进 3 秒
client.moveByVelocityZAsync(3, 0, -5, 3).join()
新手必学,最稳最好理解。
5. 位姿控制:像机械臂一样“指定坐标点”
位姿控制直接设置:
- 位置(x, y, z)
- 朝向(roll, pitch, yaw)
函数:
5.1 simSetVehiclePose()
示例:
pose = airsim.Pose(
airsim.Vector3r(10, 0, -6), # 位置
airsim.to_quaternion(0, 0, 1.57) # yaw=90°
)
client.simSetVehiclePose(pose, ignore_collison=True)
用途:
- 精准拍照任务
- 仿真 SLAM ground truth
- 多机编队位置重置
5.2 坐标系必懂
AirSim 使用 NED坐标系:
x:前
y:右
z:下
而 UE4 世界坐标是:
X:前
Y:右
Z:上
AirSim 自动转换,不需要你手动处理。
6. 路径规划控制:自动飞一条路线
最“高层高级”控制方式。
API:
moveOnPath()
给无人机一系列坐标点,它会自动平滑飞过去。
示例:
path = [
airsim.Vector3r(0, 0, -5),
airsim.Vector3r(10, 0, -5),
airsim.Vector3r(10, 10, -5),
airsim.Vector3r(0, 10, -5)
]
client.moveOnPathAsync(
path,
velocity=3,
timeout_sec=30,
drivetrain=airsim.DrivetrainType.ForwardOnly,
yaw_mode=airsim.YawMode(is_rate=False, yaw_or_rate=0)
).join()
AirSim 内置路径平滑,无需自己写插值。
7. 组合应用:画一个“正方形”飞行程序
综合所有知识,写一个“小车巡逻”式正方形飞行。
import airsim
import time
client = airsim.MultirotorClient()
client.confirmConnection()
client.enableApiControl(True)
client.armDisarm(True)
client.takeoffAsync().join()
# 高度 -5m
z = -5
# 边长
L = 10
# 定义4个点
points = [
airsim.Vector3r(0, 0, z),
airsim.Vector3r(L, 0, z),
airsim.Vector3r(L, L, z),
airsim.Vector3r(0, L, z),
]
# 自动巡逻
for p in points:
client.moveToPositionAsync(
p.x_val, p.y_val, p.z_val, velocity=3
).join()
print("Reached:", p)
print("Done.")
效果:
无人机起飞
→ 飞到 (10,0)
→ 飞到 (10,10)
→ 飞到 (0,10)
→ 回到起点
8. 常见错误与调试技巧
| 问题 | 原因 | 解决方法 |
|---|---|---|
| 无法连接 AirSim | 未开模拟器 | Win + “AirSimNH.exe” |
| 控制无反应 | 忘记 enableApiControl |
加上该函数 |
| 无法上升 | 记错 NED 坐标系 | 上升用 z = -5 |
| 无法飞直线 | yaw 锁定不当 | 用 YawMode(is_rate=False) |
| 路径抖动 | 点间距离太大 | 增加中间控制点 |
🎉祝你天天开心,我将更新更多有意思的内容,欢迎关注!
最后更新:2025年12月
作者:Echo
更多推荐



所有评论(0)