Hlavní navigace

Stavíme kvadrokoptéru: odesílání povelů

19. 8. 2015
Doba čtení: 5 minut

Sdílet

Hlavní princip řízení kvadrokoptéry pomocí PID regulátoru byl už zmíněn v minulých článcích. Všechno ostatní už je především programátorský úkon, který se týká správného přeposílání řídících povelů a spousta laborování. Tento díl bude o možnostech řízení kvadrokoptéry joystickem, popřípadě RC vysílačkou.

Na úvod malá poznámka k minulému dílu. Pokud si budete chtít implementovat PID regulátor, zvažte možnost stáhnout si ho jako hotovou knihovnu. Existuje taky velice pěkný tutoriál, se kterým si můžete případně svůj PID regulátor vylepšit (jsou v něm i některé velice důležité věci), doporučuji si ho přečíst.

Dnešní díl bude o posílání příkazů do řídicí jednotky z počítače. Já jsem k tomu použil joystick, přenosové médium Wi-Fi a signály jsem do jednotky přeposílal z Raspberry Pi přes sběrnici SPI. Výhoda Raspberry Pi je v tom, že můžete použít k přenosu signálu Internet, pokud do něj zapojíte USB 3G modem. Pokud se vám toto řešení nelíbí, zvážil bych, zda vůbec použít Wi-Fi – přeci jen přenosová vzdálenost není příliš velká. V tomto případě by bylo nejvhodnější použít modelářský vysílač a přijímač na 2,4 GHz, který má slušný dosah, a místo ovládání z počítače joystickem si rovnou pořídit modelářskou vysílačku.

Nejprve tedy k joysticku. Na Linuxu je velice snadné číst a parsovat z něj data. Princip si můžete vyzkoušet přímo v konzoli s myší. Pro Linux Ubuntu: v adresáři /dev/input můžete najít soubory mouse0 a mouse1. Napište sudo cat mouse0 (popřípadě mouse1). Při pohybování a klikání myší uvidíte, že se do konzole vypisují data. Přesně tak to funguje i s joystickem, kdy po jeho zapojení se v adresáři /dev/input objeví soubor js0 (nebo js1). Data „události“, která vznikla na joysticku, ať už je to pohyb páky či zmáčknutí tlačítka, jsou složena ze čtyř bajtů: první dva bajty jsou identifikátor příkazu, druhé dva bajty jsou jeho hodnota.

Doporučuji k parsování dat z joysticku použít lightweight knihovnu napsanou v C++ pro Linux. V následujícím kódu (C++/Qt) je ukázka čtení jedné události z joysticku:

joystick = new Joystick(0); // Knihovna Joystick pro Linux
joyevent = new JoystickEvent(); // Knihovna Joystick pro Linux
joystick->sample(joyevent);
joyfile = new QFile("/dev/input/js0");

if ((!joyfile->exists()) || !joyConnected) { // Kontrola
   on_joystick_not_found();
   emit joystickNotFound();
}
else if (joystick->sample(joyevent)) { // --je k dispozici nový vzorek dat?
   if (joyevent->isButton())  { // --jedná se o tlačítko?
      switch(joyevent->number) { // --jaké konkrétní tlačítko to je?
         case 23:
            EnqueueData(BUT_SWITCH1, joyevent->value);
            break;
      }
   }
   else if (joyevent->isAxis()) { // --nebo se jedná o nějakou osu? (páka na joysticku)
      switch(joyevent->number) { // --která z os to je?
         case 0:
            EnqueueData(AXIS_Y, -joyevent->value); //osy páky
            break;
         case 1:
            EnqueueData(AXIS_X, joyevent->value);
            break;
         case 2:
            EnqueueData(AXIS_Z, -joyevent->value);
            break;
         case 3:
            EnqueueData(FUEL, joyevent->value); // osa potenciometru
            break;
      }
   }
}

