因为电赛,买来匿名飞控研究一下,感觉相比其他的一下开源飞控,易开发性和稳定性都是比较好的,但就是比较贵…匿名TI版飞控是从32版改过来的,硬件上就换了个芯片,程序里也有些东西都没删干净。整体上来说开源程度很高了,自己想改啥就改啥,不过就是光流内部是不开源的。这里整理里一下飞控框架,也是学习一下一个飞控从头到尾应该怎么写。
目录
一、飞控框架
框架中比较关键的几个部分都用颜色标了一下,具体内容可以参考:匿名飞控TI版解析(1)【学习总结】
高清图片ProcessOn的链接:匿名飞控TI版框架ProcessOn
二、框架解读
主要就可以分为两部分,一部分初始化,一部分轮询执行任务。轮询执行任务中,一部分是解决输入量的问题,包括程控、遥赶;一部分是解决反馈的问题,包括十轴传感器、光流、tof等;再一部分是pid控制部分,包括各个pid环;还有一些其他任务,辅助我们控制或者debug,包括数传、灯语等
1.初始化
- 系统初始化:初始化系统时钟、设置中断优先级等
- 参数初始化:直接从eeprom里面读,或者重新设置。
- 一些外设初始化:如usb、spi、uart等
- 传感器校准初始化:开机校准陀螺仪、加计z轴标志
- pid参数初始化:将Ano_Parame联合体内pid参数传递到pid参数结构体中
2.任务询调
匿名没有使用实时系统,而是直接用系统滴答定时器计时,隔1ms、2ms、6ms、11ms、20ms、50ms轮询调度任务。用icm使能的1ms中断来设置一个标志,查看是否执行1ms任务,其他的都是计时到了则执行。这样只是大致上隔这么多少时间执行一下,时间上并不一定精准,但是影响不大。
3.关键变量
- pc_user.vel_cmps_set_h[] 程控输出,对于全自动执行任务,控制量来源就是这部分
- fs.speed_set_h[] 遥杆和程控期望量融合后的期望量
- sensor.Gyro_deg[] 机体角速度deg
sensor.Gyro_rad[] 机体角速度rad
sensor.Acc_cmss[] 机体线加速度cm - imu_data 这部分比较多,其中包含imu几乎全部数据,如pitch、roll、yaw,以及各坐标系下的加速度等
- wcz_acc_fus.out 融合后高度方向加速度
wcz_spe_fus.out 融合后高度方向速度
wcz_hei_fus.out 融合后高度 - OF_DX2 OF_DY2 光流回传融合后的速度
OF_DX2FIX OF_DY2FIX
结语:把这个飞控看了下来,感觉还是比较清晰的,就是里面各种flag有点乱,其他还好。有些算法也想改一下,现在自己加了基于视觉的位置环,也做了图像坐标转换等。但是感觉这些个传感器很不稳定啊,非常影响系统可靠性。