ArduPilotMega – 3. část

Rozšíření ArduPilota o FrSky telemetrii.

-----------------------------------------------

V předchozím článku jsem popsal hardware a software ArduPilota.

V dnešním článku bych popsal jak jsem se popral s přenosem jeho telemetrických údajů pomocí FrSky.

autor: CzechUavGuy

pripravil: Janko O.

 

Rozšíření ArduPilota o FrSky telemetrii

ArduPilot počítá s tím, že pokud má pilot zájem o telemetrické údaje, pořídí si telemtrické rádio jako toto od 3DR, které nezávisle na vysílačce přenáší telemetrii. To má samozřejmě výhodu v tom, že je to do jisté míry redundantní možnost kontroly letadla. Jako hlavní nevýhody tohoto řešení vidím cenu (19EUR a víc za klon na ebay), hmotnost, neveliký dosah a aerodynamický odpor antény. Vzhledem k tomu, že díky FrSky mám vlastní telemetrii zadarmo, rozhodl jsem se jí využít pro tento účel.

Má to dva háčky: ArduPilot používá k přenosu telemetrie vlastní (otevřený) protokol - MavLink a aby měla telemetrie smysl musí být přenos poměrně rychlý (56700bps ideálně). FrSky toto nepodporuje - má jiný protokol, navíc efektivní rychlost pro uživatelská data je jen cca 2400bps. Proto jsem se rozhodl že si vyrobím vlastní převodník MavLinku do FrSky. Použil jsem Arduino Pro Mini, které čte telemetrii z UARTu ArduPilota, má vlastní buffer ve kterém zprávy parsuje a po FrSky posílá vlastním formátem vyselektovaná zajímavá data (GPS polohu, výšku, náklon letadla, rychlost vůči zemi, napětí baterie, ...). Na zemi mám na vysílačce přidělané podobné Arduino, které přijímá tato data, konvertuje je zpět do protokolu MavLink a USBčkem je připojeno k pozemní stanici (notebook nebo androidí zařízení).

 

Popis HW řešení

ArduPilot má pro telemetrii dedikovaný UART port. Bohužel je to speciální konektor, který jsem si musel opatřit z ebay. Nestál moc, ale chvíli trvalo než dorazil. V ArduPilotovi jsou i další UART-y na plošňáku, ale nechtělo se mi tam nic pájet napevno. Z telemetrického portu vedou čtyři dráty - RX, TX, 5V, GND. Čiliže ideální kobinace pro napájení Arduina. Rozhodl jsem se použít to nejlevnější ($3), nejmenší (34x18mm) a nejlehčí (3.5g) Arduino - Arduino Pro Mini. To nemá vlastní USB převodník. Místo toho má 6 pinů pro připojení FTDI modulu. Těmito piny jej programuji a když je v letadle, tak do těchto pinů akorát krásně zapadne kabel s telemetrií včetně napájení - není tedy třeba pájet příliš mnoho pinů. Na druhé straně Arduina jsem musel přeci jen ještě jeden pin napájet - sem se připojí drát k FrSky přijímači, který mu bude posílat vyselektované a zkomprimované telemetrické údaje.

Na stranu vysílačky jsem opět použil Arduino jako převodník mé telemetrie získané z FrSky modulu. Z modulu přímo vedou dráty RX, TX, 5V, GND. Opět ideální pro Arduino. Zde se vyplatí použít Arduino Nano, protože nás již velikost netrápí, ale za to chceme mít převodník na USB. Alternativně by zde šlo použít druhé Arduino Pro Mini s FTDI programátorem. Já mám momentálně rozchozené Arduino mini s FTDI z toho důvodu, že všechna Arduino Nano co mám nemají FTDI převodník, ale nějaký jiný, levnější, s kterým si nerozumí Android.

