[四轴技术交流] 如何从零开始调节四旋翼的PID

[复制链接]
 楼主| adeli 发表于 2016-7-23 09:10 | 显示全部楼层 |阅读模式
我现在自己编写了四旋翼控制程序,使用的是角速度和角度串级pid算法,如何开始调PID参数呢?下面是我控制算法的代码,control_inner是内环控制,输入的是陀螺仪数据,control_shell是外环控制,输入的是四元数姿态解算出来的姿态角,各位牛人帮忙看看有什么问题吗?
  1. void control_inner(float x,float y,float z)
  2. {
  3. //  Xinner.Kp=5;
  4.   Xinner.Ex=Xshell.Out-x*0.0005327/AtR;
  5.        
  6.   Xinner.Eix+=Xinner.Ex;
  7.   Xinner.Out=Xinner.Kp * Xinner.Ex + \
  8.              Xinner.Ki * Xinner.Eix + \
  9.              Xinner.Kd * (mpu_gryo_data_History.X-x);
  10.   
  11. //  Yinner.Kp=1;
  12.   Yinner.Ex=Yshell.Out-y*0.0005327/AtR;
  13.   Yinner.Eix+=Yinner.Ex;
  14.   Yinner.Out=Yinner.Kp * Yinner.Ex + \
  15.              Yinner.Ki * Yinner.Eix + \
  16.              Yinner.Kd * (mpu_gryo_data_History.Y-y);
  17. //  Zinner.Kp=1;
  18.   Zinner.Ex=Zshell.Out-z*0.0005327/AtR;
  19.   Zinner.Eix+=Zinner.Ex;
  20.   Zinner.Out=Zinner.Kp * Zinner.Ex + \
  21.              Zinner.Ki * Zinner.Eix + \
  22.              Zinner.Kd * (mpu_gryo_data_History.Z-z);
  23.         mpu_gryo_data_History.Y=y;
  24.         mpu_gryo_data_History.X=x;
  25.         mpu_gryo_data_History.Z=z;
  26. }

  27. void control_shell(float x,float y,float z)
  28. {
  29. //        Xshell.Kp=3;
  30.   Xshell.Ex=(float)(RC_mid - rc_data.pitch)/100-x;
  31.   Xshell.Eix+=Xshell.Ex;
  32.         if(Xshell.Eix>13000)
  33.                 Xshell.Eix=13000;
  34.         if(Xshell.Eix<-13000)
  35.                 Xshell.Eix=-13000;
  36.        
  37.   Xshell.Out=Xshell.Kp * Xshell.Ex + \
  38.             Xshell.Ki * Xshell.Eix ;
  39.   
  40. //  Yshell.Kp=1;
  41.   Yshell.Ex=(RC_mid - rc_data.roll)/100-y;
  42.   Yshell.Eix+=Yshell.Ex;
  43.         if(Yshell.Eix>13000)
  44.                 Yshell.Eix=13000;
  45.         if(Yshell.Eix<-13000)
  46.                 Yshell.Eix=-13000;
  47.        
  48.   Yshell.Out=Yshell.Kp * Yshell.Ex + \
  49.             Yshell.Ki * Yshell.Eix ;
  50.   
  51. //  Zshell.Kp=1;
  52.   Zshell.Ex=(RC_mid - rc_data.yaw)/100-z;
  53.   Zshell.Eix+=Zshell.Ex;
  54.         if(Zshell.Eix>13000)
  55.                 Zshell.Eix=13000;
  56.         if(Zshell.Eix<-13000)
  57.                 Zshell.Eix=-13000;
  58.        
  59.   Zshell.Out=Zshell.Kp * Zshell.Ex + \
  60.             Zshell.Ki * Zshell.Eix ;
  61.   
  62. }
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

32

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部