Projekt Acar - závěrečný SW projekt na MFF UK

Během studií na MFF UK v roce 1999 jsem si zapsal SW projekt Acar, protože bez něj bych nemohl odpromovat. Projekt byl týmovou prací těchto 6ti studentů: Jan Křížek (server, síťová vrstva), Pavel Rydvan (rerezentace mapy pro síťový model), Zdeněk Šebl (fyzikální modely, kolizor, vstup), Jan Šváb (malé objekty), Zbyněk Winkler (zobrazování, aplikace, komunikace), Tomáš Ullrich (generátor světů). Dodnes jsme nejlepší přátelé a pravidelně se aspoň jednou ročně scházíme. Mým úkolem bylo vyrobit a vymyslet editor 3D terénu. Projekt byl zadán následujícím způsobem.

Cíl: vytvořit síťový simulátor jízdy automobilem v prostředí „virtuálního města“

Popis: V rámci projektu bude vytvořena obecná vrstva, která bude umožňovat simulaci pohybu objektů a jejich interakce v reálném prostředí. Nad touto vrstvou bude vytvořen simulátor auta. Svět obsahuje statické a dynamické objekty. V rámci dynamických objektů se bude rozlišovat mezi těmi, které jsou středem pozornosti a mezi ostatními, které jsou pouze pohyblivou součástí prostředí (tzv. malé objekty). Objekty, které jsou středem pozornosti budou simulovány věrněji — na základě fyzikálního modelu. Kompletní informace o světě má server. Ten je dle potřeby poskytuje ostatním funkčním částem, jako jsou fyzikální model, „zobrazovač“, detektor kolizí apod.

Koncepce: projekt bude koncipován s ohledem na následující vlastnosti:

  • Otevřenost — k dispozici budou veřejná rozhraní umožňující rozšíření programu o další funkce
  • Modularita — výměnou některých částí programu lze dosáhnout změny chování simulovaných objektů nebo vlastností prostředí
  • Distribuovanost — jednotlivé části projektu (mohou) být spuštěny na různých počítačích (spojených sítí)

Části projektu:

  • Server (síťová vrstva) — základní stavební kámen, je zodpovědný za komunikaci jednotlivých komponent programu
  • Řízení „malých“ objektů — (zjednodušeně) simuluje aktivitu pohyblivých součástí světa, která není cílem simulace (okolní auta, semafory, padající kameny :-) apod.)
  • Fyzikální model — interpretuje elementární akce definované nad objekty a simuluje adekvátní reakci (převádí šlapání na pedály a točení volantem na pohyb auta...)
  • Zobrazování — vizualizuje data, která získává ze serveru
  • Vstup — generuje vstupní data pro fyzikální model (v nejjednodušším pojetí přebírá vstup od uživatele...)

Všechny podrobnější informace najdete zde.

 
Amerika 2000 - projekt mobilní robotiky

Léto 2000 (3.7.-17.9.) jsem strávil v USA, v Oregonu, ve Wilsonville nedaleko Portlandu. Dostal jsem se tam díky navštěvování přednášek Mobilní robotiky na MFF UK. Vše začalo na podzim roku 1999, kdy do Prahy zavítal Gary Lee Betts (president of Universal Synergetics, Inc.) a pozval všechny studenty z přednášky mobilní robotiky na pivo. A tak jsem šel. Jelikož jsem už tehdy uměl poměrně dobře anglicky, dal jsem se do řeči s jeho ženou Virginií a získal si její sympatie. Opakování do hospody na pivo se opakovalo, vždy nás přišlo méně a méně. Ze zbylých 10ti studentů pak Gary vybral 4 nejlepší (nebo spíš jemu nejsympatičtější) studenty, kteří stráví léto v Americe programováním mobilních robotů. Shodou náhod jsem se mezi těmito studenty ocitl i já, a tak jsem letěl poprvé v životě do USA.

