wwwxxx国产_337p日本欧洲亚洲大胆张筱雨_免费在线看成人av_日本黄色不卡视频_国产精品成熟老女人_99视频一区_亚洲精品97久久中文字幕_免费精品视频在线_亚洲色图欧美视频_欧美一区二三区

標題: 基于MSP430單片機的四旋翼 PID Control種群遺傳算法 通過卡爾曼濾波實現自穩 [打印本頁]

作者: 郁響    時間: 2018-10-25 13:22
標題: 基于MSP430單片機的四旋翼 PID Control種群遺傳算法 通過卡爾曼濾波實現自穩
基于MSP430單片機的四旋翼 僅供大家參考


PID Control種群遺傳算法:
  1. #include "io430x14x.h"
  2. #include "stdlib.h"
  3. #include "sys.h"
  4. #include "Control.h"


  5. #define col_MAX 50                //群體空間大小
  6. #define var_p 65                //變異概率:65 對應的變異概率約等于0.001,655 為0.01   rand():0-65535
  7. #define epoch_MAX 200        //進化代數
  8. void inherit(void)                //遺傳進化PID
  9. {
  10.         unsigned int colony[col_MAX]={
  11.         62267,15148,39769,31849,58411,49944,29915,58375 ,53831
  12.         ,29144,40332,51900,60411,48378,11552,26588,61306,60089
  13.         ,26887,58565, 3794,23125,53291,  646, 9102,13288,13023
  14.         ,39570,17838,13029, 1001,48941,29169,61066,30539,27436
  15.         ,55457,34416,13280,44049,54926, 1287,44647,24869,54512
  16.         ,32952,46495,28107,19963,12429
  17.         };
  18.         unsigned int health[col_MAX];        //對應colony[] ,每個個體的適應值,
  19.         unsigned int dad,mum,baby1,baby2;
  20.         unsigned int mini_health,mini_id;
  21.         unsigned int temp_health;
  22.         unsigned char i,epoch;        //epoch 遺傳代數
  23.         mini_health = found(&colony[0],&health[0]);        //評估初始個體,并作適應值縮放,找出最小適應值
  24.         for(epoch=0; epoch < epoch_MAX; epoch++) //開始進化
  25.         {
  26.                 i = roulette(&health[0]);//輪盤賭轉,返回數組下標
  27.                 dad = colony[i];
  28.                 i = roulette(&health[0]);//輪盤賭轉,返回數組下標
  29.                 mum = colony[i];
  30.                 baby1 = dad&0xff;baby1 |= mum&0xff00;
  31.                 baby2 = mum&0xff;baby2 |= dad&0xff00;
  32.                 baby1 = variation(baby1);        //變異?
  33.                 baby2 = variation(baby2);
  34.                 temp_health = evaluating_unit(baby1);        //評估個體適應值
  35.                 if(temp_health > mini_health)
  36.                 {
  37.                         mini_id = evaluating(&health[0]);        //取得最差適應值的個體id(數組下標)
  38.                         colony[mini_id] = baby1;
  39.                         health[mini_id] = temp_health - mini_health;
  40.                 }
  41.                 temp_health = evaluating_unit(baby2);        //評估個體適應值
  42.                 if(temp_health > mini_health)
  43.                 {
  44.                         mini_id = evaluating(&health[0]);        //取得最差個體的適應值,及其id
  45.                         colony[mini_id] = baby2;
  46.                         health[mini_id] = temp_health - mini_health;
  47.                 }
  48.         }
  49.         while(1); //結束進化
  50. }

  51. #define ev_N 25
  52. #define aim_value 300
  53. uint evaluating_unit(uint unit)//評估個體適應值  順便PWM輸出
  54. {
  55.         uint ret=0,temp=0,max=0;
  56.         uchar i=0;
  57.         int uk=0;                                //PID增量
  58.         redressal(pid, unit);        //根據個體,對基因進行解碼  修改PID三個參數
  59.         while(i<ev_N)        //PID調整 ev_N.PID調整次數
  60.         {
  61.                         if(measured > desired)
  62.                         {
  63.                                 temp = measured - desired;
  64.                                 if(temp > max)
  65.                                         max=temp;        //最大超調量
  66.                         }
  67.                         else
  68.                                 temp = desired - measured;
  69.                        
  70.                         ret+=temp;
  71.                         uk = (int)(PID_Posi(pid, measured, desired));        //PWM輸出
  72.                         M1 = speed[0] - uk;        //y軸
  73.                         M3 = speed[0] + uk;        //y軸

  74.                         i++;
  75.                 }
  76.         }
  77.         ret=65535/(ret/ev_N+max);
  78.         return ret;        //返回適應值
  79. }

  80. void redressal(float* pid,uint colon)
  81. {
  82.         pid[0]=(float)((colon&0xFC00)>>10)*5.0/63;        //[0:0.079:5]
  83.         pid[1]=(float)((colon&0x3E0)>>5)*0.1/31.0;        //[0:0.0032:0.1]
  84.         pid[2]=(float)(colon&0x1F)/31.0;                        //[0:0.032:1]
  85. }

  86. uint found(uint colony,uint health)        //計算初始群體適應值,并找出最小值
  87. {
  88.         uchar i;
  89.         uint mini=0xff;
  90.         for(i=0;i<col_MAX;i++)
  91.         {
  92.                 *(health+i) = evaluating_unit(*(colony+i));        //評估個體適應值
  93.                 if(*(health+i)<mini)
  94.                         mini=*(health+i);
  95.         }
  96.         for(i=0;i<col_MAX;i++) //適應值縮放
  97.                 *(health+i)-=mini;
  98.         return mini;
  99. }

  100. uchar roulette(uint health)
  101. {
  102.         uchar i;
  103.         uint temp=0;
  104.         i=(uchar)(rand()%col_MAX); //0~(col_MAX-1) 隨機選擇起點
  105.         while(1)
  106.         {
  107.                 if((col_MAX-1)==i) //實現首尾相接
  108.                         i=0;
  109.                
  110.                 temp+=*(health+i); //累加適應值
  111.                 if (temp>1200)
  112.                         return i;
  113.                 i++;
  114.         }
  115. }

  116. uchar evaluating(uint health)        //取得最小適應值的個體id(數組下標)
  117. {
  118.         uchar i,id;
  119.         uint mini=0xffff;
  120.         for(i=0;i<col_MAX;i++)
  121.         {
  122.                 if(*(health+i)<mini)
  123.                 {
  124.                         mini=*(health+i);
  125.                         id=i;
  126.                 }
  127.         }
  128.         return id;
  129. }

  130. uint variation(uint baby)        //對基因進行變異
  131. {
  132.         uchar i;
  133.         for(i=0;i<16;i++)
  134.         {
  135.                 if(rand()<var_p)        //rand()0-65535,變異概率:65 對應的變異概率約等于0.001,655 為0.01
  136.                 {
  137.                         if(0==(baby&(1<<i)))
  138.                                 baby|=(1<<i);
  139.                         else
  140.                                 baby &= ~(1<<i);
  141.                 }
  142.         }
  143.         return baby;
  144. }
