久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5286|回復: 1
收起左側

固定翼四軸通用的串級PID算法分享,非常穩定好調

[復制鏈接]
ID:171096 發表于 2017-3-17 01:55 | 顯示全部樓層 |閱讀模式
聲明:樓主是四軸飛行器的愛好者(廢話,不喜歡會做這個!!?)以前學習過相關方面的知識,不過開始的時候沒有太多資金,而且無刷電機很危險,所以先從小四軸開始玩起,經過一年的努力四軸終于可以比較穩定的飛行了(程序參考了匿名和蜂鳥四軸,感謝他們的無私奉獻

做的時候發很多人都在抱怨四軸參數難調,剛開始我也使用的是常見的pid控制,發現對參數確實十分敏感,很難達到穩定的效果,甚至直接使用陀螺儀的數據進行角速率反饋得到的效果都比它好。

通過查閱資料我發現四軸一般會被簡化為一個低阻尼的二階系統,角速率反饋恰恰可以增加它的阻尼(這個在二代的戰斗機比如殲7中廣泛采用,是改善阻尼的好方法)。于是我就是用了在固定翼飛機上常常采用的串級pid來調試,經過師兄理論上的指點,四軸已經可以比較穩定的飛行。

這個算法有固定翼的控制,和四軸控制原理相同。 首先使用角速率反饋作為內環,在用角度反饋作為外環,只要內環的參數調整合適,外環的參數從個位數變成六七十,四軸都可以穩定的飛行。

參數調節:
113835jqenzdtqeezzzqae.png.thumb.jpg
113837ha43fngh74x76pn3.png.thumb.jpg

還有代碼分享:

  1.     void GET_EXPRAD(void)                     
  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",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",moto1,moto2,moto3,moto4);
  91.             if(ARMED)        MOTO_PWMRFLASH(moto1,moto2,moto3,moto4);
  92.             else                        MOTO_PWMRFLASH(0,0,0,0);
  93.     }
復制代碼
回復

使用道具 舉報

ID:204748 發表于 2017-5-27 13:01 來自手機 | 顯示全部樓層
謝謝分享。謝謝奉獻。謝謝樓主。
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: av黄色免费在线观看 | 欧美一级片 | 国产一区二区不卡 | 99精品久久久久 | 欧美日韩淫片 | 国产视频一区二区在线观看 | 日韩视频在线观看中文字幕 | 精品久久一区 | 欧美精品一区二区在线观看 | 午夜影院| 白浆在线 | 91久久久久久久久 | 91精品国产777在线观看 | 在线观看视频一区二区三区 | 日韩一区二区视频 | 91久久精品国产91久久 | 欧美精品一区二区三区蜜桃视频 | 国产一区免费 | 国产午夜在线 | 久久91av | 久久久久一区二区三区 | 国产一区二区观看 | 国产精品亚洲一区 | 国产午夜影院 | 蜜桃黄网| 国产一区二区影院 | 国产精品久久久久999 | 国产日韩欧美中文 | 亚洲成人一区二区三区 | 玖玖在线精品 | 日韩网站在线观看 | 欧美日韩国产精品激情在线播放 | 欧美激情一区二区三区 | 人人射人人插 | 国产福利在线免费观看 | 色视频在线观看 | 精品国产欧美一区二区三区成人 | 久久国产精品-久久精品 | www.亚洲精品 | 国产精品特级毛片一区二区三区 | 91精品国产综合久久久久久丝袜 |