Úvod do mobilní robotiky AIL028

Podobné dokumenty
Úvod do mobilní robotiky AIL028

Úvod do mobilní robotiky NAIL028

Dynamické datové struktury III.

Regulátory I N G. M A R T I N H L I N O V S K Ý, P H D.

Vyhledávání. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 21.

Úvod do mobilní robotiky AIL028

Řídicí struktury. alg3 1

Stromy, haldy, prioritní fronty

Vyhledávání. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 12.

KTE / ZPE Informační technologie

Příloha A Automatizovaná laboratorní úloha

Jan Škoda. 29. listopadu 2013

6 Příkazy řízení toku

Měření dat Filtrace dat, Kalmanův filtr

Test prvočíselnosti. Úkol: otestovat dané číslo N, zda je prvočíslem

5 Rekurze a zásobník. Rekurzivní volání metody

Úvod do mobilní robotiky AIL028

MQL4 COURSE. By Coders guru -5 Smyčky & Rozhodnutí Část 2

Průvodce programováním AMiNi-E jazykem STL Dipl. Ing. Pavel Votrubec

Aplikace Embedded systémů v Mechatronice. Michal Bastl A2/713a

Základy algoritmizace. Hašování

Optimalizace & soft omezení: algoritmy

V každém kroku se a + b zmenší o min(a, b), tedy vždy alespoň o 1. Jestliže jsme na začátku dostali 2

Podmíněné vykonávání

Obsah. Předmluva 13 Zpětná vazba od čtenářů 14 Zdrojové kódy ke knize 15 Errata 15

Měření dat Filtrace dat, Kalmanův filtr

Poslední nenulová číslice faktoriálu

Úvod do programování - Java. Cvičení č.4

ALG 09. Radix sort (přihrádkové řazení) Counting sort. Přehled asymptotických rychlostí jednotlivých řazení. Ilustrační experiment řazení

Základní datové struktury III: Stromy, haldy

Přednáška 4. Klasické synchronizační úlohy. Implementace procesů, vláken.

3. přednáška. Obsah: Řídící struktury sekvence, if-else, switch, for, while, do-while. Zpracování posloupnosti

Časová složitost / Time complexity

SHIFTIN sclk, sdata, mode, (data{/ bits} {, data {/ bits},...}) SPIIN sclk, sdata, mode, (data{/ bits} {, data {/ bits},...})

Příklad 1/23. Pro rostoucí spojité fukce f(x), g(x) platí f(x) Ω(g(x)). Z toho plyne, že: a) f(x) Ο(g(x)) b) f(x) Θ(g(x)) d) g(x) Ω(f(x))

Začínáme vážně programovat. Řídící struktury Přetypování Vstupně výstupní operace Vlastní tvorba programů

usimt10 JEDNOTKA IMPLEMENTUJÍCÍ OBJEKTY PRO SIMULACI TERMINÁLU TERM10 NA PC Příručka uživatele a programátora

Rekurze. Pavel Töpfer, 2017 Programování 1-8 1

Algoritmy pro ořezávání 2D polygonů

Úvod do programování v jazyce Java

VŘS PŘISTÁVÁNÍ RAKETY V GRAVITAČNÍM POLI ZEMĚ

Programovací jazyk Haskell

LED_007.c Strana: 1/5 C:\Michal\AVR\Výukové programy\archiv\ Poslední změna: :01:48

1. Téma 03 - Rozhodování

Intervalové stromy. Představme si, že máme posloupnost celých čísel p 0, p 1,... p N 1, se kterou budeme. 1. Změna jednoho čísla v posloupnosti.

Lineární datové struktury

Seminář z IVT Algoritmizace. Slovanské gymnázium Olomouc Tomáš Kühr

Programovací í jazyk Haskell

Obsah přednášky. Příkaz for neúplný. Příkaz for příklady. Cyklus for each (enhanced for loop) Příkaz for příklady

Vlákna a přístup ke sdílené paměti. B4B36PDV Paralelní a distribuované výpočty

2. lekce Algoritmus, cyklus Miroslav Jílek

Funkce pokročilé možnosti. Úvod do programování 2 Tomáš Kühr

Návrh nelineárního systému odhadu v úlohách filtrace, predikce a vyhlazování

Základní stavební prvky algoritmu

Rozklad problému na podproblémy

Zápis programu v jazyce C#

Operační systémy Tomáš Hudec. 6 Komunikace procesů (IPC) Obsah: 6.1 Klasické problémy souběhu Obědvající filosofové

Vývoj řízený testy Test Driven Development

Algoritmizace a programování

Úvod do programování v jazyce Java

8. lekce Úvod do jazyka C 3. část Základní příkazy jazyka C Miroslav Jílek

7. Popis konečného automatu

Java/QE Akademie - Osnova

