Model závodního automobilu pro NXP cup BROB 2016
Vedoucí: Tomáš Jílek
Autoři: Ondřej Kupka (174338), Vojtěch Míček (173701), Lukáš Kratochvíla (171242)
Obsah OBSAH.............................................................................................................................................................. 2 ZADÁNÍ ............................................................................................................................................................ 3 KOMPONENTY.................................................................................................................................................. 4 FREESCALE FREEDOM BOARD (KL25Z) ........................................................................................................................ 4 FREESCALE TFC MOTOR CONTROLLER ......................................................................................................................... 5 RC MODEL ............................................................................................................................................................. 6 INKREMENTÁLNÍ SNÍMAČ OTÁČEK ............................................................................................................................... 8 ŘÁDKOVÁ KAMERA .................................................................................................................................................. 8 ESP-8266 1 .......................................................................................................................................................... 9 SÉRIOVÝ PŘEVODNÍK .............................................................................................................................................. 10 ZDROJ NAPĚTÍ PRO WI-FI MODUL 4,5 V - 9 V -> 3 V, 1 A ............................................................................................ 10 DATOVÁ KOMUNIKACE S MODELEM .............................................................................................................. 12 UART (UNIVERSAL ASYNCHRONOUS RECEIVER/TRANSMITTER) ..................................................................................... 12 NASTAVENÍ UARTU V PROCESORU ARM ..................................................................................................................... 13 CÍLE .................................................................................................................................................................... 13 JAK BY TO MĚLO FUNGOVAT..................................................................................................................................... 13 SAMOTNÁ REALIZACE ............................................................................................................................................. 14 ESP-LINK ........................................................................................................................................................... 14 PROGRAM PRO PC ................................................................................................................................................ 16 KOMUNIKAČNÍ PROTOKOL ....................................................................................................................................... 16 SNÍMÁNÍ RYCHLOSTI MODELU ....................................................................................................................... 17 SNÍMÁNÍ OTÁČEK KOLA POMOCÍ HALLOVY SONDY ........................................................................................................ 17 SNÍMÁNÍ OTÁČEK KOLA POMOCÍ IR PÁRU SNÍMAČ – VYSÍLAČ .......................................................................................... 18 SNÍMÁNÍ OTÁČEK KOLA POMOCÍ OPTOBRÁNY .............................................................................................................. 18 REALIZACE SNÍMÁNÍ OTÁČEK .................................................................................................................................... 19 ZPRACOVÁNÍ SIGNÁLU ENKODÉRU ............................................................................................................................. 19 OŽIVENÍ MODELU ........................................................................................................................................... 20 ZÁVĚR ............................................................................................................................................................ 21 ZDROJE ........................................................................................................................................................... 22
2
Zadání Sestavte model závodního automobilu pro NXP cup z dodávané sady komponent. Navrhněte, realizujte a otestujte potřebné chybějící komponenty (enkodéry, snímač překážek, řádková kamera, přisvětlení scény, ...). Vytvořte funkce pro obsluhu jednotlivých připojených komponent (motory v H-můstku, řádková kamera, ...). Vytvořte a otestujte základní algoritmy pro autonomní jízdu podle pravidel soutěže.
3
Komponenty Freescale Freedom Board (KL25Z)
48 MHz ARM Cortex-M0+ core
Power supply: 1.71V - 3.6V
Velikost desky, potažmo nedostatek pinů, nám v budoucnu způsobí komplikace, protože piny pro UART je stejné jako pro snímače rychlosti.
4
Freescale TFC Motor Controller
Obsahuje měnič napětí z 8,4 V na 3 V
H můstky
Potenciometry
Tlačítka
LED diody
5
RC model
Oficiální RC model dodávaný pro soutěž
Konstrukčně jde o Ackermanův podvozek
Stejnosměrné motory o 7,2 V o 4,2 A
ServoFutuba S3010 o 4–6V o 6,5 kg/cm
6
7
Inkrementální snímač otáček
Řádková kamera
Rozlišení 128 px
Vestavěný zesilovač
8
ESP-8266 1 ESP-8266 1 je miniaturní WI-FI modul se sériovým rozhraním. Je velký pouze 14,3 x 24,8 mm. Velmi důležitým údajem je také cena, při objednání z Asie vychází po přepočtu zhruba na 50 Kč. Přes toto všechno podporuje IEEE 802.11 b/g/n, WPA/WPA2. Umí pracovat v módech AP ST i hybridním. Stejně tak jako klient i server.
GND VCC GPIO2 GPIOO CH_PD UTXD URXD RST
Zem Svorka přívodního napájení 3V Obecný I/O, záleží na nastavení Obecný I/O, záleží na nastavení Slouží pro zapnutí flashovacího módu Vysílací pin sériové linky Příjímací pin sériové linky Při přivedení 1 resetuje modul
9
Sériový převodník Jde o bezejmenný sériový převodník, který umí pracovat prakticky se všemi běžně se vyskytujícími baudraty. Je postaven na čipu FT232RL. Umožňuje pracovat s 3V i 5V logikou. Maximální napájecí proud je omezený výstupem z USB na 500mA . Při objednání z Asie je cena pohybuje kolem 50 Kč.
Zdroj napětí pro WI-FI modul 4,5 V - 9 V -> 3 V, 1 A Opět jsme zvolili ekonomickou variantu, jeden vychází na 10 Kč. V průběhu testování se neprojevily žádné závady. I při zatížení je šum minimální. Snad jedinou nevýhodou je jeho značné zahřívání, z čehož plyne, že má špatnou účinnost. Avšak i při několikahodinovém zapojení pracoval beze změn.
10
11
Datová komunikace s modelem UART (Universal Asynchronous Receiver/Transmitter) Vybrané parametry:
Standart non-return-to-zero
Vyvolání přerušení nebo dotaz: o Přenosový registr prázdný, dokončený přenos o Chyba parity o Přerušení linky
Hardwarová kontrola a generování parity
12
Nastavení uartu v procesoru Arm Ovládání uartu je řešeno 4 kontrolními registry. V nich se dají povolit přerušení a různé příznaky. Dále obsahuje 2 stavové registry, ve kterých se nastavují příznaky,
např.
dokončení
přenosu.
Kromě
samotných
pinů
(hodin
a
vstupů/výstupů) se musí nastavit i jiné moduly konkrétně Systém integration modul. Tento modul řídí systémové clokování. Přes veškeré úsilí, které jsme zprovoznění uartu na armovém procesoru věnovali, se nám jej nepodařilo donutit vysílat data. Tento problém jsme konzultovali s mnoha vyučujícími, naneštěstí se nám nepovedlo nalézt řešení. K použití samotného Code Warrioru jsme byli donuceni tím, že veškeré examply a knihovny pro desku a shield jsou v něm psané a jejich portace by byla velmi obtížná. Také jsme psali do freescalu, ale ti nám neporadili.
Cíle Cílem datové komunikace je zajistit lepší podmínky pro ladění řízení modelu. Data budeme posílat zejména z modelu do počítače, nicméně je potřeba zajistit i stabilní spojení opačným směrem.
Jak by to mělo fungovat Na konci regulačního cyklu, jehož součástí bude načtení dat s řádkové kamery a nastavení řídících proměnných chceme posílat tyto data do počítače, kde se následně uloží pro analýzu pohybu modelu. Po několika týdnech vyhledávání informací a ověřování realizovatelnosti řešení jsme se rozhodli pro systém kdy, data uložíme do struktury, tu rozparsujeme a zabalíme pomocí protokolu slip, následně se odešlou pomocí sběrnice UART do WI-Fi modulu ESP-8266-1. Z tohoto modulu se pomocí volně šiřitelného firmwaru ESP-LINK převede na TCP/IP komunikaci a odešle pomocí bezdrátového připojení do počítače. V počítači bude přijaté data zpracovávat program napsaný v jazyce C, budou přijmuty z protokolu telnet a následně pomocí protokolu slip zpětně složeny do datové struktury. S touto strukturou již budeme moc libovolně pracovat. Co 13
budeme s daty konkrétně dělat, vyplyne při psaní řídícího cyklu. Co se týče přijímání dat v modelu, budeme kontrolovat pouze STOP znak, který zajistí to, že auto na místě zastaví.
Samotná realizace Nejdříve jsme začali s experimenty na WI-FI modulu ESP-8266-1, pro komunikaci s tímto modulem se využívá převodníku USB-UART. Tento převodník jsme si nejdříve zapůjčili od školy a následně nám přišel druhý, takže jsme mohli ověřovat, co nám skutečně ze sériové linky chodí a také nám to umožnilo pracovat na tomto problému ve více lidech. Brzy jsme zjistili, že defaultně dodávaný firmware není pro naší aplikaci příliš vhodný, jelikož komunikuje pomocí AT příkazů což je značně limitující zejména ze dvou důvodů. Snižuje to maximální rychlost přenosu dat a zvyšuje to výpočetní náročnost na odesílání na straně armového procesoru auta. Usoudili jsme, že bude potřeba najít náhradu. První volba padla na „Absolutely transparent bridge for the ESP8266“, bohužel jak se následně ukázalo, byl tento firmware ve fázi vývoje a díky mnohým chybám a nedodělkům jsme od něj upustili. Hledali jsme tedy dál a našli jsme ESP-LINK od vývojářů jeelabs. Tento firmware nám již plně vyhovoval a vzhledem k tomu, že podporuje například protokol MMQT, který se prosazuje v tzv. IoT (internetu věcí) předpokládáme, že se nám bude hodit i do případných dalších projektů.
ESP-LINK Pro nahrátí firmwaru do modulu je zapotřebí speciálního zapojení. Při kterém se GPIOO pin přivede na zem a CH_PD na zdroj napětí. (viz obrázek).
14
Následně se využije flashovacího nástroje Node MCU Flasher, který umí nahrávat několik binárních souborů zároveň což je pro úspěšné nahrání firmwaru nezbytné. Po odpojení GPUIOO je modul připraven pro provoz. Při defaultním nastavení se modul tváří jako AP a po zadání http://192.168.4.1/ se v prohlížeči otevře jehowebová
stránka,
kde
15
se
dá
konfigurovat.
Zřejmě nejdůležitější stránkou je konfigurace WI-FI sítě, díky této stránce lze nastavit, k jaké síti se má modul připojovat a případně mu zamezit aby po zapojení tvořil volně přístupnou síť. V dalších oknech je informační konzole, kde se vypisuje kompletní činnost modulu. Kvůli latenci je tato funkce ale čistě informační.
Program pro PC Program na zpracování dat je aktuálně ve fázi vývoje, Máme hotovou neodladěnou verzi telnet klientu a napsaný protokol slip, který stačí jen nakopírovat do výsledné aplikace v počítači a armu.
Komunikační protokol Pro úspěšné zasílání dat bylo potřeba vytvořit si vlastní komunikační protokol, v našem případě jsme vycházeli z protokolu Slip. V zásadě jde o to, že je mezi data potřeba vměstnat i řídící znaky tak, aby nekolidovali s vysílanými znaky. Protokol slip to řeší takovým způsobem, že definuje dva řídící znaky END a ESC a minimálně dva druhotné řídící znaky. Znak END určuje konec zprávy. Znak ESC určuje, že bylo potřeba poslat jako data jeden z řídících znaků. V případě, že chceme poslat znak, který zrovna odpovídá, některému z řídících znaků, je tento znak nahrazen kombinací řídícího znaku a druhotného řídícího znaku. Tedy pokud chceme poslat jako data znak ESC, protokol to zpracuje na dvojici ESC a ESC_ESC. Pokud chceme poslat END tak se to zpracuje na ESC a ESC_END. V průběhu kódování tohoto protokolu jsme se museli blíže seznámit s funkcí bufferů, zjistili jsme, že se liší platformu od platformy, naštěstí v Armu chceme zejména vysílat a tak nějaké složitější nastavování odpadá.
16
Snímání rychlosti modelu Pro úspěšnou navigaci vozidla je základní podmínkou znát jeho rychlost. Tato problemaika se dá řešit několika postupy, které přinášejí rozličné výhody a nevýhody, které budou popsány níže. Naše počáteční úvaha spočívala ve stanovení maximálních rychlosti. Kola automobilu mají obvod přibližně 15 cm. Uvažovali jsme maximální rychlost 3 m/s, což znamená frekvenci 20 Hz. Dále jsme uvažovali o snímání směru jízdy. Jsme závodníci, takže jedeme pouze v před. Tento údaj jsme se tedy rozhodli pro naši aplikaci zanedbat, a proto není ani v dalších odstavcích uvedena jako výhoda nebo nevýhoda.
Snímání otáček kola pomocí Hallovy sondy Princip Hallovy sondy spočívá v indikování změny magnetického pole před snímačem. V našem případě je možnost umístit na ráfek kola magnet, který při otáčce změní mag. pole, což se projeví jako příchozí puls. Toto řešení je však pro naši aplikaci velmi nepraktické. Od motorů přicházi pri akceleraci a deceleraci značné rušení, a tato rušení přicházejí v momentech kritických pro navigaci, tedy v brždění do zatáčky a poté při jejím výjezdu. Proto možnost použití na zadní nápravě nepřichází v úvahu. Další možností je připevnit sondu na náboj předního kola a magnet nebo sadu magnetů na jeho ráfek. Toto řešení eliminuje rušení od motorů avšak je zde stále komplikace s upevněním magnetů i samotného senzoru. Při průjezdu tratí se musí počítat se značnými odstředivými silami a také s rázy při průjezdu retardéry. Dalším kritériem, pro které jsme se rozhodli toto řešení nepoužít je rozlišení. Na ráfek se dá umístit maximálně 6-8 magnetů, což jsme shledali jako nedostatečné pro naše potřeby. Z výše uvedených důvodu plyne, že Hallova sonda je pro naši aplikaci nevhodná.
17
Snímání otáček kola pomocí IR páru snímač – vysílač Konstrukce těchto snímačů bývá v podobě IR LED a IR tranzistoru. Obvykle bývají v jednom pouzdře oba prvky a pak se hodí jako odrazová čidla. Pro naši aplikaci jsme uvažovali o uzpůsobení ráfku kola tak aby měl střídavě na svém obvodu odrazivou a neodrazivou plochu. Nejsnadnější a také nejjednoduší je ráfek nabarvit, střídavě černými a bílými pruhy. Tím se dá na ráfek dostat více bodů indikujících otočení kola, tedy vyšší přesnost. Další výhodou je optický princip snímače, který není ovlivněn rušením z motorů. Rušení však přichází ze změn světelných podmínek okolí. Tento problém už částečně řeší námi uvažovaný snímač CNY70. Ten v pouzdře 5 x 5 mm obsahuje vysílač i přijímač bez přidané elektroniky. Konstrukce obsahuje i stínítko pro zamezení odrazům z okolí při dodržení požadované minimální vzdálenosti. Použití tohoto řešení je pro naši aplikaci možné a je také hojně využíváno jinými teamy. Přesto, že jsme tento princip chtěli také použít, nakonec jsme se rozhodly pro variantu s optobránou.
Snímání otáček kola pomocí optobrány Konstrukce těchto snímačů je podobná jako u snímače IR pár snímač – vysílač, avšak rozdíl je v umístění snímače a vysílače. Zatímco u výše uvedené varianty je snímač i vysílač vedle sebe v pouzdře, zde je dvojce umístěna naproti sobě. Funkce pak je opět podobná, avšak signálem není změna podmínek před snímačem ale přerušení IR paprsku mezi snímačem a vysílačem. Toto řešení jsme zvolili, protože obsahuje všechny výhody spojené s předchozím snímačem, zároveň však má větší rozlišení. Zatímco při předešlém řešení by se na ráfek vlezlo při velké snaze nižší desítky značek, my díky laserem řezanému terčíku máme k dispozici 100 zcela přesných děr. Terčík bude umístěn na ose zadní nápravy a pro každé kolo bude jeden samostatný. Brány budou vyvedeny na přemostění kola, které bude realizováno za pomoci 3D tiskárny. Díky tomuto řešení získáme dobré údaje o rychlosti i při nízkých rychlostech.
18
Realizace snímání otáček Metoda pro snímání otáček je tedy encoder, složený z optobrány a děrovaného terčíku. Tato aplikace nám zajištuje kvalitní vstupní signál do desky v podobě obdelníkového signálu. Princip je takový, že ve chvíli kdy je mezi diodou a fotorezistorem díra, fotorezistror se sepne a naopak, pokud je paprsek přerušen, přechod je uzavřen. Jako vstup jsme využili předpřipravené piny na shieldu. Piny vedou na PORTA_PCR1 a PORTA_PCR2.
Zpracování signálu enkodéru Pulsy jde indikovat více způsoby. My zvolili náběžnou hranu ale je možnost indikovat i úroveň, nebo náběžnou i sestupnou hranu. Piny jsou nastaveny jako GPIO (General Purpose Input/Output). Princip zpracování je následující. Náběžná hrana nastaví flag pro přerušení, které je procesorem vykonáno a toto vykonání inkrementuje proměnou. Proměná je pak čtena v dalším přerušení, které je inicializováno timerem. Rozhodli jsme se zpracovávat rozdíl hodnot nasčítaných přerušení a tím dostali pojem o ujeté vzdálenosti. Tato metoda ačkoliv zní velmi jednoduše byla pro realizaci oříškem, protože pro ni neexsistují žádné přiklady, ze kterých by se dalo vyjít. Další možností jak signál zpracovat je skrze modul TPM. Princip je pak odlišný. Náběžná hrana spustí clock modulu TPM, který může být bud stejný jako clock jádra (48MHz) nebo dělené přes prescaler v poměru 1, 2, 4, 8, 16, 32, 64 nebo 128. Tyto clocky jsou čítány do 16 bitového čítače a podle počtu pulsu za jednu periodu vstupního signálu jsme schopni spočítat díky známe frekvence, délku periody. Úskalí této metody je ve zprávném zvolení frekvence modulu protože čítač je pouze 16 bitový a může tedy při nízkých rychlostech, z toho vyplívající dlouhé periodě, přetéci a tím ztratíme data o rychlosti.
19
Oživení modelu K oživení modelu jsme využili předchystaný projekt, který je volně dostupný na stránkách NXP Cup. Obsahuje základ ovládání serva, motorů, kamery a předchystaný UART. Nejdříve bylo nutné si projekt řádně nastudovat a poté jsme se pustili k samotnému oživení. Desku jsme napájeli pomocí stejnosměrného zdroje napětí domácí výroby. Napájecí napětí jsme volili stejné jako bude dodávat baterie, tedy 8,4V. První aplikací bylo blikání LED za pomocí přerušení a timeru. Poté jsme oživili servo a nastavili ho do výchozí polohy pro připojení k přední nápravě. Třetí fází bylo oživení motorů. Tady bych zmínil velmi důležité zjištění a to, že při chodu motorů a přerušení spojení mezi deskou a počítačem se PWM nastaví s neznámých důvodů na 100%. Posledním krokem bylo oživení kamery. Kameru jsme testovali pouze připojením a sledováním toku dat skrz program LabView. Před kameru jsme umístili papír s černou čárou a postupně měnili jeho polu a mohli jsme hned v reálném čase tyto změny pozorovat i na obrazovce.
20
Závěr Zaměřili jsme se na sestavení a otestování modelu automobilu pro NXP. Z chybějících komponent se nám podařilo zprovoznit Wi-fi modul, jednořádkovou kameru a servo Futuba. Podařilo se nám sestavit automobil a zprovoznit motory. Také jsme se zabývali problematikou měření rychlosti a přenosu dat. K měření rychlosti jsme se rozhodli použít inkrementální snímač a také jsme napsali funkci pro obsluhu. Pro přenos dat jsme napsali program, který realizuje protokol slip. Do budoucna by bylo dobré zaměřit se na řídící algoritmy. Především řízení, možná také přisvětlení scény.
21
Zdroje https://alselectro.files.wordpress.com/2015/05/esp8266_pinout.png https://github.com/jeelabs/esp-link https://github.com/beckdac/ESP8266-transparent-bridge http://images10.newegg.com/ProductImage/A2E6_130229357123906250Q268m 4d6UO.jpg http://www.hamshop.cz/data/product/272_417.jpg https://cloud.githubusercontent.com/assets/39480/8261427/6caf7326-167f11e5-8085-bc8b20159b2b.png http://edge.rit.edu/edge/P14226/public/Project%20Deliverables%20Summary%2 0Subdirectory/P14226_Electrical_Plans.pdf http://cache.nxp.com/files/32bit/doc/ref_manual/KL25P80M48SF0RM.pdf
22