搜索
bottom↓
回复: 110

四轴串级pid

  [复制链接]

出0入0汤圆

发表于 2014-2-4 13:37:26 | 显示全部楼层 |阅读模式
本帖最后由 mazhenyu 于 2014-2-4 13:41 编辑

首先声明一下我是一名研一学生,研究生主要研究飞控方向,本科为飞设专业,电子是个人的一点爱好,所以描述可能有许多不妥之处,忘大家见谅。

从大二开始我第一次见到四轴就很喜欢,可是苦于没有多少资金,外加无刷电机很危险(玩过几次固定翼,深有体会),所以就只能买了一个小四轴,经过一年的努力四轴终于可以比较稳定的飞行了,程序参考了匿名和蜂鸟四轴(非常感谢他们的无私奉献)

在论坛上我发现很多人都在抱怨四轴参数难调,刚开始我也使用的是常见的pid控制,发现对参数确实十分敏感,很难达到稳定的效果,甚至直接使用陀螺仪的数据进行角速率反馈得到的效果都比它好。
通过查阅资料我发现四轴一般会被简化为一个低阻尼的二阶系统,角速率反馈恰恰可以增加它的阻尼(这个在二代的战斗机比如歼7中广泛采用,是改善阻尼的好方法)。于是我就是用了在固定翼飞机上常常采用的串级pid来调试,经过师兄理论上的指点,四轴已经可以比较稳定的飞行。