Ještě než jsem se do Ameriky dostal, obdržel jsem od Garyho tlustou modrou knihu o Fuzzy logice, abych ji nastudoval. To bylo poprvé, co jsem kdy slovo "fuzzy logika" slyšel. K tomu jsem se upřímně nedostal, protože jsem měl dost starostí se zkouškami, a tak jsem knihu studoval (četl) během prvních 14ti dní v Americe. Vzpomínám si, jak kolem mě Gary nervózně říkal a ptal se mě, co a jak už umím, a já mu vždy jen odvětil, že až to dočtu, začnu programovat. Naštěstí jsem Garyho nezklamal a zadané 3 následující úkoly splnil:

  • fuzzy ovladač kol (driver) pro oba typy robotů (viz dále)
  • plánovač cesty, když znám pozici a velikost překážek
  • detektor překážek podle informací ze sonaru

Gary vyvíjel 2 typy robotů:

  • modrý - typu auto (4 kola, přední otočná), který měl v budoucnosti uklízet hypermarkety
  • bílý - typu popelnice na kolečkách, který měl být budoucím číšníkem a roznášet jídlo v internetové restauraci

 

Fuzzy ovladač kol (fuzzy driver)

Cílem této části projektu bylo vymyslet algoritmus, jak správně natočit kola robota, aby jel co nejpřesněji po vytyčené trase. Aplikace, která tento výpočet provádí, simuluje jízdu jak modrého tak bílého robota. Nejprve uživatel nakliká cestu, po které má robot jet. U modrého robota může pravým tlačítkem nastavit změnu směru jízdy, tedy robot začne nebo přestane couvat. Řešení celého problému spočívá ve Fuzzy logice (viz níže). Oba programy vytváří soubor results.html, který zobrazuje jednotlivé fáze rozhodování ve fuzzy logice. Algoritmus musí brát v úvahu především rychlost změny směru natočení předních kol. Osu předních kol ovládá jednoduchý motorek, který je schopný dostat robota z polohy "volant otočen maximálně vlevo" do polohy "volant otočen maximálně vpravo" za řekněme 5 sekudn, což není vyloženě hned.

Fuzzy logic

Fuzzy Logic helps you to find a solution to a problem. FL helps you to find a solution to something very variable and uncertain. Fuzzy means: something uncertain, not clear, not true, not false. The problem is usually to find out a value of a specific variable. And that's the goal of FL. The following example will demonstrate the use: Suppose we're trying to sell a new kind of mobile phones. And we need to set the price for it. We know the rival prices and competitor's quality.

The principle of FL: FL is based on rules, you yourself have to set. What is a FL rule? It's usually an if-sentence, but it can be a statement too. If-sentence would be e.g. IF the rival price is low, THEN our price must be low too. And a statement could be "Our price must be somehow HIGH". The first step is to set the rules - that's just up to you. And FL tells you how to find out the value of your variable by following these rules, you have set. Each statement in a FL rule is represented by a Fuzzy Set. What is a FS? It's a 2D graph - usually a curve. So if we had a rule like "our price must be high", then each point (X, Y) of a corresponding FS graph could be interpreted as: Y tells us, how much is true, that our PRICE being equal to X is LOW. Y must be in the range from 0 to 1 (both included), where 0 means absolutely false and 1 absolutely true. Y is called THE TRUTH MEMBERSHIP and shouldn't be confused with probability!

 

How to set the value of our variable? (e.g. price): First you have to be familiar with two operations: TO AND (take the minimum) and TO OR (take the maximum). Create an empty output FS and follow these steps for each rule:

  1. if it's a simple statement-rule, just AND it's corresponding FS with the output.
  2. if it's an if - sentence, then for each statement in front of the word THEN find out the truth membership (just retrieving Y from known X) and take the minimum of these memberships. Then use it as a trash-hold for the FS corresponding to statement behind the word THEN (that means: all values bigger than this trash-hold set to the trash-hold). Take this FS and OR it with the output.
  3. The last part is the defuzzyfication of the output FS: you select the result value by taking the average or the center of gravity.

My application of Fuzzy Logic to robot driving:

INPUTS:
  • distance from the path
  • direction (angle between my direction and the direction of the path)
  • position speed
  • angle speed or front wheel angle
OUTPUTS:
  • position speed
  • angle speed or front wheel angle
 

