国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

第十八屆智能車之PID算法以及上位機調(diào)節(jié)

這篇具有很好參考價值的文章主要介紹了第十八屆智能車之PID算法以及上位機調(diào)節(jié)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

當前正在備戰(zhàn)第十八屆智能車,記錄一下學習和實踐的過程,這一篇主要是講pid算法以及調(diào)試。

PID即:Proportional(比例)、Integral(積分)、Differential(微分)的縮寫。

PID是經(jīng)典的閉環(huán)控制算法,具有原理簡單,易于實現(xiàn),適用面廣,控制參數(shù)相互獨立,參數(shù)的選定比較簡單等優(yōu)點。

在智能車閉環(huán)中,pid算法起到了關(guān)鍵作用,他可以保證車輛行駛的速度按照你所設定的目標速度執(zhí)行,提高了車輛行駛的穩(wěn)定性。

接下來是代碼部分

首先在main函數(shù)中對pid進行初始化。

 PID_init(&Motor_pid_r);
 PID_init(&Motor_pid_l);

 PID_Set(&Motor_pid_r,10,10,4);
 PID_Set(&Motor_pid_l,10,10,4);

這是所調(diào)用的pid函數(shù)。

//初始化PID
void PID_init(PID_TypDef* sptr)
{
    sptr->Kp = 0.0;             // 比例常數(shù) Proportional Const
    sptr->Ki = 0.0;             // 積分常數(shù) Integral Const
    sptr->Kd = 0.0;             // 微分常數(shù) Derivative Const
    sptr->Bias      = 0.0;
    sptr->Integral  = 0.0;
    sptr->Last_Bias = 0.0;
    sptr->Pre_Bias  = 0.0;

}

//PID設置
void PID_Set(PID_TypDef *PID,float Kp,float Ki,float Kd)
{
    PID->Kp = Kp;
    PID->Ki = Ki;
    PID->Kd = Kd;
}

這是在中斷中調(diào)用來計算pwm的函數(shù)

pwm_r += IncPID(r_speed,target_speed_r,&Motor_pid_r);
pwm_l += IncPID(l_speed,target_speed_l,&Motor_pid_l);

這是增量式PID和位置式PID,具體用那一個要看實際應用情況

typedef struct
{
         float  Kp;                  // 比例常數(shù) Proportional Const
         float  Ki;                  // 積分常數(shù) Integral Const
         float  Kd;                  // 微分常數(shù) Derivative Const
         float  Integral;
         float  Bias;
         float  Last_Bias;
         float  Pre_Bias;
}PID_TypDef;

PID_TypDef Motor_pid_r;   //右電機PID
PID_TypDef Motor_pid_l;   //左電機PID

//PID設置
void PID_Set(PID_TypDef *PID,float Kp,float Ki,float Kd)
{
    PID->Kp = Kp;
    PID->Ki = Ki;
    PID->Kd = Kd;
}

//增量式PID
float IncPID(int Encoder,int Target,PID_TypDef* sptr)
{
  float Pwm;
  sptr->Bias = Target - Encoder;                                     // 計算當前誤差
  Pwm = sptr->Kp * (sptr->Bias-sptr->Last_Bias)                  // P
         +sptr->Ki * sptr->Bias                                   // I
         +sptr->Kd * (sptr->Bias-2*sptr->Last_Bias+sptr->Pre_Bias);  // D

  sptr->Pre_Bias=sptr->Last_Bias;                          // 存儲誤差,用于下次計算
  sptr->Last_Bias=sptr->Bias;

  return(Pwm);                                    // 返回增量值

}


//位置式PID
float PstPID(float Angle, float Target,PID_TypDef* sptr)
{
    float Pwm;
//  if(around==2)
//  {
        sptr->Bias = 30 ;
//  }else
//  {
    sptr->Bias = Target -Angle ;
//  }
    sptr->Integral += sptr->Bias;

    Pwm = sptr->Kp   * sptr->Bias                   // P
         +sptr->Ki * sptr->Integral                 // I
         +sptr->Kd * (sptr->Bias-sptr->Last_Bias);  // D

    sptr->Last_Bias=sptr->Bias;

    return(Pwm);

}

增量式PID

第十八屆智能車之PID算法以及上位機調(diào)節(jié)

比例P : ? ?e(k)-e(k-1) ? 當前誤差 - 上次誤差

積分I : ? e(i) ? ? 當前誤差 ??

