序:我的多旋翼飞控学习之路

时间:2024-05-22 20:27:58

缘起


从古至今,人类对天空的渴望,对飞翔的追求,从未停止。但迄今我们仍未能给自己装上翅膀,*翱翔于天际,于是人类发明了飞机、火箭,用庞大的钢铁巨兽将人们送上蓝天和太空。

而对于大部分类似于你我的普通人来说,很多时候,只能用一个小小的航模,来承载自己的蓝天梦。在上大学之前,我以为将来自己会在宿舍一刀一刀地,用木头或者泡沫,做出自己的飞机模型,然后装上一个马达,怀揣着憧憬,引导它飞上天空。谁能知道,时代的一些小变革,便将我指向了另外一条不一样的道路,但最终殊途同归,那便是多旋翼飞行器

我从小在一个偏僻的海岛上长大,家境贫寒,童年时期几乎与世隔绝,直到上高中之前都没有使用过普通话,没去过比村镇更大的地方。每天偶尔划过天空的飞机,成了我对外面世界所有的梦想和憧憬,可能很多人对于飞机的异样情结,也是来源于此吧。

在电脑和互联网还没有流行,手机也只能用来打电话的年代,知识与信息的珍贵,是现在的小孩无法想象的。以至于后来接触了淘宝,很长一段时间内都没有发觉,曾经只存在于梦里的各种元器件与材料,只要有钱,均唾手可得。

高中在市里读书,在学校寄宿,为了节省路费通常一两个月才回一次家,而每天节衣缩食,以便在周末时有钱去网吧上网。互联网的信息量之大,让我好长时间没有缓过神来,直到高一下学期的某天,才想起来要开始规划未来的发展路线了,当时在网上虽然可以查到很多信息,但是如果没有特别指引,很多时候你在网上看到的,可能都只是你想看到的。

最初我以从事一个最平民化的职业:程序员为目标,开始从C语言和socket通信学起,在网吧开始敲起了代码,没钱上网的时候,便去市里最大的书店看书,在一排厚重的《网络实战》《VC++入门经典》《二十一天速成PHP》等图书中,挑出比较薄的c语言、数据结构之类的书来看。当时各种硬件和电路板对于我来说还属于非常高大上东西,印象中它是只存在于实验室和大公司中的高端设备。

转折


在10年和11年之间,我升上了高二,此时在这个世界的某个角落,已经逐渐开始出现了一些小小的变革:还在创业阶段的大疆创新公司,发布了他们的第一款多旋翼飞控。而我,在对互联网的使用逐渐轻车熟路起来之后,对技术的认知也在慢慢改变,也在逐渐偏离最初的目标了。

最开始触动我的,是在全校集体活动上进行飞行表演的航模队。航模队是一些退休老教师和学生组织起来的,属于一个平时很难接触到的小圈子,他们在学校广场表演了固定翼3D花式飞行。看着天空不停舞动的飞机,沉睡在我心底的梦想又被重新唤醒了。然而没吃过猪肉也见过猪跑,即使没玩过航模,也知道这些东西需要花的钱不是我一个穷学生能拿得出来的,只能立下目标,先考上大学,然后再赚钱做自己想做的事。

高三对于大部分学生来说都是充满了痛苦和回忆的,而我为了实现目标,在高二那年暑假,开始了苦行僧式的学习之路,之后高三那年有许多同学和老师都不能理解的举动,均是为了达到我的目标。当然最后奇迹并没有发生,在两千多人的年级中,我也只是从高一高二时接近垫底到高考只超过一本二三十分,只能选择了省内一个大家认为比较普通的大学,电子信息类专业。仍记得当时志愿表上我只写了这一个学校,一个专业,且不服从分配。并不是因为我真的多喜欢这学校,而是学校地处改革开放的前沿城市,让我觉得将来能有更多的机会实现自己的梦想。

在我的认知中,要学会跑就必须先学会走,同理,要学会飞就得先学会跑,于是,在高考前一个月,我觉得大局已定的情况下,说服父母提供了一笔几百块钱的资金,上淘宝购买了一些学习工具,包括最基本的电工工具如烙铁、万用表等,51单片机学习板,一些用于练习焊接的收音机DIY套件,还有用来做智能车的小车套件。这些东西,都是我经过了多次查询,深思熟虑后才购买的,毕竟资金非常有限。

高考结束后,大部分同学开始了他们的游玩计划,而我在网吧下载了许多PDF书籍存到两百块买的二手安卓平板里后,回到了家中,开始学习硬件电子相关知识,暑假便这样在睡懒觉,焊收音机,看模电相关PDF中过去了一半。之后父母找亲戚凑钱给我买了台笔记本上大学用,于是终于可以开始学习单片机了。然而可能是第一次接触,脑回路还有些转不过来,许多单片机的寄存器概念一时半会理解不了,好在有C语言的基础,暑假结束时,也基本掌握51单片机的基础用法了。

