现在开源社区的人言必pixhawk,其实我觉得从学习的角度来说,pixhawk太贵,而且不适合学习,我比较推荐的是 https://chiplab7.taobao.com/ 这家淘宝店卖的STM32F405飞控,买回来以后自己再随便买个机架(比如DJI F450)、接收机和遥控,就能按照飞控板附带的学习资料、调试软件飞起来。这家店目前好似不公开出售这款飞控了,但是万能的淘宝满满都是业界良心,LIGHT 开源 飞控 四轴 飞行器 diy 四旋翼 多旋翼 无人机 开发板,这家店看起来也非常棒
第二步:看硬件图、读代码
chiplab7的飞控板附带一大堆学习资料,对加速度计、陀螺和磁感计都有很仔细的解释,硬件链路图也很详细。看完就可以学会怎么给stm32单片机开发程序,当然如果题主自己去另外单独花时间学学stm32单片机开发也是很好的。chiplab7淘宝掌柜的又很认真负责,我学用的时候,发现代码有bug和看不懂的地方,都可以直接找掌柜的问……
看完代码以后,对一个飞控系统的基本模块:姿态解算、控制解算、混控输出、遥控器处理、嵌入式处理就很明白了。然而这里面有很多技术是需要另外学习的。除了基本的嵌入式编程以外,最重要的是要理解姿态解算和控制解算这两块知识。这个代码采用的是最简单的互补滤波算法做为姿态解算模块,然后控制解算是对欧拉角的三个角度做闭环PID控制,基本都是基础的基础了。
第三步:理解核心的数学和控制知识
姿态解算和控制解算涉及的知识有:
1. 刚体姿态的表示、运动学方程和动力学方程。主要是对牛顿-欧拉方程的认识和理解、刚体姿态的欧拉角表示法、姿态与角速度的关系等等。
这部分说复杂不复杂,说简单也不简单,我同样是没有找到一本完整的书全都介绍过的,是学了好几个不同的书和论文以后搞明白的。现在看起来是从维基百科入手比较靠谱。
2. 自动控制原理。讲PID的书和文章就多了去了,没有太多复杂的书。
3. 线性估计基本原理。其实就是互补滤波:Reading a IMU Without Kalman: The Complementary Filter 。拿这个关键词百度各种搜就会了。
第四步:小修小改加深理解
chiplab7的飞控是靠气压计定高的,飞行效果非常奔放。这时候可以淘宝买个20块钱的超声波模块,然后自己写个高度环去稳定飞控的定高表现。
我觉得这个过程至关重要,因为高度控制相对来说是个比较直观理解PID控制的方式,而且chiplab7的飞控加高度控制非常好加。工作量不大,因为改善效果很显著,所以可以让人很有成就感,加深继续学习的乐趣。
全称Inertial Measurement Unit, 9轴的IMU包含3个传感器,加速计(线速度),陀螺仪(角速度),磁力计(磁场),每个单元3个轴,对于姿态解算这个任务来说,三个信息来源再加上传感器融合算法一起组成一个AHRS系统 Attitude and heading reference system,用来估计系统的姿态,可以用欧拉角pitch, roll, yaw表示,也可以使用效率更高而且不会出现万向锁这样的问题的四元数。
有些问题是传感器普遍存在的,比如非线性,温度漂移,随机游走,接下来挨个看看将Nano33开放版静置在桌面上时,三个传感器返回的数据:
通过加速计和磁力计可以获取当前的绝对方向,但是对于非静止的系统,平移运动的加速度和旋转运动的柯氏加速度会导致无法给出准确的重力方向,而磁力计又会受到系统周围磁性材料影响。
另一方面通过陀螺仪获取角速度可以积分获得系统位姿,但是需要一个初始位姿而且会逐渐偏离真实结果。
Sensor Fusion 传感器融合算法就是在三个信息来源之间 权衡 获取最终结果,一般的融合算法都可以总结为两个步骤:
1.初始化姿态
2. 通过加速计和磁力计校正陀螺仪的漂移误差。
下一章介绍如何调 Arduino的 SensorFusion库 观察融合算法的效果~
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)