Pro lepší pochopení si prohlédněte příklad výstupu ze simulátoru.

Plánovač cesty (path planner):

Plánovač cesty se snaží odnavigovat robota z nějakého bodu A do bodu B. V prostoru jsou dané překážky, kterým se robot musí vyhnout. U řešení této úlohy pro modrého robota je důležité myslet na to, že ne všechny místa dokáže robot "vytočit". Plánovač musí zohlednit poloměr oblouku zatáčení robota i rychlost změny směru natočení předních kol. Řešení problému spočívá ve snaze procházet všechny možné jízdní cesty, ale jakmile se cesta začne příliš odchylovat, je nahrazena jinou.

 

Detektor překážek podle informací ze sonaru

Detektor překážek obdrží útržkovité informace ze sonaru robotu a musí z útržků sestavit polohu a velikost překážek, které se v blízkosti robota nachází.

 
Diplomová práce - Interaktivní virtuální galerie

V roce 2000 jsem si zvolil téma mojí diplomové práce jako Interaktivní virtuální galerie. Vedoucí d.p. byl Doc. Ing. Jiří Žára, CSc. z ČVUT (fakulta elektrotechnická, katedra počítačů), který nás na Matfyzu vyučoval VRML (Virtual Reality Modeling Language).

Interaktivní virtuální galerie je projekt, který je určen pro potřeby návrhářů a návštěvníků galerií. Návrhářům nabízí nástroje pro modelování galerie ve trojrozměrném prostoru, nástroje pro rozmísťování exponátů do tohoto modelu (obrazů, soch a jiných) a nástroje pro získání různých informací potřebných pro vytvoření skutečné výstavy. Návštěvníkům tento projekt umožňuje procházku modelem galerie založenou na principu virtuální reality, aby usnadnil jejich návštěvu galerie skutečné.

 

Aplikace Interaktivní virtuální galerie je složena z několika modulů. Je to editor galerie pro návrh geometrie výstavních prostor, správa textur a 3D objektů pro udržování seznamů textur a 3D objektů, editor expozice pro rozložení exponátů do galerie a modul ostatních nástrojů poskytujících z informací z databáze prezentační a vyhledávací služby. Tyto moduly pracují samostatně, všechny informace načítají z a ukládají do společné databáze. S aplikací lze pracovat s využitím služeb Internetu, ale je navržena i tak, aby mohla být instalována na počítač lokálně a využívala lokálně instalované zdroje dat.

Celou diplomovou práci si můžete stáhnout zde. Podrobné informace od diplomové práci naleznete zde.

Státní závěrečné zkoušky jsem skládal 29.5.2002 z následujících předmětů:

  • Algoritmy a datové struktury
  • Softwarové systémy
  • Distribuované systémy
  • Počítačová grafika (volitelný předmět)
s výsledkem "výborně". Promoval jsem 11.7.2002 ve 12:00 v Karolinu.

 
Druhé narozeniny - pátek 23.9.2005 cca 16:00

V pátek 23.9.2005 odpoledne jsme se s tátou rozhodli pořezat na chatě jednu břízu, protože za prvé zahradě stínila a za druhé její větve zasahovaly do drátů elektrického vedení. Náš plán byl téměř dokonalý a jako obvykle nic se tak-zvaně nemohlo stát. Vylezl jsem i s elektrickou motorovou pilou do výšky cca 10ti metrů (dnes už vím, proč je to zakázané), stoupl si na dvě silné větve a ke kmeni se připoutal ochranným bezpečnostním pásem. Nejprve jsem z kmenu odřízl klín ze mně odvrácené strany, aby kmen padal správným směrem. Poté jsem začal řezat proti klínu ve výšce mého krku. Osudový okamžik nastal v okamžiku pádu uříznutého kmenu: kmen začal padat proti očekávání mírně stranou, zarazil se o vedle stojící břízu a kmen mi v místě řezu naťukl točící se motorovou pilu, která mi pak lehce nařízla krk a levé rameno. A tak jsme jeli na šití do Říčan.

Ponaučení: nikdy nelezte na strom s motorovou pilou.

 
Nekuřák a moje víra v zánik všech bezohledných kuřáků

