接下来是最重要的imu。emm……其实100多的jy901b甚至更贵到两三百的imu和十块不到的mpu6050没有精度上的区别,它们的区别主要还是内置算法。我对imu的误差这块还不是很了解,还在学习,至少下一代我不打算更换imu,再加上论坛里主要也是使用mpu6xxx或mpu9xxx系列的,所以我决定略去这块。
但是,imu内置的算法是很有必要讲的。从我查到的来看,很多市面上的imu、arduino社区的很多方案,CSDN上开源的很多基于stm32的算法都在使用mahony滤波算法而非kalman滤波算法。mahony融合滤波算法是很优秀的算法,兼顾了计算速度和姿态精度,而且基于PID算法的思想很方便上手,很多无人机飞控都在使用该算法。(由于与本文关系不大,仅简单阐述,假设系统加速度为零,角速度积分出的姿态矩阵左乘理想的重力加速度获取预测的加速度计值,与真实测量值的内积结果作为误差,然后向PID那样,对误差做比例P和积分I,进而修正角速度,磁场修正类似)然而,从前面可以看出,mahony算法的缺点是在系统加速度较大及姿态变化剧烈的时候姿态不准确,而显然探空火箭的整个工作流程都如此。所以这个不管在固定翼还是旋翼无人机上优秀的算法实际上不适用于探空火箭。kalman滤波算法也需要利用重力和磁场修正,但是kalman滤波的比值矩阵K是可变的,概统可以证明它能让误差一直最小化。我使用过JY901b和mpu9250加CSDN上某开源的mahony滤波算法进行动态测试,前者在动态下精度仍然够用,后者就相对不行了。还有arduino的mpu6050示例库还有部分CSDN上开源的代码使用的是mpu6xxx内置的dmp硬件解算,这个算法好像没有公开,我不知道具体也无法判断。这里我觉得要不就直接买自带kalman滤波的imu,要不就自己写算法。当然,我也没有做什么实验精确对比,mahony算法精度的确会低些,但是低到什么程度我就不清楚了,如果硬件资源受限用kalman滤波无法满足实时性的话那也不是不能用。
接下来就是飞控的主控了。我只比较熟悉stm32系列,其他单片机我真的不了解。要做加速度校准,旋转和划桨效应补偿,以及组合导航的数据融合,stm32f1是不够用的(至少我写的代码如此,不排除有大佬能优化代码使其满足,但我觉得可能还是不如换个单片机),算力和外设均如此。我在尝试f4系列。
我之前看到有文章中有对使用arduino的争论,由于我对arduino的了解不深,我也无法做什么判断,不过还是建议要不要完全依赖库,至少要看看库的代码,arduino封装程度毕竟比较高,在中断啊,通讯啊,还有之前说的那个解算算法等等,按我查到的资料看似乎比较简单,如果发现无法满足要求要自己写。还有要做旋转和划桨效应补偿,以及组合导航的数据融合的话nano和uno系列看纸面数据都是不够用的,可能要用别的,这些我就不知道了。
再交代下关于软件滤波的事情,比如主控连续检测几次大于1.2g的噪声才判断发射,再比如加速度数据的滤波。主要是这些维特智能在jy901b里做过了,实测完全不需要,但是如果想要的话,加上去也没啥问题,但是注意不要做均值滤波等会影响数据频率的滤波这样不仅效果不明显,还会降低更新频率,进一步降低精度。如果是自己写姿态算法的话,这个就要注意一下了,原始数据需要这样滤波。
接下来就是无线通讯了。我建议是直接买2.4GHz的数传电台,不要相信某些NRF20L01+卖家说的1100m数据传输
,我也在找。这里说件事,某多多在光明正大地卖915MHz数传电台,其实这个频段国内不能无证直接用的()虽然说我们搞kn、ap都是在这种灰色地带,但是……踩在灰色地带的还是越少越好吧……我们也不像远航机玩家那样需要大数据量超远距离传输……2.4G完全合法的模块也能传3km,真的绰绰有余了,超过3km那再改(
好了应该大概都说了,接下来,额可能要明天,开更简化的捷联惯导算法和一点点卡尔曼滤波算法。