这个是我的毕业设计里固定翼的控制,和四轴控制原理相同。 首先使用角速率反馈作为内环,在用角度反馈作为外环,只要内环的参数调整合适,外环的参数从个位数变成六七十,四轴都可以稳定的飞行。



  1. void GET_EXPRAD(void)                        //¼ÆËãÆÚÍû½Ç¶È,²»¼Ó¿ØÖÆʱÆÚÍû½Ç¶ÈΪ0,0
  2. {
  3.         EXP_ANGLE.X = (float)(-(Rc_Get.ROLL-1500)/30.0f);       
  4.         EXP_ANGLE.Y = (float)(-(Rc_Get.PITCH-1500)/30.0f);
  5.         EXP_ANGLE.Z = (float)(Rc_Get.YAW);
  6. //        printf("%f %f\n",MPU6050_ACC_LAST.Y*cos(Q_ANGLE.X/57.3)-MPU6050_ACC_LAST.Z*sin(Q_ANGLE.X/57.3),MPU6050_ACC_LAST.X*cos(-Q_ANGLE.Y/57.3)-MPU6050_ACC_LAST.Z*sin(-Q_ANGLE.Y/57.3));
  7. //        DIF_ANGLE.X = (ACC_AVG.Y*cos(Q_ANGLE.X/57.3)-ACC_AVG.Z*sin(Q_ANGLE.X/57.3))/500;
  8. //        DIF_ANGLE.Y = (ACC_AVG.X*cos(-Q_ANGLE.Y/57.3)-ACC_AVG.Z*sin(-Q_ANGLE.Y/57.3)/500);
  9.   DIF_ANGLE.X = EXP_ANGLE.X - Q_ANGLE.X;
  10.   DIF_ANGLE.Y = EXP_ANGLE.Y - Q_ANGLE.Y;
  11. //        DIF_ANGLE.Z = EXP_ANGLE.Z - GYRO_I[0].Z;
  12. //        DIF_ANGLE.X = EXP_ANGLE.X - GYRO_I[0].X;
  13. //        DIF_ANGLE.Y = EXP_ANGLE.Y - GYRO_I[0].Y;
  14. //        DIF_ANGLE.Z = EXP_ANGLE.Z - GYRO_I[0].Z;
  15. }

  16. void CONTROL(void)
  17. {
  18.         static float thr=0,rool=0,pitch=0,yaw=0;
  19.         static float rool_i=0,pitch_i=0;
  20.         static float rool_dif=0,pitch_dif=0;
  21.         static float rool_speed_dif=0,pitch_speed_dif=0;
  22.         float rool_out,pitch_out;
  23.         uint16_t THROTTLE;

  24.         GET_EXPRAD();
  25.        
  26.         rool         = PID_ROL.P * DIF_ANGLE.X;       
  27.         rool_i += PID_ROL.I * DIF_ANGLE.X * 0.002;
  28.         rool_i = between(rool_i,30,-30);
  29.         rool += rool_i;
  30.         rool += PID_ROL.D * (DIF_ANGLE.X-rool_dif) * 500;
  31.         rool_dif = DIF_ANGLE.X;
  32.   ///////////       
  33.         pitch         = +PID_ROL.P * DIF_ANGLE.Y;       
  34.         pitch_i += PID_ROL.I * DIF_ANGLE.Y * 0.002;
  35.         pitch_i = between(pitch,30,-30);
  36.         pitch += pitch_i;               
  37.         pitch += PID_ROL.D * (DIF_ANGLE.Y-pitch_dif) * 500;
  38.         pitch_dif = DIF_ANGLE.Y;
  39.         ///////////
  40. //       
  41.         rool -= GYRO_AVG.X* Gyro_G;
  42.         rool_out=PID_PIT.P*rool;
  43.         rool_out += PID_PIT.D*(rool- rool_speed_dif)*500;
  44.         rool_speed_dif = rool;
  45.        
  46.         pitch -= GYRO_AVG.Y* Gyro_G;
  47.         pitch_out=PID_PIT.P*pitch;
  48.         pitch_out += PID_PIT.D*(pitch- pitch_speed_dif)*500;
  49.         pitch_speed_dif=pitch;

  50. //        rool=PID_PIT.I*(rool-GYRO_AVG.X* Gyro_G);
  51. //        pitch=PID_PIT.I*(pitch-GYRO_AVG.Y* Gyro_G);
  52.        
  53. //        PID_YAW.dout = 20 * (MPU6050_GYRO_LAST.Z* Gyro_G-(Rc_Get.YAW-1500)/10);
  54.         PID_YAW.dout = 10 * (GYRO_AVG.Z* Gyro_G-(Rc_Get.YAW-1500)/10);

  55.         PID_ROL.OUT = rool_out;
  56.         PID_PIT.OUT = pitch_out;
  57.         PID_YAW.OUT = PID_YAW.dout;
  58.        
  59. /////////////
  60. //        GYRO_I[0].Z += EXP_ANGLE.Z/3000;
  61. //        yaw = -10 * GYRO_I[0].Z;
  62. //       
  63. //        yaw -= 3 * GYRO_F.Z;       
  64.         THROTTLE=Rc_Get.THROTTLE;
  65.         if(THROTTLE>1050)
  66.         {
  67. //                if(THROTTLE>1950)
  68. //                {
  69. //                        THROTTLE=1950;
  70. //                }
  71.                 THROTTLE = THROTTLE/cos(Q_ANGLE.X/57.3)/cos(Q_ANGLE.Y/57.3);       
  72.                
  73.                 moto1 = THROTTLE - 1000 + (int16_t)PID_ROL.OUT - (int16_t)PID_PIT.OUT - (int16_t)PID_YAW.OUT;
  74.                 moto2 = THROTTLE - 1000 + (int16_t)PID_ROL.OUT + (int16_t)PID_PIT.OUT + (int16_t)PID_YAW.OUT;
  75.                 moto3 = THROTTLE - 1000 - (int16_t)PID_ROL.OUT + (int16_t)PID_PIT.OUT - (int16_t)PID_YAW.OUT;
  76.                 moto4 = THROTTLE - 1000 - (int16_t)PID_ROL.OUT - (int16_t)PID_PIT.OUT + (int16_t)PID_YAW.OUT;
  77.         }
  78.         else
  79.         {
  80.                 moto1 = 0;
  81.                 moto2 = 0;
  82.                 moto3 = 0;
  83.                 moto4 = 0;
  84.         }
  85.         if(Q_ANGLE.X>45||Q_ANGLE.Y>45||Q_ANGLE.X<-45||Q_ANGLE.Y<-45)
  86.         {
  87.                 ARMED=0;
  88.                 LED3_OFF;
  89.         }
  90. //        printf("moto=%d %d %d %d\n",moto1,moto2,moto3,moto4);
  91.         if(ARMED)        MOTO_PWMRFLASH(moto1,moto2,moto3,moto4);
  92.         else                        MOTO_PWMRFLASH(0,0,0,0);
  93. }
复制代码




http://player.youku.com/player.php/sid/XNjY4NjUyMjcy/v.swf

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2014-2-4 13:37:57 | 显示全部楼层
本帖最后由 mazhenyu 于 2014-2-4 13:42 编辑

第一次发有图的帖子,不会编辑,大家见谅
这种方法的优点是参数十分好调,并且比较稳定。
由于自己不会上位机,所以就用的匿名上位机,其中pitch方向用于内环,roll方向用于外环

出0入0汤圆

发表于 2014-2-4 14:05:27 | 显示全部楼层
上传你的毕设论文吧,这样说太笼统了。

出105入79汤圆

发表于 2014-2-4 14:14:36 | 显示全部楼层
四轴参数那张图不对,ROLL和Pitch的控制是一样的。文字应该是外环和内环。

出0入0汤圆

 楼主| 发表于 2014-2-4 14:16:21 | 显示全部楼层
qwe2231695 发表于 2014-2-4 14:14
四轴参数那张图不对,ROLL和Pitch的控制是一样的。文字应该是外环和内环。

pitch是内环,roll是外环,我没有自己的上位机,只好这样将就了,roll和pitch方向的参数相同

出0入0汤圆

发表于 2014-2-4 15:57:40 | 显示全部楼层
上传论文吧