Od nepaměti jsem zapřísáhlím nekuřákem a rád bych se zde podělil o můj názor na kuřáky. Nejprve bych zadefinoval výraz bezohledný kuřák:

Bezohledný kuřák je u mě každý kuřák, který si zapálí někde cigaretu (doutník) tak, že část jejího (jeho) kouře vdechne jiný právě nekouřící člověk (tj. může být i kuřákem), kterého se daný kuřák nezeptal, zda mu kouř z jeho cigarety nevadí. Pokud se kuřák nekouřícího člověka zeptal a nerespektuje jeho přání, aby nekouřil, stává se také bezohledným kuřákem. Pokud se kuřák nekouřícího člověka nezeptal, ale má od něj trvalé svolení v jeho přítomnosti kouřit, není bezohledný. Každý kuřák, jehož kouř cigarety (doutníku) vdechne dítě mladší 15ti let, je bezohledný (vyplývá z myšlenky, že toto dítě nemá ještě vlastní rozum, aby mohlo kouření odmítnout). Každá těhotná matka, která si zapálí v těhotenství aspoň jednu cigaretu, je bezohledný kuřák (to je ještě mírné označení, protože tohle je největší druh bezohlednosti, kdy se dítě v bříšku nemůže bránit). Každý kuřák, který přijde na veřejnosti do kontaktu s ostatními lidmi a jehož ošacení je načichlé cigaretovým nebo jiným kouřem natolik, že lidé v jeho blízkosti tento zápach obtěžuje, je bezohledný.

Z definice plyne, že pokud si kuřák zapálí v prostoru, kde to zákon ČR dovoluje a ve kterém se nachází jiný právě nekouřící člověk, který kouř z jeho cigarety vdechne, aniž by dal kuřákovi ke kouření svolení, pak je tento kuřák také bezohledný. Specielně tedy, pokud si kuřák zapálí v restauraci v kuřácké sekci, aniž by se zeptal všech lidí v jeho okolí, zda jim to nebude vadit, je bezohledný. Tato teze vypadá velmi naivně a dá se na ni opáčit "tak proč někdo, komu kouř vadí, leze do kuřácké sekce?". Odpověď je přitom jednoduchá. Je-li nějaký prostor veřejně přístupný, pak má každý občan právo v něm pobývat, aniž by mu někdo jiný způsoboval újmu na zdraví. Pokud mu někdo újmu na zdraví způsobuje, je bezohledný. Samozřejmě je zde ještě druhý faktor, že kuřácké sekce často bývají od nekuřáckých oddělené pouze vzduchem, a tudíž bezohlední kuřáci obtěžují lidi v nekuřácké sekci. A v neposlední řadě, jak je možné, že těm kuřákům nevadí, že prokazatelně ubližují na zdraví všem servírkám a číšníkům, kteří v těchto zakouřených místnostech denně pracují? Bezohlední kuřáci jsou opovržení hodní.

Někteří lidé věří v Boha či v jinou nadpřirozenou substanci. Já v nic takového nevěřím, ale věřím v zánik všech bezohledných kuřáků. Bezohledný kuřák může zaniknout třemi způsoby:

  1. přestane být bezohledným
  2. přestane být kuřákem
  3. přestane být - zemře (například rakovina plic)

Já jednoduše věřím, že každý bezohledný kuřák zanikne jedním z výše uvedených způsobů.

 
Rodokmen
Barbora(prababička) †1980
František(pradědeček) †1985
Anna(babička)
Vítězslav(dědeček) †1990
Bedřich(dědeček) †1965
Alžběta(babička) †2000
Harry
(bratr) †1990
Tony
(manželka bratra)
Dana
(teta)
Víťa
(strejda) †2010
Iva
(maminka)
Tomík
(táta)
Lucka
(sestřenice)
Víťa
(bratranec)
Tomáš
(já)
Míša
(přítel)
Lenka
(sestra)
Michal
(švagr)
Hanička
(neteř)
Vojtíšek
(synovec)
 

stránky vyrobil Tomáš Ullrich - žonglér a programátor - listopad 2008