关于后续部分

关于算法这块基本上算是读完了,只能从大致上理解下了,毕竟代码不是自己写的没有最直接的感受,那么我们来回顾下,试着从整体上来理解下匿名代码除了最上层之外的部分(最上层也就是包含main.c在内的那部分),之前一开始就钻进去某个文件里面研究算法原理和算法实现,不像我的风格,因为这样在一个大的框架里面很容易迷失,现在停下来,回过头去,检验一下我们所做的有没有成效,然后再说下一步

  1. 关于匿名代码标准库这部分就不需要多说了,这是基本功,标准库/HAL库/寄存器都可以,哪种方便哪种喜欢用哪种
  2. 关于外设的驱动这块我们也直接跳过去了,最开始用意法半导体公司单片机的时候老是觉得能写好驱动就很厉害了,连标准库都要用寄存器摸一遍才算罢,虽然是写的超级简单,可还是觉得很有成就感,后来,准备自己写个无人机,发现就尼玛底层驱动就能折磨死人,什么东西都要亲力亲为而且要熟稔于心实在是太难了,而且也超级费时间,于是乎,这次读代码就直接跳过去这个阶段了,专注上层算法的理解,本来就是,这个底层算法网络上一抓一大把,需要的话找点资料研究两天就怼出来了,不要什么东西都从0开始,很容易有挫败感然后就做不下去了,都说失败是成功之母,我觉得成功一次会让你更有自信去成功,然后成功10次。扯得有点远,如果是以后想在嵌入式这块发展的,建议学会如何写驱动,换了芯片换了板子照样写,这就是能力,仅仅想玩下飞控的建议直接copy吧,讲实话,copy也没想象的那么简单
  3. 再往上走就到典型算法那部分了,按照匿名代码里面的划分,分为通用和专用两部分。首先通用部分最主要的两大经典:姿态解算和PID,说到飞控基本上都是从姿态解算开始的。我们详细分析了姿态解算这块,涉及到的主要是’Ano_Imu.c’这个文件,前面博客也有介绍,从一些专门术语到秦永元的惯性导航,从为什么要进行姿态解算到怎样进行姿态计算,从经典Mahony互补滤波算法到匿名对经典算法的改进,从理论知识的理解到匿名关于代码的实现,虽然说存在很多种解算方法现在只理解了一种,但这恰恰不就是成长吗?先成功实现一种,别管精度怎么样,把整个框架做出来然后去逐个模块进行优化,整体上把握永远是最重要的,不然就会陷入一个区域越钻越深,临了发现绝大多数最基本的功能都没实现,惭愧至极,以上感受均来源于亲身经历。不妨回想下是否还能记起为什么要进行姿态解算?目的是什么?姿态解算处于经典PID控制环中哪一部分?姿态解算输入是什么,输出又是什么?在哪个文件里被调用?至此姿态解算结束。
    接下来就是PID算法了,本人并不是自动控制专业的学生,也没学过各种控,但是模电上的负反馈让我对PID记忆犹新。从经典PID算法的公式书写到C语言实现,从单级PID到稳定的串级PID,从各种博客理解到最后匿名代码解读,我们无一不经历过,还记得PID在哪里被调用吗?还记得PID最重要的两个入口参数是什么吗,以及最重要的输出值是哪个吗?千万别忘了串级PID的框图,简直太重要了,角度环和角速度环,高度环和高度速度环,虽说是串级PID可还是调用最基本的单级PID来工作,那么请问?为什么Pitch/Raw/Yaw/Thr各需要一套PDI呢?理解了这些基本上这个通用文件夹里面的算法就清楚了,提纲挈领,不会走偏
  4. 接下来介绍这个专用文件夹里面的内容,有点杂,不像上面那个文件夹被两大算法支撑,可是我们不是都读过了吗?来看看吧。
    首先要介绍的是姿态环和高度环,都是串级PID且基于通用文件夹里面的单级PID,这块或多或少我们上面都扯到过了,属于控制部分。而位置控制这块儿不是很清楚,一直没理解位置环。飞行控制这块儿主要涉及到的是一键起飞和降落。而电机控制则是PID系统中最终的执行部分,姿态环和高度环得出的四个值最终在电机这里被调用,然后通过PWM输出完成执行机构的一次任务。至于剩下的三个文件,一个磁力计有关的,主要是对磁力计得出的数据进行处理以及进行校准等操作,电源这块应该是使用ADC来探测电压,如果低于设定则会发出警报等,一般外接BB响即可。最后关于飞行数据这个文件也是蛮重要的,看得出来也算是对最底层IMU数据进行获取之后进行上层封装,数据包括陀螺仪 加速度计 磁力计 光流 气压计等,然后调用姿态解算函数,得出三个欧拉角。不难分析整体主要分为三部分,测量,PID控制,执行,测量即最后飞行数据这块,执行则涉及到电机,PID控制更明显,则是单级PID和串级PID这块。相信这么一梳理大家对代码的整体把握会更加清楚吧
  5. 最后就只剩一个文件夹了。作为最上层,当然是调用各种底层应用和初始化。
    简单说下准备读取的文件 main.c Ano_Scheduler.c BSP_Init.c 目前就准备看看这三个,还有其他的如Ano_DT.c则是讲飞控和地面站进行数据通信,有需要上传自己数据的可以简单看下基本就没问题,Ano_Parameter.c则是讲flash保存飞行数据然后进行数据分析,直接用数传就可以啦,而且可以实时在线查看,也可以在地面站保存,Ano_RC.c是遥控器这块的,需要加通道更改遥控器功能的可以在这里面捣鼓。光流没用到就不聊了,USB关于HID这个还挺有意思直接插上就可以自动识别。
    然后就没了,整个工程就被分解完了。都是走马观花在看,因为人家已经写好了,不用自己动手了,简直太懒了啊啊…如果想自己亲手写一份代码的我觉得这样的读代码还是很有必要的,写代码不能局限于某个细节,必须有个大局观,虽然已经说过很多遍了,可我还是觉得有必要再说一遍,基本上就到这里了,匿名代码基本上算是读完,而上面的三个文件里面有很详细的注释可以帮助理解。
  • 9
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值