可以从51单片机和汇编语言学起,但为节约时间在此不建议新手学习51,可直接购买STM32F1或F4系列开发板学习STM32,因为51的资源有限,如果需要制备飞控板显然需要太多的外围电路,如果时间充分可以通过51结合汇编语言可以深入了解MCU基本原理,虽然汇编语言使用起来复杂,但对于了解MCU运行机理非常有帮助,在后面调试C语言代码的时候也能尽快的定位到BUG。
推荐的书籍是《C和指针》,一般好好将这本C语言书籍作为参考书就够用了,其他经典书籍可在后续代码开发中慢慢补充,这是一个循序渐进、理论实践相辅相成的过程,完全没有必要先将C语言理论知识学的炉火纯青之后才开始付诸实践,这也是很低效的做法。实践是理论持续的动力,MCU、C语言知识就绪后就可以结合开发环境如MDK入手一套飞控代码研究起来,个人建议初学者还是先以不带操作系统的飞控为主,可以进一步熟悉MCU的裸机代码开发熟练度的同时将全部精力集中在理论的算法实现上,无人机飞控实时性要求较高,前期只是实现稳定飞行为目标,不需要操作系统的介入,等日后功能的叠加丰富,再加操作系统也是水到渠成的事情。
入手飞控硬件后首先是各种传感器的驱动代码实现,这些驱动在Github上很多,可以下载借鉴,也可以直接研究国内开源飞控代码及硬件,无人机相关传感器按照重要程度排序如下:
陀螺仪-三轴的角速度测量,通过向量积分获得无人机在空间的姿态
加速度计-三轴的加速度测量,通过测量重力向量的方位来修正陀螺仪积分误差
磁力计-地磁向量的测量,通过地磁向量的方位来修正陀螺仪积分误差,因为光加速度计不能修正Z轴角速度积分误差
气压、超声波、激光定高传感器等高度计-实现无人机的定高
光流传感器、GPS-结合高度计实现无人机空中定点
初学的话主要为了能稳定飞行只需要陀螺仪、加速度计即可,市面上的MPU6050或者其他型号如MPU9250等都集成了这两种传感器,只要实现周期读取到相应的传感器数据即可,数据的读取涉及到采样率和低通滤波器的设置,这些就需要结合陀螺仪的数值积分周期来配置,其中需要对采样定理有所了解,所以奥本海姆的《信号与系统》与《离散时间信号处理》是理论自学的首选,其实无人机代码完善到最后想要精进都是需要自动控制理论、滤波器设计等相关理论知识加持,否则胡乱调试是完全走不远的,我们比较习惯的是从时域来考虑信号问题,《信号与系统》与《离散时间信号处理》*了你从频域角度看待信号,有了它们,频域数字滤波器的设计就没有问题了,当然在撰写代码的时候只需要利用MATLAB软件工具辅助计算即可。信号滤波除了频域处理还有有效的时域处理是基于概率论的各种状态估计,比如卡尔曼,这些需要概率论的知识,个人建议Dimitri P的《概率导论》和约翰J•申克的《概率、随机变量和随机过程在信号处理中的应用》,这两本书是理解卡尔曼滤波的基础,也是自成体系,适合自学。无人机理论需要的数学基础
1、微积分:
尤其学习向量值微积分。
托马斯微积分与普林斯顿微积分读本-学习基本微积分知识。
2、线性代数与运动学:
学习向量的基变换,即坐标系的基变换。
进阶学习变换的矩阵表示以及矩阵论。
3、动力学:
学习旋转的相对性及坐标系与动态系统向量的微分运动关系。
进阶学习分析力学,拉格朗日力学,哈密顿方程用于数学建模,这些都需要以泛函、变分法作为基础。
4、信号与系统:
学习信号的频域分析,线性时不变LTI系统,从周期信号的傅里叶级数表示推广到非周期信号的傅里叶变换获得信号的频域组成,再扩展到拉普拉斯变换求解线性时不变系统的线性常系数微分方程,需要复变函数的微积分基础。
进阶学习数字滤波器设计、自适应滤波器、卡尔曼滤波、最小二乘估计、维纳滤波器等这些需要概率论中随机变量的基础,滤波器可结合MATLAB仿真。
5、自动控制理论:
学习动态控制系统的数学建模,系统传递函数(系统单位冲激响应函数的频域表示即拉普拉斯变换)的推导分析。
机器人导论或惯性导航的学习可了解姿态的四元数、欧拉角、方向余弦矩阵表示。
6、实践:
通过控制芯片stm32及C语言、汇编的编程实践四轴项目来结合上述知识来深化理解。
学习数值分析来解决向量的误差矫正问题,如叉积矫正旋转的误差以及量化误差,以及引入反馈来解决实际系统的累积误差。