Hlavní navigace

Stavíme kvadrokoptéru: řídicí jednotka

15. 7. 2015
Doba čtení: 4 minuty

Sdílet

Zatímco model kvadrokoptéry si můžeme pořídit hotový, chceme-li se pustit do vlastní implementace řídicích algoritmů, potřebujeme si vybrat řídicí jednotku a vědět, co od ní požadujeme, dřív, než bude pozdě. Řídicí jednotka by měla být schopna poskytnout zázemí pro co nejlepší stabilizaci kvadrokoptéry.

minulém článku je zmíněno, že jsem realizoval kvadrokoptéru s Raspberry Pi a poté jsem k ní připojil i Arduino Uno. Abych byl přesný, postavil jsem celkem kvadrokoptéry dvě. V první verzi jsem použil pouze Raspberry Pi a v další verzi jsem k němu připojil Arduino Uno, neboť mě k tomu přinutily okolnosti.

Předem chci říct, že zde neprezentuji použití Raspberry Pi a Arduina Una v kvadrokoptéře jako jediné možné řešení. Pokud máte nějaké odborné připomínky k článku a použitým řešením, sdělte je prosím v diskuzi, určitě je mnozí rádi přivítáme.

Fanoušci Rasperry Pi možná chápou mou motivaci, totiž použít tento malý počítač, který nachází uplatnění v nejrůznějších aplikacích, pro ovládání kvadrokoptéry. Raspberry Pi svým vybavením umožňuje aplikaci jakožto řídicí jednotky v kvadrokoptéře, což můžu potvrdit, neboť jsem s ním takto absolvoval několik úspěšných a hezkých letů. Bohužel jsem se nedokázal vypořádat s jeho nahodilými záseky a restarty při letu, které zapříčinily i množství pádů.

Protože nejsem elektrotechnik, rozhodl jsem se vyřešit záseky a pády kvadrokoptéry takto: nechat přímé řízení kvadrokoptéry na Arduinu a Raspberry Pi použít pro zachycování videa a přenos řídicích příkazů. A povedlo se: Arduino už bylo v tomto ohledu spolehlivé a navíc umožnilo řešení krizové situace, např. pří ztrátě připojení k Raspberry Pi, vypnutím motorů, eventuálně pomalým přistáním.

Kdybych po svých zkušenostech stavěl kvadrokoptéru znovu, měla by jeho řídicí jednotka mít:

  • mikropočítač rychlejší než Arduino Uno, tedy rychlejší než 16 MHz
  • paměť pro program větší než má Arduino Uno, tedy větší než 32 kB
  • zabudované IMU, nejlépe v čipu MPU6050
  • zabudovaný elektronický barometr
  • piny pro připojení ESC
  • hardwarové PWM výstupy poskytující dostatečné rozlišení PWM signálu pro regulaci otáček motorů
  • podporu pro MultiWii

Po malém průzkumu trhu jsem narazil na řídicí jednotky, které splňují všechna tato kritéria a to až na frekvenci mikroprocesoru, která je u všech na 16 MHz. Dovolte mi postupně vysvětlit důvody, které mě vedou k těmto požadavkům.

Se zabudovaným IMU, elektronickým barometrem a piny pro připojení ESC nebudete muset pájet tyto části k desce zvlášť, čímž se vyhnete bastlení a zdroji možných poruch v budoucnu. Bude-li se jednat o čip MPU6050, odpadne tím programování navíc v důsledku nutné fúze údajů z gyroskopu a akcelerometru, neboť ta probíhá už na tomto čipu, čímž můžete získat rovnou finální hodnoty náklonu a rotace kvadrokoptéry. Detailněji se tím zabýval článek Stavíme kvadrokoptéru #3: Digital Motion Processor na MPU-6050.

Modul s čipem MPU6050

Čip MPU6050 umožňuje čtení informací o své orientaci s frekvencí 200 Hz, 100 Hz, 66,6 Hz, 50 Hz, atd. Z mé zkušenosti vím, že Arduino nezvládalo provádět můj programový kód s frekvencí 200 Hz, a proto jsem musel použít nejbližší možnou frekvenci 100 Hz. Největší zátěží bylo pravděpodobně počítání s plovoucí desetinnou čárkou, neboť tato rodina mikroprocesorů neobsahuje matematický koprocesor. Proto vznikl požadavek na rychlejší mikroprocesor, ačkoliv jako řešení by se mohla použít implementace řídicí aplikace bez počítání s plovoucí desetinnou čárkou, což by program značně urychlilo. (Je-li MPU6050 nastaveno na vyšší frekvenci, než s jakou probíhá čtení, způsobuje to problémy, viz další články.)

Elektronický barometr realizovaný čipem BMP085 měří tlak s relativně vysokou přesností. Pokud bychom tlak převedli na výšku, pak při největší nastavené přesnosti ji dokáže změřit se směrodatnou odchylkou 0.25 m. Je třeba ale brát v potaz, že atmosférický tlak je proměnlivý, takže přepočet na výšku nebude nikdy úplně přesný.

Hardwarové PWM s dobrým rozlišením využijeme pro jemnou a přesnou regulaci otáček motorů a podporu řídicí jednotky pro MultiWii oceníme, rozhodneme-li se nechat řízení kvadrokoptéry na již otestovaném řešení. Paměť Arduina Una se svými 32 kB tak tak dostačovala pro můj program. Pokud bych bych chtěl implementovat další prvky, jako je GPS, musel bych ji rozšiřovat.

Některé řídicí jednotky mají také zabudovaný tříosý elektronický magnetometr (kompas), který se dá použít pro zpřesnění orientace kvadrokoptéry. Výrobce čipu MPU6050 uvádí, že je k němu možné tříosý elektronický magnetometr připojit. (Čip MPU9150 už v sobě magnetometr zabudovaný má.) Ovšem pozor, magnetometr trpí stejně jako obyčejný kompas nepřesností v blízkosti kovových konstrukcí.

CS24_early

Jedním z adeptů na řídicí jednotku by mohla být deska s mikropočítačem ATmega 2560, která splňuje všechny kladené požadavky (kromě pracovní frekvence) a ještě něco navíc:

  • vyjde mnohem levněji než v případě nákupu všech jejich komponent zvlášť
  • má elektronický magnetometr (kompas), který můžete využít pro zpřesnění orientace kvadrokoptéry
  • nepotřebuje implementovat softwarové PWM
  • obsahuje MicroUSB port, což umožní pohodlnější obsluhu
  • 256 kB flash paměť pro program
  • konektory ESC regulátorů do ní můžete zapojit přímo a nemusíte toto řešení bastlit zvlášť

Multiwii kompatibilní deska s mikroprocesorem ATmega 2560

Pohled zespodu

Shrnutí

Smyslem výběru naši řídicí jednotky je dosáhnout co nejlepší stabilizace kvadrokoptéry a minimalizace nutného bastlení. Pro zajištění co nejlepší stabilizace potřebujeme aktualizovat výkon motorů s co největší frekvencí a přesností. Horní mez této frekvence je 200 Hz, což je hranice čipu MPU6050 pro čtení předzpracovaných údajů o jeho orientaci. Potřebujeme, aby náš program mohl být s touto frekvencí vykonáván. Pro zajištění přesnosti potřebujeme, aby řídicí jednotka měla hardwarové PWM s dostatečným rozlišením délky impulsu.

Byl pro vás článek přínosný?

Autor článku

Jiří Kačírek je studentem informatiky při VŠB FEI, ve svých projektech nejraději používá C++ a knihovnu Qt. Je fanouškem Linuxu a open-source, který rád používá především jako programátorskou základnu.