一、开篇
慢慢的、慢慢的、慢慢的就快要到飞控的主要部分了,飞控飞控就是所谓的飞行控制呗,一个是姿态解算一个是姿态控制,解算是解算,控制是控制,各自负责各自的任务,我也不懂,还在学习中~~~~
最近看姿态估计部分看的太累了,明显发现基础知识太薄弱,什么欧拉角、DCM、四元数、gyro误差、矫正、正交化等各个概念。然后就是各种转换公式,接下来结合代码介绍一些基本的东西。太深入的还不了解~~~
一定要多看论文啊,英文版的论文(也没有中文的,国人的悲哀啊),虽然看着头疼,看是看完了以后就会发现许多不了解的迷惑的就自然都解开了。
三、实验平台
Software Version:ArduCopter(Ver_3.3)
Hardware Version:pixhawk
IDE:eclipse Juno (Windows)
四、基本知识1、如何实现控制
一个无人机系统的算法主要有两类:姿态检测算法、姿态控制算法。姿态控制、被控对象、姿态检测三个部分构成一个闭环控制系统。被控对象的模型是由其物理系统决定,设计无人机的算法就是设计姿态控制算法、姿态检测算法。
1)姿态检测算法:姿态的表示可以用欧拉角,也可以用四元数。姿态检测算法的作用就是将加速度计、陀螺仪等传感器的测量值解算成姿态,进而作为系统的反馈量。在获取sensors值之前需要对数据进行滤波,滤波算法主要是将获取到的陀螺仪和加速度计的数据进行去噪声及融合,得出正确的角度数据(欧拉角或四元数),主要采用互补滤波或者高大上的卡尔曼滤波。
2)姿态控制算法:控制无人机姿态的三个自由度,用给定姿态与姿态检测算法得出的姿态偏差作为输入,被控对象模型的输入量作为输出(例如姿态增量),从而达到控制无人机姿态的作用。最常用的就是PID控制及其各种PID扩展(分段、模糊等,我的毕设就是模糊PID控制算法,惨了,啥都不懂,还能毕业不,哎~~~),高端点的有自适应控制(自动壁障应该就用这个)。当然,姿态控制算法里面比较常用角速度、角度双闭环控制(所谓的两级PID控制),所以常常有PID外环+PID内环等等,懂我搞懂了再细说吧。PID算法就是控制四个电机的转速来纠正欧拉角,从而使机身保持平稳。
2、关于编译环境的搭建
ardupilot的编译环境搭建比较简单,直接github下载或者clone到PC上就可以了。PX4Firmware的开发环境的搭建有点困难,结合几人之力中搞定了,现在把大致过程写下来以便帮助更多的人。
下面主要是讲述关于PX4Firmware开发平台的搭建,即所谓的pixhawk原生固件的开发环境。直接使用github下载PX4Firmware源码到PC上,在toolchain中的console控制台中使用make命令编译即可,在使用命令是需要在Firmware的目录下面才行,不然会出现无效命令的错误提示。编译过程相当复杂耗时,所以慢慢的等吧,如果中途出现编译到某处以后等待了10分钟之久还是没有往下运行,那么关掉控制台重启,重新make即可。在eclipse中编译有点难度,不仅需要安装Cmake;还需要在别的地方配置一二,首先是修改Firmware中的两个文件名,即template_.cproject和template_.project修改为.cproject.和.project.(注意名称前后各一个点“.”),然后就是修改eclipse的环境变量,修改成如下。原本默认的是“E:\PX4\Firmware”,现修改为“E:/PX4/Firmware”,就是斜杠的问题。在eclipse下很容易出现问题,所以建议还是在控制台编译吧,而且有很炫的颜色。
如果是拷贝别人的源码,可能会出现无法编译的情况,原因不是文件丢失的问题,而是编译一次以后eclipse会默认配置好一些路径,所以,在拷贝的时候按照原本的源文件的目录重新建一个一个的目录就可以了,比如本来是E/PX4目录,那么就在你的电脑中也建一个同样的目录,把拷贝的东西放进去就行了。
PS:普遍遇到的一个问题就是每次编译都会git submodule update,主要就是因为在使用console控制台命令行编译时的一个执行过程就是Tools中的check_submodules.sh,很明显是shell脚本,这个脚本首先检测源码路径中是否有“.git”,没有的话将无法实现git,然后检查.sh中指定的submodule,没有的这些submodule的话需要联网git,有的话直接跳过,显示Checked xxxx currect version found 。不联网时可以通过不执行/修改这个shell脚本略过检查更新固件,下面会详细介绍这个。
Tools里面有很多个.sh脚本,也就是一些关于配置的,比如make_color.sh,自己去配置为喜欢的颜色吧,关于控制台颜色的问题详见:http://blog.chinaunix.net/uid-598887-id-4019034.html。
五、正文
1、ardupilot到PX4Firmware的变化
首先说明一下,这两套代码我是结合着看的,反正ardupilot的底层也是直接调用的PX4Firmware,博文还是以ardupilot为主线展开。介绍一下ardupilot到PX4Firmware的变化吧,其实变化的不多,主要就是由原本的make转变到了现在的Cmake,原来在ardupilot里面处处可以见到.mk,现在是彻底的没有了,全部都是CmakeList.txt和.cmake