出0入0汤圆

 楼主| 发表于 2014-2-4 16:46:13 | 显示全部楼层

论文?没有论文呀

出0入0汤圆

发表于 2014-2-4 19:37:14 来自手机 | 显示全部楼层
好文,标记后查看

出0入0汤圆

 楼主| 发表于 2014-2-4 20:04:00 | 显示全部楼层
lyyyuna 发表于 2014-2-4 14:05
上传你的毕设论文吧,这样说太笼统了。

我的毕设论文是有关飞翼无人机的不是四轴的,而且pid只是其中用来对比自抗扰控制的,内容不多。
这个其实很简单,就是在一般的pid中加入角速率反馈作为内环以改善阻尼特性

出0入0汤圆

发表于 2014-2-4 23:12:02 | 显示全部楼层
有点像apm pid的算法,

出0入0汤圆

发表于 2014-2-4 23:20:16 | 显示全部楼层
apm 的算法也是串联PID的

出0入0汤圆

 楼主| 发表于 2014-2-5 00:04:42 | 显示全部楼层
cai_mouse 发表于 2014-2-4 23:20
apm 的算法也是串联PID的

反正对于现在的真飞机来说,角速率反馈必不可少

出0入0汤圆

发表于 2014-2-5 13:39:05 | 显示全部楼层
角速率不是就相当于 角度的微分吗  就是d参数啊

出0入0汤圆

发表于 2014-2-5 15:13:30 | 显示全部楼层
我知道kk2.0 kk2.1都是采用串联pid,两级都是pi,
角速率必须加上去的,kk飞控也不错,只是没有自稳而已

出0入0汤圆

 楼主| 发表于 2014-2-5 16:09:00 | 显示全部楼层
max-men 发表于 2014-2-5 13:39
角速率不是就相当于 角度的微分吗  就是d参数啊

pid中的d是对误差的微分,所以和角速度不一样

出0入0汤圆

发表于 2014-2-26 22:00:20 | 显示全部楼层
表示楼主很强大啊,歼7都出来了。。。

出0入0汤圆

发表于 2014-2-26 22:00:35 | 显示全部楼层
表示楼主很强大啊,歼7都出来了。。。

出0入0汤圆

发表于 2014-3-1 13:57:49 | 显示全部楼层
楼主,我也是和你一样是一名在校学生,出于自己的爱好开始制作四轴。对于你的串级PID我有几个疑问,还希望楼主解答,谢谢!

1.你说的角速度环,也就是内环,用到了 rool -= GYRO_AVG.X* Gyro_G; 也就是说对角速度进行P,然后叠加到控制回路中,那么他的作用是否是产生相对于运动方向的阻尼效果,也就是使角度环收敛呢?
2.还有不明白的就是,在角速度环里面还要 rool_out=PID_PIT.P*rool;
                                                             rool_out += PID_PIT.D*(rool- rool_speed_dif)*500;
                                                             rool_speed_dif = rool;
对ROOL再进行一次PD,不明白这有什么样的效果?
3.还有,你的控制回路有6个参数,你具体是如何调试的呢?
   能具体说明一下你的调试顺序,达到什么样的效果才算满意呢?

PS:我现在还未完工的四轴采用的PID是: 对角度进行PI,对角速度进行P。调节参数是先调节角速度的P(产生阻尼效果,总是反抗你的干扰),使其不产生振荡的前提下,干扰30度角修正到接近30度效果。然后在调节角度环的PI,P的作用是自稳条件下的回复力,I是消除偏差。



出0入0汤圆

 楼主| 发表于 2014-3-1 16:54:51 | 显示全部楼层
1.是的,但一般理解为改变阻尼特性使得外环更容易调节和收敛
2.如果不考虑外环,内环是对飞行器角速率的控制欲稳定,如果输入参数是一个期望角速度,pd可以加快它的调节时间,这个是我加上去试试的,和单用p的效果差距不大。
3.我的参数内环用匿名四轴上位机的pitch调,外环用roll,真正俯仰和滚转的参数是相同的,应为我不会上位机,只好这样将就了。实际上得12个参数。
你的调节方法应该是没问题的,先在不加外环的情况下调角速度的p,最后的p要比不振荡的临界值小一些,因为太大不利于它的操作性。
如果真的想做好的话,得建好数学模型,先在电脑上仿真,再上实物。

出0入0汤圆

 楼主| 发表于 2014-3-1 16:55:23 | 显示全部楼层
lc125253647 发表于 2014-3-1 13:57
楼主,我也是和你一样是一名在校学生,出于自己的爱好开始制作四轴。对于你的串级PID我有几个疑问,还希望 ...

