STM32 GPS悬停飞控 (三十)自动降落、电池补偿优化 原作回复
昨晚我改了自动降落代码
自动降落步骤3里的判断我改为了这个。
if (pid_altitude_setpoint > ground_pressure + 15)
我现在是高度保持的气压地面气压比较,如果高度保持的气压目标值大于地面气压就认为是着地了。后面的offset是因为有时候气压测量值有误差,加上这个15可以确保飞机着地后才进入步骤4,它不能太大也不能太小,太大的话飞机会重复撞击地面,太小的话飞机还没着地螺旋桨就停了。原作用的是目标气压和实际气压比较,其实理论上也可以,飞机着地后实际气压不会变,如果目标气压不停自增的话过一段时间确实会达到这个判断语句的要求然后进入步骤4,但是实际使用会不停撞击地面。也可能是原作用的150太大,我晚上改为15再试试。
另外我还发现飞机自动起飞的上冲现象可以通过缩小高度保持pid的d实现,我现在高度保持pid的d项是1。
这样起飞降落在电池满点时会比较好,但是我后来发现电池电量比较低,比如11.5v左右时候,飞机很难再保持高度。但是12.4v以上就没事,我认为是电池补偿参数有问题。因为电量足够的时候飞机没问题,说明d项,起飞油门量,降落的那个15 offset都是对的,电量不足时才有的问题,后来我把那个battery_compensation改为了50就不错了。
调比较大的参数也可以远程调参,我现在是用加法和乘法做的,比如原来的变量加上一个比较小而精确的float或者乘以这个float来调试。
我把我上篇文章的视频上传youtube,原作觉得做的不错。:)