Úvod do mobilní robotiky AIL028



Podobné dokumenty
Úvod do mobilní robotiky AIL028

Dynamické datové struktury III.

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

Stromy, haldy, prioritní fronty

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

Úvod do mobilní robotiky AIL028

Řídicí struktury. alg3 1

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

Úvod do mobilní robotiky NAIL028

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

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

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

KTE / ZPE Informační technologie

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

6 Příkazy řízení toku

Příloha A Automatizovaná laboratorní úloha

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

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

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

Jan Škoda. 29. listopadu 2013

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

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

Časová složitost / Time complexity

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

Optimalizace & soft omezení: algoritmy

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

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

Úvod do programování v jazyce Java

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

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

Podmíněné vykonává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.

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

Lineární datové struktury

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

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

Poslední nenulová číslice faktoriálu

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

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

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

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

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

Úvod do programování v jazyce Java

7. Popis konečného automatu

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

Java/QE Akademie - Osnova

Programování Lego robotů

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))

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

C# konzole Program emoce

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

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

Algoritmy a datové struktury

Časová a prostorová složitost algoritmů

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

Základy algoritmizace. Hašování

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

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

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

Programovací jazyk Haskell

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í

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

Programovací í jazyk Haskell

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

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

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

Úvod do mobilní robotiky AIL028

Struktura programu v době běhu

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

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

PREPROCESOR POKRAČOVÁNÍ

Základní stavební prvky algoritmu

A4B33ALG 2010/05 ALG 07. Selection sort (Select sort) Insertion sort (Insert sort) Bubble sort deprecated. Quicksort.

1. Téma 03 - Rozhodování

Zápis programu v jazyce C#

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

Algoritmizace a programování

Abstraktní datové typy

Dynamické datové struktury IV.

DobSort. Úvod do programování. DobSort Implementace 1/3. DobSort Implementace 2/3. DobSort - Příklad. DobSort Implementace 3/3

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

7. Pracovní postupy. Fakulta informačních technologií MI-NFA, zimní semestr 2011/2012 Jan Schmidt

Cvičení 9 - Monitory. monitor m; var proměnné... procedure p; begin... end; begin inicializace; end;

Desky Evb Display a Evb Keyboard

4. Optické senzory polohy

Jazyk C# a platforma.net

Pro kontrolu správného formátu hodnoty N použijeme metodu try-catch.

Rozklad problému na podproblémy

Optimizing Limousine Service with AI. David Marek

Úvod do programovacích jazyků (Java)

ÚVODNÍ ZNALOSTI. datové struktury. správnost programů. analýza algoritmů

2. lekce Algoritmus, cyklus Miroslav Jílek

SonarQube - statická analýza kódu a její zapojení v CI. Babu Červenková Big Data developer - Java Fulltext - Robot tým

Prezentace a vysvětlení programového prostředí NXC

Transkript:

zbynek.winkler at mff.cuni.cz, md at robotika.cz http://robotika.cz/guide/umor05/cs 24. října 2005

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--; } }

Jak se vypořádat s nepřesnými vstupními daty?

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

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?

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 )

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)

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 )

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í?

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 )

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é

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

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?

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 Obsah 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