Přeposílání příkazů do Raspberry Pi je pak už klasický klient-server, jen velice doporučuji k odesílaným datům přidávat checksum. Data se čas od času při přenosu poškodí a může být nebezpečné s nimi chybně nastavit ovládání kvadrokoptéry. Používám checksum implementovaný v knihovně Qt, ale postačovat by mohl dvoubajtový součet jednotlivých bajtů odesílaných dat, který se umístí na konec celé zprávy.

Co se joysticku týče, použil jsem joystick Cobra M5. Jeho cena byla někde okolo 1500 Kč a měl dobré uživatelské recenze. Musím říct, že použití joysticku je v podstatě z nouze ctnost, protože preciznost jeho ovládání se nechytá ani na 15 let starou modelářskou vysílačku. Zkrátka páka má vůle a slepá místa, stejně tak jeho potenciometr. Na ovládání kvadrokoptéry, pokud nevyhledáváme akrobacii, to postačuje, nicméně k precizností modelářské vysílačky to má daleko. Teď dost hanění, joystick má i své výhody.

Joystick Cobra M5

Detailní pohled

Poněkud vytuněná verze Cobry M5, nejspíše od fanouška

V první řadě je to hlavní páka, která je tříosá, což perfektně zapadá do logiky ovládání kvadrokoptéry. Pohybem dopředu/dozadu, vlevo/vpravo určujete kvadrokoptéře náklon a navíc, pákou se dá i rotovat. Kolečkem na joysticku se dá regulovat výkon motorů, je to jen trochu nepraktické – páčka by byla lepší. Terno má být u tohoto joysticku umístění páky do magnetického pole, místo do pružin, nicméně v okolí výchozí pozice páky jsou stejně vůle. Má jednu zásadní nevýhodu a to je hmotnost. Jít si zalétat s kvadrokoptérou a přenášet u toho notebook i tento joystick je poněkud nepraktické.

Výhodnější by byl například lehký a praktický gamepad, který má i preciznější páčky (alespoň při pohybu s nimi se tak jeví). Bohužel neviděl jsem žádný, který by měl vhodnou páčku pro nastavení výkonu, což je zásadní nedostatek.

Gamepad

Další možnost řízení kvadrokoptéry – pro inspiraci

V případě použití modelářské vysílačky a přijímače odpadá spousta programování (ale stoupají vynaložené finanční prostředky na vysílačku). Řídicí jednotky pro kvadrokoptéru obsahují vstupy pro PWM signál, který přijímač generuje. (Raspberry Pi umí také generovat PWM signál.) Po spřažení vysílačky a přijímače ho tedy stačí propojit s jednotkou. Zkušenost s touto variantou nemám, ale v případě RC modelu letadla kdysi před lety byl dosah signálu opravdu velký. Pro bližší informace vyhledejte modelářské weby.

Modelářská vysílačka

RC přijímač

Je otázka, jakou variantu použít. Mě osobně na kvadrokoptéře neláká samotné létání, ani akrobacie, ani natáčení, ale tzv. FPV (first-person view), což znamená sledovat letové video na počítači a podle něj kvadrokoptéru řídit klidně až mimo dohled, což je mimochodem nezákonné – a vůbec tady tím k ničemu nenabádám. Z tohoto důvodu jsem použil joystick a Raspberry Pi, které umožní použití kamery, ovládání prostřednictvím Internetu a v počáteční fázi testování se může použít Wi-Fi.

Další variantou by bylo použít k ovládání modelářskou vysílačku a Raspberry Pi ponechat pouze k přeposílání či nahrávání letového videa, což je mimochodem s Raspberry Pi velice snadné a pokud máte Pi Cameru, realizaci zvládnete za pár minut jen pomocí konzole. Nahradíte tak lehce pochybnou kontrolu modelu přes Internet spolehlivějším řešením.

Na závěr následující videa ukazují některá zajímavá použití kvadrokoptéry.

root_podpora

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.