微分D : ?e(k) - 2e(k-1)+e(k-2) ? 當前誤差 - 2*上次誤差 + 上上次誤差

增量式PID中不需要累加,控制增量Δu(k)的確定僅與最近3次的采樣值有關(guān),容易通過加權(quán)處理獲得比較好的控制效果,并且在系統(tǒng)發(fā)生問題時,不會出現(xiàn)突變的情況,增量式不會嚴重影響系統(tǒng)的工作。

位置式 PID?

第十八屆智能車之PID算法以及上位機調(diào)節(jié)

e(k):?用戶設定的值(目標值) -??控制對象的當前的狀態(tài)值?

比例P :????e(k)

積分I :???∑e(i)?????誤差的累加(包括e(k))

微分D :??e(k) - e(k-1)??這次誤差-上次誤差

因為有誤差積分一直累加,也就是當前的輸出u(k)與過去的所有狀態(tài)都有關(guān)系,用到了誤差的累加值;(誤差e會有誤差累加),輸出的u(k)對應的是執(zhí)行機構(gòu)的實際位置,,一旦控制輸出出錯(控制對象的當前的狀態(tài)值出現(xiàn)問題 ),u(k)的大幅變化會引起系統(tǒng)的大幅變化

并且位置式PID在積分項達到飽和時,誤差仍然會在積分作用下繼續(xù)累積,一旦誤差開始反向變化,系統(tǒng)需要一定時間從飽和區(qū)退出,所以在u(k)達到最大和最小時,要停止積分作用,并且要有積分限幅和輸出限幅

所以在使用位置式PID時,一般我們直接使用PD控制

而位置式 PID 適用于執(zhí)行機構(gòu)不帶積分部件的對象,如舵機和平衡小車的直立和溫控系統(tǒng)的控制

