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