玩轉OpenHarmony PID:教你打造兩輪平衡車
簡介
此次為大家帶來的是OpenAtom OpenHarmony(以下簡稱“OpenHarmony”)系統與PID控制演算法相結合並落地的平衡車專案。
PID控制演算法是一種經典的,並被廣泛應用在控制領域的演算法。類似於這種:需要將某一個物理量保持穩定的場合,比如維持平衡,穩定溫度、轉速等,PID都會適用。在四軸飛行器,平衡小車、汽車定速巡航、溫度控制器等場景均有應用。
透過本樣例的學習,開發者能夠對OpenHarmony系統裝置端開發有進一步的認識,還能夠掌握PID控制演算法的使用。本樣例使用OpenHarmony 3.2 Beta1作業系統,硬體平臺採用小熊派BearPi-HM Nano(Hi3861)開發板。
本樣例效果動圖:
硬體配置資源
兩輪平衡小車主要硬體資源:
主控CPU:小熊派BearPi-HM Nano(Hi3861)開發板;
陀螺儀:MPU6050六軸陀螺儀感測器;
左右輪:帶有霍爾感測器的直流電機;
小車平臺及結構件資源可以自行在相關網站獲得。
原理概括
小時候都玩過上圖遊戲吧:木杆立在手指上,儘量保持木杆直立不倒。
當木杆向前傾斜時,我們會往前行走,以用來抵消木杆的前傾;往後傾斜時,我們會往後倒退。對的!沒錯!你猜對了。平衡車的控制原理就是這樣:
PID演算法介紹
平衡車的控制離不開對PID演算法的應用。那麼什麼是PID演算法?它能解決什麼問題?
PID演算法:就是“比例(proportional)、積分(integral)、微分(derivative)”,是一種常見的“保持穩定”控制演算法。
結合兩輪平衡車的場景,對PID引數的認識如下:
P比例引數:該引數能夠快速讓小車達到平衡狀態,但是由於控制是滯後的,以及是慣性系統,容易帶來超調,即小車會出現前後搖擺的現象。所以P引數不能太大;
I積分引數:小車由於摩擦力或者風阻力,並且P不能太大,只靠P控制有可能達不到穩定狀態,所以需要加入I積分引數,消除穩態誤差;
D微分引數:平衡小車維持的是傾斜角度要為平衡角度,由於PI引數使小車振盪,小車會出現前後搖擺現象,加入D微分引數能夠消除小車的振盪。
兩步搭建樣例工程
在OpenHarmony原始碼基礎上,兩步構建平衡小車程式碼。(OpenHarmony原始碼下載路徑及BearPi-HM Nano(Hi3861)開發板程式碼燒錄,請參考文章末尾相關連結)
第一步:複製Balance_car資料夾到原始碼路徑下:\device\board\bearpi\bearpi_hm_nano\app\ (Balance_car檔案獲取路徑,請參考文章末尾相關連結)
如圖資料夾目錄:
第二步:修改BUILD.gn,在原始碼路徑下:\device\board\bearpi\bearpi_hm_nano\app\BUILD.gn
新增編譯依賴:"Balance_car:balance_car",如下圖:
關鍵演算法講解
兩輪平衡車的控制主要涉及三個PID環的串聯使用,它們分別是直立環(平衡控制)、速度環(速度控制)、轉向環(方向控制)。三個控制效果合成,控制輪子執行。
直立環控制演算法:
直立環控制演算法是平衡小車維持平衡的主要演算法。直立環採用了PD演算法環節,即只有比例與微分環節。
傾斜角度大小以及角加速度大小決定了輪子的速度大小。可以理解為傾斜角度越大,控制輪子順著傾斜的方向的速度越大;傾斜的角加速度越大,控制輪子速度也要越大。
速度環控制演算法:
速度環控制的目的是讓機器以恆定速度前進或後退,該恆定速度可以為0速度,即要讓平衡車靜止。速度環採用了PI環控制,只有比例與積分環節。
轉向環控制演算法:
轉向環的目的是控制小車以恆定速度轉向。在本次場景為了控制小車平衡靜止,所以只做了限制轉向的操作。
以上詳細程式碼,請參考文章末尾的相關連結(Balance_car檔案獲取路徑)。
總結
本文呈現了兩輪平衡小車的大致原理。簡單介紹了一下PID演算法的效果:P比例引數,能夠快速讓系統達到穩定值,但是P太大容易超調,帶來振盪;I積分引數,消除穩態誤差,讓系統達到穩定值;D積分引數,能消除振盪,但是會使系統時效性變慢。開發者可以根據現場情況,合理調節PID三個引數。
本樣例是OpenHarmony知識體系工作組(相關連結在文章末尾)為廣大開發者分享的樣例。同時知識體系工作組結合日常生活,給開發者規劃了各種場景的Demo樣例,如智慧家居場景、影音娛樂.場景、運動健康場景等;歡迎廣大開發者一同參與OpenHarmony的開發,更加完善樣例,相互學習,相互進步。
相關連結
OpenHarmony原始碼下載路徑:
Balance_car檔案獲取路徑:
BearPi-HM Nano(Hi3861)開發板程式碼燒錄參考連結:
OpenHarmony知識體系共建開發倉:
小熊派開發板學習路徑:
OpenHarmony知識體系工作組智慧家居開發樣例
參考資料:
第七屆全國大學生“飛思卡爾”杯智慧汽車競賽
電磁組直立行車參考設計方案
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70011554/viewspace-2928367/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 兩張圖教你玩轉VIM!!!
- 帶你玩轉OpenHarmony AI:打造智慧語音子系統AI
- 兩步就能教你一鍵調整影片色彩平衡
- 教你玩轉Linux—yum 命令Linux
- 教你如何玩轉力扣力扣
- 策略梯度玩 cartpole 遊戲,強化學習代替PID演算法控制平衡杆梯度遊戲強化學習演算法
- 教你玩轉HTTP—請求方法HTTP
- 教你玩轉Git-安裝Git
- 手把手教你玩轉GitGit
- 教你玩轉CSS border(邊框)CSS
- 8分鐘丨教你玩轉 APIAPI
- 手把手教你玩轉谷歌TensorFlow谷歌
- 小邵教你玩轉ES6
- 小邵教你玩轉promise原始碼Promise原始碼
- 教你玩轉Git-分支合併Git
- 教你玩轉Git-建立倉庫Git
- 教你玩轉Eclipse—修改字符集Eclipse
- 教你零基礎玩轉 vim
- 小邵教你玩轉JS物件導向JS物件
- PS常用快捷鍵分享,教你玩轉PS
- 教你玩轉Git-合併衝突Git
- 教你玩轉Git-伺服器搭建Git伺服器
- 教你玩轉Linux—新增批量使用者Linux
- 7天教你玩轉雲伺服器伺服器
- 實戰|教你用Python玩轉MysqlPythonMySql
- 帶你玩轉OpenHarmony AI:基於Seetaface2的人臉識別AI
- 兩輪電動車越來越擁擠了
- 「玩轉Python」打造十萬博文爬蟲篇Python爬蟲
- 小邵教你玩轉Generator+co/async awaitAI
- 零門檻,手把手教你玩轉ChatGPTChatGPT
- 教你玩轉Git-提取遠端倉庫Git
- 教你玩轉Linux—使用者組的管理Linux
- 教你玩轉Linux—系統目錄結構Linux
- 做到這4點,教你玩轉社群團購……
- 兩輪電動車被小米、哈囉們盯上了
- 教你玩轉Git-Mac 平臺上安裝GitMac
- 教你玩轉Git-刪除遠端倉庫Git
- 帶你玩轉OpenHarmony AI-基於海思NNIE的AI能力自定義AI