1.是的,但一般理解为改变阻尼特性使得外环更容易调节和收敛
2.如果不考虑外环,内环是对飞行器角速率的控制欲稳定,如果输入参数是一个期望角速度,pd可以加快它的调节时间,这个是我加上去试试的,和单用p的效果差距不大。
3.我的参数内环用匿名四轴上位机的pitch调,外环用roll,真正俯仰和滚转的参数是相同的,应为我不会上位机,只好这样将就了。实际上得12个参数。
你的调节方法应该是没问题的,先在不加外环的情况下调角速度的p,最后的p要比不振荡的临界值小一些,因为太大不利于它的操作性。
如果真的想做好的话,得建好数学模型,先在电脑上仿真,再上实物。

出0入0汤圆

发表于 2014-3-1 17:40:57 | 显示全部楼层
mazhenyu 发表于 2014-3-1 16:55
1.是的,但一般理解为改变阻尼特性使得外环更容易调节和收敛
2.如果不考虑外环,内环是对飞行器角速率的 ...

楼主,我有一点不明白的就是很多实际系统是不容易得到他的数学模型的呀?那我们怎么用matlab 仿真呢?
楼主研究飞控方向的?

出0入0汤圆

 楼主| 发表于 2014-3-1 18:49:49 | 显示全部楼层
lc125253647 发表于 2014-3-1 17:40
楼主,我有一点不明白的就是很多实际系统是不容易得到他的数学模型的呀?那我们怎么用matlab 仿真呢?
楼 ...

要得到简化的数学模型还是比较简单的,参考参考别人的论文就可以了,但是模型里的参数得自己测,就有点麻烦了。我是学飞控的,但是还没咋入门呢

出0入0汤圆

发表于 2014-4-27 23:33:13 | 显示全部楼层
楼主能说说你的串级PID的公式吗?我看你的程序没看懂,新手一个,希望楼主能给点拨一下。

就是角度环和角速度环,这两个的公式、

出0入0汤圆

发表于 2014-4-28 07:26:46 来自手机 | 显示全部楼层
楼主很强大

出0入0汤圆

发表于 2014-4-28 20:45:27 | 显示全部楼层
我用的是单闭环,效果和LZ差不多, 公式是 Out = 角度差 * P + 角度误差积分 * I + 角速度 * K。   实际中只用了角度差*P  和角速度 * K , 积分环节没有用。  一开始我也是用串级, 内环就是角速度环, 给定值是角速度,输出就是电机的PWM控制量, 外环是角度环,给定值是角度,输出就是给内环的角速度,  但是总是出现一起飞就往一个角倾斜,用手拿着并倾斜时,老是出现电机对于倾斜角度反应慢的情况, 参考网上对于串级的结论是,串级的响应比较慢,所以后面就改成开头说的单闭环了。  现在看LZ的效果,证明串级确实是可以用的, 应该是我当时程序或者参数没有调对的结果。

出0入0汤圆

 楼主| 发表于 2014-4-28 23:39:02 | 显示全部楼层
zouyf12 发表于 2014-4-28 20:45
我用的是单闭环,效果和LZ差不多, 公式是 Out = 角度差 * P + 角度误差积分 * I + 角速度 * K。   实际中 ...

外环和内环同频率,所以应该不会出现你说的反应慢的情况,有可能是没调好

出0入0汤圆

 楼主| 发表于 2014-4-28 23:42:17 | 显示全部楼层
sylarwcy 发表于 2014-4-27 23:33
楼主能说说你的串级PID的公式吗?我看你的程序没看懂,新手一个,希望楼主能给点拨一下。

就是角度环和角 ...

角度环是外环,它将误差pid得到一个值,将这个值作为内环(角速度的输入),它的物理意义是一个期望的角速度,在内环里继续pid得到要控制的量

出0入0汤圆

发表于 2014-4-30 21:56:59 | 显示全部楼层
学习了。。。感谢分享

出0入0汤圆

发表于 2014-5-1 16:38:50 | 显示全部楼层
楼主 我是刚开始搞四轴 用MPU6050已经把接收的数据转换成pitch roll yaw 下面是用PID了吗???? 说来惭愧 我是自动化专业的 可是 对PID很是迷茫啊

出0入0汤圆

发表于 2014-5-2 22:21:56 | 显示全部楼层
lyyyuna 发表于 2014-2-4 14:05
上传你的毕设论文吧,这样说太笼统了。

这个要求是不是不太合理呀,兄弟

出0入0汤圆

 楼主| 发表于 2014-5-2 23:06:58 | 显示全部楼层
lukefan2008 发表于 2014-5-2 22:21
这个要求是不是不太合理呀,兄弟

只是本科的毕业论文其实没什么,不传的原因是那个是有关飞翼的,里面的飞机数据是一个国防预研的课题数据推出来的,知道了那个可以猜出飞机的大小,而且论文里有导师师兄的名字。

出0入0汤圆

 楼主| 发表于 2014-5-2 23:08:52 | 显示全部楼层
gpb007 发表于 2014-5-1 16:38
楼主 我是刚开始搞四轴 用MPU6050已经把接收的数据转换成pitch roll yaw 下面是用PID了吗???? 说来惭愧 ...

