如题,最近一直苦恼于返回火箭定点降落垂直下降段精确轨迹控制问题。反复尝试后发现,PID控制可能是解决这个难题的唯一方法。这又涉及到如何在一个大延迟慢速响应的系统,利用有限的可观察时间,完成PID参数的调整。
虽然目前还没有完成最后调试,但已经有了一些心得。写在这里,提供一个思路,供有相似需要的“肝帝”参考。
先来看一下PID程序
凑合一下,因为程序在另一部手机上,不方便截图。拍个照。
Δ,误差矢量。用目标相对位置矢量,减去该矢量在垂直方向上的投影。得到水平方向上的位移向量。
∑Δ,积分矢量。用上一次积分在误差矢量上的投影,加上本次误差矢量。也就是,每次积分,都抛弃非误差方向上的无效值。做积分时,用帧时长对误差矢量做了个修正,减小手机运行帧速率变化对程序的影响。
DΔ,微分矢量。这个,考虑引起位移变化的就是速度,所以直接用速度的水平分量作为微分矢量。前面的-1是根据计算需要,对速度矢量取反向。
下面150*那个是PID运算算法。
位置矢量模的150倍,指向正上方,作为目标方向,在这里起到稳定作用。clamp150限定误差、积分、最终控制量三者最大矢量长度均为150。这是跟系统学的。限定最大值,可以避免过度调节导致失控。和正上方向矢量长度150结合在一起,限定火箭最大倾斜角度为45°。
到此,PID控制程序准备完成。
虽然目前还没有完成最后调试,但已经有了一些心得。写在这里,提供一个思路,供有相似需要的“肝帝”参考。
先来看一下PID程序
凑合一下,因为程序在另一部手机上,不方便截图。拍个照。
Δ,误差矢量。用目标相对位置矢量,减去该矢量在垂直方向上的投影。得到水平方向上的位移向量。
∑Δ,积分矢量。用上一次积分在误差矢量上的投影,加上本次误差矢量。也就是,每次积分,都抛弃非误差方向上的无效值。做积分时,用帧时长对误差矢量做了个修正,减小手机运行帧速率变化对程序的影响。
DΔ,微分矢量。这个,考虑引起位移变化的就是速度,所以直接用速度的水平分量作为微分矢量。前面的-1是根据计算需要,对速度矢量取反向。
下面150*那个是PID运算算法。
位置矢量模的150倍,指向正上方,作为目标方向,在这里起到稳定作用。clamp150限定误差、积分、最终控制量三者最大矢量长度均为150。这是跟系统学的。限定最大值,可以避免过度调节导致失控。和正上方向矢量长度150结合在一起,限定火箭最大倾斜角度为45°。
到此,PID控制程序准备完成。