Vzhledem k tomu, že FrSky používá invertovaný sériový port, tak je třeba signál invertovat, a to v obou Arduinech. Zde se opět hodí, že využíváme platformu Arduino, která umí používat softwarový sériový port, u kterého umí nastavit invertování. Takže není třeba ani žádný invertor. Softwarový sériový port s přehledem stíhá těch 9600bps, na kterých se odehrává přenos FrSky telemetrie.
 

Popis MavLinku

MavLink je opensource protokol, který je využíván nejenom ArduPilotem, ale i většinou konkurenčních projektů (Paparazzi, Parrot AR Drone, ...). Přesné typy zpráv se v jednotlivých systémech mohou lišit, systém jejich parsování je však stejný. O MavLinku více zde.
 

Popis mého protokolu

Můj program vychází z opensource projektu, který konvertuje MavLink do protokolu FrSky, viz github. Program jsem upravil, protože nevěřím tomu, že by stíhal vysílat data takovou rychlostí jakou slibuje. Pokud máte zobrazovadlo FrSky telemetrie např. DHT-U nebo ochytřený firmware ve vysílačce, vyzkoušejte zda přeci jen tento projekt nestačí pro Vaše potřeby.

Já žádné takové zobrazovadlo nevlastním, a navíc jsem chtěl přeci jen trochu lepší vizualizaci - mapu atd. Proto jsem se rozhodl, že přijatá data zkonvertuji zpět do MavLinku. Je tedy jedno, jakým protokolem jsou mezi přijímačem a vysílačkou předávána. Protokol je založen na 10ti bitové telemetrii, tak jak je popisována na zdejším serveru.

Princip vysílací strany je tento: přijmu z MavLinku packet a upravím podle něj globální stav, ve kterém držím všechny sledované parametry. S definovanou frekvencí pošlu o tomto globálním stavu informaci dál. Například s frekvencí 5Hz posílám údaje o náklonu letadla ve všech třech osách, s frekvencí 1Hz posílám údaje o GPS souřadnici atd. 

Princip přijímací strany je tento: přijmu dvojbajtový packet, zjistím jakou informaci obsahuje, upravím podle toho globální stav a okamžitě o této změně pošlu MavLinkovou zprávu. Zde tedy občas dochází k artefaktům se souřadnicí GPS: Ta se nevejde do 10ti bitů a tak se musí rozpadnout do víc paketů. Na přijímací straně zatím chybí hlídání stavu, zda jsme obdrželi souřadnici celou, nebo jen její část - zbytek se totiž pamatuje z minule přijaté souřadnice. Takto se stává, když letadlo přeletí z jednoho stupně do druhého, že zobrazovadlo dostane informaci o minutách z předchozí souřadnice ale o stupních z aktuální. Neděje se to příliš často, a při dalším přenosu souřadnice problém zmizí. Opravit by to šlo např. heuristikou, časem to mám určitě v plánu.
 

Možnosti zlepšení

Bylo by krásné, kdyby vůbec nebylo potřeba Arduino pro vysílací stranu - kdyby byla filtrace a komprese dat provedena přímo v ArduPilotovi. Výkonu na to má dost. Problém je velmi rozsáhlý zdrojový kód a vůbec nesnadnost kompilace tohoto projektu.

Bohužel se mi zatím nepodařilo rozchodit uplink přes FrSky. Funguje tedy přenos informací pouze z letadla na zem, nikoliv naopak - a to i přes to, že jak modul ve vysílači tak přijímací modul mají vývody RX i TX.

Zatím se mi nedaří na přijímacím konci pro všechny druhy zpráv generovat správné MavLinkové commandy - ne každá hodnota bude zobrazena ve správně pojmenovaném parametru.
 

Zdrojové kódy pro obě Arduina jsou volně dostupné na GitHubu, viz

https://github.com/CzechUavGuy/APM-Mavlink-to-FrSky

Ve zdrojových kódech je k dispozici i "demoverze" tohoto projektu (receiving_part_test), která ukazuje možnosti tohoto projektu. Stačí nahrát tento projekt do libovolného Arduina, to posléze připojit k počítači nebo pomocí OTG kabelu k telefonu s Androidem, a spustit MissionPlanner nebo DroidPlanner. Po spojení s Arduinem by měl počítač/telefon zobrazovat "umělá" telemetrická data z virtuálního letadla letícího nad Prahou.



  

 

 


