无人机 · 大学进阶教程

适合大学本科及以上学生,深入无人机系统的核心技术:飞控算法、自主导航、多机协同、视觉 SLAM、深度强化学习避障,以及无人机在行业中的工程化应用。

第一章 无人机系统架构深度解析

1.1 完整无人机系统组成

一个完整的自主无人机系统包含以下层次:

┌─────────────────────────────────────────┐
│              任务规划层                   │
│  (Mission Planning / Ground Control)     │
├─────────────────────────────────────────┤
│              导航决策层                   │
│  (Path Planning / Behavior Tree)         │
├─────────────────────────────────────────┤
│              状态估计层                   │
│  (State Estimation / Sensor Fusion)      │
├─────────────────────────────────────────┤
│              飞行控制层                   │
│  (Flight Control / PID / MPC)           │
├─────────────────────────────────────────┤
│              执行机构层                   │
│  (Motor / ESC / Servo)                  │
─────────────────────────────────────────┘

1.2 飞控软件架构对比

飞控系统开发语言特点适用场景
PX4C++模块化、支持多种硬件、ROS2 集成科研、工业、竞赛
ArduPilotC++功能全面、社区庞大、文档丰富多旋翼/固定翼/车/船
BetaflightC极致性能、低延迟FPV 竞速
iNavC导航能力强固定翼长航时
自研飞控任意完全定制学术研究

1.3 PX4 架构深入

PX4 采用微内核 + 应用架构,核心概念:

  • uORB(micro Object Request Broker):模块间通信机制,类似 ROS 的 Topic
  • 模块(Module):每个功能是一个独立模块(姿态估计、位置控制等)
  • 参数系统:运行时可调参数,无需重新编译
  • MAVLink:与地面站通信的标准协议

PX4 核心模块数据流:

传感器原始数据 → 传感器融合(EKF2)→ 姿态估计
                                        ↓
                              位置/速度估计
                                        ↓
                              位置控制器 → 姿态控制器 → 混控器 → 电机

第二章 飞行控制算法

2.1 PID 控制器

PID(比例-积分-微分)控制器是无人机飞控的基础:

公式:

u(t) = Kp·e(t) + Ki·∫e(t)dt + Kd·de(t)/dt

其中:

  • Kp(比例):对当前误差的响应,太大导致振荡
  • Ki(积分):消除稳态误差,太大导致超调
  • Kd(微分):预测趋势、抑制振荡,太大放大噪声

无人机中的应用:

  • 外环(位置环):位置 PID → 输出期望速度
  • 中环(速度环):速度 PID → 输出期望姿态角
  • 内环(姿态环):姿态 PID → 输出期望角速度
  • 最内环(角速度环):角速度 PID → 输出电机 PWM

2.2 级联 PID 调参

调参顺序(从内到外):

  • 角速度环:先调 Kp 直到快速响应,加 Kd 抑制振荡
  • 姿态环:调 Kp 使姿态快速跟踪期望值
  • 速度环:调 Kp 和 Ki 实现精确速度控制
  • 位置环:调 Kp 实现平滑的位置跟踪

2.3 高级控制方法

方法原理优势挑战
MPC(模型预测控制)基于动力学模型预测未来状态,优化控制序列处理约束、多变量耦合计算量大
自适应控制在线估计模型参数,自动调整控制器应对载荷变化、风扰稳定性证明困难
滑模控制设计滑模面,强制系统状态趋向滑模面鲁棒性强抖振问题
LQR(线性二次调节器)最优控制理论,最小化代价函数理论保证、性能优需要精确模型
深度强化学习神经网络学习控制策略处理复杂非线性训练困难、安全性

2.4 实践:用 Python 仿真 PID 控制器

import numpy as np
import matplotlib.pyplot as plt

class DronePID:
    def __init__(self, kp, ki, kd):
        self.kp = kp
        self.ki = ki
        self.kd = kd
        self.integral = 0
        self.prev_error = 0

    def update(self, target, current, dt):
        error = target - current
        self.integral += error * dt
        derivative = (error - self.prev_error) / dt
        output = self.kp * error + self.ki * self.integral + self.kd * derivative
        self.prev_error = error
        return output

# 仿真无人机高度控制
dt = 0.01
time = np.arange(0, 10, dt)
target_height = 5.0  # 目标高度 5 米
current_height = 0.0
velocity = 0.0
mass = 1.0  # kg
gravity = 9.8
heights = []

pid = DronePID(kp=8.0, ki=0.5, kd=2.0)

for t in time:
    thrust = pid.update(target_height, current_height, dt)
    thrust = np.clip(thrust + mass * gravity, 0, 30)  # 限制推力
    acceleration = (thrust - mass * gravity) / mass
    velocity += acceleration * dt
    current_height += velocity * dt
    heights.append(current_height)

