+ All Categories
Home > Documents > Úvod do mobilní robotiky --- AIL028

Úvod do mobilní robotiky --- AIL028

Date post: 03-Nov-2021
Category:
Upload: others
View: 4 times
Download: 0 times
Share this document with a friend
23
Obsah Programování robota Řízení rychlosti Úvod do mobilní robotiky — AIL028 Zbyněk Winkler a Martin Dlouhý {zw|md} at robotika.cz http://robotika.cz/guide/umor07/cs 8. listopadu 2007 Zbyněk Winkler a Martin Dlouhý Úvod do mobilní robotiky — AIL028
Transcript
Page 1: Úvod do mobilní robotiky --- AIL028

ObsahProgramování robota

Řízení rychlosti

Úvod do mobilní robotiky — AIL028

Zbyněk Winkler a Martin Dlouhý

{zw|md} at robotika.czhttp://robotika.cz/guide/umor07/cs

8. listopadu 2007

Zbyněk Winkler a Martin Dlouhý Úvod do mobilní robotiky — AIL028

Page 2: Úvod do mobilní robotiky --- AIL028

ObsahProgramování robota

Řízení rychlosti

1 Programování robotaKomunikace s hardwaremJedeme rovněKombinace několika činnostíRefactoring, code reuseInside Out

2 Řízení rychlostiMěření rychlostiVlastní řízeníKvalita měřeníFiltrování

Zbyněk Winkler a Martin Dlouhý Úvod do mobilní robotiky — AIL028

Page 3: Úvod do mobilní robotiky --- AIL028

ObsahProgramování robota

Řízení rychlosti

Komunikace s hardwaremJedeme rovněKombinace několika činnostíRefactoring, code reuseInside Out

Komunikace s hardwaremI/O struktury

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

Statusint8 t timestamp;

int8 t enc left;

int8 t enc right;

Commandint8 t executeAt;

int8 t motor left;

int8 t motor right;

Zbyněk Winkler a Martin Dlouhý Úvod do mobilní robotiky — AIL028

Page 4: Úvod do mobilní robotiky --- AIL028

ObsahProgramování robota

Řízení rychlosti

Komunikace s hardwaremJedeme rovněKombinace několika činnostíRefactoring, code reuseInside Out

Jedeme rovněif-metoda

while (true){sync(status,command);if (status.moc vlevo())commnad.vic vpravo();

else if (status.moc vpravo())command.vic vlevo();

elsecommand.rovne();

}

Zbyněk Winkler a Martin Dlouhý Úvod do mobilní robotiky — AIL028

Page 5: Úvod do mobilní robotiky --- AIL028

ObsahProgramování robota

Řízení rychlosti

Komunikace s hardwaremJedeme rovněKombinace několika činnostíRefactoring, code reuseInside Out

Kombinace několika činnostíFSM

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

}}

Zbyněk Winkler a Martin Dlouhý Úvod do mobilní robotiky — AIL028

Page 6: Úvod do mobilní robotiky --- AIL028

ObsahProgramování robota

Řízení rychlosti

Komunikace s hardwaremJedeme rovněKombinace několika činnostíRefactoring, code reuseInside Out

Refactoring, code reuseimplementace dovedností

je celkem jedno, jestli robot jede rovně ke slunci, puku nebobrancekaždá „dovednostÿ si potřebuje udržovat určité stavovéinformace

zbývající vzdálenostkolik zbývá časujaká byla historie odchylek od zvoleného směru

nabízí se implementace jednotlivých dovedností jako objektů(vnořené FSM)zlepší se code reuseale 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?

Zbyněk Winkler a Martin Dlouhý Úvod do mobilní robotiky — AIL028

Page 7: Úvod do mobilní robotiky --- AIL028

ObsahProgramování robota

Řízení rychlosti

Komunikace s hardwaremJedeme rovněKombinace několika činnostíRefactoring, code reuseInside Out

Inside OutCo 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;

}}

while(true){ahead(100);turnRight(90);

}

void ahead(dist){command.ahead();while(dist > 0){sync(status, command);dist--;

}}

Zbyněk Winkler a Martin Dlouhý Úvod do mobilní robotiky — AIL028

Page 8: Úvod do mobilní robotiky --- AIL028

ObsahProgramování robota

Řízení rychlosti

