我最近在四轴飞行器固件上做了一些工作。
该模型现在可以相对稳定地稳定其姿态。 br />现在我想摆脱这些高度下降现象,并没有太多文献资料。
我的方法是使用加速度计: z轴
如果g力大于0.25 g且大于25 ms,那么我将加速度计项(cm / s²)输入pid
,输出将发送到电机

现在模型随着电动机的上调而下降时会做出反应。 ,是否有更聪明的方法来应对海拔高度的突然变化和较小变化。

当前代码: br />

评论

如何使用指向下方的声纳来测量高度?

为什么使用0.4g的阈值?如您所说,为什么不总是将Z加速度发送到PID中?

声纳仅在6m处工作,我想将加速度计用于突然的微小变化。我认为我应该使用截止值,因为加速度计容易产生传感器噪声。此外,PID应该只在发生较大变化时才起作用,而不是对每个微小的动作都起作用。

通过数字低通滤波器运行加速度计数据?

您必须能够准确测量海拔高度,然后才能精确地保持海拔高度。在快速做出反应之前,您需要快速进行测量。假设您可以立即确定您的海拔高度(并同样更改所需的推力),那么您的电机加速将花费多长时间,并且需要多长时间才能影响四轴飞行器的质量和速度?最佳延迟与您现在看到的延迟之间有什么区别?

#1 楼

有两种方法可能:


组合高度(GPS或压力)和垂直加速度传感器的数据,以计算出更好的几何高度,并在循环中使用此反馈来调整垂直控制器。
为z加速度(在车身框架中)使用稳定性增强循环。在这种情况下,如乔恩的答案所示,如果您的车辆在摆动,则您的车辆将感知到z加速度,并将尝试对其进行校正。这可能不是在机身框架上进行z加速度的最佳实践,因为当飞机滚动和四处移动时,它将使滚动与高度耦合。因此,可以进行三角转换,将a_z数据(在主体框架中)转换为a_z_inertial(在惯性框架中,例如在重力中)。最好在纸上进行此操作(因为滚动和俯仰都有影响效果)。

关于当前算法:


过滤您的加速度。尝试运行加速度的平均值(低通滤波器),以消除噪音。例如,可以使用最近0.2秒的运行平均值。
根本不要使用截止值。它使生活变成非线性,而且不好。让控制器处理所有事件,并让它们对小错误作出反应,以免它们变大。


#2 楼

还无法发表评论。

我将添加陀螺仪并使用互补或卡尔曼滤波器。平均而言,加速度计是正确的,但现在是错误的。陀螺仪现在是正确的,但平均来说是错误的。过滤器根据输入的错误程度对两个输入进行加权,并输出一个介于当前值与当前值之间的值。



评论


$ \ begingroup $
在这种情况下,陀螺仪无法提供帮助,因为它可以测量角速度而不是高度变化。加速度计不能直接测量高度,但可以通过集成提供线性运动的反馈,几乎没有...
$ \ endgroup $
– Ugo Pattacini
2015年2月9日在11:27



$ \ begingroup $
如果将直升机上的陀螺仪和加速度计归零,然后将其在轴上旋转45度,则陀螺仪现在将显示45,然后开始出现错误。加速度计将是错误的,但很快会显示“向下”为45。您的加速度计可能正在响应未过滤的振动。陀螺仪和滤波器将知道没有理由对加速度计读数进行校正。
$ \ endgroup $
–乔恩
2015年2月9日在11:32



$ \ begingroup $
同样,当陀螺仪说直升飞机颠倒时,加速度计知道下降仍在下降。
$ \ endgroup $
–乔恩
2015年2月9日在11:35

$ \ begingroup $
好的,您已经提到了用于补偿加速度读数的经典互补滤波器调整,但是我认为在这里更重要的是使用加速度来获取高度估计值。我的意思是,“想象一下我们有很好的加速度值,那么我们这里需要的是……”
$ \ endgroup $
– Ugo Pattacini
2015年2月9日在11:36



$ \ begingroup $
当直升飞机倾斜时,加速度计-z改变并且直升飞机看到“坠落”并没有发生。他已经强迫它与空域一起工作,但希望它不再变得混乱。
$ \ endgroup $
–乔恩
2015年2月9日在11:39