花了大概三个月时间,上手了四旋翼,今天做一个零散的总结:

1.开源飞控

想要得到大飞机的平台资源没那么容易,所以只能从小飞机下手。麻雀虽小五脏俱全,进而能把想要验证的事情做出来。

起初摆在眼前的选择基本就是两个:开源飞控Ardupilot,或者大疆。如果检索哈工大等院校关于四旋翼的学术论文,基本集中在这两个平台。

然而至今都没真正着手研究大疆的东西,只是了解了一些关于大疆SDK的新闻:不同等级的软件包(Mobile SDK,Onboard SDK 和 Guidance SDK)开放程度不同,支持的飞机平台也不同。这总让我感觉到受制于人,所以选择了另一条路。

Ardupilot(ArduPilot Open Source Autopilot)是如今开源飞控软件的主流,它的硬件包括APM飞控板,以及硬件升级后的Pixhawk飞控板,它的地面站软件是MissionPlanner,与它相搭配的通讯API是Dronekit(DroneKit by 3D Robotics)。

另外有从Ardupilot分离出来的PX4(Open Source for Drones - PX4 Open Source Autopilot),它只支持Pixhawk硬件(对它们的关系并不太清楚),它的地面站软件是QGroundControl,与它相搭配的通讯API是Dronecode。

以上两种开源飞控所使用的通讯协议都是MAVLink(MAVLink Developer Guide)。

2.四旋翼组装与飞行

四旋翼的diy资料(地面站的使用、各种调试、校准与常用飞行模式)随处可见不再赘述。以下是我的个人使用经验:

A.小飞机的各个系统与大飞机都能够对应上,我在拆装飞机的时候会想:这个事相当于结构总装,那个事相当于电气联调测试……这二者比较而言,小飞机能够让你快速对飞行器有一个总体认识,而大飞机相关工作让你感觉到:自己是一个庞大“系统工程”的一小部分。

B.建议新手在空旷草地上飞,这样飞机摔下来草坪能帮你减小损失,不是老司机切不可在有建筑的地方飞。

C.飞行全程戴眼镜保护自己 ,围观人员可以撑伞,一来防晒,二来以备不时之需……

D.飞前检查天气风力、地面水平、螺旋桨连接、起落架连接、飞机结构完整性与重心、飞机电量、遥控器电量。

E.由于大飞机试飞时的见闻,我曾经追求起飞应该是“平稳而缓慢的离地”,但是对于APM飞控来说似乎做不到。改为Pixhawk之后没有做这种尝试。

F.淘宝级别的无人机做工质量参差不齐(螺钉脱扣,起落架不能紧固,图传线路接触不良,遥控器断电竟然起飞…),所以在飞机没断电的时候永远小心螺旋桨。

G.固件升级后要记得重新校准,否则飞控还“不认识”飞机。

H.新手肯定会遇到意外,遇到意外的时刻也是考验心理素质的时刻。有几次出了问题时我一痛操作,飞机下来(平稳或失控)后,我缓过神来发现自己因为紧张已经忘了刚才的很多细节,这时候还需要旁观的朋友来帮我复盘。没做好充分准备不能匆忙去飞,进展不顺利要克服急躁心理及时停止,回家复盘再做打算也不为迟。

I.关于调参,有人建议:如果想要相对更加精准的自动调参结果,不妨飞3次自动调参,然后取各个参数的平均值;百度贴吧里甚至还有关于手动调pid的经验之谈。也许是工作还没开展得足够细致,目前我还没有体会到飞控调参的必要性。换句话说,买回来的板子默认参数其实就够用了。

3.用到的Dronekit主要函数

Dronekit目前还不支持Python3,所以只能用Python2.7。

欲对Dronekit有进一步了解,请参考前述官网链接。

##连接飞控,我用USB串口数传所以是com,除此外还支持UART串口、TCP、UDP等协议。

vehicle = connect('com3', wait_ready=True, baud=57600)

##设置飞行模式,用Dronekit控制飞机时必须设为Guided模式

vehicle.mode = VehicleMode("GUIDED")

##起飞到制定的高度(相对于初始点)

arm_and_takeoff(aTargetAltitude)

##以速度模式控制飞机运动,可以选择“北东下”坐标或机体坐标,我用后者

set_body_velocity(vehicle, v_x, v_y, v_z)

#偏转,heading值为正向左、为负向右,relative值为True时偏转相对于当前机头朝向

condition_yaw(heading, relative=False)

4.第一人称视角无人机操控演示

通过机载相机与图传,将视频传回地面,通过计算机键盘进行实时控制。