大学


进入大学后,目标明确的我开始混进学院的实验室,蹭用实验室的各种工具和资源,诸如焊台、热风枪、开发板之类的,并开始学习STM32。同时,也经常上网逛5imx论坛,而当时多旋翼在爱好者圈子里已经逐渐流行开了,许多人自己购买模块组装飞机,再挂上一个鹰眼之类的运动相机,便能实现简单的航拍。刚上大学,人生地不熟,没有收入来源,每月只有六百块生活费的我,自然没有能力去diy一台自己的飞机,只能继续在实验室学习,参加电协(后来我成了电协会长)的一些活动,还有学校里的小比赛,原先计划是大一先打好各方面基础,大二再开始想办法弄自己的飞机。

大一下学期,参加了学校内部举办的一个小比赛,用一个热得快和电磁继电器做了一个水温控制系统,第一次学习和使用了PID控制算法,为了调试PID参数,查看数据波形,还用Labview做了一个简易上位机。做完后控制精度还不错,很有成就感,更重要是第一次踏进了控制算法的大门。

序:我的多旋翼飞控学习之路

大一暑假时,我开始了多旋翼飞控的学习,当时网上在一些论坛上出现了许多迷你小四轴diy的个人项目,但是飞行效果还普遍不太行,甚至能飞起来的就算不错了,但好在成本较低,适合学生折腾。于是我在淘宝上花了几十块钱买了一个使用STM32F1为主控的小四轴PCBA,即焊好元器件的电路板,只提供原理图,没有任何代码或固件及技术支持,顺便还买了空心杯小电机和桨。当时只是稍微熟悉STM32的开发,对飞控算法还完全没有任何了解,而那时候网上的相关资料也并没有现在这么多,花费了几天时间还没有太多进展,后来找到了几款当时的开源飞控,尝试移植程序,终于能让小四轴颤颤巍巍地离地了,不过没有遥控器,没有办法做更多的测试。

暑假时我没有回家而是留在学校继续学习,是因为当时准备参加暑假里的全国大学生电赛,拉了两个同为大一的并算是所有大一新生里面比较有基础的同学一起参加比赛,而其它参赛队伍的都是大二大三的,3人全是大一的队伍基本算炮灰了。可能是命运中冥冥注定了我要踏上这条道路,在那一年的电赛中,首次出现了多旋翼的题目(以前基本都是小车之类的),虽然知道难度可能很大,但我还是毫不犹豫选择了多旋翼,在学院竞赛经费的支持下,我终于能把之前放在购物车好久的各种配件买了回来,开始组装无刷动力的四旋翼。不过意想不到的是,比赛第一天题目下来后才知道飞控主控必须要使用一个谁也没用过的瑞萨单片机,结果4天下来,除了加起来只睡了10个小时不到,烧死无数脑细胞之外,只做出了一个勉强能飞并预先设定好飞行时间以到达预定目标的大四轴,后来也就只拿到了一个安慰奖性质的省二等奖。

序:我的多旋翼飞控学习之路

但从此开始,多旋翼的大门算是真正打开了。比赛完了之后,我继续自己的小四轴开发,后来成为了国内某开源飞控的主要开发者,大二和大三期间,除了参加一些专业比赛之外(主要是电赛和RoboMaster),大部分时间放在了多旋翼飞控的学习上,并开发了数款飞控和空心杯小四轴、小六轴,一个人承包了软硬件设计,还要负责SMT外包加工等琐碎工作。知其然还需知其所以然,我一边调试飞机,一边学习相关的理论知识,在大二和大三的暑假末期,还去某个大学担任了一个星期的多旋翼实训课程的讲师,所用的课程道具就是自己设计的小飞机。然而技术的大山如此之高,一个人的能力和精力又是有限的,什么都学什么都做的情况下很大可能性是什么都没学好。现在回过头来才发现,当时的自己对于多旋翼飞控技术的了解仅限于冰山一角而已

到了大四,前半年出去做了一些和多旋翼无关但很有趣的东西,后半年回来做毕设,题目也是多旋翼相关。但此时的我知道自己对飞控的了解还是太浅薄了,于是毕业时去了一家公司继续做飞控,花了三四个月的时间从头到尾开发了一套完全功能的多旋翼飞控出来,开始应用于公司的航拍机产品上(虽然这个市场已经被大疆霸占了,但还是有很多小公司在苟延残喘中),后面便是工厂和客户源源不断的反馈,基于这些反馈不断地去优化调整飞控程序,在这个期间,逐渐加深了对于很多算法的理解,更明白了曾经的自己是多么地无知。
序:我的多旋翼飞控学习之路

目标与愿景