调pid不用急,你先把所有硬件调通,无线一定要好使,电机也要先测试测试,所有硬件调好了,在做pid,这样你不会被其他的问题误导

出0入0汤圆

发表于 2014-5-11 12:32:29 | 显示全部楼层
请问 GYRO_AVG.X 指的是?

出0入0汤圆

 楼主| 发表于 2014-5-11 20:53:35 | 显示全部楼层
琅琊 发表于 2014-5-11 12:32
请问 GYRO_AVG.X 指的是?

陀螺仪最近两次的数值的平均值

出0入0汤圆

发表于 2014-5-12 20:44:25 | 显示全部楼层
mazhenyu 发表于 2014-3-1 18:49
要得到简化的数学模型还是比较简单的,参考参考别人的论文就可以了,但是模型里的参数得自己测,就有点麻 ...

LZ,用什么方法来测模型的参数呢?参数辨识?如果是的话,输入输出数据你准备怎么采集(主要是输入)?如果其他方法,有什么资料嘛?

出0入0汤圆

发表于 2014-5-12 21:01:39 | 显示全部楼层
mazhenyu 发表于 2014-4-28 23:42
角度环是外环,它将误差pid得到一个值,将这个值作为内环(角速度的输入),它的物理意义是一个期望的角 ...

楼主你好,为什么说角速度的输入物理意义是期望的角速度呢?这个怎么理解

出0入0汤圆

 楼主| 发表于 2014-5-13 12:23:03 | 显示全部楼层
whq5234970 发表于 2014-5-12 20:44
LZ,用什么方法来测模型的参数呢?参数辨识?如果是的话,输入输出数据你准备怎么采集(主要是输入)?如 ...

如果你有实物的话可以直接测,四轴就是几个转动惯量。或者画在solidworks之类的里面,可以让软件算出来

出0入0汤圆

 楼主| 发表于 2014-5-13 12:24:30 | 显示全部楼层
whq5234970 发表于 2014-5-12 21:01
楼主你好,为什么说角速度的输入物理意义是期望的角速度呢?这个怎么理解 ...

如果你去掉角度环,遥感的量直接给到角速度环,不就是输入一个期望角速度吗

出0入0汤圆

发表于 2014-5-13 15:24:42 | 显示全部楼层
mazhenyu 发表于 2014-5-13 12:23
如果你有实物的话可以直接测,四轴就是几个转动惯量。或者画在solidworks之类的里面,可以让软件算出来 ...

直接测转动惯量?怎么测。。做物理实验?

出0入0汤圆

 楼主| 发表于 2014-5-14 00:21:35 | 显示全部楼层
whq5234970 发表于 2014-5-13 15:24
直接测转动惯量?怎么测。。做物理实验?

那还有什么办法,以前貌似真飞机都要测测的

出0入0汤圆

发表于 2014-5-15 21:58:52 | 显示全部楼层
看了楼主的参数,内环用了PD,外环用了PID,那如果要是变成内环PID,外环P,这样的效果是否一样。

出0入0汤圆

发表于 2014-5-15 22:00:15 | 显示全部楼层
楼主说有实物的话可以直接测四轴的几个转动惯量,能说一下,具体怎么测吗

出0入0汤圆

发表于 2014-5-15 22:14:09 | 显示全部楼层
楼主的内环pd,外环pid好像不大好调,内环PID,外环P,这样可能会更好调一些。APM V3。0的版本就是这样的,他在此基础上实现了自动调参。
他的调参是先调查内环,内环i=0.01*p,p增大到超过目标角速度(90度/s)10%-8%,这样p就调好了,接下来是调d,加大d,让超过部分大于10%,再减小d,让超过部分小于10%,这样d就调好了,
接下来是外环,先增大p,让他超过目标角度(20度)10%,这时再取p值的75%.内环的i这时变为与内环的p值一样。

出0入0汤圆

发表于 2014-5-15 22:28:06 | 显示全部楼层
以下我个人理解
单环的PID是一个姿态环,输入是姿态角度,输出是电机转速,可以实现姿态角的调节,但是对姿态角的角速率实际上是一个开环。
楼主在姿态环后面加入了一个角速率环,用来控制姿态变化的速率。
这比单环通过调节I值更好一些,但是参数也多了,实际上参数整定难度更大了

出0入0汤圆

发表于 2014-5-16 07:23:52 来自手机 | 显示全部楼层
maxwelllls 发表于 2014-5-15 22:28
以下我个人理解
单环的PID是一个姿态环,输入是姿态角度,输出是电机转速,可以实现姿态角的调节,但是对姿 ...

整定难度是大了但效果是明显的

出0入0汤圆

 楼主| 发表于 2014-5-16 20:28:00 | 显示全部楼层
pxpx601 发表于 2014-5-15 22:00
楼主说有实物的话可以直接测四轴的几个转动惯量,能说一下,具体怎么测吗 ...