Měření rychlostiVlastní řízeníKvalita měřeníFiltrování

Rychlost otáčení kolečka

K dispozici máme enkodér

Jak zjistíme, jakou rychlostí se kolečko otáčí?

Zbyněk Winkler a Martin Dlouhý Úvod do mobilní robotiky — AIL028

Page 9: Úvod do mobilní robotiky --- AIL028

ObsahProgramování robota

Řízení rychlosti

Měření rychlostiVlastní řízeníKvalita měřeníFiltrování

Vlastní řízení

Zbyněk Winkler a Martin Dlouhý Úvod do mobilní robotiky — AIL028

Page 10: Úvod do mobilní robotiky --- AIL028

ObsahProgramování robota

Řízení rychlosti

Měření rychlostiVlastní řízeníKvalita měřeníFiltrování

Kvalita měření

Jaké máme rozlišení?

Zbyněk Winkler a Martin Dlouhý Úvod do mobilní robotiky — AIL028

Page 11: Úvod do mobilní robotiky --- AIL028

ObsahProgramování robota

Řízení rychlosti

Měření rychlostiVlastní řízeníKvalita měřeníFiltrování

Filtrování

Zbyněk Winkler a Martin Dlouhý Úvod do mobilní robotiky — AIL028

Page 12: Úvod do mobilní robotiky --- AIL028

ObsahProgramování robota

Řízení rychlosti

Měření rychlostiVlastní řízeníKvalita měřeníFiltrování

Průměr

asi první věc, co každého napadne

definice:

x =1n

n∑i=0

xi

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?

Zbyněk Winkler a Martin Dlouhý Úvod do mobilní robotiky — AIL028

Page 13: Úvod do mobilní robotiky --- AIL028

ObsahProgramování robota

Řízení rychlosti

Měření rychlostiVlastní řízeníKvalita měřeníFiltrování

Průměr

asi první věc, co každého napadne

definice:

x =1n

n∑i=0

xi

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?

Zbyněk Winkler a Martin Dlouhý Úvod do mobilní robotiky — AIL028

Page 14: Úvod do mobilní robotiky --- AIL028

ObsahProgramování robota

Řízení rychlosti

Měření rychlostiVlastní řízeníKvalita měřeníFiltrování

Inkrementální výpočet průměru

definice:

s0 = 0sn = sn−1 + xnxn = sn/n

ekvivalentně:

xn = (xn−1 · (n − 1) + xn)/n⇓

xn = xn−1 + 1n (xn − xn−1)

v jakých případech nám pomůže?

co když se odhadovaná hodnota mění? (roste/klesá/osciluje)

Zbyněk Winkler a Martin Dlouhý Úvod do mobilní robotiky — AIL028

Page 15: Úvod do mobilní robotiky --- AIL028

ObsahProgramování robota

Řízení rychlosti

Měření rychlostiVlastní řízeníKvalita měřeníFiltrování

Inkrementální výpočet průměru

definice:

s0 = 0sn = sn−1 + xnxn = sn/n

ekvivalentně:

xn = (xn−1 · (n − 1) + xn)/n⇓

xn = xn−1 + 1n (xn − xn−1)

v jakých případech nám pomůže?

co když se odhadovaná hodnota mění? (roste/klesá/osciluje)

Zbyněk Winkler a Martin Dlouhý Úvod do mobilní robotiky — AIL028

Page 16: Úvod do mobilní robotiky --- AIL028

ObsahProgramování robota

Řízení rychlosti

Měření rychlostiVlastní řízeníKvalita měřeníFiltrování

Plovoucí průměr délky k

definice:

xi , s0 = 0 pro i < 0sn = sn−1 − xn−k + xnxn = sn/k

ekvivalentně:

xn = (xn−1 · k − xn−k + xn)/k⇓

xn = xn−1 + 1k (xn − xn−k)

co když si nemůžeme/nechceme pamatovat k starých měření?

Zbyněk Winkler a Martin Dlouhý Úvod do mobilní robotiky — AIL028

Page 17: Úvod do mobilní robotiky --- AIL028

ObsahProgramování robota

Řízení rychlosti

Měření rychlostiVlastní řízeníKvalita měřeníFiltrování

Plovoucí průměr délky k

definice:

xi , s0 = 0 pro i < 0sn = sn−1 − xn−k + xnxn = sn/k