PROGRAMOVACÍ JAZYKY A PŘEKLADAČE REALIZACE PŘEKLADAČE I

DUM č. 20 v sadě. 29. Inf-5 RoboLab a Lego Mindstorms

Desky Evb Display a Evb Keyboard

4. Optické senzory polohy

Programování Lego robotů

1 PRVOCISLA: KRATKY UKAZKOVY PRIKLAD NA DEMONSTRACI BALIKU WEB 1

C# konzole Program emoce

Bitové operátory a bitová pole. Úvod do programování 2 Tomáš Kühr

Algoritmy a datové struktury

usimt03r JEDNOTKA PRO SIMULACI VZDÁLENÉ VARIANTY TERMINÁLU TERM03 NA POČÍTAČI PC Příručka uživatele a programátora

Rekurze. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 12.

BI-EP1 Efektivní programování 1

Časová a prostorová složitost algoritmů

Základní pojmy. Úvod do programování. Základní pojmy. Zápis algoritmu. Výraz. Základní pojmy

Pascal. Katedra aplikované kybernetiky. Ing. Miroslav Vavroušek. Verze 7

Cykly. Základy programování 1 Martin Kauer (Tomáš Kühr)

IB015 Neimperativní programování. Časová složitost, Typové třídy, Moduly. Jiří Barnat Libor Škarvada

Aplikace Embedded systémů v Mechatronice. Michal Bastl A2/713a

Doba běhu daného algoritmu/programu. 1. Který fragment programu z následujících dvou proběhne rychleji?

Základy programovaní 3 - Java. Unit testy. Petr Krajča. Katedra informatiky Univerzita Palackého v Olomouci. 26.,27.

Rekurze a rychlé třídění

Stromy. Příklady. Rekurzivní datové struktury. Základní pojmy

10. Složitost a výkon

2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus pro vyhledání položky v binárním stromu.

ORIENTACE I. Jděte doprava. Jeďte doprava. Jděte tam. Jeďte tam. Jděte dovnitř. Jeďte dovnitř. Jděte doleva. Jeďte doleva. Jděte rovně. Jeďte rovně.

Logické operace. Datový typ bool. Relační operátory. Logické operátory. IAJCE Přednáška č. 3. může nabýt hodnot: o true o false

9. lekce Úvod do jazyka C 4. část Funkce, rekurze Editace, kompilace, spuštění Miroslav Jílek

NPRG030 Programování I, 2018/19 1 / :03:07

Agenda. Docházka Návrat k minulému praktickému cvičení Zápočtové práce. Dokumentace. Dotazy, přání, stížnosti. Co, jak a proč dokumentovat

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

Konstruktory a destruktory

ALG 14. Vícedimenzionální data. Řazení vícedimenzionálních dat. Experimentální porovnání řadících algoritmů na vícedimenzionálních datech

Algoritmizace. Jiří Vyskočil, Marko Genyg-Berezovskyj 2010

Stromy. Strom: souvislý graf bez kružnic využití: počítačová grafika seznam objektů efektivní vyhledávání výpočetní stromy rozhodovací stromy

Struktura programu v době běhu

PŘETĚŽOVÁNÍ OPERÁTORŮ

PREPROCESOR POKRAČOVÁNÍ

Transkript:

{zw md} at robotika.cz http://robotika.cz/guide/umor07/cs 8. listopadu 2007

1 Komunikace s hardwarem Jedeme rovně Kombinace několika činností Refactoring, code reuse Inside Out 2

Komunikace s hardwarem I/O struktury Komunikace s hardwarem Jedeme rovně Kombinace několika činností Refactoring, code reuse Inside Out sync(status, command); synchronní, iniciovaná shora jednoduchá simulace snadné logování snadný přenost např. po RS-232 kód může běžet na PC nebo na jednočipu Status int8 t timestamp; int8 t enc left; int8 t enc right; Command int8 t executeat; int8 t motor left; int8 t motor right;

Jedeme rovně if-metoda Obsah Komunikace s hardwarem Jedeme rovně Kombinace několika činností Refactoring, code reuse Inside Out while (true) { sync(status,command); if (status.moc vlevo()) commnad.vic vpravo(); else if (status.moc vpravo()) command.vic vlevo(); else command.rovne(); }

Kombinace několika činností FSM Komunikace s hardwarem Jedeme rovně Kombinace několika činností Refactoring, code reuse Inside Out while (true) { sync(status, command); switch(state) { case INIT: state = init(status); break; case GOING TO SUN: state = goingtosun(status); break; case SUN REACHED: state = sunreached(status); break; case DOING SUN: state = doingsun(status); break;... } }

