这无人机真是够难学的,我就简单分析试着了解一下就用了一天半的时间,同样是从工作原理,系统结构,程序的设计思想,具体的程序设计思路四个方面试图了解一下。首先说明一下,只是我的理解,和楼主的代码实现流程是不一样的。
飞行原理:转速差会推动其向一个方向飞行,有四种飞行方式:上下飞行(垂直运动,如悬停状态时,4个电机同时提高转速,就会升高),前后飞行(俯仰运动,如后方电机转速大于前方,就会往前飞),左右飞行(滚转运动,如左侧电机转速大于右侧,就会往右飞),左右转向(偏航运动,如逆时针转动的M1,M3转速大于顺时针转动的M2,M4,就会右转向)。
四轴飞行为了抵消螺旋桨的自旋,相隔的浆旋转方向是不一样的,适合顺时针转的叫正桨,适合逆时针转的是反桨,正反桨的风都是往下吹的。
有两种飞行姿态,+型和X型,区别是:①电机摆放角度不同(将+型四个电机顺时针旋转45°就是X型),②“前后/左右”飞行时需控制的电机数量不同(+型前后左右每个方位相当于只有一个电机,X型前后左右每个方位相当于都是两个电机)X型对于飞行姿态控制更好。
可能表述不够清楚,可以结合下面这篇文章理解
https://blog.csdn.net/qq_27270029/article/details/79877022
没玩过四旋翼,看看这个文章多少能理解些概念
https://blog.csdn.net/msdnwolaile/article/details/51525245
系统结构:遥控器,飞行器。
遥控器:采集(按键,油门杆,方向杆的动作)控制(数据传输 和OLED显示)
飞行器:采集(MPU5060加速度,陀螺仪,HMC磁力定方位(飞行姿态感测),超声波定高,MS5611气压定高(两者互补),GPS定位点(返回点定位),NRF24L01遥控数据通信)处理(PID算法,姿态解算,卡尔曼滤波算法对数据整合)控制(PID控制算法,控制电调来控制电机转速)
https://v.youku.com/v_show/id_XM ... t.13141534.2_1.d1_2
程序设计思想:
从结果往过程去分析。使用角度:当按顺序打开遥控器和飞行器的电源后,先进行对频(NRF24L01的2.4GHz数据通信(遥控器的指令,飞行器的数据),遥控和飞行器的配对)然后地磁校准(定方位,为了前后左右飞行),再GPS收星(定位点,让飞行器自动返航),再解锁电机,缓推油门(否则好像可能会炸机),使它起飞,然后就是各种操作了。
在飞行过程中,需要融合三轴加速度计和三轴陀螺仪(MPU5060)及磁力计(HMC5883L)的数据进行姿态解算(此时会用到卡尔曼滤波算法),陀螺仪知道“我们转了个身”,加速计知道“我们又向前走了几米”,而磁力计知道“我们是向西方向”的。 然后通过PID控制算法(PID飞行控制算法能有效对飞行器的姿态和位置跟踪进行有效控制),PWM波输出,通过‘电调(电机驱动模块)’来控制电机转速。
高度在3米内,使用超声波(HCSR04)测高,否则用气压计(MS5611)测高,OLED在遥控器上,可能会显示飞行高度。
具体程序设计思路:
首先,关于NRF24L01, OLED,BEEP都没有用到(通过查看初始化函数),也就表示没有遥控器的功能,GPS没有用到,说明就是没有返航功能。没有遥控器控制,就是能飞起来,然后应该对飞行器的飞行姿态来说好控制了很多。功能就是围绕姿态解算和PID飞行控制为核心的,飞个几十秒后落下。关于楼主的代码,没有功能说明注释,没有实现步骤注释,没有使用单片机某些资源的作用注释,总的来说,注释太少,再加上本人水平不高,看得一头雾水。
关于为什么楼主介绍的和代码不一致,我的理解是这样的:楼主完成此项目用时较长,且没有使用版本管理,每过一段时间就保存一个版本,最后都不知道哪个是最新版本,每个版本都实现了哪些细节了,因为疫情,再次接触的时候都过了快两个月了,虽然自己写的但都快忘差不多了,不过好在主要实现的函数都在main里,查看main文件修改日期确定哪个是最新版本,再加上注释还算详尽,补救了回来。
两点注释:
卡尔曼滤波:需要对陀螺仪和加速度传感器所测得的数据进行综合和校正,而均值滤波,很难满足精度和实时性上的要求,通过卡尔曼滤波将加速度传感器和陀螺仪的数据进行融合,在计算实时姿态时很好地抑制了噪声的干扰作用,以提高测量精度。
PID飞行控制算法:对四旋翼的控制包括姿态控制(内环控制)和位置控制(外环控制),外环控制,解算出为了到达预定的位置期望的姿态角,该期望的姿态角作为内环控制器的输入。PID飞行控制算法能有效对飞行器的姿态和位置跟踪进行有效控制。
|