plt.plot(time, heights, label='实际高度')
plt.axhline(y=target_height, color='r', linestyle='--', label='目标高度')
plt.xlabel('时间 (s)')
plt.ylabel('高度 (m)')
plt.legend()
plt.title('无人机高度 PID 控制仿真')
plt.show()

第三章 自主导航与感知

3.1 状态估计:EKF(扩展卡尔曼滤波)

无人机需要精确知道自己在哪、姿态如何。EKF2 是 PX4 中使用的状态估计算法:

融合的数据源:

  • IMU(加速度计 + 陀螺仪):高频但漂移
  • 气压计:高度测量
  • GPS:位置测量,低频但有绝对参考
  • 光流/视觉里程计:相对位移
  • 磁力计:航向参考

EKF 核心思想:

  • 预测步:用动力学模型预测下一状态
  • 更新步:用传感器测量值修正预测

3.2 视觉 SLAM

SLAM(Simultaneous Localization and Mapping):同时定位与建图。

无人机视觉 SLAM 方案:

方案类型特点代表系统
特征点法间接法精确、计算量大ORB-SLAM3
直接法直接法不需要特征提取DSO
视觉惯性融合 IMU鲁棒性强VINS-Mono, VINS-Fusion
深度学习端到端前沿研究方向DeepVO

VINS-Mono 工作流程:

相机图像 → 特征提取与跟踪 → IMU 预积分
                ↓                    ↓
          视觉约束              惯性约束
                ↓                    ↓
              联合优化(滑动窗口非线性优化)
                        ↓
                  位姿估计 + 稀疏地图

3.3 路径规划算法

算法类型适用场景复杂度
A*图搜索已知地图、静态环境O(E log V)
Dijkstra图搜索最短路径O(V²)
RRT采样高维空间、复杂约束概率完备
RRT*采样优化渐进最优路径收敛慢
APF(人工势场)局部规划实时避障局部极小值
DWA局部规划动态窗口法实时性好
Hybrid A*混合考虑运动学约束较复杂

3.4 实践:RRT 路径规划仿真

import numpy as np
import matplotlib.pyplot as plt

class RRTPlanner:
    def __init__(self, start, goal, bounds, max_iter=1000, step_size=0.5):
        self.start = np.array(start)
        self.goal = np.array(goal)
        self.bounds = bounds
        self.max_iter = max_iter
        self.step_size = step_size
        self.nodes = [self.start]
        self.edges = []

    def random_point(self):
        return np.array([
            np.random.uniform(self.bounds[0], self.bounds[1]),
            np.random.uniform(self.bounds[2], self.bounds[3])
        ])

    def nearest(self, point):
        nodes = np.array(self.nodes)
        dists = np.linalg.norm(nodes - point, axis=1)
        return self.nodes[np.argmin(dists)]

    def steer(self, from_point, to_point):
        direction = to_point - from_point
        length = np.linalg.norm(direction)
        if length > self.step_size:
            direction = direction / length * self.step_size
        return from_point + direction

    def plan(self, obstacles=None):
        obstacles = obstacles or []
        for _ in range(self.max_iter):
            rand = self.random_point()
            near = self.nearest(rand)
            new = self.steer(near, rand)

            # 碰撞检测
            collision = False
            for obs in obstacles:
                if self._check_collision(near, new, obs):
                    collision = True
                    break

            if not collision:
                self.nodes.append(new)
                self.edges.append((near, new))

                if np.linalg.norm(new - self.goal) < self.step_size:
                    self.nodes.append(self.goal)
                    self.edges.append((new, self.goal))
                    return True
        return False

    def _check_collision(self, p1, p2, obs):
        # 简化的圆形障碍物碰撞检测
        center, radius = obs
        for t in np.linspace(0, 1, 10):
            point = p1 + t * (p2 - p1)
            if np.linalg.norm(point - center) < radius:
                return True
        return False

# 使用示例
planner = RRTPlanner(
    start=(1, 1), goal=(9, 9),
    bounds=(0, 10, 0, 10),
    max_iter=2000
)
obstacles = [(5, 5, 1.5), (3, 3, 1), (7, 7, 1)]
planner.plan(obstacles)

# 可视化
fig, ax = plt.subplots(figsize=(8, 8))
for edge in planner.edges:
    ax.plot([edge[0][0], edge[1][0]], [edge[0][1], edge[1][1]],
            'b-', alpha=0.3, linewidth=0.5)
for obs in obstacles:
    circle = plt.Circle(obs[:2], obs[2], color='red', alpha=0.3)
    ax.add_patch(circle)
ax.plot(1, 1, 'go', markersize=10, label='起点')
ax.plot(9, 9, 'r*', markersize=15, label='终点')
ax.set_xlim(0, 10)
ax.set_ylim(0, 10)
ax.legend()
ax.set_title('RRT 路径规划')
plt.show()

第四章 多机协同与蜂群

4.1 多机协同的挑战

挑战说明解决方案
通信带宽多机数据传输量大分布式决策、局部通信
碰撞避免多机空间冲突速度障碍法(VO)、CBS
任务分配如何分配任务给各机匈牙利算法、拍卖算法
编队控制保持队形领航-跟随、虚拟结构
一致性多机状态同步共识算法

