当前进展:我的研究仅是室内飞行,根据我的同事,气压计的偏差为+ -5米。
我目前正在使用超声波传感器(HC-SR04)进行高度估计,其分辨率为0.3cm。但是,我发现超声波传感器的20Hz刷新率太慢,无法获得足够快的高度校正响应。
我试图利用加速度计在Z轴上的加速度通过将加速度积分为获得在级联pid控制器方案中用于速率PID的速度。高度PID控制器的当前实现是使用P控制器的单回路pid控制器,其位置是从超声波传感器输入的。
我已经考虑了由于重力引起的负加速度测量,但是无论我计算多少偏移,仍然存在负加速度(例如-0.0034)。我通过将四轴飞行器设置为仍在平坦表面上,然后从加速度计z轴收集20,000个样本进行平均来计算重力偏移,以获取“偏移”,并将其存储为常数。然后从加速度计z轴输出中减去此变量,以消除偏移,如果不加速,则将其设为“零”。如问题所述,仍然存在负加速度(例如-0.0034)。然后,我的四轮摩托继续不断攀升。仅使用超声波传感器P控制器,我的四边形就摆动了50厘米。
可能的解决方案:
我打算用内环(PID控制器)来级联PID控制器以获得高度保持)使用加速度计,外环(P控制器)使用声纳传感器。我的顾问说,即使使用慢速传感器,即使是单回路P控制器也足以使四轴飞行器保持其高度。这够了吗?我注意到只有P增益,四轴飞行器才会超过其高度。
泄漏积分器:我发现这篇文章解释了他如何处理使用泄漏积分器产生负加速度,但是我很难理解为什么会起作用,因为我认为负误差只会变成正误差而不解决问题。我不太确定http://diydrones.com/forum/topics/multi-rotors-the-altitude-yoyo-effect-and-how-to-deal-with-it
仅具有超声波传感器的单回路PD控制器:
使用来自慢速传感器的反馈是否可行?
来源:
LSM303DLHC数据表:http://www.st.com/web/ zh / resource / technical / document / datasheet / DM00027543.pdf
泄漏集成商:http://diydrones.com/forum/topics/multi-rotors-the-altitude-yoyo-effect-and-how-to- deal-with-it
ArduPilot PID循环:http://copter.ardupilot.com/wp-content/uploads/sites/2/2012/12/Alt-Hold-PID-version-3.0.1.jpg
#1 楼
pixhawk上搭载的气压计的高度分辨率为10厘米。如果这还不够,您可以编写一个卡尔曼滤波器,该滤波器在预测步骤中使用加速计数据,而在校正步骤中使用超声传感器和/或气压计。但是我看不到能解决您的问题。如果您要做的只是保持海拔高度,则在20hz时准确测量海拔高度应该足够了。
控制器上的时间常数/固有频率和阻尼是多少?
我想我今天早上还没读完你的问题(那是在我喝咖啡之前)。来自imu的加速度是加速度加重力的量度。要获得惯量的惯性加速度,请从测量值中减去重力矢量。您将永远无法控制集成的加速度测量。测量结果被噪声破坏,您无法对此进行校正。
---问题控制部分的答案
让我们假设您要做的只是保持高度,而不是现在就考虑保持位置(尽管这种方法也适用于此)。并假设您可以(在合理的范围内)命令您想要的任何推力,那么这将成为一个简单的问题。
系统动力学的第一次通过看起来像
$ \ ddot z = \ frac {u} {m}-g $
其中正$ z $向上。让我们在油门中添加一个处理重力的悬停组件。所以
$ u = u_ {fb} + u_ {hover} $
我们的新动态看起来像
$ \ ddot z = \ frac {u_ {fb} + u_ {hover}} {m}-g = \ frac {u_ {fb}} {m} $
酷!现在我们设计一个控制定律,以便我们可以设定所需的高度。 />
$ \ ddot z = k_p(z_ {des}-z)+ k_d(\ dot z_ {des}-\ dot z)$
该系统现在的行为应类似于二阶系统。可以选择$ k_p $和$ k_d $来实现您想要的阻尼比和固有频率。生成状态估计。如果您真的想快速将某些东西混在一起,请通过具有适当下降频率的低通滤波器来提供声纳测量值。您的车辆不会在20hz处振荡,因此仅控制声纳数据就可以了。
评论
$ \ begingroup $
谢谢,我刚刚完成了这四天前的工作,它在+ -2cm的微小振动下工作
$ \ endgroup $
–user123456098
16 Mar 27 '16 at 17:35
$ \ begingroup $
很高兴听到它!假设您对速度有很好的估计,则应该可以通过增加kd消除振荡:)
$ \ endgroup $
– Holmeski
16 Mar 27 '16 at 19:59
评论
您如何计算重力偏移?它是什么加速度计?您可以链接数据表吗?振荡意味着您需要阻尼!!!
请记住,在交换堆栈时,最好编辑问题以添加注释中请求的信息,而不是添加更多注释。评论有助于改善问题和答案,而且分散了注意力,因此我们尝试将其降至最低。如果其中包含回答问题所需的所有信息,则可以整理(删除)评论。
@Chuck我已经用相关信息编辑了帖子:)
我正在从事同一个项目,目前,我正在使用Cascade PID控制器来实现使用Arduino稳定四轴飞行器的姿态,我现在想在海拔高度上工作。您是否在没有速度估计的情况下实现它?我有一个问题,我需要估计地球到人体框架的变换,还是可以在没有变换的情况下实现它?