第1章 多旋翼无人机基础知识 1
1.1 无人机的介绍 1
1.2 无人机的分类与管理 4
1.3 无人机与航空模型的区别 4
1.4 多旋翼无人机的发展历史 5
1.5 多旋翼无人机的组成 7
1.5.1 机架系统 7
1.5.2 动力系统 8
1.5.3 动力电源与充电系统 11
1.5.4 电子调速器 13
1.5.5 飞行控制系统 14
1.5.6 遥控器和遥控接收机 15
1.5.7 遥测链路数传系统 17
1.5.8 光流定位系统 18
1.5.9 全球卫星导航系统 19
1.5.10 高度计 20
1.5.11 导航系统 20
1.5.12 无线图传系统 22
1.5.13 地面站控制系统 23
1.5.14 任务载荷云台和摄像头 24
1.5.15 避障系统 25
1.5.16 虚拟现实和增强现实系统 28
1.6 多旋翼飞行器的结构和飞行原理 29
1.6.1 多旋翼飞行器的机身布局 29
1.6.2 多旋翼飞行器的旋翼结构 31
1.6.3 多旋翼飞行器的飞行原理 32
1.6.4 多旋翼的优缺点 35
1.7 开源飞控简介 36
第2章 飞行控制系统核心硬件 42
2.1 ARM Cortex-M4架构 42
2.1.1 ARM内核 42
2.1.2 Cortex-M4内核 42
2.1.3 以ARM Cortex-M4为核心的微控制器 49
2.2 STM32F4系列微控制器 50
2.3 飞行控制系统硬件架构设计与原理 52
2.3.1 遥控接收机接口 53
2.3.2 电调输出接口 56
2.3.3 传感器接口 57
2.3.4 GNSS接口 59
2.3.5 SWD调试口 59
2.3.6 超声波接口 61
2.3.7 系统供电 61
2.3.8 遥测数传 62
2.3.9 其他功能和扩展接口 62
2.4 “光标”飞控PCB的布局设计 65
2.5 飞控系统硬件设计注意事项 65
第3章 嵌入式实时操作系统和FreeRTOS 68
3.1 实时操作系统简介 68
3.1.1 实时操作系统的定义 68
3.1.2 实时操作系统的特征 68
3.2 实时操作系统在飞控系统中的重要性 69
3.3 FreeRTOS实时操作系统 69
3.3.1 FreeRTOS简介 69
3.3.2 FreeRTOS的特点 69
3.3.3 FreeRTOS架构概述 70
3.4 调度策略 71
3.4.1 FreeRTOS支持的调度方式 71
3.4.2 调度器简介 71
3.4.3 抢占式调度器 71
3.4.4 时间片调度器 73
3.5 任务及任务优先级 74
3.5.1 任务和协程(Co-routines) 74
3.5.2 任务状态 74
3.5.3 任务优先级 75
3.5.4 任务优先级分配方案 75
3.6 任务间通信——信号量 76
3.6.1 信号量的概念及其作用 76
3.6.2 FreeRTOS任务间计数信号量的实现 77
3.6.3 FreeRTOS中断方式计数信号量的实现 77
3.6.4 计数信号量API函数 78
3.7 任务间通信—消息队列 81
3.7.1 消息队列的概念及其作用 81
3.7.2 FreeRTOS任务间消息队列的实现 81
3.7.3 FreeRTOS中断方式消息队列的实现 82
3.7.4 消息队列API函数 83
3.8 任务间通信——互斥信号量 86
3.8.1 互斥信号量的概念及其作用 86
3.8.2 优先级翻转问题 86
3.8.3 FreeRTOS互斥信号量的实现 87
3.8.4 互斥信号量API函数 88
3.9 飞控系统的任务规划与5环控制 89
第4章 飞行控制系统的定时器 91
4.1 STM32F407的系统时钟配置 91
4.1.1 STM32F4的系统时钟树 91
4.1.2 STM32F4的系统时钟初始化 94
4.1.3 STM32F4的系统时钟使能和配置 98
4.2 ST微控制器的定时器模块 101
4.2.1 高级控制定时器(Advanced-control Timers) 101
4.2.2 通用定时器(General-purpose Timers) 104
4.2.3 基本定时器(Basic Timers) 107
4.3 任务调度定时器 109
4.4 遥控器PWM编码和定时器输入捕获 110
4.5 电子调试器的输出控制PWM和定时器输出比较模式 111
第5章 飞控系统的传感器 113
5.1 飞控系统的传感器 113
5.2 ST微控制器的I2C驱动 114
5.2.1 I2C简介 114
5.2.2 I2C驱动在STM32中的硬件实现 115
5.2.3 I2C驱动在STM32中的软件实现 120
5.3 加速度计的原理和测量信息 123
5.3.1 加速度计的原理 123
5.3.2 加速度计的测量信息 124
5.4 加速度计原始数据采集、校准和滤波 125
5.4.1 加速度计原始数据采集 125
5.4.2 加速度计校准 133
5.5 陀螺仪的原理和测量信息 135
5.5.1 陀螺仪的原理 135
5.5.2 陀螺仪的测量信息 135
5.6 陀螺仪的原始数据采集、校准和滤波 136
5.6.1 陀螺仪原始数据采集 136
5.6.2 陀螺仪校准 136
5.6.3 加速度计与陀螺仪的滤波 137
5.7 磁力计的工作原理和测量信息 137
5.7.1 磁力计的原理 137
5.7.2 磁力计的测量信息 139
5.8 磁力计的原始数据采集、校准和滤波 139
5.8.1 磁力计原始数据采集 140
5.8.2 磁力计校准 145
5.8.3 磁力计的滤波 148
5.9 超声波传感器简介 149
5.9.1 超声波传感器原理 149
5.9.2 超声波传感器简介 149
5.10 超声波传感器的数据采集驱动和滤波 151
5.10.1 超声波传感器数据采集驱动 151
5.10.2 超声波传感器的滤波 153
5.11 气压传感器简介 154
5.12 气压传感器的数据采集驱动 155
5.13 激光测距测高传感器 157
5.14 视觉传感器 158
5.14.1 光流 158
5.14.2 视觉里程计 163
第6章 状态估计 168
6.1 组合导航 168
6.2 飞行器的坐标系 169
6.3 方向余弦矩阵和欧拉角 170
6.3.1 方向余弦矩阵 170
6.3.2 姿态与欧拉角 171
6.3.3 欧拉角的定轴转动表示矩阵 172
6.4 四元数 175
6.4.1 四元数的定义 175
6.4.2 四元数与旋转的关系 176
6.5 四元数的姿态估计 177
6.6 卡尔曼滤波 182
6.7 扩展卡尔曼滤波 186
6.8 几种算法的总结比较 190
第7章 线性控制系统PID控制算法 192
7.1 控制理论与PID线性控制系统原理 192
7.1.1 比例控制 193
7.1.2 积分控制 194
7.1.3 微分控制 194
7.2 飞控算法PID框架设计 194
7.3 飞控算法外环PID实现 195
7.4 飞控算法内环PID实现 197
7.5 信号滤波 198
7.5.1 移动平滑滤波 198
7.5.2 FIR滤波 200
7.5.3 IIR滤波 202
7.6 PID参数的调试 205
7.6.1 飞控的PID参数 205
7.6.2 调试步骤 205
第8章 油门和高度控制 207
8.1 油门输入曲线 207
8.2 油门解锁功能 208
8.3 油门权重分配和电调输出 209
8.4 高度控制 211
第9章 自主导航系统 213
9.1 自主导航概述 213
9.2 室内定位 214
9.2.1 室内定位技术 214
9.2.2 视觉导航 216
9.2.3 SLAM简介 217
9.2.4 视觉SLAM闭环检测与后端优化 217
9.3 室外GPS定位和NEMA实现 218
9.3.1 GPS定位系统的基本工作原理 218
9.3.2 单点定位 219
9.3.3 相对定位 219
9.3.4 差分定位 220
9.3.5 GPS标准协议NEMA 220
9.4 航路规划 230
9.4.1 航线规划 230
9.4.2 轨迹规划 232
9.5 SINS/GPS组合导航的模型和算法 233
9.5.1 SINS和GPS接收机的误差模型 233
9.5.2 SINS/GPS松组合的状态方程和量测方程 234
9.5.3 SINS/GPS紧组合的状态方程和量测方程 235
9.5.4 方程离散化和卡尔曼滤波 237
9.6 避障系统 238
9.6.1 避障使用的传感器 238
9.6.2 避障算法 238
9.6.3 避障过程中存在的问题 241
第10章 遥测数传通信链路 242
10.1 通用数传模块分类及其性能 242
10.1.1 无人机数传模块简介 242
10.1.2 调制方式的划分 242
10.1.3 传输距离及其影响因素 244
10.2 ST微控制器的串口通信和数传模块硬件接口 245
10.2.1 ST微控制器的串口通信 245
10.2.2 数传模块的硬件接口 248
10.3 简单通信信源编码协议及其实现 249
10.3.1 信源编码 249
10.3.2 串口通信协议 249
10.4 MAVLink协议实现 249
10.4.1 MAVLink协议简介 249
10.4.2 MAVLink数据包结构 250
10.4.3 MAVLink消息帧讲解 251
10.4.4 MAVLink消息帧发送与解析 255
10.5 地面站数据接收与数据解析 258
10.5.1 PC端地面站数据采集与存储 258
10.5.2 Android地面站数据接收 260
10.5.3 Android地面站数据存储与分析 262
第11章 其他辅助功能 264
11.1 参数存储、在线更新与加载 264
11.2 调试LED 266
11.3 失控保护功能 271
11.4 手机WiFi控制 274
11.5 手机蓝牙控制 278
11.6 第一人称视角FPV控制 282
11.6.1 FPV的定义 282
11.6.2 FPV的设备组成 282
11.6.3 FPV眼镜与VR眼镜的区别 284
11.7 无人机应用领域 285
11.7.1 拍照摄影 285
11.7.2 植保无人机 287
11.7.3 电力巡检 288
11.7.4 环保领域的应用 290
第12章 基于STM32F4的基础程序开发 292
12.1 处理器STM32F4简介 292
12.1.1 系统总线 292
12.1.2 系统接口 294
12.2 开发环境简介 295
12.2.1 软件安装 295
12.2.2 工程创建 298
12.2.3 软件介绍 300
12.2.4 程序调试 301
12.3 STM32固件库 302
12.3.1 固件库介绍 302
12.3.2 固件库移植 303
12.4 LED显示 307
12.4.1 硬件设计 307
12.4.2 软件设计 308
12.4.3 实验现象 308
12.5 USART串口的使用 309
12.5.1 硬件设计 309
12.5.2 软件设计 309
12.5.3 实验现象 310
12.6 ADC模数转换器 311
12.6.1 软件设计 311
12.6.2 实验现象 313
12.7 定时器中断 313
12.7.1 定时器中断的原理 313
12.7.2 软件设计 314
12.7.3 实验现象 315
12.8 FreeRTOS实时操作系统简介 315
12.8.1 FreeRTOS基础应用 316
12.8.2 FreeRTOS实例 316
12.8.3 实验现象 317
12.9 FreeRTOS操作EEPROM 318
12.9.1 程序设计 318
12.9.2 实验现象 319
12.10 FreeRTOS操作MPU6050 320
12.10.1 软件设计 320
12.10.2 实验现象 321
12.11 FreeRTOS操作磁力计 321
12.11.1 软件设计 322
12.11.2 实验现象 322
12.12 FreeRTOS操作气压计 323
12.12.1 软件设计 323
12.12.2 实验现象 325
附录A F450四旋翼飞行器DIY组装流程 326
A.1 材料清单 326
A.2 焊接电机 329
A.3 机架的安装 329
A.4 飞控模块安装 333
A.5 电调行程校准 334
A.6 电调、遥控接收机、数传模块与飞控的连接 335
A.7 遥控操作说明 336
A.8 图传系统连接 336
附录B 无刷电机与电子调速器介绍 339
B.1 无刷直流电机 339
B.2 电子调速器换相的相关知识 340
B.3 电调启动频率 341
附录C 无人机实验室研发调试设备 343
C.1 FH550四旋翼无人机研发系统 343
C.2 应用级无人机系统 345
C.3 高级航拍数字图传系统 347
C.4 便携式地面测控站系统 348
C.5 高级飞行器3自由度姿态算法验证系统 349
C.6 高级飞行器动力系统扭矩测量系统 349
C.7 高级飞行器动力系统拉力测量系统 350
C.8 微机电传感器测量校准平台 350
C.9 工业级数据处理中心 350
附录D 电子罗盘椭球校准算法代码实例 352
参考文献 357