4.2 编队控制方法

领航-跟随法(Leader-Follower):

  • 指定一架无人机为领航者
  • 其他跟随者保持与领航者的相对位置
  • 优点:简单直观
  • 缺点:领航者故障则整个编队失效

虚拟结构法(Virtual Structure):

  • 定义一个虚拟的几何结构
  • 每架无人机跟踪结构中的一个虚拟点
  • 优点:队形保持精确
  • 缺点:灵活性差

基于行为法(Behavior-Based):

  • 每架无人机有多个行为(避障、编队、目标跟踪)
  • 通过权重融合多个行为的输出
  • 优点:灵活、分布式
  • 缺点:行为冲突难以分析

4.3 ROS2 多机仿真

使用 Gazebo + PX4 + ROS2 进行多机协同仿真:

# 启动多机 PX4 SITL 仿真
cd PX4-Autopilot
./Tools/simulation/gz/sitl_multiple_run.sh -m iris -n 3

# 在 ROS2 中控制多机
ros2 run px4_ros_com offboard_control --ros-args -p namespace:=px4_1
ros2 run px4_ros_com offboard_control --ros-args -p namespace:=px4_2
ros2 run px4_ros_com offboard_control --ros-args -p namespace:=px4_3

第五章 深度学习与无人机

5.1 端到端飞行控制

概念: 用深度神经网络直接从传感器输入(图像)映射到控制输出(油门、偏航等),跳过传统的感知-规划-控制流水线。

优势:

  • 不需要精确的环境模型
  • 能学习人类飞行员的隐含知识
  • 对复杂场景有更好的泛化能力

挑战:

  • 可解释性差
  • 安全性难以保证
  • 需要大量训练数据

5.2 深度强化学习避障

DRL(Deep Reinforcement Learning) 在无人机避障中的应用:

  • 状态空间:无人机位置、速度、深度图/激光扫描
  • 动作空间:速度指令(vx, vy, vz)或姿态指令
  • 奖励函数:到达目标 +100、碰撞 -100、每步 -1(鼓励快速到达)

常用算法:

  • PPO(Proximal Policy Optimization):稳定、适合连续控制
  • SAC(Soft Actor-Critic):样本效率高
  • TD3(Twin Delayed DDPG):解决过估计问题

5.3 目标检测与跟踪

在无人机上部署轻量级目标检测模型:

模型参数量FPS(Jetson Nano)精度(mAP)
YOLOv8-nano3.2M30+37.3
YOLOv5-s7.2M20+37.4
MobileNet-SSD5.8M25+25.1
EfficientDet-D03.9M15+33.8

部署流程:

  • 在 GPU 服务器上训练模型
  • 使用 TensorRT 或 ONNX Runtime 优化
  • 部署到无人机边缘计算平台(Jetson Nano/Xavier)
  • 通过 MAVSDK 将检测结果反馈给飞控

第六章 工程实践:从仿真到实飞

6.1 完整开发流程

1. 算法设计与仿真(Python/MATLAB)
        ↓
2. SIL 仿真(Software-in-the-Loop)
   PX4 SITL + Gazebo/JMavSim
        ↓
3. HIL 仿真(Hardware-in-the-Loop)
   真实飞控硬件 + 仿真环境
        ↓
4. 系留飞行测试
   无人机用绳索固定,限制飞行范围
        ↓
5. 自由飞行测试
   开阔场地、安全网、紧急停机
        ↓
6. 实际任务执行

6.2 推荐开发平台

平台用途成本
PX4 SITL + Gazebo算法仿真免费
NVIDIA Jetson Nano边缘 AI 计算~1000 元
Holybro X500 V2科研级四旋翼~5000 元
DJI Manifold 2机载计算 + 飞控~8000 元
Intel RealSense D435i深度相机 + IMU~2000 元

6.3 研究前沿方向

  • 视觉语言模型 + 无人机:用自然语言指令控制无人机
  • 神经辐射场(NeRF)+ 无人机:三维场景重建
  • 大模型 + 无人机决策:LLM 用于高层任务规划
  • 仿生飞行:扑翼无人机、柔性翼无人机
  • 太阳能长航时:平流层无人机,续航数月
  • 无人机 + 5G/6G:低延迟远程操控、空中基站

推荐学习资源

  • 书籍:《Small Unmanned Aircraft: Theory and Practice》(Beard & McLain)
  • 课程:ETH Zurich "Robotics: Perception"(Coursera)
  • 课程:UPenn "Robotics: Aerial Robotics"(Coursera)
  • 开源:PX4-Autopilot(GitHub)、ArduPilot(GitHub)
  • 仿真:Gazebo、AirSim(Microsoft)、Flightmare
  • 竞赛:RoboMaster、DJI RoboMaster 机甲大师赛、ICRA UAV 竞赛