不好意思这个只是听老师说是悬挂起来量的,自己没做过实验,我的参数完全是试凑出来的

出0入0汤圆

 楼主| 发表于 2014-5-16 20:32:43 | 显示全部楼层
pxpx601 发表于 2014-5-16 07:23
整定难度是大了但效果是明显的

在没增加硬件的条件下提高性能还是很划算的,而且这种方法在近地面效果也很好。同学的蜂鸟四轴飞起来效果不错,但是在近地面的时候抖动很厉害

出0入0汤圆

 楼主| 发表于 2014-5-16 20:35:06 | 显示全部楼层
pxpx601 发表于 2014-5-15 22:14
楼主的内环pd,外环pid好像不大好调,内环PID,外环P,这样可能会更好调一些。APM V3。0的版本就是这样的,他 ...

正常情况下内环只有p,加d只是我想提高一点响应速率,做下来感觉效果没什么变化。

出0入0汤圆

发表于 2014-5-19 15:55:04 | 显示全部楼层
mazhenyu 发表于 2014-5-16 20:35
正常情况下内环只有p,加d只是我想提高一点响应速率,做下来感觉效果没什么变化。 ...

我试过,内环如果没有d,如果遥控杆松开回中之后,如果P太大,会振荡,如果太小,会出现不会马上停住,会晃一下,或是慢慢停下来。加上d之后,就不会了。

出0入0汤圆

 楼主| 发表于 2014-5-19 22:38:00 | 显示全部楼层
pxpx601 发表于 2014-5-19 15:55
我试过,内环如果没有d,如果遥控杆松开回中之后,如果P太大,会振荡,如果太小,会出现不会马上停住,会 ...

内环有d有可能会有大的噪声放大

出0入0汤圆

发表于 2014-6-9 11:24:08 | 显示全部楼层
zouyf12 发表于 2014-4-28 20:45
我用的是单闭环,效果和LZ差不多, 公式是 Out = 角度差 * P + 角度误差积分 * I + 角速度 * K。   实际中 ...

我跟你的问题实在是太像了,也是用串级PID,老往一个方向跑,我想过很多原因,会不会是姿态版没有放平,或者机架重心不稳,请问你现在换成了那种新PID稳定吗?我也想改了

出0入0汤圆

发表于 2014-6-17 14:51:38 | 显示全部楼层
这是个很好的思路,看来研究深了是必须有理论基础的。

出0入0汤圆

发表于 2014-7-23 13:04:13 | 显示全部楼层
MARK!                        

出0入0汤圆

发表于 2014-7-23 23:33:42 | 显示全部楼层
楼主真好,谢谢分享

出0入0汤圆

发表于 2014-7-24 22:52:29 | 显示全部楼层
只能学习学习了

出0入0汤圆

发表于 2014-7-27 00:38:29 | 显示全部楼层
楼主,请问你这张“俯仰角保持与控制回路”示意图里面“Kq”,“q(s) / 6*e(s)”,"1/s"分别代表什么啊!

出0入0汤圆

发表于 2014-10-6 12:40:47 | 显示全部楼层
  rool_i = between(rool_i,30,-30);  这个事什么意思?

出0入0汤圆

发表于 2014-10-29 09:59:41 来自手机 | 显示全部楼层
THROTTLE = THROTTLE/cos(Q_ANGLE.X/57.3)/cos(Q_ANGLE.Y/57.3); 请问楼主油门为何这样控制

出0入0汤圆

发表于 2014-10-29 10:00:11 来自手机 | 显示全部楼层
THROTTLE = THROTTLE/cos(Q_ANGLE.X/57.3)/cos(Q_ANGLE.Y/57.3); 请问楼主油门为何这样控制

出0入0汤圆

发表于 2014-10-29 13:04:49 | 显示全部楼层
厉害,佩服佩服!

出0入0汤圆

发表于 2014-10-29 13:56:10 | 显示全部楼层
mark,谢谢分享

出5入10汤圆

发表于 2014-10-29 16:22:52 | 显示全部楼层
楼主 有没有套件卖??想入手一套学一学~~~~

出0入0汤圆

发表于 2014-10-29 17:06:22 | 显示全部楼层
学习了啊

出0入0汤圆

发表于 2014-10-29 17:30:42 | 显示全部楼层
留名 回来看

出0入0汤圆

发表于 2014-10-29 23:53:36 | 显示全部楼层
膜拜中   下次好好研读

出0入0汤圆

发表于 2014-10-30 00:12:58 | 显示全部楼层
串级PID,好复杂的样子。。。

出0入0汤圆

发表于 2014-10-30 00:31:37 | 显示全部楼层
PID的参数整定是一门学问

出0入0汤圆

 楼主| 发表于 2014-10-30 21:42:37 | 显示全部楼层
