0%

无人机学习概况

Pixhawk + Ardupilot + 交叉编译工具链 + QGC(AP)

参考资料:
老吴学长教程:http://www.nephen.com/arrange/archive.html
Ardupilot:http://ardupilot.org/copter/index.html
Pixhawk开发者:http://dev.px4.io/


Pixhawk

首先稍微介绍一下Pixhawk,它很贵,是的.国外原装的估计的是700多,国内某宝上有很多公司自己仿照它做的板子也得588.目前据我所知道的某宝上卖的最便宜的Pixhawk是梦创团队做的,由于是手工焊制因此还有待提高其工业水平.不扯淡了,想玩无人机的朋友应该都知道大疆这个公司,目前它的无人机市场占有率很高,详情可以搜一搜相关新闻.大疆也很贵(其实要想玩无人机还是得掏钱啊),上次我们学校一老师让我们观看一下大疆的一款飞机,好像是”悟”系列的,说是从美国带回来的,20000RMB.__.所以对于我们一般的爱好者怎么办的?国外开源之王–Pixhawk是首选.硬件开源(为啥能够轻易仿制),固件开源(降低二次开发难度),上位机也开源(扩展高级功能).基本上能够满足无人机平台各个专业的需求.以前它叫做PX4FMU+PX4IO,其实对应到真正的板子上就是一个是stm32f4的芯片,另一个是stm32f1的芯片,主要是它俩加起来搞在一块板子上就是Pixhawk.PX4FMU负责进行高级的浮点运算等,PX4IO负责低级的定时器输出PWM等,两者共同运行了一个叫做Nuttx的嵌入式实时操作系统.如果是买回来的套件,板子肯定已经上载好了bootloader,如果是自己制作,必须在焊接好之后用Jlink等工具首先将bootloader上载进去,而后再通过交叉编译工具链或者上位机用USB接口连接电脑和板子下固件到板子.基础的板子一般只能飞基础的功能,比如自稳模式,定高模式啦.如果要飞高级模式,比如悬停,留待,自动模式啥的得需要GPS或者光流计等可选的硬件设备.所以,还是得舍得花钱…其实说到开源飞控平台有很多,比如国内做得还可以的匿名团队,有兴趣的小伙伴可以去了解一下.下图是梦创的板子.
梦创的板子

Ardupilot

这个是一个固件或者说是软件,相对于一般的用户来说就是固件,因为不去更改它.作为开发者来说就是一个软件平台,必须要进行二次更改或者移植去定制自己的功能.首先要说到APM团队,也是一个无人机开发团队,其实最早是PX4团队在Pixhawk上开发出了固件,然后APM也借助了他们的劳动成果在Pixhawk上加入了自己的一个应用程序ArduCopter,这个程序作为一个进程在Nuttx里面被nsh脚本启动.而后再进行各种运算和控制…可能玩过航模的童鞋知道ArduCopter,这玩意儿支持很多架构,不只多旋翼,还包括固定翼和小车等.因为APM团队早期是在基于Avr芯片的arduino板子上跑的软件APM2.x,后来发现低端的资源配置已经不能满足大量的运算了,正巧来了Pixhawk,因此APM团队仍然在完成移植和新功能的开发工作上面.我们为什么不用PX4的固件转而来学习APM的固件呢?答案是简单一些,功能上它们俩差不多,但是在功能的源码实现上不太一样.我们可以分别从各自的github仓库里面fork并clone代码到本地用编辑工具(如sublime等)打开查看就知道了.至于怎么分析代码架构,请先学好单片机等相关知识以及飞行器的基本原理,最好有很好的高数基础和信号滤波的概念.而后,学好C++,就可以开始你的DIY之旅了.如果英文够好的话直接去官网看开发者教程就可以了.下图可以看到ArduCopter也是支持很多硬件平台的,我们编译的时候键入make px4-v2即可.键入make px4-v2-upload即可上载代码.我的开发平台是ubuntu 16.04 amd64.
targets

交叉编译工具链

熟悉嵌入式开发的筒子们肯定都知道,我们在写好代码编译后是需要借助第三方电路结构(例如Jlink,串口有时候也支持)将程序从PC下载到板子上去.这是主要是由于指令集不一样所以要进行交叉编译,除非板子上已经装好了系统了…具体到开发Pixhawk所用到的编译器就是arm-none-eabi-gcc家族,详情安装方式参考官网APM或者PX4都可以,也可以看我学长的教程,只要搭建好这个环境编译APM或者PX4原生固件都是可以的.建议开发平台为Linux,win上面可能会出很多问题,也不建议在win上装Linux虚拟机,因为我当时就出了问题一直木有解决…最好装个双系统啥的.再说,Linux足够安全(相对概念,具体看设计),不是吗?下图是我的arm-none-eabi-gcc版本号.
arm-none-eabi-gcc

上位机

一款好的飞控开发出来,如果没有易于调参的上位机很是麻烦.Ardupilot里面大大小小的参数百多个,最经典的几个PID参数必须要调的.当然运气好机架和参数恰好对应了就不必这么麻烦了.还有些可选的硬件,在上位机里面修改比取修改源码方便多了.Linux上推荐使用QGC和APMPlanner,QGC和APMPlanner都是基于Qt写出来的上位机,直接支持Linux,Win,Mac.APM Planner而且还可以分析飞控上SD卡的飞行记录数据.而Mission Planner是用.net写出来的,在Linux上的话需要安装mono环境才能跑.对于校准加速度计和磁力计的话MP特别麻烦,转很久可能都转不到某些点.而且这里面的上位机几款都是开源的.有兴趣的都可以研究一下mavlink协议以及图形渲染相关编程技术.下图是APMPlanner的截图.
APMPlanner


总结

去年加入的实验室,学stm32f1基础知识,从定时器输出PWM控制电调和定时器输入捕获PWM获取遥控器量,到SPI总线协议收发射频信号,I2C协议获取IMU传感器数据,到基础互补滤波和姿态融合算法,串级PID算法控制PWM输出量.一路走来对飞行器有了基本的认识,今年寒假开始的Pixhawk学习,到近期的电赛结束,算是画上了一个简单的分号吧.感谢各位帮助过我的筒子们,加油吧,学弟学妹们,明年电赛好好干.