如何将pid算法运用到四轴飞行器pid中

自制四轴飞行器中的问题及解决方案
自制四轴飞行器中的问题及解决方案
&&我走的弯路千万不要有人再走。
&&你在愁你的四轴飞行器怎样调整pid都飞不起来吗?那就一定不是pid的。我也苦苦调了三个星期,毫无进展,当发现了不是pid的问题并且改进了之后,我随便给了两个参数就飞起来了。下面给出我的经验。
&&一个好的机构,应当由三部分构成:一个听话的执行单元,一个精准的测量单元,一个聪明的控制单元。
&&1,执行单元。我的电机是直流无刷电机(新西达1000kv),用好盈30a电调控制,这种电调你只需给它一个us(太大太小都不好)的脉冲信号就可以控制电机转速,只需给一次,它就可以一直转,改变的时候再给一次。比如我的起飞速度就是大约1600us的脉冲。需要注意的是,电调刚开始时需要给3s的低宽度脉冲用来给电调设置最低点。听到滴滴两声之后就说明设置好了。
&&2,控制单元。控制单元不是第三个吗?怎么放到第二个了。因为不说pid后面没法说。
&&pid调节是控制论中十分经典的一种经典的控制方法,有时i可以不要,就比如说我的就没有i。对于没有学过控制论的人pid怎么理解呢?举个例子,比如一个理想弹簧,你拽它一下,然后放开,它就会一直往复运动,p就是弹簧的弹性系数,p越大,弹簧的回复力就越大,抵抗拉的力也越强。在飞机上,当我们检测到一边倾斜,就给它一个和角度成正比的回复力,就是给电机转速+p*pitch。但是如果只有p呢,就像弹簧一样,一直晃啊晃。那么我们把弹簧放进水里,水的阻力会使弹簧一段时间之后挺止,并且水的阻力和弹簧运动速度成正比,这就是d的作用。在飞机上,当我们依靠陀螺仪侦测到飞机往一个方向旋转时,我们就加上一个抑制这种转动的力,即-d*w
,w为角速度。i为假如我们的弹簧变形了,我们加上一个力使我们的弹簧恢复原来的形状,我是手动调整了一下误差,没有通过d来调节。
&&3,测量单元。我的问题出现在测量单元,同时我也相信绝大部分的人的问题都出现在测量单元。我用的是陀螺仪是gy80,集成了adxl345加速度测量单元还有l3g420d角速度测量单元。加速度计虽然叫加速度,但是可以直接得到pitch和roll,即沿x和y方向的倾斜角,原理在这里不解释。在没有干扰的情况下反回的数据很完美。我以为能真实反应飞机目前的倾角然后进行调节,我竟然就天真的拿这个数据直接用了,并且调整pid参数三星期毫无进展。当没有进展时,我开始思考是什么出了问题,我用processing打了一个示波器出来,将数据返回的绘制成波形显示在电脑上,发现了问题:电机不开的时候数据很好,电机一开数据简直没法看,因为电机震动对加速度计的影响非常大,而我们的角度是考加速度测量的,返回的简直是乱码,三个星期以来原来就是调这堆乱码!
&定下心来,觉得进行滤波,对加速度计返回的倾角进行低通滤波,陀螺仪受震动影响很小,不需要滤波。低通滤波大家不需要知道,这也是被淘汰了的,原因是滤波之后数据虽然很好看,但是会造成极大的延迟,飞机都偏到另一边了,还显示偏在这一边,这只适合在一些不需要太灵敏的地方。
下面介绍拯救我的一个简单有效的算法,不需要用到卡尔曼滤波这样高级的算法就足以让它飞起来而且飞的很好,有人叫他数据融合算法,其实没有这么玄。
&陀螺仪受震动的影响很小,它返回的是角速度,角速度*时间就是积分,每次循环读取一下当前的角速度再累加起来,比如第一次角速度20度/s,一个循环的周期是0.02s,譬如我的周期22ms。就是那么我们就知道转了0.4度。第一次转了2,第二次转了3,第三次转了-1,总共就转了2+3-1=4。有人会问,这样积分准确吗?很准!我开始也觉得不靠谱,后来发现很靠谱。两三面零点会产生三四度的偏差,不要紧,我们用准确的角度(加速度计返回的,加速度返回角度,有点绕)计来修正。
不加修正时,公式是这样的
角度=角速度*周期时间+原来的角度
加上修正后
角度=95%*(角速度*周期时间+原来的角度)+5%*准确的角度
对于这两个数据进行加权平均,这样既有时时性,又能保证零点不漂移,好,很好!
之后,pid随便给给就起来了,不信试试。
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
四轴飞行器飞控PID算法
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口四轴飞行器PID控制电机算法讨论-电子产品世界论坛
四轴飞行器PID控制电机算法讨论
经常看到说要用PID,PID具体含义是什么呢,,用最简单的语言解释下吧。千万不要用那个积分公式来回答,就算上过大学回来看看也看看是公式一堆,一堆公式。不用PID算法行不行?比如说我上面有角度传感器MPU6050,单片机获取MPU6050的数据后,对这些数据进行判断,进而来实行姿态调整,这样也可以吧?????????
讨论一下吧!
PID就是一种最简单的最直接的控制系统稳定的方法,思想就是差多少补回来。这就是P,然后微分D是检测变化的快慢提前调节,积分 I 就是对偏差积分,对总体的偏差进行调节。最后按比例将三个值加在一起,再乘以一个总的比例。。说的可能不是很准确,我就是这么理解的
你那个偏移量不同,调节量也不同,直接分段调节的方式误差太大。
关于6050的参数。首先,现在飞机等设备上使用的机械式陀螺仪,是没有漂移误差的,加速度对倾斜角的测量没有影响。但是我们使用的数字式小型陀螺仪,例如MPU6050,使用的类似电容极板的方式,在非惯性系中测得的陀螺仪值收到加速度的影响。所以就要用加速度去修正陀螺仪的值。就是滤波(或者叫数据融合)
目前用的比较多的是四元数算法然后求欧拉角,然后来表征空间状态。另外一种是卡尔曼(或者拓展卡尔曼)来进行数据融合。这样能得到比较准确的空间矢量。
飞行器的姿态解算的越准确,控制的也就越好
(好吧,大概就是这样,手敲的好累)
貌似& 卡尔曼& 是一种滤波方法啊,四元数和欧拉角才是用来表示姿态的吧!
卡尔曼算法也可以用来融合6个初始数据得到比较精确的结果。不过用的人不多
我贴上一个2年前看到的PID的故事吧,我觉得讲得还是蛮通俗的:
小云接到这样一个任务:一个水缸有点漏水(而且漏水的速度还不是固定不变的),要求水面高度维持在某个位置,一旦发现水面高度低于要求位置,就要往水缸里加水。 小云接到任务后就一直守在水缸旁边,时间长就觉得无聊,就跑到房里看小说了,开始每30分钟来检查一次水面高度。结果水漏得太快,每次小云来检查时,水都快漏完了,离要求的高度相差很远,后来小云改为每3分钟来检查一次,结果每次来水都没怎么漏,不需要加水,来得太频繁做的是无用功。几次试验后,他确定每10分钟来检查一次。这个检查时间就称为采样周期。
开始小云用勺子加水,水龙头离水缸有十几米远的距离,经常要跑好几趟才加够水,于是小云又改为用桶加,一加就是一桶,跑的次数少了,加水的速度也快了,但好几次将缸给加溢出了,小云又动脑筋,我不用瓢也不用桶,最后选择可用盆,几次下来,发现刚刚好,不用跑太多次,也不会让水溢出。这个加水工具的大小就称为比例系数。
小云又发现水虽然不会加过量溢出了,有时会高过要求位置比较多,还是有溢出的可能。于是他又想了个办法,在水缸上装一个漏斗,每次加水不直接倒进水缸,而是倒进漏斗让它慢慢加。这样溢出的问题解决了,但加水的速度又慢了,有时还赶不上漏水的速度。于是他试着变换不同大小口径的漏斗来控制加水的速度,最终找到了满意的漏斗。漏斗的时间就称为积分时间。
小云终于喘了一口,但任务的要求突然严了,水位控制的及时性要求大大提高,一旦水位过低,必须立即将水加到要求位置,而且不能高出太多,否则不给工钱。小云又为难了!于是他又开动脑筋,终于让它想到一个办法,常放一盆备用水在旁边,一发现水位低了,不经过漏斗就是一盆水下去,这样及时性是保证了,但水位有时会高很多。他又在要求水面位置上面一点将水缸凿一孔,再接一根管子到下面的备用桶里,这样多出的水会从上面的孔里漏出来。这个水漏出的快慢就称为微分时间。
是的,好像是因为卡尔曼的参数不好选择。。
这个简直通俗易懂
匿名不能发帖!请先 [
Copyright (C) 《电子产品世界》杂志社 版权所有}

我要回帖

更多关于 四轴飞行器控制算法 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信