復制代碼


單片機源程序如下:
  1. #include "io430x14x.h"
  2. #include "sys.h"
  3. #include "24L01.h"
  4. #include "MPU6050.h"
  5. #include "HMC5883L.h"
  6. #include "EEPROM.h"
  7. #include "Control.h"
  8. #include "math.h"

  9. uchar RxBuf[32]={0};
  10. uchar TxBuf[32]={0};
  11. uchar EEPROMBuffer[SIZE]={0};

  12. int speed[5] = {1300,0,0,0,0};//M0,M1-M4
  13. int desire[4]={0,0,0,0};//HMC_YAW,ROLL,PITCH,YAW
  14. float PID_Roll[6]={0}, PID_Pitch[6]={0}, PID_Yaw[6]={0};
  15. float roll = 0, pitch = 0, yaw = 0;
  16. int gyro[3]={0}, accel[3]={0}, magne[3]={0};

  17. uchar RX = 0, TX = 0, CALC = 0, Fly = 0, EEPROMWR = 0;
  18. uint ms2 = 0, ms10 = 0, ms500 = 0;

  19. /********************************Main*********************************/
  20. void main(void)
  21. {
  22.         uchar Flag_TX = 0;
  23.         Init_Sys(); //系統功能初始化
  24.         _EINT();    //開啟中斷功能
  25.        
  26.         HMC5883_Init();
  27.         MPU6050_Init();
  28.         NRF24L01_Init();
  29.         while(AT24CXX_Check());//檢測不到24c16
  30.        
  31.         AT24CXX_Read(20,EEPROMBuffer,SIZE);
  32.         Init_datas(PID_Roll, PID_Pitch, PID_Yaw, desire, speed, EEPROMBuffer);
  33.        
  34. /********************************Start*********************************/
  35.         while(1)
  36.         {
  37.                 if(RX)
  38.                 {
  39.                         NRF24L01_RX_Mode();
  40.                         if(NRF24L01_RxPacket(RxBuf)==RX_OK)   //判斷是否收到數據
  41.                         {
  42.                                 if(RxBuf[0]==0xAA)//有數據更新
  43.                                 {
  44.                                         Data_Update(PID_Roll, PID_Pitch, PID_Yaw, desire, speed, RxBuf);
  45.                                         Fly = RxBuf[START_STOP];//Stop?
  46.                                 }
  47.                         }
  48.                 }
  49.                 if(TX)
  50.                 {
  51.                         TX = 0;
  52.                         if(Flag_TX == 0)
  53.                         {
  54.                                 Flag_TX = 1;
  55.                                 Data_Send_Status(roll, pitch, yaw, desire, speed, TxBuf);
  56.                         }
  57.                         else if(Flag_TX == 1)
  58.                         {
  59.                                 Flag_TX = 0;
  60. //                                Data_Send_Senser(accel, gyro, magne, TxBuf);
  61.                                 Data_Send_PID(PID_Roll, PID_Pitch, PID_Yaw, TxBuf);
  62.                         }
  63.                         NRF24L01_TxPacket(TxBuf);
  64.                 }
  65.                 if(CALC)
  66.                 {
  67.                         CALC = 0;
  68.                         MPU6050_Read(accel, gyro);
  69.                         AHRSupdate(accel, gyro, magne);
  70.                         yaw = get_angle(magne, roll, pitch);
  71.                         if(Fly)
  72.                         {
  73.                                 EEPROMWR = 1;
  74.                                 MotoCtrl(PID_Roll, PID_Pitch, PID_Yaw, desire, speed, roll, pitch, yaw, gyro, 1);
  75.                         }
  76.                         else
  77.                         {
  78.                                 M1=900;M2=900;M3=900;M4=900;
  79.                                 if(EEPROMWR)
  80.                                 {
  81.                                         EEPROMWR = 0;
  82.                                         AT24CXX_BufferWrite(PID_Roll, PID_Pitch, PID_Yaw, desire, speed, EEPROMBuffer);
  83.                                 }
  84.                         }
  85.                 }
  86.         }
  87. }

  88. //***********************************************************************
  89. //TIMERA中斷服務程序
  90. //定時時間:1ms
  91. //***********************************************************************
  92. #pragma vector = TIMERA1_VECTOR
  93. __interrupt void Timer_A1(void)
  94. {
  95.         if(TAIV==2)//定時溢出標志位
  96.         {
  97.                 ms2++;
  98.                 ms10++;
  99. //                ms500++;
  100.                
  101.                 if(ms2 == 2)        {CALC = 1;                        ms2  = 0;}
  102.                
  103.                 if(ms10 == 4)        {TX = 1;                                         }
  104.                 if(ms10 == 8)        {TX = 1;                                         }
  105.                 if(ms10 == 12)        {TX = 1;                                         }
  106.                 if(ms10 == 16)        {TX = 1;                                         }
  107.                 if(ms10 == 20)        {RX = 1;                        ms10 = 0;}
  108.                
  109. //                if(ms500 == 5000)
  110. //                {
  111. //                        ms500 = 0;
  112. //                }
  113.                
  114.         }
  115. }
