1、什么是控制分配?
對(duì)于多旋翼飛控,一般而言將整個(gè)控制回路進(jìn)行分層設(shè)計(jì),比如位置控制、速度控制、姿態(tài)控制等,而控制分配則負(fù)責(zé)將上層控制器得到的輸出(滾轉(zhuǎn)、俯仰、偏航的力矩),映射到執(zhí)行機(jī)構(gòu),即電機(jī),進(jìn)行轉(zhuǎn)速輸出。簡(jiǎn)單來(lái)講,如下所示:
2、控制分配有什么好處?
Ø 單獨(dú)設(shè)計(jì)控制分配,可以將底層控制與上層控制進(jìn)行分離,便于控制器的設(shè)計(jì);
Ø 能夠防止電機(jī)輸出飽和,具體后面會(huì)講到;
Ø 能夠提升對(duì)故障或損傷的魯棒性,簡(jiǎn)單來(lái)說(shuō),例如斷槳保護(hù)等功能的設(shè)計(jì),這部分比較復(fù)雜,本文不會(huì)講到;
3、為什么要單獨(dú)講解控制分配?
控制分配在工程應(yīng)用時(shí)很容易忽略到,相信設(shè)計(jì)過(guò)飛控軟件的人有所體會(huì),這部分內(nèi)容不會(huì)特別關(guān)注,電機(jī)輸出就是簡(jiǎn)單控制量的加減。這樣做也是可以的,能夠?qū)崿F(xiàn)功能,但是不夠好,細(xì)節(jié)部分需要進(jìn)行優(yōu)化處理,筆者認(rèn)為這部分既重要,又容易被忽視,當(dāng)控制器性能不好時(shí),一味的進(jìn)行調(diào)參是解決不了問(wèn)題的。
4、下面以工程代碼為例,一步步進(jìn)行邏輯推演講解:
先看一組最簡(jiǎn)單的
control_roll、control_pitch、control_yaw為姿態(tài)控制器所得的結(jié)果,分別代表三個(gè)軸向的控制量,這里和油門(mén)值直接進(jìn)行混控,得到每個(gè)電機(jī)的輸出值。
看到這里,相信有些讀者對(duì)如何確定代碼中控制量的正負(fù)有疑問(wèn)?
最粗暴的辦法就是:直接試湊,定個(gè)符號(hào),然后看實(shí)際的電機(jī)反饋。當(dāng)然,這個(gè)太low了,我們從理論推演下。
首先需要確定飛行器的機(jī)體坐標(biāo)系,假設(shè)以滾轉(zhuǎn)控制量為例,我們認(rèn)為滾轉(zhuǎn)角roll是左負(fù)右正,這樣的話,假設(shè)往右打桿,目標(biāo)設(shè)定是正,反饋為0 ,產(chǎn)生的控制量為正,這時(shí)候2、3電機(jī)加上這個(gè)正向控制量,1、4減去這個(gè)正向控制量,即飛行器往右飛行。同理可得其他方向的符號(hào)。
注意下,偏航控制量的符號(hào)與電機(jī)的順時(shí)針逆時(shí)針有關(guān)。
這種簡(jiǎn)單混控的問(wèn)題?
首先是油門(mén)沒(méi)有限幅,假設(shè)遙控器油門(mén)通道輸出范圍在1000~2000,電機(jī)接收的范圍在1000~2000,如果飛行過(guò)程中油門(mén)推到最大,則所有的電機(jī)用來(lái)響應(yīng)油門(mén)通道了,此時(shí),不管你飛行器的姿態(tài)控制量分別是多少,都無(wú)法響應(yīng),這樣會(huì)導(dǎo)致飛行器不能保持姿態(tài)穩(wěn)定。
改進(jìn)一
這里將油門(mén)通道的值進(jìn)行比例縮放,電機(jī)最多響應(yīng)70%油門(mén),剩余的30%電機(jī)量用來(lái)響應(yīng)姿態(tài)控制器的輸出,保證控制器的響應(yīng)裕度。
如何加入飛行器的怠速?
改進(jìn)二
如圖所示,只需在每個(gè)電機(jī)輸出上恒定加入一個(gè)轉(zhuǎn)速值,該值就是怠速,一般在行程的10%,如設(shè)0,則沒(méi)有怠速。另外,油門(mén)通道的比例也要做一個(gè)微調(diào)。
寫(xiě)到這里,這是目前市面上很多開(kāi)源飛控的控制分配寫(xiě)法了,需要注意的是:
Ø 合理分配油門(mén)通道的響應(yīng),姿態(tài)控制輸出的裕度;
Ø 姿態(tài)控制器的輸出限幅,要定一個(gè)合理的范圍,過(guò)大過(guò)小都沒(méi)有意義;
這種控制分配有哪些問(wèn)題?
首先,就是控制器的輸出限幅,這個(gè)很難確定一個(gè)合理范圍;
其次,油門(mén)最低時(shí),如果執(zhí)行外八/內(nèi)八加鎖操作,飛行器易翻機(jī),電機(jī)輸出用來(lái)最大響應(yīng)yaw控制量,直觀現(xiàn)象就是對(duì)角的電機(jī)轉(zhuǎn)速差異很大,甚至有電機(jī)停轉(zhuǎn);
再者,極端情況下,比如三個(gè)軸向的控制量都很大,生成的電機(jī)輸出超過(guò)了最大值,比如得到2200,做不到優(yōu)先保證姿態(tài)控制量的響應(yīng);這種情況需要降油門(mén)或者縮放姿態(tài)控制量,保證輸出在范圍內(nèi)。
還有一些細(xì)節(jié)問(wèn)題與其有關(guān)。
比如只打yaw桿,理論上飛行器應(yīng)該繞軸旋轉(zhuǎn),但實(shí)際很多都是畫(huà)圈飛行,當(dāng)然這個(gè)主要問(wèn)題在于姿態(tài)控制,但是也與控制分配有關(guān),如果打桿速度很快,yaw產(chǎn)生的控制量很大,roll和pitch方向上沒(méi)有充分的裕度進(jìn)行響應(yīng)。
推廣到六軸或八軸,如其中一個(gè)電機(jī)不轉(zhuǎn),能否平穩(wěn)飛行?
答案是這種控制分配方法更易出問(wèn)題,簡(jiǎn)答理解就是,有一個(gè)電機(jī)停轉(zhuǎn),那分配到其他電機(jī)的轉(zhuǎn)速是增大的,這樣很容易電機(jī)飽和。當(dāng)然,如果本身電機(jī)輸出沒(méi)到飽和狀態(tài),也是可以繼續(xù)穩(wěn)定飛行的。
總結(jié)一下:
一個(gè)好的控制分配算法至少要能解決:
油門(mén)控制量過(guò)大過(guò)小時(shí),能夠有充分的姿態(tài)控制裕度,這樣才能保證飛行穩(wěn)定;
簡(jiǎn)單來(lái)說(shuō),要能夠根據(jù)電機(jī)輸出的大小,能夠進(jìn)行油門(mén)量的增大減少,同時(shí)對(duì)姿態(tài)控制量進(jìn)行縮放。
以pixhawk的控制分配算法mixer為例:
算法步驟:
先不考慮yaw控制量,只融合roll、pitch和油門(mén)。得到電機(jī)輸出的最大最小值。
插入一個(gè)知識(shí)點(diǎn):
代碼里的_roll_scale變量,是根據(jù)飛行器的幾何構(gòu)型得到的,以四軸X字型為例
同理計(jì)算picth_scale和yaw_scale。
然后根據(jù)電機(jī)的最大最小輸出,計(jì)算姿態(tài)縮放值roll_pitch_scale和油門(mén)量的變化值boost。
油門(mén)和姿態(tài)進(jìn)行混控后,加入yaw,再次進(jìn)行計(jì)算。
如果加入yaw后,電機(jī)輸出飽和,對(duì)yaw進(jìn)行縮放。
最后加入縮放后的yaw和怠速,得到最終的電機(jī)輸出。
這里就不對(duì)代碼進(jìn)行公示推導(dǎo)了,掌握主要思路即可。