2016年,偶然的一次冲动,我想要自己制作一套四旋翼无人机。虽然当时可以购买现成的商业自驾仪和下载开源飞控程序,但是为了深刻体会无人机的控制原理,我还是决定要自己从零开始。我一边到处查找相关资料,一边向相关朋友请教。同时,购买了很多配件和控制板,自己尝试组装四旋翼无人机和编写控制程序。起初,我买了很多竹条,用手钻打洞,做成机架,安装电动机和螺旋桨。当时的我没有任何理论基础,写完程序之后也没有使用任何仿真程序进行飞行模拟,而是直接用一只手举着飞机,另一只手在电脑上调节参数。我在家里一间10m2的房间里进行测试,有几次程序出现错误,失控的螺旋桨将卧室里的地板、门框都打坏了。有一次螺旋桨甚至在我的右胳膊上割开一条一寸多长的伤口。有朋友对我开玩笑说:“这是我听说过唯一一个因为编程而导致的流血事件!”经过不断地修改程序和试飞,不断地分析总结问题并修正,飞机终于在一年之后离开地面飞上了天空。 虽然我自己开发的飞控程序与商业无人机没有可比性,也没有那些开源飞控程序功能强大、稳定,但是对于我个人来说,这架无人机从无到有的整个过程,让我从本质上理解了多旋翼无人机的控制体系和飞行原理,这对我后来学习并理解PX4开源无人机飞控程序有很大的帮助。之后,我开始接触开源自驾仪Pixhawk和开源飞行控制程序PX4,这使得我从实践回归理论,对多旋翼无人机有了更深入的理解。 后来我自己创办了“编程外星人”公众号和“问渠网”,每个星期都会通过公众号和网站发布对多旋翼无人机的学习笔记和心得体会。基于这些笔记与心得,在对多旋翼无人机的理论体系做了梳理与思考后,我补充了大量内容,形成了本书。 本书以四旋翼无人机为例,讲解多旋翼无人机的飞行理论与控制体系。从螺旋桨、电动机、电调、动力电池、机架等角度介绍其硬件结构与原理;讲述多旋翼无人机如何产生飞行动力,如何完成六个自由度的飞行动作。通过开源自驾仪Pixhawk和开源飞行控制程序PX4介绍全自动多旋翼无人机控制系统的整个实现过程,内容涵盖了从硬件组装清单到飞控程序下载编译的整个过程,并对如何使用地面站程序对飞控进行航前校准和参数设定做了说明。 本书将飞行理论与设计实现相互结合,通过对PX4飞控程序的分析、讲解、修改和完善,梳理了多旋翼无人机的相关知识。包括:飞控程序的架构设计、开源操作系统、驱动程序、状态估计、控制算法、导航系统等,以及如何通过对多旋翼无人机的动力系统建模实现半物理仿真和趣味航线飞行等。 本书编写时所参考的PX4源代码的版本号为1.8.2,在此版本下源代码共有329万行之多,其中包括Nuttx操作系统源代码259万行,PX4飞控程序54万行。并且这只包括C/C++源代码,而不包括Xml、Python、Shell脚本等其他工具类代码。PX4飞控程序中参与编译的模块有50多个,代码量庞大而且复杂。因为PX4源代码中很多函数的参数都非常多,变量的命名也参差不齐,代码为了适应多变的条件,处理逻辑非常之复杂。如果将大量这样的代码直接引用到本书当中,会使得读者理解源代码有很大的困难。因此,为了方便读者对源代码进行阅读和理解,本书中所引用的源代码是从PX4程序中部分摘取的,并进行了大量的简化和修改,所以本书中的源代码与PX4飞控程序中的源代码并不完全一致,但是却更便于学习和掌握。 书中内容涉及的知识很多,在编写过程中难免会出现疏漏和不足,敬请广大读者朋友和专家批评指正! 本书的编写几乎花费了我全部的业余时间和精力,如果没有家人的大力支持和很多好朋友的建议和指导,我根本无法做到。在此特别感谢我的家人、朋友为我所做的一切! 李德强
本书以四旋翼无人机为例,讲解多旋翼无人机的飞行理论与控制体系,从螺旋桨、电动机、电调、动力电池、机架等角度介绍硬件结构与飞行原理。通过开源自驾仪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
ISBN:978-7-122-36117-2
语种:汉文
开本:16
出版时间:2020-08-01
装帧:平
页数:478