簡介
此次為大家?guī)淼氖荗penAtom OpenHarmony(以下簡稱“OpenHarmony”)系統(tǒng)與PID控制算法相結(jié)合并落地的平衡車項(xiàng)目。 PID控制算法是一種經(jīng)典的,并被廣泛應(yīng)用在控制領(lǐng)域的算法。類似于這種:需要將某一個(gè)物理量保持穩(wěn)定的場合,比如維持平衡,穩(wěn)定溫度、轉(zhuǎn)速等,PID都會適用。在四軸飛行器,平衡小車、汽車定速巡航、溫度控制器等場景均有應(yīng)用。 ?通過本樣例的學(xué)習(xí),開發(fā)者能夠?qū)penHarmony系統(tǒng)設(shè)備端開發(fā)有進(jìn)一步的認(rèn)識,還能夠掌握PID控制算法的使用。本樣例使用OpenHarmony 3.2 Beta1操作系統(tǒng),硬件平臺采用小熊派BearPi-HM Nano(Hi3861)開發(fā)板。 本樣例效果動圖: ?硬件配置資源
- 兩輪平衡小車主要硬件資源:
- 主控CPU:小熊派BearPi-HM Nano(Hi3861)開發(fā)板;
- 陀螺儀:MPU6050六軸陀螺儀傳感器;
- 左右輪:帶有霍爾傳感器的直流電機(jī);
- 小車平臺及結(jié)構(gòu)件資源可以自行在相關(guān)網(wǎng)站獲得。
原理概括
?小時(shí)候都玩過上圖游戲吧:木桿立在手指上,盡量保持木桿直立不倒。 當(dāng)木桿向前傾斜時(shí),我們會往前行走,以用來抵消木桿的前傾;往后傾斜時(shí),我們會往后倒退。對的!沒錯!你猜對了。平衡車的控制原理就是這樣: ?PID算法介紹
平衡車的控制離不開對PID算法的應(yīng)用。那么什么是PID算法?它能解決什么問題? PID算法:就是“比例(proportional)、積分(integral)、微分(derivative)”,是一種常見的“保持穩(wěn)定”控制算法。 ?結(jié)合兩輪平衡車的場景,對PID參數(shù)的認(rèn)識如下:- P比例參數(shù):該參數(shù)能夠快速讓小車達(dá)到平衡狀態(tài),但是由于控制是滯后的,以及是慣性系統(tǒng),容易帶來超調(diào),即小車會出現(xiàn)前后搖擺的現(xiàn)象。所以P參數(shù)不能太大;
- I積分參數(shù):小車由于摩擦力或者風(fēng)阻力,并且P不能太大,只靠P控制有可能達(dá)不到穩(wěn)定狀態(tài),所以需要加入I積分參數(shù),消除穩(wěn)態(tài)誤差;
- D微分參數(shù):平衡小車維持的是傾斜角度要為平衡角度,由于PI參數(shù)使小車振蕩,小車會出現(xiàn)前后搖擺現(xiàn)象,加入D微分參數(shù)能夠消除小車的振蕩。
兩步搭建樣例工程
在OpenHarmony源碼基礎(chǔ)上,兩步構(gòu)建平衡小車代碼。(OpenHarmony源碼下載路徑及BearPi-HM Nano(Hi3861)開發(fā)板代碼燒錄,請參考文章末尾相關(guān)鏈接) 第一步:拷貝Balance_car文件夾到源碼路徑下:deviceoardearpiearpi_hm_nanoapp (Balance_car文件獲取路徑,請參考文章末尾相關(guān)鏈接) 如圖文件夾目錄: ?第二步:修改BUILD.gn,在源碼路徑下:deviceoardearpiearpi_hm_nanoappBUILD.gn 添加編譯依賴:"Balance_car:balance_car",如下圖: ?關(guān)鍵算法講解
兩輪平衡車的控制主要涉及三個(gè)PID環(huán)的串聯(lián)使用,它們分別是直立環(huán)(平衡控制)、速度環(huán)(速度控制)、轉(zhuǎn)向環(huán)(方向控制)。三個(gè)控制效果合成,控制輪子運(yùn)行。 ?直立環(huán)控制算法:直立環(huán)控制算法是平衡小車維持平衡的主要算法。直立環(huán)采用了PD算法環(huán)節(jié),即只有比例與微分環(huán)節(jié)。 傾斜角度大小以及角加速度大小決定了輪子的速度大小。可以理解為傾斜角度越大,控制輪子順著傾斜的方向的速度越大;傾斜的角加速度越大,控制輪子速度也要越大。
float g_middleAngle = 1.0;//平衡角度
float g_kpBalance = -85800.0;
float g_kdBalance = -400;
static int ControlBalance(float angle, short gyro)
{
int outpwm = 0;
float angleBias = 0.0;
float gyroBias = 0.0;
float tempAngle = 0.0;
float tempGyro = 0.0;
tempAngle = 0 - angle;//極性控制
tempGyro = 0 - gyro;
angleBias = g_middleAngle - tempAngle;
gyroBias = 0 - tempGyro;
outpwm = (g_kpBalance / 100 * angleBias + g_kdBalance
* gyroBias / 100);
return outpwm;
}
速度環(huán)控制算法:速度環(huán)控制的目的是讓機(jī)器以恒定速度前進(jìn)或后退,該恒定速度可以為0速度,即要讓平衡車靜止。速度環(huán)采用了PI環(huán)控制,只有比例與積分環(huán)節(jié)。
float g_kpSpeed = 95800.0;
float g_kiSpeed = 200;
static int ControlSpeed(long int left, long int right)
{
int outpwm = 0;
int speedBias = 0;
int speedBiasLowpass = 0;
static int speed_i = 0;
float a = 0.68;
static int speedBiasLast = 0;
speedBias = 0 - left - right;
speedBiasLowpass = (1 - a) * speedBias
+ a * speedBiasLast;
speedBiasLast = speedBiasLowpass;
speed_i += speedBiasLowpass;
speed_i = limit_data(speed_i, SPEED_H, SPEED_L);
outpwm = (g_kpSpeed * speedBiasLowpass / 100 +
gkiSpeed * speed_i / 100);
return outpwm;
}
轉(zhuǎn)向環(huán)控制算法:轉(zhuǎn)向環(huán)的目的是控制小車以恒定速度轉(zhuǎn)向。在本次場景為了控制小車平衡靜止,所以只做了限制轉(zhuǎn)向的操作。
static int ControlTurn(short gyro)
{
int outpwm;
outpwm = g_kpTurn * gyro;
return outpwm;
}
以上詳細(xì)代碼,請參考文章末尾的相關(guān)鏈接(Balance_car文件獲取路徑)。
總結(jié)
本文呈現(xiàn)了兩輪平衡小車的大致原理。簡單介紹了一下PID算法的效果:P比例參數(shù),能夠快速讓系統(tǒng)達(dá)到穩(wěn)定值,但是P太大容易超調(diào),帶來振蕩;I積分參數(shù),消除穩(wěn)態(tài)誤差,讓系統(tǒng)達(dá)到穩(wěn)定值;D積分參數(shù),能消除振蕩,但是會使系統(tǒng)時(shí)效性變慢。開發(fā)者可以根據(jù)現(xiàn)場情況,合理調(diào)節(jié)PID三個(gè)參數(shù)。 本樣例是OpenHarmony知識體系工作組為廣大開發(fā)者分享的樣例。同時(shí)知識體系工作組結(jié)合日常生活,給開發(fā)者規(guī)劃了各種場景的Demo樣例,如智能家居場景、影音娛樂場景、運(yùn)動健康場景等;歡迎廣大開發(fā)者一同參與OpenHarmony的開發(fā),更加完善樣例,相互學(xué)習(xí),相互進(jìn)步。本文由電子發(fā)燒友社區(qū)發(fā)布,轉(zhuǎn)載請注明以上來源。如需社區(qū)合作及入群交流,請?zhí)砑?/span>微信EEFans0806,或者發(fā)郵箱liuyong@huaqiu.com。
熱門推薦干貨好文
1、?24Bit ADC高精度低功耗MCU 醫(yī)療級別設(shè)備參考設(shè)計(jì)(附上高精確算法+電路原理圖)?
2、超強(qiáng)性能AI芯片,OpenHarmony多系統(tǒng)支持,可定制高性能AP(附10+開發(fā)Demo)
3、從零入門物聯(lián)網(wǎng)OH開源平臺,從簡單到高階項(xiàng)目,創(chuàng)客、電子愛好者都愛用!
4、低成本ESP32方案,支持OpenHarmony系統(tǒng)開發(fā)(附10+項(xiàng)目樣例Demo)
5、NO RTOS移植!32位、64線程開發(fā)板,超強(qiáng)實(shí)時(shí)性體驗(yàn)!
6、四核64位,超強(qiáng)CPU ,看RK3568“競”開發(fā)板DEMO!
7、人工智能也能這么玩, 簡單快速入手,還能自定義AI運(yùn)算
8、業(yè)界首款!支持富設(shè)備開發(fā),OpenHarmony開發(fā)者都選它!
9、高性能雙核RISC-V,滿足大多數(shù)開發(fā),這款國產(chǎn)MCU工程師都愛了!
原文標(biāo)題:【精選好文】玩轉(zhuǎn)OpenHarmony PID:教你打造兩輪平衡車
文章出處:【微信公眾號:電子發(fā)燒友論壇】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
-
電子技術(shù)
+關(guān)注
關(guān)注
18文章
894瀏覽量
56105 -
電子發(fā)燒友論壇
+關(guān)注
關(guān)注
4文章
197瀏覽量
1112
原文標(biāo)題:【精選好文】玩轉(zhuǎn)OpenHarmony PID:教你打造兩輪平衡車
文章出處:【微信號:gh_9b9470648b3c,微信公眾號:電子發(fā)燒友論壇】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論