lanshenghao 发表于 2014-10-29 09:59
THROTTLE = THROTTLE/cos(Q_ANGLE.X/57.3)/cos(Q_ANGLE.Y/57.3); 请问楼主油门为何这样控制

为了倾斜的时候不需要加大油门,只是个近似

出0入0汤圆

发表于 2014-11-1 11:19:15 来自手机 | 显示全部楼层
外环的p是6500,对应的DIF单位是角度,那么期望的角速度岂不很大?同时,I限定在正负30,相对p都可以忽略了。

出0入0汤圆

 楼主| 发表于 2014-11-1 15:14:35 | 显示全部楼层
qiguibao 发表于 2014-11-1 11:19
外环的p是6500,对应的DIF单位是角度,那么期望的角速度岂不很大?同时,I限定在正负30,相对p都可以忽略了 ...

那个数得除以100,而且对于这种速度快的系统 i本来用处不大

出0入0汤圆

发表于 2014-11-1 15:20:28 | 显示全部楼层
楼主很强大 是务实型的研究生

出0入0汤圆

发表于 2014-11-1 18:10:55 来自手机 | 显示全部楼层
mazhenyu 发表于 2014-11-1 15:14
那个数得除以100,而且对于这种速度快的系统 i本来用处不大

内环的参数不用除100吧?请问内环和外环实际的参数多少呢?麻烦楼主提供参考下

出0入0汤圆

 楼主| 发表于 2014-11-1 20:07:58 | 显示全部楼层
qiguibao 发表于 2014-11-1 18:10
内环的参数不用除100吧?请问内环和外环实际的参数多少呢?麻烦楼主提供参考下 ...

调参软件用的匿名的,所以是那个图上所有参数都得除100

出0入0汤圆

发表于 2014-11-2 10:43:28 来自手机 | 显示全部楼层
mazhenyu 发表于 2014-11-1 20:07
调参软件用的匿名的,所以是那个图上所有参数都得除100

ok,thanks~

出0入0汤圆

发表于 2014-11-4 21:55:12 | 显示全部楼层
我也用的是标准的串级PID的形式,但是在实际调整过程中,我发现外环只需要一个P就够了,i和d的作用几乎可以忽略。内环P和D会影响系统的稳定,如果将内环的D拆开来看,其实就是一个对角度的微分,和对角速度(这里用的是陀螺仪的角速度)的微分,构成了两级阻尼,所以一部分替代了外环D的作用。
至于内环I项,我觉得很奇怪,最开始我没有加I项,无论怎么调,手感都不比单级pid好,具体来说就是稳定性不错,但是响应和回中极差。后来我尝试加了一点i,发现i能很明显的提升响应和操控手感,以至于后来我把i加的很大,和内环p几乎差不多,同时I项的限幅也改的很大,系统稳定性没有变化,但是响应提高了很多!注意,是很多!我以前飞过naza飞控,我感觉此时控制手感收放自如,完全就是指哪儿打哪儿,自我感觉应该有naza 80%的性能了。后来在保持I项不变的情况下,我又尝试更改内外环的PD,感觉变化不大,所以我就很奇怪一个I项居然能够获得这么大的收益,不可思议。以前我在做其他控制系统的PID整定时,几乎可以忽略I项的作用。

出0入0汤圆

发表于 2014-11-4 22:05:13 | 显示全部楼层
对控制理解不好的童鞋,建议多看看控制的书,你们使用PID以及调参没有理论指导就像摸着石头过河。

出0入0汤圆

 楼主| 发表于 2014-11-4 23:24:50 | 显示全部楼层
qiaorz123 发表于 2014-11-4 21:55
我也用的是标准的串级PID的形式,但是在实际调整过程中,我发现外环只需要一个P就够了,i和d的作用几乎可以 ...

有可能你的外环p不够大,将四周放在地上,小油门,控制俯仰,看看能不能响应

出0入0汤圆

发表于 2014-11-12 19:48:09 来自手机 | 显示全部楼层
我内环加了D之后四轴就开始自己抽风式地小幅度震荡,是不是陀螺仪出来的角速度噪声比较大微分之后被放大?我看了apm里的pid都有对D项进行软件RC低通滤波,我试过了好像没什么效果,或者是我的滤波写的不对?

出0入0汤圆

发表于 2014-11-18 15:58:55 | 显示全部楼层
内外环的频率是一样的吗?内环频率是不是应该高于外环?求指教

出0入0汤圆

 楼主| 发表于 2014-12-21 19:50:16 | 显示全部楼层
onev 发表于 2014-11-18 15:58
内外环的频率是一样的吗?内环频率是不是应该高于外环?求指教

那是响应频率,是物体本身的特性(使用奇异扰动理论,要求内外环频率5倍以上),没有要求控制频率也要有差异呀

出0入0汤圆

发表于 2014-12-21 20:05:47 | 显示全部楼层
学习  四轴串级pid

出0入0汤圆