復制代碼

所有資料51hei提供下載:
四旋翼飛行器,采用MSP430F149,通過卡爾曼濾波實現自穩。其中包括陀螺儀MPU6505、地.rar (180.89 KB, 下載次數: 77)



作者: becausetyet    時間: 2020-2-19 14:48
非常好




歡迎光臨 (http://www.izizhuan.cn/bbs/) Powered by Discuz! X3.1
亚洲午夜剧场| 麻豆传媒mv| 亚洲欧美日韩不卡| 九九热精品视频| 欧美色道久久88综合亚洲精品| 另类国产ts人妖高潮视频| 国产精品va视频| 最新国产在线观看| 乳奴隷乳フ辱| 国产色综合视频| 刘亦菲国产毛片bd| av五月天在线| 一区二区三区国产福利| 国产日韩欧美综合| 日韩亚洲欧美中文高清在线| 欧美日高清视频| 亚洲欧洲国产日本综合| 国模大尺度一区二区三区| 国产精品99久久久久久动医院| 久久精品国产福利| av片在线观看免费| 伊人网站在线| 国内a∨免费播放| 人妻无码中文字幕| 五月婷婷中文字幕| 亚洲图片第一页| 99视频在线观看视频| 日韩精品在线观看av| 欧美精品一区二区三区在线四季 | 成人av网址在线观看| 在线欧美三区| 少妇精品久久久一区二区三区 | 一级网站免费观看| 黄网站在线观看高清免费| 中文字幕导航| 人妻视频一区二区三区| 中文字幕欧美色图| 久久婷婷成人综合色| 国产日韩精品视频一区| 性chinese极品按摩| 国产成人一区二区三区| 色琪琪综合男人的天堂aⅴ视频| 在线不卡欧美精品一区二区三区| 亚洲精品大片www| 91女人视频在线观看| 美国三级日本三级久久99| 激情久久久久久| 一本一道久久综合狠狠老| 亚洲aaa级| 欧美久久香蕉| 男人的天堂一区| 欧美国产亚洲一区| 国产又粗又长又爽视频| 日韩一区二区三区高清| 蜜桃导航-精品导航| 亚洲最大福利网站| 91在线播放国产| 成人精品aaaa网站| 国产在线日韩在线| 国产精品视频xxxx| 国产精品一区二区三区久久| 国产成人精品久久二区二区91| 欧美黄色www| 久久久久久一区二区三区 | 成人激情视频在线播放| 天天综合视频在线观看| av午夜电影| 日本视频免费| 18以下岁禁止1000部免费| 无人日本免费视频| 人人插人人干| 成人图片小说| 亚洲精华国产| 台湾av在线二三区观看| 性感美女激情视频在线观看| wwwxxx在线观看| 一区二区三区伦理| 多野结衣av一区| 忘忧草在线www成人影院| 91tv亚洲精品香蕉国产一区| 人人精品久久| 欧美日韩一本| 久久大综合网| 一区二区黄色| 精品一区二区三区免费播放| 成人性色生活片| 国产三级三级三级精品8ⅰ区| 亚洲视频一区在线观看| 精品成人在线视频| 欧美日韩国产精选| 亚洲女在线观看| 欧美精品18videosex性欧美| 国产精品电影观看| 国产精品一区二区av| 日韩中文一区| 欧美在线观看成人| 一区二区三区四区影院| 亚洲图片第一页| 无码一区二区三区| 亚洲 欧美 激情 小说 另类| 秋霞毛片大全| 在线播放网站| av伦理在线| 日本超碰一区二区| 国产精品久久久久无码av| 宅男噜噜噜66国产日韩在线观看| 国产呦精品一区二区三区网站| av先锋影院| 国产剧情一区| 日韩欧美中文字幕一区| 免费av网站大全久久| 国产伦精品一区二区三区视频青涩 | 欧美日韩在线不卡一区| 69精品丰满人妻无码视频a片| 天天摸天天碰天天添| 亚洲色图欧美另类| 激情小说中文字幕| 日韩亚洲精品电影| 中出视频在线观看| 免费在线观看av电影| 久久久久亚洲精品一区二区三区| 软萌小仙自慰喷白浆| 高清视频在线www色| av电影高清在线观看| 欧美aaaaaaaa| 青青草97国产精品麻豆| 亚洲欧美日韩专区| av电影在线观看完整版一区二区| 一级精品视频在线观看宜春院 | 五月婷婷深爱五月| 大桥未久在线播放| 国产69精品久久久久孕妇| av在线网址观看| 4438全国亚洲精品观看视频| 国内自拍一区| 91亚洲精华国产精华精华液| 91国偷自产一区二区开放时间 | 99视频在线免费| 一色道久久88加勒比一| 中文字幕第2页| 国产一区二区三区在线| 亚洲人与黑人屁股眼交| 久久综合色视频| 亚洲av成人无码一二三在线观看| 日韩免费一二三区| 骚虎黄色影院| 日韩专区一区二区| 国产成人久久精品麻豆二区| 一区二区三区毛片免费| 99国产一区二区三精品乱码| 91久久香蕉国产日韩欧美9色| 中文字幕亚洲欧美一区二区三区| 7777精品伊久久久大香线蕉语言| 亚洲国产欧美自拍| 欧美一区二区三区……| 国产亚洲综合性久久久影院| 成人黄色小视频在线观看| 香蕉加勒比综合久久| 亚洲亚裔videos黑人hd| 成人高清在线观看| 免费看涩涩视频| 伊人手机在线视频| 写真福利片hd在线播放| 2024短剧网剧在线观看| 日本不卡免费一区| xnxx国产精品| 亚洲丁香婷深爱综合| 91久久中文字幕| 国产三级精品三级在线| 亚洲国产无线乱码在线观看 | 免费观看亚洲视频大全| 日韩av二区在线播放| 欧美性xxxx在线播放| 97香蕉久久超级碰碰高清版| 男的插女的下面视频| 免费毛片在线播放免费| 999人在线精品播放视频| 国产乱妇乱子在线播视频播放网站| 久久精品免费一区二区三区| 国产精品久久久久久久久晋中 | 中文字幕av专区| 日韩午夜精品视频| 欧美成人精品激情在线观看| 色一情一乱一伦一区二区三欧美| 在线免费播放av| 五十路在线视频| 国产日韩精品在线看| 妖精视频一区二区三区免费观看| 91社区在线播放| 日韩大陆毛片av| 日韩精品国内| www.毛片com| 成年人免费网站在线观看| 日韩av电影资源网| 日韩黄色影院| 国产精品盗摄久久久| 日韩伦理在线观看| 国产免费美女视频| 亚洲黄色小说网| 国产在线视频网站| 99精品一区| 午夜精品福利一区二区三区蜜桃| 91精品国产精品| 国产精品一区二区小说| 99久久精品国产一区色| 91短视频版在线观看www免费| 欧美国产一级| 欧美日韩色婷婷| 91精品视频在线| 制服 丝袜 综合 日韩 欧美| 精品夜夜澡人妻无码av| 天堂影院一区二区| wwwww在线观看| 国产高清自拍一区| 一本色道综合久久欧美日韩精品| 亚洲精品国产一区二区在线| 99久久一区二区| 男人天堂亚洲二区| 你懂的亚洲视频| 在线欧美小视频| 国产亚洲欧美一区二区| 国产精品久久国产精麻豆96堂| 美女视频黄的免费| 久久中文资源| 亚洲一区电影777| 成人做爰www免费看视频网站| 日韩女优在线视频| 国产精品二区在线| 永久看看免费大片| 欧美娇小性xxxx| 国产精品亚洲综合在线观看| 国产三级一区二区| 国产成人精品一区二区三区| 动漫精品一区二区三区| jjzzjjzzjjzz| 欧州一区二区| 欧美丝袜丝交足nylons图片| 人禽交欧美网站免费| 亚洲毛片一区二区三区| 国产成人在线视频免费观看| 久久国产人妖系列| 久久视频在线视频| 自拍偷拍激情视频| 好看的黄色网址| 久久国产中文字幕| 91精品国产综合久久小美女| 久久久久伊人| 亚洲77777| 欧美美女黄视频| 国产精品久在线观看| 欧美做受喷浆在线观看| xxx免费视频观看| 欧美三级伦理在线| 欧美日韩高清影院| 成年人黄色在线观看| 精品人妻伦一区二区三区久久| 夜鲁夜鲁夜鲁视频在线播放| 久久精品一区四区| 91九色单男在线观看| 久久精品这里只有精品| 免费a级人成a大片在线观看| 国产xxx精品视频大全| 51精品在线观看| 麻豆av一区二区三区久久| 激情欧美一区| 草莓视频末满18勿| 欧美三级理伦电影| 国产成人免费视频精品含羞草妖精| 欧美裸体男粗大视频在线观看| 国产精品成人免费一区久久羞羞| 操操操com| 99热精品在线| 日韩性xxxx爱| 国产肥白大熟妇bbbb视频| 蜜桃视频网站www| 香蕉久久久久久久av网站| 日韩中文有码在线视频| 久久精品一区二区免费播放| 写真福利理论片在线播放| 日韩国产精品久久久久久亚洲| 欧美福利小视频| www.日本高清视频| 亚洲xxxxxx| 国产香蕉久久精品综合网| 91九色蝌蚪嫩草| 国产乱色精品成人免费视频| 成人午夜在线| 欧美性猛交xxxx黑人交| 久久久久久久久久久视频| 免费污片软件| 丝袜脚交一区二区| 2023亚洲男人天堂| 日韩特黄一级片| 成人亚洲视频| 8v天堂国产在线一区二区| 色婷婷一区二区三区四区| 色的视频在线免费看| www.欧美com| 国内av一区二区| 黄色av观看| 久久电影国产免费久久电影| 国产成人精品在线| 国产精品一区二区三区四| 久久久人成影片一区二区三区在哪下载| 亚洲一区二区精品3399| 日韩小视频网站| 成年免费插网| 蜜臀av在线播放一区二区三区| 国产精品久久久久久久电影| 一级黄色片免费看| 成人搞黄视频| 亚洲精品有码在线| 免费黄色片网站| 国内老司机av在线| 国产精品欧美一区二区三区不卡| 一区二区美女视频| 欧美a级黄色大片| 欧美日韩国产综合新一区| gogo大尺度成人免费视频| 国产三级精品三级| 伊人婷婷久久| 青丝免费观看高清影视| 日韩在线一区二区三区| 亚洲自拍另类欧美丝袜| 三级视频在线看| 国内在线观看一区二区三区| 日韩免费不卡av| 国产草草影院ccyycom| 国产精品99一区二区三| 日本sm极度另类视频| 午夜精品久久久久久久91蜜桃| 欧美电影《轻佻寡妇》| 欧美一区二区三区……| 欧美亚洲成人xxx| 新91视频在线观看| sm性调教片在线观看| 欧美日韩亚洲另类| free性中国hd国语露脸| 一二三四视频在线中文| 精品奇米国产一区二区三区| 少妇高潮一区二区三区喷水| 国产精品3区| 日韩中文字幕久久| 五月婷婷六月婷婷| 精品一区二区三| 国产精品h在线观看| 亚洲人成电影在线观看网| 久久激情婷婷| 久久大香伊蕉在人线观看热2| 尤物在线观看| 2021久久国产精品不只是精品| 国产片侵犯亲女视频播放| 亚洲欧洲成人| 色综合色狠狠综合色| 91成年人网站| 一区二区三区视频播放| 欧美丰满少妇xxxx| 污污视频在线观看网站| 麻豆视频观看网址久久| 亚洲免费视频播放| 天堂资源在线观看| 欧美日韩国产在线看| 男女做爰猛烈刺激| av动漫精品一区二区| 26uuu亚洲伊人春色| 久久久免费网站| 播五月开心婷婷综合| 99福利在线观看| 草草在线视频| 日韩中文视频免费在线观看| www.xxx国产| 老司机免费视频一区二区 | 久久午夜精品视频| 国产精品极品| 国产精彩精品视频| 99久久精品国产一区二区小说| 91在线观看下载| 欧美一区二区三区精品电影| 亚洲高清免费观看高清完整版| 久久午夜电影网| 成人精品视频在线| 国产www网站| ●精品国产综合乱码久久久久| 又色又爽又黄18网站| 欧美高清影院| 欧美在线国产精品| 五月网丁香网| 亚洲影视资源网| 91视频最新网址| 亚洲草久电影| 日韩精品欧美专区| 国产三级在线看| 精品无人区太爽高潮在线播放| 91麻豆一区二区| 国产一区二区91| 欧美激情第3页| 精品九九久久| 国产精品视频26uuu| 国产99re| 日韩三级视频在线观看|