ekvivalentně:

xn = (xn−1 · k − xn−k + xn)/k⇓

xn = xn−1 + 1k (xn − xn−k)

co když si nemůžeme/nechceme pamatovat k starých měření?

Zbyněk Winkler a Martin Dlouhý Úvod do mobilní robotiky — AIL028

Page 18: Úvod do mobilní robotiky --- AIL028

ObsahProgramování robota

Řízení rychlosti

Měření rychlostiVlastní řízeníKvalita měřeníFiltrování

Odhad plovoucího průměru

Celkový průměr:xn = xn−1 + 1

n (xn − xn−1)Plovoucí průměr:xn = xn−1 + 1

k (xn − xn−k)

Nejlepší odhad xn−k , co máme, je xn−1.

xn = xn−1 +1k

(xn − xn−1)

jednoduché, rychlé, prakticképrůměr se zpožďuje za aktuální hodnotou

dá se s tím něco udělat?

Zbyněk Winkler a Martin Dlouhý Úvod do mobilní robotiky — AIL028

Page 19: Úvod do mobilní robotiky --- AIL028

ObsahProgramování robota

Řízení rychlosti

Měření rychlostiVlastní řízeníKvalita měřeníFiltrování

Odhad plovoucího průměru

Celkový průměr:xn = xn−1 + 1

n (xn − xn−1)Plovoucí průměr:xn = xn−1 + 1

k (xn − xn−k)

Nejlepší odhad xn−k , co máme, je xn−1.

xn = xn−1 +1k

(xn − xn−1)

jednoduché, rychlé, praktické

průměr se zpožďuje za aktuální hodnotou

dá se s tím něco udělat?

Zbyněk Winkler a Martin Dlouhý Úvod do mobilní robotiky — AIL028

Page 20: Úvod do mobilní robotiky --- AIL028

ObsahProgramování robota

Řízení rychlosti

Měření rychlostiVlastní řízeníKvalita měřeníFiltrování

Odhad plovoucího průměru

Celkový průměr:xn = xn−1 + 1

n (xn − xn−1)Plovoucí průměr:xn = xn−1 + 1

k (xn − xn−k)

Nejlepší odhad xn−k , co máme, je xn−1.

xn = xn−1 +1k

(xn − xn−1)

jednoduché, rychlé, prakticképrůměr se zpožďuje za aktuální hodnotou

dá se s tím něco udělat?

Zbyněk Winkler a Martin Dlouhý Úvod do mobilní robotiky — AIL028

Page 21: Úvod do mobilní robotiky --- AIL028

ObsahProgramování robota

Řízení rychlosti

Měření rychlostiVlastní řízeníKvalita měřeníFiltrování

Odhad plovoucího průměru

Celkový průměr:xn = xn−1 + 1

n (xn − xn−1)Plovoucí průměr:xn = xn−1 + 1

k (xn − xn−k)

Nejlepší odhad xn−k , co máme, je xn−1.

xn = xn−1 +1k

(xn − xn−1)

jednoduché, rychlé, prakticképrůměr se zpožďuje za aktuální hodnotou

dá se s tím něco udělat?

Zbyněk Winkler a Martin Dlouhý Úvod do mobilní robotiky — AIL028

Page 22: Úvod do mobilní robotiky --- AIL028

ObsahProgramování robota

Řízení rychlosti

Měření rychlostiVlastní řízeníKvalita měřeníFiltrování

Kalmanův filtr

je to vlastně „vylepšenýÿ odhad plovoucího průměruvylepš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

Zbyněk Winkler a Martin Dlouhý Úvod do mobilní robotiky — AIL028

Page 23: Úvod do mobilní robotiky --- AIL028

ObsahProgramování robota

Řízení rychlosti

Měření rychlostiVlastní řízeníKvalita měřeníFiltrování

Algoritmus aktualizace

Predikce stavu a chyby — pomocí stavové rovnice

x−k+1 = AxkP−k+1 = APkAT + Q

Korekce pomocí měření — pomocí rovnice měření

zk = Hxk + vkKk = P−k H

T (HP−k HT + R)−1

xk = x−k + Kk(zk − Hx−k )Pk = (I − KkH)P−k

Zbyněk Winkler a Martin Dlouhý Úvod do mobilní robotiky — AIL028


Recommended