<Staršie | tento článok | Novšie>

Napísané: 9. 12. 2014, 17:56 | Prečítané: 7592x | Kategórie: Elektronika | Napísal: admin |
Komentáre: 3
.:. Kuba | mail
Ahoj docela mne zajímá jak jsi dopadl s timhle projektem, zajímalo by mne jestli by to komunikovalo s droidplanerem v androidu (asopň jednosměrně). Používám zatím něco podobného ale na 433 myslíš, že by šlo to samé jako je zde odkaz rozchodit na frsky, myslím tu obousměrno telemetrii, mrkni na to myslím, že by asi šly použít stejné kody a (vývojář by se tomu asi nebránil) jako použil tenhle borec na tý 433. Moc programování nerozumím, takže nedokážu posoudit.
Odpoveď | 2015-02-07 16:51:25
Zdar,
projekt funguje dobře, i s DroidPlannerem, DroidPlannerem2 i s ArduPilotem. Zatím pouze jednosměrně. Dosah FrSky mám s patch anténou do 2km. To snad ještě zlepším :)

Bohužel FrSky sice má porty RX i TX, ale bohužel TX slouží pro upload firmwaru, nikoliv pro komunikaci vysílačka-letadlo.

Jestli jsem dobře pochopil projekt itluxembourg-a, tak mi přijde, že upravil firmware OpenLRS, které samo o sobě asi umí RX i TX. Nepochopil jsem ale v čem jeho úprava spočívá. Výhoda jeho projektu je že nepotřebuje žádné arduino - ani v letadle, ani na vysílačce. On totiž jednoduše přeposílá binární data co načte z MissionPlanneru (nebo DroidPlanneru to je jedno) přímo do vysílačky, pak vzduchem, a pak to jeho přijímač rovnou předhodí do APM.

Takže odpovědi:
S Droidplannerem by jeho řešení skoro jistě fungovalo. Používá totiž stejný protokol (MavLink) jako MissionPlanner.

Na FrSky by to rozchodit podobně nešlo, protože FrSky podporuje maximální rychlost přenosu 2400 baudů a s tím by to bylo šíleně pomalé. A zároveň protokol MavLink potřebuje pro svoje fungování obousměrnou komunikaci (alespoň pro úvodní navázání spojení).
Pokud by se objevil nějaký hacker, který by dokázal modifikovat firmware FrSky vysílače a přijímače aby umožnil RX i TX a rychleji než 2400bps, tak by šlo. Ale to je už vyšší dívčí.
Odpoveď | 2015-02-08 17:19:38
Dobrý den, prosím nemáte někdo kontakt na CzechUavGuy?
Moc rád bych ho kontaktoval ohledně nějakého našeho problému s RC modelem. Předem moc děkuji Vašek
health.care.itc@gmail.com
Odpoveď | 2017-09-05 21:56:48
Pridaj komentár
Meno
Web
Mail
Kontrola Zadajte číslo päť
Text

:-)
:-D
:-(
|-/
:-[]
;-)
8-|
8-o
Tučné | Podrazené | Kurzíva  | zdroják | odkaz
  • Pre odoslanie správy môžete aj použiť klávesovoú skratku Alt+S. (Podporujú len niektoré prehliadače)
  • HTML znaky budú prevedené na entity.
  • Vyjadrujte sa tu ako doma, aby sme vedeli ako to u Vás vypadá.
  • Odkazy začínajúce http:// budú automaticky prevedené na odkazy , nepoužívajte však v jednom príspevku viac ako 3 - to robia len spam roboti:-)
správca | ICQ-Vaše ICQ | Podpora miniRS | Styl LazyDays | Sk preklad by beekeeper | Veľkosť databázy: 39973.66 kb