发表于 2014-12-25 15:48:36 | 显示全部楼层
lc125253647 发表于 2014-3-1 13:57
楼主,我也是和你一样是一名在校学生,出于自己的爱好开始制作四轴。对于你的串级PID我有几个疑问,还希望 ...

你好,能说明下“干扰30度角修正到接近30度效果”,这里的干扰角度30度角是指什么效果? 谢谢!

出0入0汤圆

发表于 2014-12-29 11:53:48 | 显示全部楼层
精工小匠 发表于 2014-12-25 15:48
你好,能说明下“干扰30度角修正到接近30度效果”,这里的干扰角度30度角是指什么效果? 谢谢! ...

就是在外界的作用力下 让飞机偏转到30°。。。

出0入0汤圆

发表于 2014-12-29 13:17:53 | 显示全部楼层
收集资料。

出0入0汤圆

发表于 2014-12-29 14:07:04 | 显示全部楼层
lc125253647 发表于 2014-12-29 11:53
就是在外界的作用力下 让飞机偏转到30°。。。

谢谢~指教了。

出0入0汤圆

发表于 2015-1-1 18:24:06 | 显示全部楼层
楼主    有串级pid的资料么   我想研究一下  最近在做大四    请多多指教

出0入0汤圆

发表于 2015-1-2 01:30:44 | 显示全部楼层
任何运动的物体都有位置,速度,加速度控制量,串级的pid实际是在速度量级就开始做控制,改变阻尼特性。如果速度环做的很好的话,位置环就可以一个p就搞定了。
如果只有位置环,控制效果上始终存在一个速度量级带来的小误差,这个误差在允许的范围内时,无所谓的。
积分的作用能不能改善系统是由系统的特性决定的。

出0入270汤圆

发表于 2015-1-2 15:37:38 | 显示全部楼层
Gyro_G 请问程序里这个参数是什么?

出0入270汤圆

发表于 2015-1-2 15:38:43 | 显示全部楼层
Gyro_G 请问程序里这个参数是什么?

出0入270汤圆

发表于 2015-1-2 15:40:29 | 显示全部楼层
mage99 发表于 2015-1-2 01:30
任何运动的物体都有位置,速度,加速度控制量,串级的pid实际是在速度量级就开始做控制,改变阻尼特性。如 ...

Gyro_G 程度里这个参数是什么意思

出0入0汤圆

发表于 2015-1-10 15:32:40 | 显示全部楼层
请问  参数先调角速度环还是角速度环   这有点不理解

出0入0汤圆

发表于 2015-1-11 11:35:24 | 显示全部楼层
niu14789 发表于 2015-1-2 15:37
Gyro_G 请问程序里这个参数是什么?

应该说单位转换的系数,具体值是多少还要看你的陀螺仪配置的量程

出0入0汤圆

发表于 2015-1-17 10:45:35 | 显示全部楼层
楼主如果把头文件给出了就完美了,或者把变量是什么意思注释下就太感谢了

出0入0汤圆

发表于 2015-1-19 18:59:00 | 显示全部楼层
maxwelllls 发表于 2014-5-15 22:28
以下我个人理解
单环的PID是一个姿态环,输入是姿态角度,输出是电机转速,可以实现姿态角的调节,但是对姿 ...

一语惊醒梦中人啊

出0入0汤圆

发表于 2015-1-28 00:04:05 | 显示全部楼层
好贴,mark

出0入0汤圆

发表于 2015-2-6 12:13:47 | 显示全部楼层
LZ,加个好友,有问题向你请教

出0入0汤圆

 楼主| 发表于 2015-2-16 23:01:35 | 显示全部楼层
kangyiHEU 发表于 2015-2-6 12:13
LZ,加个好友,有问题向你请教

直接说不好吗,我貌似没权限

出0入0汤圆

发表于 2015-3-2 10:32:49 | 显示全部楼层
本帖最后由 mandylion2008 于 2015-3-2 10:35 编辑

不错的讨论!

出0入0汤圆

发表于 2015-5-18 16:01:11 | 显示全部楼层
mazhenyu 发表于 2015-2-16 23:01
直接说不好吗,我貌似没权限

rool -= GYRO_AVG.X* Gyro_G;

楼主,看了你这里,然后大致都懂了,就是这里把外环得到的rool减去(两次角速度均值*这个是什么?),,,,,,那这样意思是把外环的量与某值的差作为输入内环?那响应速度会快么???


2个问题哈哈哈,谢谢解答

出0入0汤圆

 楼主| 发表于 2015-5-19 19:23:37 | 显示全部楼层
longjane 发表于 2015-5-18 16:01
rool -= GYRO_AVG.X* Gyro_G;

楼主,看了你这里,然后大致都懂了,就是这里把外环得到的rool减去(两次 ...

把外环误差(控制姿态角与实际姿态角的差)PID输入内环
不会快,这样做要求时标分离,会慢,但是够用、好调,也比较经典
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-18 11:15

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表