(詳細的位置式pid與增量式pid可以看原文鏈接https://blog.csdn.net/u014453443/article/details/100573722)

寫下來是用上位機調(diào)PID

這是我使用的上位機軟件

第十八屆智能車之PID算法以及上位機調(diào)節(jié)

這是上位機軟件所看到的雙電機上電后粗調(diào)的效果

?第十八屆智能車之PID算法以及上位機調(diào)節(jié)

?基本上實現(xiàn)了pid閉環(huán)控制,用手施加外部持續(xù)穩(wěn)定的阻力,電機依舊可以保證穩(wěn)定的轉(zhuǎn)速,效果比較理想。

?? ? ? ? 我最近發(fā)了一篇文章里面包含了常用的功能函數(shù)以及常用的模塊底層驅(qū)動函數(shù)封裝庫,大家感興趣的可以收藏一下,需要的時候就不用到處找代碼,一篇就夠用,我會持續(xù)更新。

????????常用模塊函數(shù)封裝庫(持續(xù)更新中。。。。。。)-CSDN博客?文章來源地址http://www.zghlxwxcb.cn/news/detail-461766.html

到了這里,關(guān)于第十八屆智能車之PID算法以及上位機調(diào)節(jié)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務器費用

相關(guān)文章

  • 算法第十八天-實現(xiàn)Trie(前綴樹)

    算法第十八天-實現(xiàn)Trie(前綴樹)

    本文是前綴入門教程 從二叉樹說起 前綴樹,也是一種樹。為了理解前綴樹,我們先從二叉樹說起。常見的二叉樹結(jié)構(gòu)是下面這樣子的: 可以看到一個樹的節(jié)點包含了三個元素:該節(jié)點本身的值,左子樹的指針,右子樹的指針。二叉樹可視化是下面這樣子的: 二叉樹的每個節(jié)

    2024年01月18日
    瀏覽(18)
  • 算法第十八天-打家劫舍Ⅱ

    算法第十八天-打家劫舍Ⅱ

    [打家劫舍Ⅱ]是說兩個相鄰的房間不能同時偷,并且首尾兩個房間是相鄰的(不能同時偷首尾房間) 明顯是基于[打家劫舍Ⅰ]做的升級。[打家劫舍Ⅰ]也是說兩個相鄰的房間不能同時偷,但是首尾房間不是相鄰的(可以同時偷首尾房間) 所以,我們先從[打家劫舍Ⅰ]開始說起。

    2024年01月17日
    瀏覽(23)
  • 智能算法實現(xiàn)PID智能車控制系統(tǒng)

    智能算法實現(xiàn)PID智能車控制系統(tǒng)

    PID控制是自動控制領(lǐng)域中產(chǎn)生最早,應用最廣的一種控制方法。本文以論述PID參數(shù)先進整定方法開始,介紹了近幾年得到的最新研究成果。接下來,從PID控制的結(jié)構(gòu)形式實際控制工程需求和實現(xiàn)條件分析了PD控制的獨特優(yōu)點和理論依據(jù)。在眾多的PID調(diào)整方法中,本文選擇了內(nèi)

    2024年02月08日
    瀏覽(24)
  • QT上位機控制stm32,并利用PID控制編碼電機旋轉(zhuǎn)

    QT上位機控制stm32,并利用PID控制編碼電機旋轉(zhuǎn)

    QT上位機控制stm32,并利用PID控制編碼電機旋轉(zhuǎn)?? ??????? ? 由于最近在學習電機控制算法之類的東西,看到論文大多使用PID、或以PID衍生的ADRC作為電機的主流控制,于是自己也寫了一個stm32控制L298N以驅(qū)動直流電機的程序,并用QT做了一個上位機實現(xiàn)了用軟件改變PID的參數(shù)

    2023年04月09日
    瀏覽(25)
  • [調(diào)參神器]使用VOFA+上位機進行PID調(diào)參(附下位機代碼)

    [調(diào)參神器]使用VOFA+上位機進行PID調(diào)參(附下位機代碼)

    ? 簡單地來說,VOFA+是一個超級串口助手,除了可以實現(xiàn)一般串口助手的串口數(shù)據(jù)收發(fā),它還可以實現(xiàn)數(shù)據(jù)繪圖(包括直方圖、FFT圖),控件編輯,圖像顯示等功能。使用VOFA+,可以給我們平常的PID調(diào)參等調(diào)試帶來方便,還可以自己制作符合自己要求的上位機,為嵌入式開發(fā)

    2023年04月09日
    瀏覽(19)
  • 第十八章 Unity 協(xié)程

    第十八章 Unity 協(xié)程

    我們知道腳本都是繼承自MonoBehaviour類,而其中的Update方法里面放置了大部分的游戲邏輯處理代碼。Update方法是游戲循環(huán)的每一幀都去執(zhí)行,這就要求我們的代碼“無時無刻”不在處理所有的可能發(fā)生的情況,并做出相應的處理。如果我們想要完成“一段時間”的邏輯代碼,例

    2024年02月05日
    瀏覽(22)
  • 第十八節(jié)——插槽

    在Vue中,插槽(Slots)是一種用于組件模板中的特殊語法,用于實現(xiàn)組件的內(nèi)容分發(fā)和復用。插槽允許父組件在子組件的模板中插入任意的內(nèi)容,從而實現(xiàn)更靈活的組件組合和定制 默認插槽是最常用的插槽類型。在子組件的模板中,使用slot/slot標簽定義默認插槽的位置。父組

    2024年02月05日
    瀏覽(22)
  • 每日三問-前端(第十八期)

    先來回顧一下上期的問題及答案: 2023年6月7日 1. 組件間通信是指在 Vue.js 中,不同組件之間進行數(shù)據(jù)或事件的傳遞和交互的過程。常用的組件通信方式包括: 父子組件通信:通過 props 屬性將數(shù)據(jù)從父組件傳遞給子組件,子組件通過監(jiān)聽 props 的變化來獲取父組件傳遞的數(shù)據(jù)。

    2024年02月08日
    瀏覽(19)
  • 第十八章 ObjectScript - 使用例程

    可以將例程視為 ObjectScript 程序。例程可以從頭開始編寫,也可以在編譯類時自動生成。 在 ObjectScript 例程中,標簽定義以下代碼單元之一的起點: Procedures 過程(可選地返回一個值)。過程中定義的變量是該過程私有的,這意味著它們不可用于其他代碼。對于函數(shù)和子例程

    2024年02月10日
    瀏覽(17)
  • C++學習第十八天(函數(shù)模板)

    模板 1.1 模板的概念 模板就是 建立通用的模具,大大提高復用性,特點:模板不可以直接使用,他只是一個框架;模板的通用并不是萬能的。 1.2 函數(shù)模板語法 函數(shù)模板的作用:建立一個通用函數(shù),其函數(shù)返回值類型和形參類型可以不具體定制,用一個虛擬的類型來代表。

    2024年02月13日
    瀏覽(18)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包