PX4架構(gòu)保證了核心控制器中不需要針對機(jī)身布局做特別處理,?;炜刂傅氖前演斎胫噶睿ɡ纾哼b控器打右轉(zhuǎn))分配到電機(jī)以及舵機(jī)的執(zhí)行器(如電調(diào)或舵機(jī)PWM)指令。對于固定翼的副翼控制而言,,每個(gè)副翼由一個(gè)舵機(jī)控制,,那么混控的意義就是控制其中一個(gè)副翼抬起而另一個(gè)副翼落下。同樣的,,對多旋翼而言,,俯仰操作需要改變所有電機(jī)的轉(zhuǎn)速。將混控邏輯從實(shí)際姿態(tài)控制器中分離出來可以大大提高復(fù)用性,。 1 控制流程一個(gè)特定的控制器(如姿態(tài)控制器)發(fā)送特定的歸一化(-1.. 1)的命令到給混合(mixing),然后混合后輸出獨(dú)立的PWM到執(zhí)行器(電調(diào),,舵機(jī)等).在經(jīng)過輸出驅(qū)動(dòng)如(串口,UAVCAN,,PWM)等將歸一化的值再轉(zhuǎn)回特性的值(如輸出1300的PWM等)。如圖1所示,。 2 控制組PX4 有輸入組和輸出組的概念,,顧名思義:控制輸入組(如: attitude),就是用于核心的飛行姿態(tài)控制,,(如: gimbal )就是用于掛載控制.一個(gè)輸出組就是一個(gè)物理總線,,如前8個(gè)PWM組成的總線用于舵機(jī)控制,組內(nèi)帶8個(gè)歸一化(-1.. 1)值,一個(gè)混合就是用于輸入和輸出連接方式(如:對于四軸來說,輸入組有俯仰,,翻滾,,偏航等,對于于向前打俯仰操作,就需要改變輸出組中的4個(gè)電調(diào)的PWM輸出值,,前倆個(gè)降低轉(zhuǎn)速,,后兩個(gè)增加轉(zhuǎn)速,飛機(jī)就向前),。對于簡單的固定翼來說,,輸入0(roll),就直接連接到輸出的0(副翼),。對于多旋翼來說就不同了,,輸入0(roll)需要連接到所有的4個(gè)電機(jī)。
3 混控文件的定義ROMFS/px4fmu_common/mixers中的文件實(shí)現(xiàn)了預(yù)定義機(jī)架所使用的混控器,。它們可以用于自定義機(jī)架或者一般的測試,。 3.1 語法mixer通過文本文件定義;以單個(gè)大寫字母加一個(gè)冒號開始的行是有效的,。其它的行則會(huì)被忽略,,這意味著注釋可以自由地在定義中穿插使用。 3.2 空混控器空混控器不接受控制輸入并產(chǎn)生單個(gè)作動(dòng)器輸出,其輸出值恒為零,??栈炜仄鞯牡湫陀梅ㄊ窃谝唤M定義作動(dòng)器特定輸出模式的混控器組中占位??栈炜仄鞫x形式如下: 3.3 簡單混控器簡單混控器將0個(gè)或多個(gè)控制輸入混合為單個(gè)作動(dòng)器輸出,。所有輸入被縮放后,經(jīng)過混合函數(shù)得到混合后的輸入,,最后再經(jīng)過輸出縮放產(chǎn)生輸出信號,。簡單混控器定義如下: 4 固定翼混控的簡單分析分析一下固定翼Wing Wing Z-84的混控器設(shè)計(jì),,機(jī)型如圖2所示。它的混控文件為wingwing.main.mix,。這個(gè)機(jī)型只有左右副翼和一個(gè)電機(jī),。 其中左右副翼的鏈接輸出通道的0和1,電機(jī)鏈接輸出通道3,,對于輸出通道2則閑置,。輸入通道來源于通道0(飛機(jī)姿態(tài)),通道0中,,Roll,、Pitch、thrust分別對于0,1,3(這里好像不支持Yaw的控制),?;炜仄鞯脑O(shè)置由圖3所示。由于左右兩個(gè)舵機(jī)在物理上是反向的,,所以對于Pitch的輸入也需要做反向處理,。 混控文件是這樣的 混控器中第一行M:2表示輸出0需要對下面兩個(gè)通道的的輸入做簡單的加法混控。O: 10000 10000 0 -10000 10000代表負(fù)值正值的縮放比例都為1000,,偏置為0,最大最小輸出范圍為-10000到10000,。后面兩行S開頭的代表需要做混控的輸入,,第一行是對輸入Roll的處理,,第二行是對輸入Pitch的處理。同理第二個(gè)M:2是混控得到輸出1,。 舉個(gè)簡單的例子,,Roll的輸入為0,加入當(dāng)前Pitch的輸入為0.1,。執(zhí)行前兩個(gè)混控后,,得到的輸出為,通道0的輸出為650,,通道1的輸出為-650,,按理說對Pitch的控制,兩個(gè)副翼的角度應(yīng)該是一樣的,,但是因?yàn)閮蓚€(gè)舵機(jī)在以上的安放位置相反,,所以輸出也相反。 5 多旋翼混控的簡單分析多旋翼的的混控那最簡單的四軸X模式來分析,先分析混控文件,,如圖4所示,。四周的混控文件非常簡單,R: 4x 10000 10000 10000 0表示的意思為,,R:旋翼混控器,,4x:四軸X模式,后面的3個(gè)10000是Roll,、Pitch,、Yaw的縮放比例,0為死區(qū)范圍,。而后面的兩個(gè)混控器是準(zhǔn)備別的輔助通道混控,,Roll、Pitch,、Yaw的混控并不在這個(gè)混控文件里面,,因?yàn)樗妮S一個(gè)電機(jī)的輸出和Roll、Pitch,、Yaw,、thrust都有關(guān)系,所以四軸的混控在mixer_multirotor.cpp中完成,。 對于不同的旋翼機(jī)型會(huì)定義不同的混控?cái)?shù)組,,四軸X模式的數(shù)組如圖5所示。其中每一行對應(yīng)一個(gè)電機(jī)的輸出,,每一列對于Roll,、Pitch,、Yaw、Thrust的輸入,。 在mixer_multirotor.cpp文件中會(huì)先計(jì)算先根據(jù)Roll,、Pitch的輸入計(jì)算出混控器的輸出,然后根據(jù)電機(jī)是否飽和縮放后,,再次加入Yaw叫輸入的混控,,最后加入油門的混控。 6 飽和的處理處理的代碼如下圖 1 根據(jù)混控矩陣計(jì)算得到out,,這一步已經(jīng)包含油門,,同時(shí)記錄下最大輸出和最小輸出,outputs保存四個(gè)電機(jī)的輸出值,。 2 第一種情況,,min小于0,max大于0,,min,,max之差小于1,可以通過偏移解決,。加油油門增加幅度大于|min|,,可以通過增加油門的方式解決,boost = -min_out;如果油門增加幅度太小,,需要把roll和pitch的縮小后再計(jì)算,。 舉個(gè)例子,當(dāng)前thrust為0.2,,計(jì)算得到新的輸出值之后,,min為-0.2,max為0.6,roll和pitch帶來轉(zhuǎn)速上的變化是0.4,,由于只計(jì)算了Roll和Pitch,,所以在旋翼里面,min和max到thrust的距離一定是一樣的,。這種情況就是第一種情況,,并且油門增大幅度為0.2*0.5=0.1,不足以平衡min的大小,。需要對Roll和Pitch進(jìn)行縮放,。計(jì)算得到boost=0.1,roll_pitch_scale=0.75,,然后再計(jì)算下面的代碼,。可以知道m(xù)in=0,max=0.6,,沒有飽和,。 |
|