本书以四旋翼无人机为例,讲解多旋翼无人机的飞行理论与控制体系,从螺旋桨、电动机、电调、动力电池、机架等角度介绍硬件结构与飞行原理。通过开源自驾仪Pixhawk和开源飞行控制程序PX4介绍了全自动多旋翼无人机控制系统的整个实现过程。内容涵盖了从硬件组装清单到飞控程序下载编译的整个过程,并对如何使用地面站程序对飞控进行航前校准和参数设定做了说明。
本书将飞行理论与设计实现相互结合,通过对PX4飞控程序的分析、讲解、修改和完善,梳理了多旋翼无人机的相关知识。包括:飞控程序的架构设计、开源操作系统、驱动程序、状态估计、控制算法、自主导航系统等,以及如何通过对多旋翼无人机的动力系统建模实现半物理仿真和趣味航线飞行等。
本书可为从事无人机设计制作的技术人员提供帮助,可供无人机爱好者自学,还可供大学院校相关专业师生学习参考。
第1章多旋翼无人机简介
1.1 多旋翼机发展简史 2
1.1.1 多旋翼机的起源 2
1.1.2 逐渐复苏 4
1.1.3 多旋翼机的春天 5
1.2 无人机与航空模型 6
1.2.1 机型分类 6
1.2.2 航空模型飞机 10
1.2.3 全自动无人机 10
1.3 开源飞控简介 11
1.3.1 Arduino飞控 12
1.3.2 Crazyflie迷你飞行器 12
1.3.3 APM飞控 12
1.3.4 Pixhawk与PX4 13
第2章飞行原理
2.1 基本姿态 15
2.1.1 动力来源 15
2.1.2 垂向运动 17
2.1.3 飞行姿态 18
2.2 飞行原理 22
2.2.1 滚转角与定高飞行 22
2.2.2 滚转角与水平运动 23
2.3 十字形与叉形四旋翼 26
2.3.1 运动方向与姿态 26
2.3.2 混合控制方法 27
第3章硬件结构设计
3.1 螺旋桨 30
3.1.1 制作材料 30
3.1.2 直径、螺距与弦长 30
3.1.3 多叶螺旋桨 31
3.1.4 静平衡与动平衡 32
3.2 有刷电机与无刷电机 32
3.2.1 电磁铁转动原理 32
3.2.2 有刷电机 34
3.2.3 无刷电机 35
3.2.4 相关参数 37
3.3 电调与PWM信号 37
3.3.1 电调 37
3.3.2 PWM信号 38
3.3.3 直流有刷电调 39
3.3.4 直流无刷电调 39
3.3.5 电调安全保护机制 40
3.3.6 最大和最小行程校准 41
3.4 动力电池 41
3.4.1 电池电压 41
3.4.2 电池容量与放电倍率 43
3.5 遥控器 44
3.5.1 遥控器与接收机 44
3.5.2 美国手与日本手 45
3.6 机架设计 46
3.6.1 选材 46
3.6.2 布局 47
3.6.3 轴距 48
3.6.4 涵道 49
3.6.5 脚架 49
第4章自驾仪与硬件组装
4.1 Pixhawk自驾仪 51
4.1.1 概览 51
4.1.2 接口说明 53
4.2 硬件清单与组装说明 57
4.2.1 硬件清单 57
4.2.2 组装说明 58
第5章开源飞控程序
5.1 飞控程序下载与编译 64
5.1.1 PX4飞控程序下载 64
5.1.2 Fedroa编译环境搭建 68
5.1.3 Ubuntu编译环境搭建 71
5.1.4 PX4飞控程序编译与烧写 73
5.1.5 QGroundControl下载与编译 75
5.2 航前准备与航前校准 77
5.2.1 航前准备 78
5.2.2 航前校准 84
5.3 飞行模式 86
5.3.1 Stabilized增稳模式 87
5.3.2 Manual手动模式 87
5.3.3 Altitude高度模式 87
5.3.4 Position位置模式 88
5.3.5 Mission任务模式 89
5.3.6 Hold定点模式 89
5.3.7 Takeoff/Land起飞降落模式 90
5.3.8 Return返航模式 90
5.3.9 Acro/Rattitude特技姿态模式 91
5.3.10 Offboard离线模式 92
5.3.11 Follow Me跟随模式 92
第6章飞控架构与通信协议
6.1 架构总览 94
6.1.1 数据存储 94
6.1.2 内部通信总线 95
6.1.3 外部通信总线 95
6.1.4 驱动程序 96
6.1.5 飞行控制器 97
6.2 源代码结构设计 98
6.2.1 编译目标目录(build) 99
6.2.2 编译配置目录(cmake) 101
6.2.3 外部通信接口(Mavlink) 109
6.2.4 内部通信接口(msg) 116
6.2.5 运行平台(platforms) 120
6.2.6 ROM文件系统(ROMFS) 124
6.2.7 功能源代码(src) 127
6.2.8 其他工具(Tools) 130
6.3 uORB 130
6.3.1 基本通信原理 130
6.3.2 uORB设计与实现 132
6.3.3 uORB使用方法 145
6.4 Mavlink 147
6.4.1 整体功能设计 147
6.4.2 Mavlink主程序 148
6.4.3 MavlinkStream发送器 154
6.4.4 MavlinkReceiver接收器 159
第7章开源操作系统NuttX
7.1 NuttX概述 175
7.1.1 NuttX简介 175
7.1.2 系统特性 175
7.1.3 支持的平台 178
7.2 用户接口 183
7.2.1 任务控制接口 183
7.2.2 任务调度接口 188
7.2.3 调度控制接口 190
7.2.4 消息队列接口 192
7.2.5 信号量接口 193
7.2.6 环境变量 196
7.2.7 文件系统接口 197
7.2.8 网络接口 197
7.3 NuttShell(NSH) 199
7.3.1 概览 199
7.3.2 常用命令 201
第8章进程、线程及工作队列
8.1 任务调度 211
8.1.1 并行任务 211
8.1.2 多级反馈队列 212
8.1.3 抢占式优先级调度 213
8.2 多进程 214
8.2.1 什么是进程 214
8.2.2 创建进程 216
8.3 多线程 224
8.3.1 什么是线程 224
8.3.2 创建线程 225
8.3.3 线程与进程的区别 230
8.4 工作队列 232
8.4.1 什么是工作队列 232
8.4.2 加入工作队列 235
8.5 信号量与锁 237
8.5.1 互斥信号量 238
8.5.2 同步信号量 244
8.5.3 互斥锁与条件变量 245
第9章驱动程序
9.1 系统级驱动程序 251
9.1.1 通用接口函数 251
9.1.2 注册驱动程序 255
9.1.3 编写驱动程序 258
9.1.4 LED灯驱动程序 266
9.2 SPI驱动程序 268
9.2.1 SPI总线协议 268
9.2.2 SPI管脚配置 269
9.2.3 SPI驱动类 275
9.2.4 SPI气压计驱动程序 279
9.3 I2C驱动程序 287
9.3.1 I2C总线协议 287
9.3.2 I2C驱动类 288
9.4 应用级驱动程序 289
9.4.1 准备工作 289
9.4.2 实现驱动程序 292
第10章遥控器协议
10.1 PWM 297
10.1.1 PWM信号使用 297
10.1.2 PWM信号采集 298
10.2 PPM 302
10.2.1 PPM信号使用 302
10.2.2 PPM信号采集 303
10.3 S.BUS 310
10.3.1 S.BUS接口配置 310
10.3.2 S.BUS协议格式 312
10.3.3 S.BUS协议解析 313
第11章飞控状态与命令执行
11.1 主状态与切换 319
11.1.1 主状态定义与切换条件 319
11.1.2 主状态切换命令与响应 325
11.2 导航状态与控制模式 337
11.2.1 导航状态定义与切换条件 337
11.2.2 控制模式及其开关条件 343
11.3 飞控锁定与解锁 347
11.3.1 飞控锁定保护 347
11.3.2 锁定与解锁状态 347
11.4 其他功能 350
11.4.1 起飞点设置 350
11.4.2 航灯设置 354
11.4.3 安全开关 356
第12章状态估计
12.1 传感器校准 360
12.1.1 加速度计 360
12.1.2 陀螺仪 366
12.1.3 磁罗盘 369
12.1.4 水平仪 372
12.2 卡尔曼滤波 375
12.2.1 卡尔曼滤波原理 375
12.2.2 公式推导 377
12.3 姿态解算与速度位置估计 380
12.3.1 坐标系变换 380
12.3.2 姿态解算 383
12.3.3 速度位置估计 385
第13章飞行控制方法
13.1 反馈、PID、串级控制 389
13.1.1 反馈控制 389
13.1.2 PID控制 391
13.1.3 串级控制 392
13.2 姿态控制 394
13.2.1 姿态控制原理 394
13.2.2 姿态控制过程 395
13.3 位置控制 400
13.3.1 位置控制原理 400
13.3.2 位置控制过程 403
13.4 混合控制器 408
13.4.1 多旋翼混控原理 408
13.4.2 混控配置文件 413
13.4.3 PWM输出 417
第14章航线规划全自动飞行
14.1 导航基本原理 425
14.1.1 导航目标 425
14.1.2 搜索算法 426
14.1.3 预设航线 427
14.2 导航模块设计 428
14.2.1 导航引擎 428
14.2.2 自动任务设计 433
14.2.3 自动起飞与降落 438
14.2.4 自动航迹点任务 438
14.2.5 自动返航 440
14.2.6 目标跟随与其他导航模式 443
第15章动力学建模及半物理仿真
15.1 动力学建模 445
15.1.1 动力模型 445
15.1.2 受力运动 446
15.2 半物理仿真 448
15.2.1 使用jMavSim仿真程序 448
15.2.2 自行编写仿真程序 450
第16章外部控制与趣味航线
16.1 外部控制系统 458
16.1.1 方案设计 458
16.1.2 功能实现 460
16.2 趣味航线规划 470
16.2.1 等边三角形 470
16.2.2 圆形 473
16.2.3 三叶草 474
16.2.4 阿基米德螺旋线 476
参考文献 478