如今,消费机无人机市场不再热门,市场份额牢牢掌握在大疆手中,能存活下来的公司也就越少了,如果想专门从事多旋翼飞控开发方面的工作,没有一定水平是比较困难的,至少要比我高一个等级吧。那为什么我还继续推荐大家来学习飞控呢?除了梦想和对蓝天的渴望之外,更多的是可以得到一个有趣的动手实践平台,所有相关专业的学生,都能利用多旋翼,验证自己所学知识,了解多种经典算法在实际工程中的应用,还可以强化自己的嵌入式编程能力,一个完整的飞控对于普通的学生项目来说算是较大规模工程了。

另外有一件引人深思,悬在我心头多年的事情,那便是,在近年来民用多旋翼行业发展得最红火的中国,却没有一款像样的开源飞控,MWC、APM、PX4、AutoQuad等耳熟能详的飞控,均来自于国外的开源项目,其中APM/PX4更是一个前无古人的优秀作品,养活了无数中国的小无人机厂商。虽然这些开源飞控在性能上不及大疆的商业飞控,却是为多旋翼飞控的发展建立了一个良好的生态圈,可惜由于大疆的一家独大,这个生态圈并没有能以很快的速度迅猛发展下去。

而国内,至今仍没有出现一个类似的开源飞控项目,只能在淘宝上找到许多“收费开源飞控”。近一两年国内偶尔会冒出几个小的飞控开源项目,但基本都是小打小闹,不成气候,而且其中大部分的主力开发者均为在校大学生,随着他们的毕业,项目基本就中止了。历史经验告诉我们,在中国,开源项目没办法盈利,盈利的项目通常不会开源,在这样的思想带领下,能够投身参与开源飞控开发的人就更少了,除了在校学生,但是大部分学生技术水平有限,且较少接触实际产品和市场,难以做出像样的作品。

但是,总是需要有人改变这个现状,创造更好的条件,为中国多旋翼行业的技术发展贡献出一份力量,而不只是让技术资源单单集中在某个公司身上。抱着这个想法,我开始打造一套全新的开源飞控,前期单纯由我个人投入浅薄的技术力量来建立一套完整的,高性能的多旋翼飞控,后期,依靠吸引全国各地的有志青年们,共同来完善这个飞控项目。这个开源飞控项目为:

天穹飞控

截止目前,在github上已经提交了两百多commit,并完成了基本飞行功能的开发与初步测试,可以实现自稳、定高、定点飞行及自动降落、自动返航等功能,接下来还将进行航点飞行、轨迹跟踪控制等功能的开发,以及算法和其它细节优化。同时会开发一个配套的飞控开发专用上位机,方便飞控的优化工作的持续性进展。飞控兼容mavlink,也可以使用Mission Planner和QgroundControl这两个功能强大的地面站。

项目的最终目标,是打造出一套易于使用和开发,且飞行性能比肩商业产品的中国本土化开源多旋翼飞控平台,为中国的多旋翼无人机产业添砖加瓦。

当发布飞控1.0版本后,我会花一些时间写一些相关教程,水平有限,仅供新手参考:

【深入浅出多旋翼飞控开发】系列教程

不过我也清楚,在当前中国的这个大环境下,愿意付出和有时间付出的人太少,但如果这个项目名气够大,终究还是会有许多有能力的“闲人”愿意贡献一份力量,包括不仅限于BUG的发现,程序框架的优化,算法的改进或重写等。未来,多旋翼飞行器的应用还有很大的扩展空间,有着一片广袤的天空有待我们去开发,这个开源飞控仅仅是一个基础,还有许多多旋翼相关的飞行应用需要被发掘和开发,至于未来我们能做出什么东西,可能只有坚持不懈地努力做下去,才能找到答案。

最后我想起小说《三体》里的一句话:

在中国,任何超脱飞扬的思想都会砰然坠地的,现实的引力太沉重了。

的确,类似“打造中国多旋翼技术开源生态圈”这种话,由毫无家庭背景并蜗居在大都市,每天早上毫无尊严地挤着地铁晚上加班时还要想着这个月的房租和奶粉钱的一个农村出身的普通工程师嘴里说出来,有点太违和了。在中国这种浮躁的环境下,能够把自身精力投入到自己热爱的事情,并持续十年以上的人,太少,但正是因为从农村走出来,我更加理解了自己的人生目标与动力,并会一直朝着目标方向前进。十多年前的我,会花很多时间找到几片放大镜,然后加上黄皮纸,做成一个简易长筒望远镜,只为了能够将夜空中的星星观测得更清楚,它们似乎告诉我,不能将自己的思想局限在这一片小小的笼子里,于是那时我经常尝试着和未来的自己对话,多年以后的自己,还能和现在一样保持初心么?而今天的一切努力,都是为了告诉曾经的我,在这条道路上,你并不孤独,只不过时间维度不一样而已。