Refactoring, code reuse implementace dovedností Komunikace s hardwarem Jedeme rovně Kombinace několika činností Refactoring, code reuse Inside Out je celkem jedno, jestli robot jede rovně ke slunci, puku nebo brance každá dovednost si potřebuje udržovat určité stavové informace zbývající vzdálenost kolik zbývá času jaká byla historie odchylek od zvoleného směru nabízí se implementace jednotlivých dovedností jako objektů (vnořené FSM) zlepší se code reuse ale stále přetrvávají některé problémy kdo zodpovídá za správnou inicializaci stavových proměnných? kdo říká, kdy se přechází do jiného stavu?

Inside Out Co to třeba otočit celé naruby? state = INIT; while (true) { sync(status, command); switch(state) { case STRAIGHT: if (dist == 0) { state = TURN; angle = 90; command.turn(); break; } dist--; break; case TURN:... break; } } Obsah Komunikace s hardwarem Jedeme rovně Kombinace několika činností Refactoring, code reuse Inside Out while(true) { ahead(100); turnright(90); } void ahead(dist) { command.ahead(); while(dist > 0) { sync(status, command); dist--; } }

Rychlost otáčení kolečka K dispozici máme enkodér Jak zjistíme, jakou rychlostí se kolečko otáčí?

Obsah

Obsah Jaké máme rozlišení?

Obsah

Průměr Obsah asi první věc, co každého napadne definice: x = 1 n n i=0 x i

Průměr Obsah asi první věc, co každého napadne definice: x = 1 n n i=0 x i co když nám data chodí postupně? co když si nemůžeme pamatovat úplně všechny hodnoty? co když vyžadujeme menší (konstantní) složitost?

Inkrementální výpočet průměru definice: ekvivalentně: s 0 = 0 s n = s n 1 + x n x n = s n /n x n = (x n 1 (n 1) + x n )/n x n = x n 1 + 1 n (x n x n 1 )

Inkrementální výpočet průměru definice: ekvivalentně: s 0 = 0 s n = s n 1 + x n x n = s n /n x n = (x n 1 (n 1) + x n )/n x n = x n 1 + 1 n (x n x n 1 ) v jakých případech nám pomůže? co když se odhadovaná hodnota mění? (roste/klesá/osciluje)

Plovoucí průměr délky k definice: ekvivalentně: x i, s 0 = 0 pro i < 0 s n = s n 1 x n k + x n x n = s n /k x n = (x n 1 k x n k + x n )/k x n = x n 1 + 1 k (x n x n k )

Plovoucí průměr délky k definice: ekvivalentně: x i, s 0 = 0 pro i < 0 s n = s n 1 x n k + x n x n = s n /k x n = (x n 1 k x n k + x n )/k x n = x n 1 + 1 k (x n x n k ) co když si nemůžeme/nechceme pamatovat k starých měření?

Odhad plovoucího průměru Celkový průměr: x n = x n 1 + 1 n (x n x n 1 ) Plovoucí průměr: x n = x n 1 + 1 k (x n x n k ) Nejlepší odhad x n k, co máme, je x n 1. x n = x n 1 + 1 k (x n x n 1 )

Odhad plovoucího průměru Celkový průměr: x n = x n 1 + 1 n (x n x n 1 ) Plovoucí průměr: x n = x n 1 + 1 k (x n x n k ) Nejlepší odhad x n k, co máme, je x n 1. x n = x n 1 + 1 k (x n x n 1 ) jednoduché, rychlé, praktické

Odhad plovoucího průměru Celkový průměr: x n = x n 1 + 1 n (x n x n 1 ) Plovoucí průměr: x n = x n 1 + 1 k (x n x n k ) Nejlepší odhad x n k, co máme, je x n 1. x n = x n 1 + 1 k (x n x n 1 ) jednoduché, rychlé, praktické průměr se zpožďuje za aktuální hodnotou

Odhad plovoucího průměru Celkový průměr: x n = x n 1 + 1 n (x n x n 1 ) Plovoucí průměr: x n = x n 1 + 1 k (x n x n k ) Nejlepší odhad x n k, co máme, je x n 1. x n = x n 1 + 1 k (x n x n 1 ) jednoduché, rychlé, praktické průměr se zpožďuje za aktuální hodnotou dá se s tím něco udělat?

Kalmanův filtr Obsah je to vlastně vylepšený odhad plovoucího průměru vylepšení spočívá v rozdělení algoritmu na dva kroky predikci nového stavu (a nového rozptylu/váhy) korekci pomocí nového měření průměr předpokládá, že odhadovaná veličina je konstanta

Algoritmus aktualizace Predikce stavu a chyby pomocí stavové rovnice x k+1 = Ax k P k+1 = AP k A T + Q Korekce pomocí měření pomocí rovnice měření z k = Hx k + v k K k = P k HT (HP k HT + R) 1 x k = x k + K k(z k Hx k ) P k = (I K k H)P k