crazyflie控制演算法

2021-07-09 02:48:28 字數 1839 閱讀 2203

看bitcraze的控制**,我個人覺得需要有乙個迴路的概念,比如反饋迴路。這在電路裡邊會碰到,再此我不過多複述。

bitcraze在四軸姿態控制中使用了二級控制迴路,記住不是兩個控制迴路,這是有區別的。也就是說這兩個控制迴路是級聯的關係。第一級控制迴路為姿態控制,此過程陀螺不參與。其輸出作為第二級控制迴路的輸入。第二級控制迴路為角速率控制,此過程我們會看到陀螺參與了運算。

細細想來,二級控制迴路至少有兩個好處。diy過四軸的人可能都遇到過這樣的問題,那就是加強姿態,陀螺就相對削弱了。反過來也是一樣。然而bitcraze由於把姿態與陀螺放在不同級的控制迴路當中,從而避免了這個問題。另外乙個好處跟網上某些人所謂低速融合與高速融合類似,我將其成為低速處理與高速處理。剛開始做的時候,我只會使用陀螺積分計算姿態。做過的人都知道這樣子得到的姿態都由那些問題。於是我就在網上看到有人說將加速計與陀螺互補,於是就有了低速融合與高速融合。但對於機體做法我其實還不是很明白。知道一次次啃了bitcraze的原始碼,我才知道bitcraze將這個問題很好地解決了。

我們先來看看bitcraze中的主迴圈:

static void stabilizertask(void* param)

if (rolltype == rate)

if (pitchtype == rate)

if (yawtype == rate)

// todo: investigate possibility to subtract gyro drift.

controllercorrectratepid(gyro.x, -gyro.y, gyro.z,

rollratedesired, pitchratedesired, yawratedesired);

controllergetactuatoroutput(&actuatorroll, &actuatorpitch, &actuatoryaw);

commandergettrust(&actuatorthrust);

if (actuatorthrust > 0)

else

#if 0

static int i = 0;

if (++i > 19)

#endif

} } }

需要提一下的是bitcraze使用了乙個嵌入式作業系統freertos。像vtaskdelayuntil則是由系統提供的函式,目的是控制主迴圈的執行頻率,即imu_update_freq。該巨集定義如下:

#define imu_update_freq   500

那麼現在我們就知道了,在bitcraze的四軸crazyflie中主迴圈是兩毫秒執行一次。也就是說pwm訊號2ms重新整理一次,這是很重要的。而且crazyflie將imu校準放到主迴圈中想比我自己之前放在初始化過程要好得多。imu校準完了之後,首先做的當然是獲取遙控器資料。然後我們看到的語句:

if (++attitudecounter >= attitude_update_rate_divider)

就是用來控制姿態重新整理頻率的,也就是我前面所說的低速運算。我們說陀螺是快速反應的,從這裡也可以看出。或者說姿態並不需要像陀螺那麼高的速度。而姿態計算完了之後的rate部分剛開始我是很不明白的。知道明白了crazyflie的二級控制迴路之後才搞懂。這樣說吧,姿態控制需要姿態參與,但是航向角控制並不需要,此時就只需要一級控制迴路就可以了。那自然就將遙控器的資料直接作為第二級控制迴路的輸入。經過第二級控制迴路之後剩下的就是輸出到各個電機輸出。

以上當然只是crazyflie控制的乙個基本思路,我們並沒有詳細去深究每一行**與每乙個細節。像主迴圈中用到的一些變數和函式了解了主迴圈的基本框架之後稍微有點經驗的都能夠看個七七八八。若是結合原始碼那就沒有障礙了。

下面是我整理的crazyflie與mwc姿態控制的流程圖。

Crazyflie微型四軸 深入解讀2

一.微處理器部分 處理的核心,可以看到四個motor驅動控制腿,狀態指示燈,21 22腿的iic介面,與imu模組通訊,2 3 4 11 12等引腳的對電源管理模組的控制,主要功能就是檢測電壓,控制通 斷等,25到31對2.4g無線模組的通訊與控制 14到17引腳作為預留外設介面 44腳為引導程式位...

模糊PID控制演算法

在pid控制演算法的c 語言實現中,文章已經對模糊pid的實質做了乙個簡要說明。基本概念和思路進行一下說明,相信有c 語言基礎的朋友可以通過這些介紹性的文字自行實現。這篇文章主要說明一下模糊演算法的含義和原理。實際上模糊演算法屬於智慧型演算法,智慧型演算法也可以叫非模型演算法,也就是說,當我們對於系...

tcp擁塞控制演算法 WebRTC擁塞控制原理解析

webrtc包含三種擁塞控制演算法,gcc bbr和pcc。其中,bbr一開始是針對tcp的擁塞控制提出來的。它的輸入為ack sack,輸出為擁塞視窗 congestion window 傳送速度 pacing rate bbr是怎樣運用到udp,甚至運用到實時流 傳輸之上的?拜讀一下在webrt...